@@ -19,7 +19,7 @@ const cmdLineOptions = require("./scripts/build/options");
1919const copyright = "CopyrightNotice.txt" ;
2020const cleanTasks = [ ] ;
2121
22- const testRunner = "./built/local/testRunner/runner .js" ;
22+ const testRunner = "./built/local/testRunner.js" ;
2323
2424const buildScripts = ( ) => buildProject ( "scripts" ) ;
2525task ( "scripts" , buildScripts ) ;
@@ -57,9 +57,7 @@ const diagnosticInformationMapTs = "src/compiler/diagnosticInformationMap.genera
5757const diagnosticMessagesJson = "src/compiler/diagnosticMessages.json" ;
5858const diagnosticMessagesGeneratedJson = "src/compiler/diagnosticMessages.generated.json" ;
5959const 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 ] ) ;
6361} ;
6462task ( "generate-diagnostics" , series ( buildScripts , generateDiagnostics ) ) ;
6563task ( "generate-diagnostics" ) . description = "Generates a diagnostic file in TypeScript based on an input JSON file" ;
@@ -89,14 +87,65 @@ const localizationTargets = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt
8987 . concat ( generatedLCGFile ) ;
9088
9189const 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 } ) ;
91+ } ;
92+
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+ const writeHackyShim = ( project ) => {
115+ return ( done ) => {
116+ fs . writeFileSync ( `./built/local/${ project } .js` , `module.exports = require("./${ project } /${ project } .js")` ) ;
117+ done ( ) ;
118+ } ;
95119} ;
96120
97- const buildAll = ( ) => buildProject ( "src" ) ;
121+ const preBundleFromSrc = parallel ( generateLibs , series ( buildScripts , generateDiagnostics , localize ) ) ;
122+ const preBuildSrc = preBundleFromSrc ;
123+ const preBundleFromEmit = series ( preBundleFromSrc , buildSrc ) ;
124+
125+ const bundleTscFromEmit = ( ) => esbuild ( "./built/local/tsc/tsc.js" , "./built/local/tsc.js" ) ;
126+ const bundleTypescriptFromEmit = ( ) => esbuild ( "./built/local/typescript/typescript.js" , "./built/local/typescript.js" ) ;
127+ const bundleServerFromEmit = ( ) => esbuild ( "./built/local/tsserver/server.js" , "./built/local/tsserver.js" ) ;
128+ const bundleServerLibraryFromEmit = ( ) => esbuild ( "./built/local/tsserverlibrary/tsserverlibrary.js" , "./built/local/tsserverlibrary.js" ) ;
129+ const bundleTestsFromEmit = ( ) => esbuild ( "./built/local/testRunner/_namespaces/Harness.js" , testRunner ) ;
130+
131+
132+ const bundleTscFromSrc = ( ) => esbuild ( "./built/local/tsc/tsc.js" , "./built/local/tsc.js" ) ;
133+ const bundleTypescriptFromSrc = ( ) => esbuild ( "./built/local/typescript/typescript.js" , "./built/local/typescript.js" ) ;
134+ const bundleServerFromSrc = ( ) => esbuild ( "./built/local/tsserver/server.js" , "./built/local/tsserver.js" ) ;
135+ const bundleServerLibraryFromSrc = ( ) => esbuild ( "./built/local/tsserverlibrary/tsserverlibrary.js" , "./built/local/tsserverlibrary.js" ) ;
136+ const bundleTestsFromSrc = ( ) => esbuild ( "./built/local/testRunner/_namespaces/Harness.js" , testRunner ) ;
137+
138+ const bundleAllFromSrc = series ( [
139+ bundleTscFromSrc ,
140+ bundleTypescriptFromSrc ,
141+ bundleServerFromSrc ,
142+ bundleServerLibraryFromSrc ,
143+ bundleTestsFromSrc ,
144+ ] ) ;
145+ task ( "bundle-src" , series ( preBundleFromSrc , bundleAllFromSrc ) ) ;
98146
99- task ( "moduleBuild" , parallel ( generateLibs , series ( buildScripts , localize , buildAll ) ) ) ;
147+
148+ task ( "buildSrc" , preBundleFromEmit ) ;
100149
101150const apiExtractor = async ( ) => {
102151 async function runApiExtractor ( configPath ) {
@@ -114,17 +163,20 @@ const apiExtractor = async () => {
114163 await runApiExtractor ( "./src/tsserverlibrary/api-extractor.json" ) ;
115164} ;
116165
117- task ( "api-extractor" , series ( task ( "moduleBuild" ) , apiExtractor ) ) ;
166+ task ( "api-extractor" , series ( buildSrc , apiExtractor ) ) ;
118167
119168const buildDebugTools = ( ) => buildProject ( "src/debug" ) ;
120169const cleanDebugTools = ( ) => cleanProject ( "src/debug" ) ;
121170cleanTasks . push ( cleanDebugTools ) ;
122171
123172// Pre-build steps when targeting the LKG compiler
124- const lkgPreBuild = parallel ( generateLibs , series ( buildScripts , generateDiagnostics , buildDebugTools ) ) ;
173+ const lkgPreBuild = parallel ( generateLibs , series ( buildScripts , generateDiagnostics /** , buildDebugTools */ ) ) ;
125174
126175const buildTsc = ( ) => buildProject ( "src/tsc" ) ;
127- task ( "tsc" , series ( lkgPreBuild , buildTsc ) ) ;
176+
177+ // task("tsc", series(preBundleFromSrc, bundleTscFromSrc)); // esbuild on ./src
178+ // task("tsc", series(preBundleFromEmit, bundleTscFromEmit)); // esbuild on emitted ./built/local
179+ task ( "tsc" , series ( preBuildSrc , buildSrc , writeHackyShim ( "tsc" ) ) ) ; // CJS
128180task ( "tsc" ) . description = "Builds the command-line compiler" ;
129181
130182const cleanTsc = ( ) => cleanProject ( "src/tsc" ) ;
@@ -244,7 +296,11 @@ task("dynamicImportCompat", buildDynamicImportCompat);
244296const buildServerMain = ( ) => buildProject ( "src/tsserver" , cmdLineOptions ) ;
245297const buildServer = series ( buildDynamicImportCompat , buildServerMain ) ;
246298buildServer . displayName = "buildServer" ;
247- task ( "tsserver" , series ( preBuild , buildServer ) ) ;
299+
300+ // task("tsserver", series(preBundleFromSrc, bundleServerFromSrc)); // esbuild on ./src
301+ // task("tsserver", series(preBundleFromEmit, bundleServerFromEmit)); // esbuild on emitted ./built/local
302+
303+ task ( "tsserver" , series ( preBuildSrc , buildSrc , writeHackyShim ( "tsserver" ) ) ) ; // CJS
248304task ( "tsserver" ) . description = "Builds the language server" ;
249305task ( "tsserver" ) . flags = {
250306 " --built" : "Compile using the built version of the compiler."
@@ -461,7 +517,7 @@ const preTest = parallel(buildTsc, buildTests, buildServices, buildLssl);
461517preTest . displayName = "preTest" ;
462518
463519const 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
520+ task ( "runtests" , series ( /*preBuild, preTest,*/ preBundleFromSrc , bundleTestsFromSrc , runTests ) ) ; // TODO(jakebailey): fix this for modules
465521task ( "runtests" ) . description = "Runs the tests using the built run.js file." ;
466522task ( "runtests" ) . flags = {
467523 "-t --tests=<regex>" : "Pattern for tests to run." ,
@@ -480,7 +536,7 @@ task("runtests").flags = {
480536} ;
481537
482538const 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
539+ task ( "runtests-parallel" , series ( /*preBuild, preTest,*/ preBundleFromSrc , bundleTestsFromSrc , runTestsParallel ) ) ; // TODO(jakebailey): fix this for modules
484540task ( "runtests-parallel" ) . description = "Runs all the tests in parallel using the built run.js file." ;
485541task ( "runtests-parallel" ) . flags = {
486542 " --light" : "Run tests in light mode (fewer verifications, but tests run faster)." ,
0 commit comments