From f3ee8d41e54405d97083e03432376e7ce8a28785 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Sat, 16 Apr 2022 15:23:06 -0700 Subject: [PATCH] Type-check some version strings --- .../src/lib/definition-parser.ts | 2 +- packages/definitions-parser/src/mocks.ts | 2 +- packages/definitions-parser/src/packages.ts | 24 +++++-------------- .../publisher/test/generate-packages.test.ts | 4 ++-- 4 files changed, 10 insertions(+), 22 deletions(-) diff --git a/packages/definitions-parser/src/lib/definition-parser.ts b/packages/definitions-parser/src/lib/definition-parser.ts index 88d50ff3ba..30139bdd2e 100644 --- a/packages/definitions-parser/src/lib/definition-parser.ts +++ b/packages/definitions-parser/src/lib/definition-parser.ts @@ -43,7 +43,7 @@ function matchesVersion( ); } -function formattedLibraryVersion(typingsDataRaw: TypingsDataRaw) { +function formattedLibraryVersion(typingsDataRaw: TypingsDataRaw): `${number}.${number}` { return `${typingsDataRaw.libraryMajorVersion}.${typingsDataRaw.libraryMinorVersion}`; } diff --git a/packages/definitions-parser/src/mocks.ts b/packages/definitions-parser/src/mocks.ts index b65eaa5a41..80cd8eae4a 100644 --- a/packages/definitions-parser/src/mocks.ts +++ b/packages/definitions-parser/src/mocks.ts @@ -38,7 +38,7 @@ class DTMock { * @param packageName The package of which an old version is to be added. * @param olderVersion The older version that's to be added. */ - public addOldVersionOfPackage(packageName: string, olderVersion: string) { + public addOldVersionOfPackage(packageName: string, olderVersion: `${number}`) { const latestDir = this.pkgDir(mangleScopedPackage(packageName)); const index = latestDir.get("index.d.ts") as string; const latestHeader = parseHeaderOrFail(index); diff --git a/packages/definitions-parser/src/packages.ts b/packages/definitions-parser/src/packages.ts index fca9904fbb..593db8fca7 100644 --- a/packages/definitions-parser/src/packages.ts +++ b/packages/definitions-parser/src/packages.ts @@ -40,11 +40,11 @@ export class AllPackages { if (!raw) { throw new Error(`Can't find package ${name}`); } - const versions = Object.keys(raw); + const versions = Object.values(raw); if (versions.length > 1) { throw new Error(`Package ${name} has multiple versions.`); } - return new TypingsData(raw[versions[0]], /*isLatest*/ true); + return new TypingsData(versions[0], /*isLatest*/ true); } static readSingleNotNeeded(name: string, dt: FS): NotNeededPackage { @@ -316,7 +316,7 @@ export class NotNeededPackage extends PackageBase { } export interface TypingsVersionsRaw { - [version: string]: TypingsDataRaw; + [version: `${number}.${number}`]: TypingsDataRaw; } /** Minor may be unknown if parsed from a major-only version directory, like 'types/v15' */ @@ -504,29 +504,17 @@ export class TypingsVersions { private readonly versions: Semver[]; constructor(data: TypingsVersionsRaw) { - const versionMappings = new Map( - Object.keys(data).map(key => { - const version = Semver.parse(key, true); - if (version) { - return [version, key]; - } - throw new Error(`Unable to parse version ${key}`); - }) - ); - /** * Sorted from latest to oldest so that we publish the current version first. * This is important because older versions repeatedly reset the "latest" tag to the current version. */ - this.versions = Array.from(versionMappings.keys()) + this.versions = Object.keys(data) + .map(key => Semver.parse(key, true)) .sort(Semver.compare) .reverse(); this.map = new Map( - this.versions.map(version => { - const dataKey = versionMappings.get(version)!; - return [version, new TypingsData(data[dataKey], version.equals(this.versions[0]))]; - }) + this.versions.map((version, i) => [version, new TypingsData(data[`${version.major}.${version.minor}`], !i)]) ); } diff --git a/packages/publisher/test/generate-packages.test.ts b/packages/publisher/test/generate-packages.test.ts index 3eae4a2d68..4b4c078d92 100644 --- a/packages/publisher/test/generate-packages.test.ts +++ b/packages/publisher/test/generate-packages.test.ts @@ -41,10 +41,10 @@ function createRawPackage(license: License): TypingsDataRaw { function createTypesData(): TypesDataFile { return { jquery: { - 1: createRawPackage(License.MIT) + "1.0": createRawPackage(License.MIT) }, madeira: { - 1: createRawPackage(License.Apache20) + "1.0": createRawPackage(License.Apache20) } }; }