Skip to content

Commit 6e9d39a

Browse files
committed
Hack something together to test various builds
1 parent a973b50 commit 6e9d39a

File tree

11 files changed

+662
-38
lines changed

11 files changed

+662
-38
lines changed

Gulpfile.js

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const cmdLineOptions = require("./scripts/build/options");
1919
const copyright = "CopyrightNotice.txt";
2020
const cleanTasks = [];
2121

22-
const testRunner = "./built/local/testRunner/runner.js";
22+
const testRunner = "./built/local/testRunner.js";
2323

2424
const buildScripts = () => buildProject("scripts");
2525
task("scripts", buildScripts);
@@ -57,9 +57,7 @@ const diagnosticInformationMapTs = "src/compiler/diagnosticInformationMap.genera
5757
const diagnosticMessagesJson = "src/compiler/diagnosticMessages.json";
5858
const diagnosticMessagesGeneratedJson = "src/compiler/diagnosticMessages.generated.json";
5959
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]);
6361
};
6462
task("generate-diagnostics", series(buildScripts, generateDiagnostics));
6563
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
8987
.concat(generatedLCGFile);
9088

9189
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 });
9591
};
9692

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+
};
98122

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);
100150

101151
const apiExtractor = async () => {
102152
async function runApiExtractor(configPath) {
@@ -114,17 +164,20 @@ const apiExtractor = async () => {
114164
await runApiExtractor("./src/tsserverlibrary/api-extractor.json");
115165
};
116166

117-
task("api-extractor", series(task("moduleBuild"), apiExtractor));
167+
task("api-extractor", series(buildSrc, apiExtractor));
118168

119169
const buildDebugTools = () => buildProject("src/debug");
120170
const cleanDebugTools = () => cleanProject("src/debug");
121171
cleanTasks.push(cleanDebugTools);
122172

123173
// 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 */));
125175

126176
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
128181
task("tsc").description = "Builds the command-line compiler";
129182

130183
const cleanTsc = () => cleanProject("src/tsc");
@@ -244,7 +297,11 @@ task("dynamicImportCompat", buildDynamicImportCompat);
244297
const buildServerMain = () => buildProject("src/tsserver", cmdLineOptions);
245298
const buildServer = series(buildDynamicImportCompat, buildServerMain);
246299
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
248305
task("tsserver").description = "Builds the language server";
249306
task("tsserver").flags = {
250307
" --built": "Compile using the built version of the compiler."
@@ -461,7 +518,7 @@ const preTest = parallel(buildTsc, buildTests, buildServices, buildLssl);
461518
preTest.displayName = "preTest";
462519

463520
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
465522
task("runtests").description = "Runs the tests using the built run.js file.";
466523
task("runtests").flags = {
467524
"-t --tests=<regex>": "Pattern for tests to run.",
@@ -480,7 +537,7 @@ task("runtests").flags = {
480537
};
481538

482539
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
484541
task("runtests-parallel").description = "Runs all the tests in parallel using the built run.js file.";
485542
task("runtests-parallel").flags = {
486543
" --light": "Run tests in light mode (fewer verifications, but tests run faster).",

0 commit comments

Comments
 (0)