Skip to content

Commit

Permalink
Merge pull request #289 from microsoft/bug/wait-for-installation
Browse files Browse the repository at this point in the history
Ensure TypeScript is installed before starting
  • Loading branch information
andrewbranch authored and sandersn committed Nov 29, 2021
1 parent 51a400d commit d836d34
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions packages/dtslint/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,23 +72,21 @@ async function main(): Promise<void> {
}

if (shouldListen) {
listen(dirPath, tsLocal);
// Do this *after* to ensure messages sent during installation aren't dropped.
if (!tsLocal) {
await installAllTypeScriptVersions();
}
listen(dirPath, tsLocal, onlyTestTsNext);
} else {
if (!tsLocal) {
if (onlyTestTsNext) {
await installTypeScriptNext();
} else {
await installAllTypeScriptVersions();
}
}
await installTypeScriptAsNeeded(tsLocal, onlyTestTsNext);
await runTests(dirPath, onlyTestTsNext, expectOnly, tsLocal);
}
}

async function installTypeScriptAsNeeded(tsLocal: string | undefined, onlyTestTsNext: boolean): Promise<void> {
if (tsLocal) return;
if (onlyTestTsNext) {
return installTypeScriptNext();
}
return installAllTypeScriptVersions();
}

function usage(): void {
console.error("Usage: dtslint [--version] [--installAll] [--onlyTestTsNext] [--expectOnly] [--localTs path]");
console.error("Args:");
Expand All @@ -101,9 +99,13 @@ function usage(): void {
console.error("onlyTestTsNext and localTs are (1) mutually exclusive and (2) test a single version of TS");
}

function listen(dirPath: string, tsLocal: string | undefined): void {
process.on("message", (message: {}) => {
function listen(dirPath: string, tsLocal: string | undefined, onlyTestTsNext: boolean): void {
// Don't await this here to ensure that messages sent during installation aren't dropped.
const installationPromise = installTypeScriptAsNeeded(tsLocal, onlyTestTsNext);
process.on("message", async (message: {}) => {
const { path, onlyTestTsNext, expectOnly } = message as { path: string, onlyTestTsNext: boolean, expectOnly?: boolean };

await installationPromise;
runTests(joinPaths(dirPath, path), onlyTestTsNext, !!expectOnly, tsLocal)
.catch(e => e.stack)
.then(maybeError => {
Expand Down

0 comments on commit d836d34

Please sign in to comment.