Skip to content

Commit eecbf74

Browse files
committed
Fix issue with resolving DefinitelyTyped versions
1 parent cc85ddf commit eecbf74

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

.changeset/wet-melons-yell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@arethetypeswrong/core": patch
3+
---
4+
5+
Fix issue with resolving DefinitelyTyped versions

packages/core/src/createPackage.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,15 @@ export async function createPackageFromNpm(
9898
throw new Error(parsed.error);
9999
}
100100
const packageName = parsed.data.name;
101-
const spec =
101+
const specs =
102102
parsed.data.versionKind === "none" && typeof definitelyTyped === "string"
103-
? parsePackageSpec(`${packageName}@${definitelyTyped}`)
104-
: parsed;
105-
const { tarballUrl, packageVersion } = await getNpmTarballUrl([spec.data || parsed.data], before);
103+
? [
104+
parsePackageSpec(`${packageName}@${major(definitelyTyped)}.${minor(definitelyTyped)}`).data!,
105+
parsePackageSpec(`${packageName}@${major(definitelyTyped)}`).data!,
106+
parsePackageSpec(`${packageName}@latest`).data!,
107+
]
108+
: [parsed.data];
109+
const { tarballUrl, packageVersion } = await getNpmTarballUrl(specs, before);
106110
const pkg = await createPackageFromTarballUrl(tarballUrl);
107111
if (!definitelyTyped || pkg.containsTypes()) {
108112
return pkg;
@@ -181,6 +185,10 @@ async function getNpmTarballUrl(
181185
for (const packageSpec of packageSpecs) {
182186
const manifestUrl = `https://registry.npmjs.org/${packageSpec.name}/${packageSpec.version || "latest"}`;
183187
const doc = packument || (await fetch(manifestUrl).then((r) => r.json()));
188+
if (typeof doc !== "object") {
189+
continue;
190+
}
191+
const isManifest = !!doc.version;
184192
let tarballUrl, packageVersion;
185193
if (packageSpec.versionKind === "range") {
186194
packageVersion = maxSatisfying(
@@ -202,9 +210,12 @@ async function getNpmTarballUrl(
202210
continue;
203211
}
204212
tarballUrl = doc.versions[packageVersion].dist.tarball;
205-
} else {
213+
} else if (isManifest) {
206214
packageVersion = doc.version;
207215
tarballUrl = doc.dist.tarball;
216+
} else {
217+
packageVersion = doc["dist-tags"].latest;
218+
tarballUrl = doc.versions[packageVersion].dist.tarball;
208219
}
209220

210221
if (packageVersion && tarballUrl) {

packages/web/worker/worker.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ onmessage = async (event: MessageEvent<CheckPackageEventData | CheckFileEventDat
2828
event.data.kind === "check-file"
2929
? createPackageFromTarballData(event.data.file)
3030
: event.data.packageSpec.startsWith("@types/")
31-
? await createPackageFromNpm(unmangleScopedPackageName(event.data.packageSpec), {
31+
? await createPackageFromNpm(getImplementationPackageName(event.data.packageSpec), {
3232
definitelyTyped: parsePackageSpec(event.data.packageSpec).data?.version,
3333
})
3434
: await createPackageFromNpm(event.data.packageSpec)
@@ -41,6 +41,11 @@ onmessage = async (event: MessageEvent<CheckPackageEventData | CheckFileEventDat
4141
} satisfies ResultMessage);
4242
};
4343

44-
function unmangleScopedPackageName(packageName: string): string {
45-
return packageName.startsWith("@types/") ? packageName.slice(7).replace("__", "/") : packageName;
44+
function getImplementationPackageName(typesPackageSpec: string): string {
45+
if (typesPackageSpec.startsWith("@types/")) {
46+
const name = typesPackageSpec.slice(7).replace("__", "/").replace(/@.*$/, "");
47+
return name.includes("/") ? `@${name}` : name;
48+
}
49+
// should not hit this I guess
50+
return typesPackageSpec.replace(/@.*$/, "");
4651
}

0 commit comments

Comments
 (0)