@@ -19,7 +19,7 @@ const cmdLineOptions = require("./scripts/build/options");
19
19
const copyright = "CopyrightNotice.txt" ;
20
20
const cleanTasks = [ ] ;
21
21
22
- const testRunner = "./built/local/testRunner/runner .js" ;
22
+ const testRunner = "./built/local/testRunner.js" ;
23
23
24
24
const buildScripts = ( ) => buildProject ( "scripts" ) ;
25
25
task ( "scripts" , buildScripts ) ;
@@ -57,9 +57,7 @@ const diagnosticInformationMapTs = "src/compiler/diagnosticInformationMap.genera
57
57
const diagnosticMessagesJson = "src/compiler/diagnosticMessages.json" ;
58
58
const diagnosticMessagesGeneratedJson = "src/compiler/diagnosticMessages.generated.json" ;
59
59
const generateDiagnostics = async ( ) => {
60
- if ( needsUpdate ( diagnosticMessagesJson , [ diagnosticMessagesGeneratedJson , diagnosticInformationMapTs ] ) ) {
61
- await exec ( process . execPath , [ "scripts/processDiagnosticMessages.js" , diagnosticMessagesJson ] ) ;
62
- }
60
+ await exec ( process . execPath , [ "scripts/processDiagnosticMessages.js" , diagnosticMessagesJson ] ) ;
63
61
} ;
64
62
task ( "generate-diagnostics" , series ( buildScripts , generateDiagnostics ) ) ;
65
63
task ( "generate-diagnostics" ) . description = "Generates a diagnostic file in TypeScript based on an input JSON file" ;
@@ -89,14 +87,66 @@ const localizationTargets = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt
89
87
. concat ( generatedLCGFile ) ;
90
88
91
89
const localize = async ( ) => {
92
- if ( needsUpdate ( diagnosticMessagesGeneratedJson , generatedLCGFile ) ) {
93
- return exec ( process . execPath , [ "scripts/generateLocalizedDiagnosticMessages.js" , "src/loc/lcl" , "built/local" , diagnosticMessagesGeneratedJson ] , { ignoreExitCode : true } ) ;
94
- }
90
+ return exec ( process . execPath , [ "scripts/generateLocalizedDiagnosticMessages.js" , "src/loc/lcl" , "built/local" , diagnosticMessagesGeneratedJson ] , { ignoreExitCode : true } ) ;
95
91
} ;
96
92
97
- const buildAll = ( ) => buildProject ( "src" ) ;
93
+ /**
94
+ * @param {string } entrypoint
95
+ * @param {string } outfile
96
+ */
97
+ async function esbuild ( entrypoint , outfile ) {
98
+ await exec ( "node_modules/esbuild/bin/esbuild" , [
99
+ entrypoint ,
100
+ "--bundle" ,
101
+ `--outfile=${ outfile } ` ,
102
+ "--platform=node" ,
103
+ "--target=node10" , // Node 10; oldest benchmarker.
104
+ "--sourcemap" ,
105
+ "--external:./node_modules/*" ,
106
+ "--conditions=require" ,
107
+ // "--supported:const-and-let=false", // Unfortunately, no: https://github.com/evanw/esbuild/issues/297
108
+ "--supported:object-rest-spread=false" , // See: https://github.com/evanw/esbuild/releases/tag/v0.14.46
109
+ ] ) ;
110
+ }
111
+
112
+ const buildSrc = ( ) => buildProject ( "src" ) ;
113
+
114
+ /** @type {(infile: string, outfile: string) => (done: () => void) => void } */
115
+ const writeHackyCJSShim = ( infile , outfile ) => {
116
+ return ( done ) => {
117
+ const inRelativeToOut = infile = path . relative ( path . dirname ( outfile ) , infile ) ;
118
+ fs . writeFileSync ( outfile , `module.exports = require("./${ inRelativeToOut } ")` ) ;
119
+ done ( ) ;
120
+ } ;
121
+ } ;
98
122
99
- task ( "moduleBuild" , parallel ( generateLibs , series ( buildScripts , localize , buildAll ) ) ) ;
123
+ const preBundleFromSrc = parallel ( generateLibs , series ( buildScripts , generateDiagnostics , localize ) ) ;
124
+ const preBuildSrc = preBundleFromSrc ;
125
+ const preBundleFromEmit = series ( preBundleFromSrc , buildSrc ) ;
126
+
127
+ const bundleTscFromEmit = ( ) => esbuild ( "./built/local/tsc/tsc.js" , "./built/local/tsc.js" ) ;
128
+ const bundleTypescriptFromEmit = ( ) => esbuild ( "./built/local/typescript/typescript.js" , "./built/local/typescript.js" ) ;
129
+ const bundleServerFromEmit = ( ) => esbuild ( "./built/local/tsserver/server.js" , "./built/local/tsserver.js" ) ;
130
+ const bundleServerLibraryFromEmit = ( ) => esbuild ( "./built/local/tsserverlibrary/tsserverlibrary.js" , "./built/local/tsserverlibrary.js" ) ;
131
+ const bundleTestsFromEmit = ( ) => esbuild ( "./built/local/testRunner/_namespaces/Harness.js" , testRunner ) ;
132
+
133
+ const bundleTscFromSrc = ( ) => esbuild ( "./src/tsc/tsc.ts" , "./built/local/tsc.js" ) ;
134
+ const bundleTypescriptFromSrc = ( ) => esbuild ( "./src/typescript/typescript.ts" , "./built/local/typescript.js" ) ;
135
+ const bundleServerFromSrc = ( ) => esbuild ( "./src/tsserver/server.ts" , "./built/local/tsserver.js" ) ;
136
+ const bundleServerLibraryFromSrc = ( ) => esbuild ( "./src/tsserverlibrary/tsserverlibrary.ts" , "./built/local/tsserverlibrary.js" ) ;
137
+ const bundleTestsFromSrc = ( ) => esbuild ( "./src/testRunner/_namespaces/Harness.ts" , testRunner ) ;
138
+
139
+ const bundleAllFromSrc = series ( [
140
+ bundleTscFromSrc ,
141
+ bundleTypescriptFromSrc ,
142
+ bundleServerFromSrc ,
143
+ bundleServerLibraryFromSrc ,
144
+ bundleTestsFromSrc ,
145
+ ] ) ;
146
+ task ( "bundle-src" , series ( preBundleFromSrc , bundleAllFromSrc ) ) ;
147
+
148
+
149
+ task ( "buildSrc" , preBundleFromEmit ) ;
100
150
101
151
const apiExtractor = async ( ) => {
102
152
async function runApiExtractor ( configPath ) {
@@ -114,17 +164,20 @@ const apiExtractor = async () => {
114
164
await runApiExtractor ( "./src/tsserverlibrary/api-extractor.json" ) ;
115
165
} ;
116
166
117
- task ( "api-extractor" , series ( task ( "moduleBuild" ) , apiExtractor ) ) ;
167
+ task ( "api-extractor" , series ( buildSrc , apiExtractor ) ) ;
118
168
119
169
const buildDebugTools = ( ) => buildProject ( "src/debug" ) ;
120
170
const cleanDebugTools = ( ) => cleanProject ( "src/debug" ) ;
121
171
cleanTasks . push ( cleanDebugTools ) ;
122
172
123
173
// Pre-build steps when targeting the LKG compiler
124
- const lkgPreBuild = parallel ( generateLibs , series ( buildScripts , generateDiagnostics , buildDebugTools ) ) ;
174
+ const lkgPreBuild = parallel ( generateLibs , series ( buildScripts , generateDiagnostics /** , buildDebugTools */ ) ) ;
125
175
126
176
const buildTsc = ( ) => buildProject ( "src/tsc" ) ;
127
- task ( "tsc" , series ( lkgPreBuild , buildTsc ) ) ;
177
+
178
+ // task("tsc", series(preBundleFromSrc, bundleTscFromSrc)); // esbuild on ./src
179
+ // task("tsc", series(preBundleFromEmit, bundleTscFromEmit)); // esbuild on emitted ./built/local
180
+ task ( "tsc" , series ( preBuildSrc , buildSrc , writeHackyCJSShim ( "./built/local/tsc/tsc.js" , "./built/local/tsc.js" ) ) ) ; // CJS
128
181
task ( "tsc" ) . description = "Builds the command-line compiler" ;
129
182
130
183
const cleanTsc = ( ) => cleanProject ( "src/tsc" ) ;
@@ -244,7 +297,11 @@ task("dynamicImportCompat", buildDynamicImportCompat);
244
297
const buildServerMain = ( ) => buildProject ( "src/tsserver" , cmdLineOptions ) ;
245
298
const buildServer = series ( buildDynamicImportCompat , buildServerMain ) ;
246
299
buildServer . displayName = "buildServer" ;
247
- task ( "tsserver" , series ( preBuild , buildServer ) ) ;
300
+
301
+ // task("tsserver", series(preBundleFromSrc, bundleServerFromSrc)); // esbuild on ./src
302
+ // task("tsserver", series(preBundleFromEmit, bundleServerFromEmit)); // esbuild on emitted ./built/local
303
+
304
+ task ( "tsserver" , series ( preBuildSrc , buildSrc , writeHackyCJSShim ( "./built/local/tsserver/server.js" , "./built/local/tsserver.js" ) ) ) ; // CJS
248
305
task ( "tsserver" ) . description = "Builds the language server" ;
249
306
task ( "tsserver" ) . flags = {
250
307
" --built" : "Compile using the built version of the compiler."
@@ -461,7 +518,7 @@ const preTest = parallel(buildTsc, buildTests, buildServices, buildLssl);
461
518
preTest . displayName = "preTest" ;
462
519
463
520
const runTests = ( ) => runConsoleTests ( testRunner , "mocha-fivemat-progress-reporter" , /*runInParallel*/ false , /*watchMode*/ false ) ;
464
- task ( "runtests" , series ( /*preBuild, preTest,*/ task ( "moduleBuild" ) , runTests ) ) ; // TODO(jakebailey): fix this for modules
521
+ task ( "runtests" , series ( /*preBuild, preTest,*/ preBundleFromSrc , bundleTestsFromSrc , runTests ) ) ; // TODO(jakebailey): fix this for modules
465
522
task ( "runtests" ) . description = "Runs the tests using the built run.js file." ;
466
523
task ( "runtests" ) . flags = {
467
524
"-t --tests=<regex>" : "Pattern for tests to run." ,
@@ -480,7 +537,7 @@ task("runtests").flags = {
480
537
} ;
481
538
482
539
const runTestsParallel = ( ) => runConsoleTests ( testRunner , "min" , /*runInParallel*/ cmdLineOptions . workers > 1 , /*watchMode*/ false ) ;
483
- task ( "runtests-parallel" , series ( /*preBuild, preTest,*/ task ( "moduleBuild" ) , runTestsParallel ) ) ; // TODO(jakebailey): fix this for modules
540
+ task ( "runtests-parallel" , series ( /*preBuild, preTest,*/ preBundleFromSrc , bundleTestsFromSrc , runTestsParallel ) ) ; // TODO(jakebailey): fix this for modules
484
541
task ( "runtests-parallel" ) . description = "Runs all the tests in parallel using the built run.js file." ;
485
542
task ( "runtests-parallel" ) . flags = {
486
543
" --light" : "Run tests in light mode (fewer verifications, but tests run faster)." ,
0 commit comments