1
1
const fs = require ( "fs" ) . promises ;
2
2
const fss = require ( "fs" ) ;
3
3
const glob = require ( "glob" ) ;
4
- const Terser = require ( "terser" ) ;
5
4
const zlib = require ( 'zlib' ) ;
6
- const { getLanguages } = require ( "./lib/language" ) ;
7
- const { filter } = require ( "./lib/dependencies" ) ;
8
- const config = require ( "./build_config" ) ;
9
- const { install, installCleanCSS, mkdir } = require ( "./lib/makestuff" ) ;
5
+ const { getLanguages } = require ( "./lib/language.js " ) ;
6
+ const { filter } = require ( "./lib/dependencies.js " ) ;
7
+ const config = require ( "./build_config.js " ) ;
8
+ const { install, installCleanCSS, mkdir } = require ( "./lib/makestuff.js " ) ;
10
9
const log = ( ...args ) => console . log ( ...args ) ;
11
- const { buildBrowserHighlightJS, buildBrowserESMHighlightJS } = require ( "./build_browser" ) ;
12
- const { buildPackageJSON, writePackageJSON } = require ( "./build_node" ) ;
13
- const { rollupCode } = require ( "./lib/bundling.js" ) ;
10
+ const { buildCore } = require ( "./build_browser.js" ) ;
11
+ const { buildPackageJSON, writePackageJSON } = require ( "./build_node.js" ) ;
14
12
const path = require ( "path" ) ;
15
13
const bundling = require ( './lib/bundling.js' ) ;
16
14
17
15
async function installPackageJSON ( options ) {
18
- const json = buildPackageJSON ( options , {
19
- "." : {
20
- import : options . minify ? "./es/index.min.js" : "./es/index.js" ,
21
- browser : options . minify ? "./highlight.min.js" : "./highlight.js" ,
22
- } ,
23
- "./lib/languages/*" : {
24
- import : "./es/languages/*.js" ,
25
- browser : "./languages/*.js"
26
- } ,
27
- get "./lib/common" ( ) { return this [ "." ] ; } ,
28
- "./lib/core" : { import : "./es/core.js" } ,
29
- "./styles/*" : "./styles/*" ,
30
- "./package.json" : "./package.json" ,
31
- } ) ;
16
+ const json = buildPackageJSON ( options ) ;
32
17
json . name = "@highlightjs/cdn-assets" ;
33
18
json . description = json . description . concat ( " (pre-compiled CDN assets)" ) ;
19
+ // CDN assets do not need an export map, they are just a bunch of files.
20
+ // The NPM package mostly only exists to populate CDNs and provide raw files.
21
+ delete json . exports ;
34
22
await writePackageJSON ( json ) ;
35
23
}
36
24
37
- async function buildESMCore ( options ) {
38
- const input = { ...config . rollup . node . input , input : `src/highlight.js` } ;
39
- const output = {
40
- ...config . rollup . node . output ,
41
- format : "es" ,
42
- file : `${ process . env . BUILD_DIR } /es/core.js` ,
43
- } ;
44
- const core = await rollupCode ( input , output ) ;
45
-
46
- const miniCore = options . minify ? await Terser . minify ( core , { ...config . terser , module : true } ) : { code : core } ;
47
- await fs . writeFile ( output . file , miniCore . code ) ;
48
- return miniCore . code . length ;
49
- }
50
-
51
25
let shas = { } ;
52
26
53
27
async function buildCDN ( options ) {
@@ -59,13 +33,9 @@ async function buildCDN(options) {
59
33
60
34
// all the languages are built for the CDN and placed into `/languages`
61
35
const languages = await getLanguages ( ) ;
62
-
63
- let esmCoreSize , esmIndexSize ;
64
- if ( options . esm ) {
65
- mkdir ( "es" ) ;
66
- await fs . writeFile ( `${ process . env . BUILD_DIR } /es/package.json` , `{ "type": "module" }` ) ;
67
- esmCoreSize = await buildESMCore ( options ) ;
68
- }
36
+
37
+ let esmCoreSize = { } ;
38
+ let esmCommonSize = { } ;
69
39
70
40
await installLanguages ( languages , options ) ;
71
41
@@ -79,34 +49,43 @@ async function buildCDN(options) {
79
49
embedLanguages = [ ] ;
80
50
}
81
51
82
- const size = await buildBrowserHighlightJS ( embedLanguages , { minify : options . minify } ) ;
83
- if ( options . esm ) esmIndexSize = await buildBrowserESMHighlightJS ( "index" , embedLanguages , { minify : options . minify } ) ;
84
- shas = Object . assign ( { } , size . shas , shas ) ;
52
+ const size = await buildCore ( "highlight" , embedLanguages , { minify : options . minify , format : "cjs" } ) ;
53
+ if ( options . esm ) {
54
+ mkdir ( "es" ) ;
55
+ await fs . writeFile ( `${ process . env . BUILD_DIR } /es/package.json` , `{ "type": "module" }` ) ;
56
+ esmCoreSize = await buildCore ( "core" , [ ] , { minify : options . minify , format : "es" } ) ;
57
+ esmCommonSize = await buildCore ( "highlight" , embedLanguages , { minify : options . minify , format : "es" } ) ;
58
+ }
59
+ shas = {
60
+ ...size . shas , ...esmCommonSize . shas , ...esmCoreSize . shas , ...shas
61
+ } ;
85
62
86
63
await buildSRIDigests ( shas ) ;
87
64
88
65
log ( "-----" ) ;
89
- log ( "Embedded Lang :" ,
66
+ log ( "Embedded Lang :" ,
90
67
embedLanguages . map ( ( el ) => el . minified . length ) . reduce ( ( acc , curr ) => acc + curr , 0 ) , "bytes" ) ;
91
- log ( "All Lang :" ,
68
+ log ( "All Lang :" ,
92
69
languages . map ( ( el ) => el . minified . length ) . reduce ( ( acc , curr ) => acc + curr , 0 ) , "bytes" ) ;
93
- log ( "highlight.js :" ,
94
- size . full , "bytes" ) ;
70
+ log ( "highlight.js :" ,
71
+ size . fullSize , "bytes" ) ;
95
72
96
73
if ( options . minify ) {
97
- log ( "highlight.min.js :" , size . minified , "bytes" ) ;
98
- log ( "highlight.min.js.gz :" , zlib . gzipSync ( size . minifiedSrc ) . length , "bytes" ) ;
74
+ log ( "highlight.min.js :" , size . minified , "bytes" ) ;
75
+ log ( "highlight.min.js.gz :" , zlib . gzipSync ( size . minifiedSrc ) . length , "bytes" ) ;
99
76
} else {
100
- log ( "highlight.js.gz :" , zlib . gzipSync ( size . fullSrc ) . length , "bytes" ) ;
77
+ log ( "highlight.js.gz :" , zlib . gzipSync ( size . fullSrc ) . length , "bytes" ) ;
101
78
}
102
- if ( options . esm ) {
103
- log ( "es/core.js :" , esmCoreSize , "bytes" ) ;
104
- log ( "es/index .js :" , esmIndexSize . fullSize , "bytes" ) ;
79
+ if ( options . esm ) {
80
+ log ( "es/core.js :" , esmCoreSize . fullSize , "bytes" ) ;
81
+ log ( "es/highlight .js :" , esmCommonSize . fullSize , "bytes" ) ;
105
82
if ( options . minify ) {
106
- log ( "es/index.min.js :" , esmIndexSize . minified , "bytes" ) ;
107
- log ( "es/index.min.js.gz :" , zlib . gzipSync ( esmIndexSize . minifiedSrc ) . length , "bytes" ) ;
83
+ log ( "es/core.min.js :" , esmCoreSize . minified , "bytes" ) ;
84
+ log ( "es/core.min.js.gz :" , zlib . gzipSync ( esmCoreSize . minifiedSrc ) . length , "bytes" ) ;
85
+ log ( "es/highlight.min.js :" , esmCommonSize . minified , "bytes" ) ;
86
+ log ( "es/highlight.min.js.gz :" , zlib . gzipSync ( esmCommonSize . minifiedSrc ) . length , "bytes" ) ;
108
87
} else {
109
- log ( "es/index .js.gz :" , zlib . gzipSync ( esmIndexSize . fullSrc ) . length , "bytes" ) ;
88
+ log ( "es/highlight .js.gz :" , zlib . gzipSync ( esmCommonSize . fullSrc ) . length , "bytes" ) ;
110
89
}
111
90
}
112
91
log ( "-----" ) ;
@@ -117,7 +96,7 @@ async function buildSRIDigests(shas) {
117
96
const temp = await fs . readFile ( "./tools/templates/DIGESTS.md" ) ;
118
97
const DIGEST_MD = temp . toString ( ) ;
119
98
120
- const version = require ( "../package" ) . version ;
99
+ const version = require ( "../package.json " ) . version ;
121
100
const digestList = Object . entries ( shas ) . map ( ( [ k , v ] ) => `${ v } ${ k } ` ) . join ( "\n" ) ;
122
101
123
102
const out = DIGEST_MD
@@ -131,7 +110,7 @@ async function buildSRIDigests(shas) {
131
110
async function installLanguages ( languages , options ) {
132
111
log ( "Building language files." ) ;
133
112
mkdir ( "languages" ) ;
134
- if ( options . esm ) mkdir ( "es/languages" ) ;
113
+ if ( options . esm ) mkdir ( "es/languages" ) ;
135
114
136
115
await Promise . all (
137
116
languages . map ( async ( language ) => {
@@ -181,8 +160,10 @@ async function buildCDNLanguage(language, options) {
181
160
await language . compile ( { terser : config . terser } ) ;
182
161
shas [ name ] = bundling . sha384 ( language . minified ) ;
183
162
await fs . writeFile ( `${ process . env . BUILD_DIR } /${ name } ` , language . minified ) ;
184
- if ( options . esm )
163
+ if ( options . esm ) {
164
+ shas [ `es/${ name } ` ] = bundling . sha384 ( language . minifiedESM ) ;
185
165
await fs . writeFile ( `${ process . env . BUILD_DIR } /es/${ name } ` , language . minifiedESM ) ;
166
+ }
186
167
}
187
168
188
169
module . exports . build = buildCDN ;
0 commit comments