@@ -25,22 +25,6 @@ const typesProgram = ts.createProgram({
2525 } ,
2626} ) ;
2727
28- const readFile = ts . sys . readFile ;
29- ts . sys . readFile = ( fileName ) => {
30- if ( path . basename ( fileName ) === 'system.ts' ) {
31- return `export const ReactiveFlags2 = {
32- None: 0,
33- Mutable: 1,
34- Watching: 2,
35- RecursedCheck: 4,
36- Recursed: 8,
37- Dirty: 16,
38- Pending: 32,
39- };\n` + readFile ( fileName ) ;
40- }
41- return readFile ( fileName ) ;
42- }
43-
4428const cjsProgram = ts . createProgram ( {
4529 rootNames : config . fileNames ,
4630 configFileParsingDiagnostics : config . errors ,
@@ -62,16 +46,30 @@ const esmProgram = ts.createProgram({
6246 } ,
6347} ) ;
6448
49+ const iifeRe = / ( e x p o r t \s * ) ? v a r \s + ( [ A - Z a - z _ $ ] [ \w $ ] * ) \s * ; \s * \( \s * f u n c t i o n \s * \( \s * \2\s * \) \s * \{ \s * ( [ \s \S ] * ?) \s * \} \s * \) \s * \( \s * \2\s * \| \| \s * \( \s * (?: e x p o r t s \. \2\s * = \s * ) ? \2\s * = \s * \{ \} \s * \) \s * \) \s * ; ? / g;
50+ const entryRe = / \[ \s * ( [ ' " ] ) ( [ ^ ' " ] + ) \1\s * \] \s * = \s * ( [ ^ \] ] + ?) \s * \] / g;
51+
52+ function transformEnumsToConst ( js ) {
53+ return js . replace ( iifeRe , ( whole , esmExport , name , body ) => {
54+ const props = Array . from ( body . matchAll ( entryRe ) , ( [ , , k , v ] ) => ` ${ k } : ${ v } ,` )
55+ if ( ! props . length )
56+ return whole ;
57+
58+ const left = esmExport ? `export const ${ name } ` : `exports.${ name } ` ;
59+ return `${ left } = {\n${ props . join ( "\n" ) } \n};` ;
60+ } ) ;
61+ }
62+
6563typesProgram . emit ( undefined , ts . sys . writeFile ) ;
6664cjsProgram . emit ( undefined , ( fileName , text ) => {
6765 fileName = fileName . slice ( 0 , - '.js' . length ) + '.cjs' ;
6866 text = text . replace ( / \. \/ s y s t e m \. j s / g, './system.cjs' ) ;
69- text = text . replace ( / R e a c t i v e F l a g s 2 / g , 'ReactiveFlags' ) ;
67+ text = transformEnumsToConst ( text ) ;
7068 ts . sys . writeFile ( fileName , text ) ;
7169} ) ;
7270esmProgram . emit ( undefined , ( fileName , text ) => {
7371 fileName = fileName . slice ( 0 , - '.js' . length ) + '.mjs' ;
7472 text = text . replace ( / \. \/ s y s t e m \. j s / g, './system.mjs' ) ;
75- text = text . replace ( / R e a c t i v e F l a g s 2 / g , 'ReactiveFlags' ) ;
73+ text = transformEnumsToConst ( text ) ;
7674 ts . sys . writeFile ( fileName , text ) ;
7775} ) ;
0 commit comments