@@ -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,23 +25,84 @@ 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` } ;
50
+ await rollupWrite ( input , output ) ;
51
+ await rollupWrite ( input , { ...output ,
52
+ format : "es" ,
53
+ file : output . file . replace ( "/lib/" , "/es/" )
54
+ } ) ;
55
+ }
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
+ } ;
34
74
await rollupWrite ( input , output ) ;
35
75
}
36
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 ( ) {
44
96
const packageJson = require ( "../package" ) ;
97
+
98
+ const exports = {
99
+ "." : dual ( "./lib/index.js" ) ,
100
+ "./lib/common" : dual ( "./lib/common.js" ) ,
101
+ "./lib/core" : dual ( "./lib/core.js" ) ,
102
+ "./lib/languages/*" : dual ( "./lib/languages/*.js" ) ,
103
+ } ;
104
+ packageJson . exports = exports ;
105
+
45
106
await fs . writeFile ( `${ process . env . BUILD_DIR } /package.json` , JSON . stringify ( packageJson , null , 2 ) ) ;
46
107
}
47
108
@@ -58,6 +119,7 @@ async function buildLanguages(languages) {
58
119
59
120
async function buildNode ( options ) {
60
121
mkdir ( "lib/languages" ) ;
122
+ mkdir ( "es/languages" ) ;
61
123
mkdir ( "scss" ) ;
62
124
mkdir ( "styles" ) ;
63
125
mkdir ( "types" ) ;
@@ -79,8 +141,11 @@ async function buildNode(options) {
79
141
// filter languages for inclusion in the highlight.js bundle
80
142
languages = filter ( languages , options . languages ) ;
81
143
82
- await buildNodeIndex ( "index" , languages ) ;
83
- await buildNodeIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
144
+ await buildESMIndex ( "index" , languages ) ;
145
+ await buildESMIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
146
+ await buildESMUtils ( ) ;
147
+ await buildCJSIndex ( "index" , languages ) ;
148
+ await buildCJSIndex ( "common" , languages . filter ( l => l . categories . includes ( "common" ) ) ) ;
84
149
await buildLanguages ( languages ) ;
85
150
86
151
log ( "Writing highlight.js" ) ;
0 commit comments