Skip to content

Commit 57a08de

Browse files
committed
Fix crash in auxiliary program creation
1 parent a210461 commit 57a08de

File tree

6 files changed

+63843
-15
lines changed

6 files changed

+63843
-15
lines changed

packages/cli/test/snapshots.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import assert from "node:assert";
44
import { after, describe, test } from "node:test";
55

66
const attw = `node ${new URL("../../dist/index.js", import.meta.url).pathname}`;
7-
const updateSnapshots = process.env.UPDATE_SNAPSHOTS;
7+
const updateSnapshots = process.env.UPDATE_SNAPSHOTS || process.env.U;
8+
const testFilter = (process.env.TEST_FILTER || process.env.T)?.toLowerCase();
89

910
const tests = [
1011
["@apollo__client-3.7.16.tgz"],
@@ -60,6 +61,10 @@ describe("snapshots", async () => {
6061

6162
for (const [tarball, options] of tests) {
6263
const fixture = tarball + (options ? ` ${options}` : "");
64+
if (testFilter && !fixture.toLowerCase().includes(testFilter)) {
65+
continue;
66+
}
67+
6368
test(fixture, async () => {
6469
const tarballPath = new URL(`../../../core/test/fixtures/${tarball}`, import.meta.url).pathname;
6570
let stdout;

packages/core/src/createPackage.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class Package {
2020
packageName: string,
2121
packageVersion: string,
2222
resolvedUrl?: string,
23-
typesPackage?: Package["typesPackage"]
23+
typesPackage?: Package["typesPackage"],
2424
) {
2525
this.#files = files;
2626
this.packageName = packageName;
@@ -29,10 +29,10 @@ export class Package {
2929
this.typesPackage = typesPackage;
3030
}
3131

32-
readFile(path: string): string {
32+
tryReadFile(path: string): string | undefined {
3333
const file = this.#files[path];
3434
if (file === undefined) {
35-
throw new Error(`File not found: ${path}`);
35+
return undefined;
3636
}
3737
if (typeof file === "string") {
3838
return file;
@@ -42,6 +42,14 @@ export class Package {
4242
return content;
4343
}
4444

45+
readFile(path: string): string {
46+
const content = this.tryReadFile(path);
47+
if (content === undefined) {
48+
throw new Error(`File not found: ${path}`);
49+
}
50+
return content;
51+
}
52+
4553
fileExists(path: string): boolean {
4654
return path in this.#files;
4755
}
@@ -91,7 +99,7 @@ export interface CreatePackageFromNpmOptions {
9199

92100
export async function createPackageFromNpm(
93101
packageSpec: string,
94-
{ definitelyTyped = true, before }: CreatePackageFromNpmOptions = {}
102+
{ definitelyTyped = true, before }: CreatePackageFromNpmOptions = {},
95103
): Promise<Package> {
96104
const parsed = parsePackageSpec(packageSpec);
97105
if (parsed.status === "error") {
@@ -125,7 +133,7 @@ export async function createPackageFromNpm(
125133
version: definitelyTyped,
126134
},
127135
],
128-
before
136+
before,
129137
);
130138
}
131139

@@ -138,7 +146,7 @@ export async function createPackageFromNpm(
138146
export async function resolveTypesPackageForPackage(
139147
packageName: string,
140148
packageVersion: string,
141-
before?: Date
149+
before?: Date,
142150
): Promise<{ packageName: string; packageVersion: string; tarballUrl: string } | undefined> {
143151
const typesPackageName = ts.getTypesPackageName(packageName);
144152
try {
@@ -162,18 +170,18 @@ export async function resolveTypesPackageForPackage(
162170
version: "latest",
163171
},
164172
],
165-
before
173+
before,
166174
)),
167175
};
168176
} catch {}
169177
}
170178

171179
async function getNpmTarballUrl(
172180
packageSpecs: readonly ParsedPackageSpec[],
173-
before?: Date
181+
before?: Date,
174182
): Promise<{ tarballUrl: string; packageVersion: string }> {
175183
const fetchPackument = packageSpecs.some(
176-
(spec) => spec.versionKind === "range" || (spec.versionKind === "tag" && spec.version !== "latest")
184+
(spec) => spec.versionKind === "range" || (spec.versionKind === "tag" && spec.version !== "latest"),
177185
);
178186
const packumentUrl = `https://registry.npmjs.org/${packageSpecs[0].name}`;
179187
const includeTimes = before !== undefined && packageSpecs.some((spec) => spec.versionKind !== "exact");
@@ -193,9 +201,9 @@ async function getNpmTarballUrl(
193201
if (packageSpec.versionKind === "range") {
194202
packageVersion = maxSatisfying(
195203
Object.keys(doc.versions).filter(
196-
(v) => !doc.versions[v].deprecated && (!before || !doc.time || new Date(doc.time[v]) <= before)
204+
(v) => !doc.versions[v].deprecated && (!before || !doc.time || new Date(doc.time[v]) <= before),
197205
),
198-
packageSpec.version
206+
packageSpec.version,
199207
);
200208
if (!packageVersion) {
201209
continue;

packages/core/src/multiCompilerHost.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,11 @@ export class CompilerHostWrapper {
217217
if (cached) {
218218
return cached;
219219
}
220-
const content = fileName.startsWith("/node_modules/typescript/lib") ? "" : fs.readFile(fileName);
220+
const content = fileName.startsWith("/node_modules/typescript/lib") ? "" : fs.tryReadFile(fileName);
221+
if (content === undefined) {
222+
return undefined;
223+
}
224+
221225
const sourceFile = ts.createSourceFile(
222226
fileName,
223227
content,
19.5 MB
Binary file not shown.

packages/core/test/snapshots.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import assert from "node:assert";
44
import { after, describe, test } from "node:test";
55
import { checkPackage, createPackageFromTarballData } from "@arethetypeswrong/core";
66

7-
const updateSnapshots = process.env.UPDATE_SNAPSHOTS;
7+
const updateSnapshots = process.env.UPDATE_SNAPSHOTS || process.env.U;
8+
const testFilter = (process.env.TEST_FILTER || process.env.T)?.toLowerCase();
89

910
describe("snapshots", async () => {
1011
const snapshotsWritten: URL[] = [];
@@ -29,9 +30,14 @@ describe("snapshots", async () => {
2930
const errorPackages = ["[email protected]"];
3031

3132
for (const fixture of fs.readdirSync(new URL("../fixtures", import.meta.url))) {
32-
if (fixture === ".DS_Store" || fixture.startsWith("@types__")) {
33+
if (
34+
fixture === ".DS_Store" ||
35+
fixture.startsWith("@types__") ||
36+
(testFilter && !fixture.toLowerCase().includes(testFilter))
37+
) {
3338
continue;
3439
}
40+
3541
test(fixture, async () => {
3642
const tarball = await readFile(new URL(`../fixtures/${fixture}`, import.meta.url));
3743
const typesTarball = typesPackages[fixture]

0 commit comments

Comments
 (0)