@@ -6,14 +6,14 @@ const { filter } = require("./lib/dependencies");
6
6
const { rollupWrite } = require ( "./lib/bundling.js" ) ;
7
7
const log = ( ...args ) => console . log ( ...args ) ;
8
8
9
- async function buildNodeIndex ( name , languages ) {
9
+ async function buildESMIndex ( name , languages ) {
10
10
const header = `import hljs from './core.mjs';` ;
11
11
const footer = "export default hljs;" ;
12
12
13
13
const registration = languages . map ( ( lang ) => {
14
14
let out = '' ;
15
15
const importName = "L_" + lang . name . replace ( "-" , "_" )
16
- let require = `import ${ importName } from './languages/${ lang . name } .mjs ';` ;
16
+ let require = `import ${ importName } from './languages/${ lang . name } .js ';` ;
17
17
// TODO: break this with v11? All modules must export default?
18
18
if ( lang . loader ) {
19
19
require = require += `.${ lang . loader } ` ;
@@ -25,19 +25,71 @@ async function buildNodeIndex(name, languages) {
25
25
} ) ;
26
26
27
27
const index = `${ header } \n\n${ registration . join ( "\n" ) } \n\n${ footer } ` ;
28
- await fs . writeFile ( `${ process . env . BUILD_DIR } /lib/${ name } .mjs` , index ) ;
28
+ await fs . writeFile ( `${ process . env . BUILD_DIR } /es/${ name } .js` , index ) ;
29
+ }
30
+
31
+ async function buildCJSIndex ( name , languages ) {
32
+ const header = "var hljs = require('./core');" ;
33
+ const footer = "module.exports = hljs;" ;
34
+
35
+ const registration = languages . map ( ( lang ) => {
36
+ let require = `require('./languages/${ lang . name } ')` ;
37
+ if ( lang . loader ) {
38
+ require = require += `.${ lang . loader } ` ;
39
+ }
40
+ return `hljs.registerLanguage('${ lang . name } ', ${ require } );` ;
41
+ } ) ;
42
+
43
+ const index = `${ header } \n\n${ registration . join ( "\n" ) } \n\n${ footer } ` ;
44
+ await fs . writeFile ( `${ process . env . BUILD_DIR } /lib/${ name } .js` , index ) ;
29
45
}
30
46
31
47
async function buildNodeLanguage ( language ) {
32
48
const input = { ...config . rollup . node . input , input : language . path } ;
33
- const output = { ...config . rollup . node . output , file : `${ process . env . BUILD_DIR } /lib/languages/${ language . name } .mjs ` } ;
49
+ const output = { ...config . rollup . node . output , file : `${ process . env . BUILD_DIR } /lib/languages/${ language . name } .js ` } ;
34
50
await rollupWrite ( input , output ) ;
51
+ await rollupWrite ( input , { ...output ,
52
+ format : "es" ,
53
+ file : output . file . replace ( "/lib/" , "/es/" )
54
+ } ) ;
35
55
}
36
56
57
+ const EXCLUDE = [ "join" ] ;
58
+
59
+ async function buildESMUtils ( ) {
60
+ const input = { ...config . rollup . node . input , input : `src/lib/regex.js` } ;
61
+ input . plugins = [ ...input . plugins , {
62
+ transform : ( code ) => {
63
+ EXCLUDE . forEach ( ( fn ) => {
64
+ code = code . replace ( `export function ${ fn } (` , `function ${ fn } (` ) ;
65
+ } ) ;
66
+ return code ;
67
+ }
68
+ } ] ;
69
+ const output = {
70
+ ...config . rollup . node . output ,
71
+ format : "es" ,
72
+ file : `${ process . env . BUILD_DIR } /es/utils/regex.js`
73
+ } ;
74
+ await rollupWrite ( input , output ) ;
75
+ }
76
+
77
+
37
78
async function buildNodeHighlightJS ( ) {
38
79
const input = { ...config . rollup . node . input , input : `src/highlight.js` } ;
39
- const output = { ...config . rollup . node . output , file : `${ process . env . BUILD_DIR } /lib/core.mjs ` } ;
80
+ const output = { ...config . rollup . node . output , file : `${ process . env . BUILD_DIR } /lib/core.js ` } ;
40
81
await rollupWrite ( input , output ) ;
82
+ await rollupWrite ( input , { ...output ,
83
+ format : "es" ,
84
+ file : `${ process . env . BUILD_DIR } /es/core.js`
85
+ } ) ;
86
+ }
87
+
88
+ function dual ( file ) {
89
+ return {
90
+ require : file ,
91
+ import : file . replace ( "/lib/" , "/es/" )
92
+ } ;
41
93
}
42
94
43
95
async function buildPackageJSON ( ) {
@@ -52,6 +104,14 @@ async function buildPackageJSON() {
52
104
. filter ( ( matches ) => matches )
53
105
. map ( ( matches ) => matches [ 1 ] ) ;
54
106
107
+ const exports = {
108
+ "." : dual ( "./lib/index.js" ) ,
109
+ "./lib/common" : dual ( "./lib/common.js" ) ,
110
+ "./lib/core" : dual ( "./lib/core.js" ) ,
111
+ "./lib/languages/*" : dual ( "./lib/languages/*.js" ) ,
112
+ } ;
113
+ packageJson . exports = exports ;
114
+
55
115
await fs . writeFile ( `${ process . env . BUILD_DIR } /package.json` , JSON . stringify ( packageJson , null , 2 ) ) ;
56
116
}
57
117
@@ -68,6 +128,7 @@ async function buildLanguages(languages) {
68
128
69
129
async function buildNode ( options ) {
70
130
mkdir ( "lib/languages" ) ;
131
+ mkdir ( "es/languages" ) ;
71
132
mkdir ( "scss" ) ;
72
133
mkdir ( "styles" ) ;
73
134
mkdir ( "types" ) ;
@@ -89,8 +150,11 @@ async function buildNode(options) {
89
150
// filter languages for inclusion in the highlight.js bundle
90
151
languages = filter ( languages , options . languages ) ;
91
152
92
- await buildNodeIndex ( "index" , languages ) ;
93
- await buildNodeIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
153
+ await buildESMIndex ( "index" , languages ) ;
154
+ await buildESMIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
155
+ await buildESMUtils ( ) ;
156
+ await buildCJSIndex ( "index" , languages ) ;
157
+ await buildCJSIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
94
158
await buildLanguages ( languages ) ;
95
159
96
160
log ( "Writing highlight.js" ) ;
0 commit comments