Cleanup NotNeededPackage[Raw] (#220)

* Cleanup NotNeededPackage[Raw]

Better construction interface
Also fix a lot of tests for some reason?

* remove temp notes
This commit is contained in:
Nathan Shively-Sanders
2021-03-23 09:46:14 -07:00
committed by GitHub
parent cef10322f4
commit 925652e8bf
5 changed files with 52 additions and 49 deletions

View File

@@ -249,17 +249,20 @@ export class NotNeededPackage extends PackageBase {
return License.MIT;
}
constructor(readonly name: string, raw: NotNeededPackageRaw) {
super(raw);
static fromRaw(name: string, raw: NotNeededPackageRaw) {
for (const key of Object.keys(raw)) {
if (!["libraryName", "sourceRepoURL", "asOfVersion"].includes(key)) {
throw new Error(`Unexpected key in not-needed package: ${key}`);
}
}
assert(raw.libraryName && name && raw.asOfVersion);
this.version = Semver.parse(raw.asOfVersion);
return new NotNeededPackage(name, raw.libraryName, raw.asOfVersion);
}
constructor(readonly name: string, readonly libraryName: string, asOfVersion: string) {
super({ libraryName });
assert(libraryName && name && asOfVersion);
this.version = Semver.parse(asOfVersion);
}
get major(): number {
@@ -601,8 +604,8 @@ function readTypesDataFile(): Promise<TypesDataFile> {
export function readNotNeededPackages(dt: FS): readonly NotNeededPackage[] {
const rawJson = dt.readJson("notNeededPackages.json"); // tslint:disable-line await-promise (tslint bug)
return Object.entries((rawJson as { readonly packages: readonly NotNeededPackageRaw[] }).packages).map(
([name, raw]) => new NotNeededPackage(name, raw)
return Object.entries((rawJson as { readonly packages: readonly NotNeededPackageRaw[] }).packages).map(entry =>
NotNeededPackage.fromRaw(...entry)
);
}

View File

@@ -15,12 +15,7 @@ const typesData: TypesDataFile = {
};
typesData.jquery["2.0"] = { ...typesData.jquery["1.0"], libraryMajorVersion: 2 };
const notNeeded = [
new NotNeededPackage("jest", {
libraryName: "jest",
asOfVersion: "100.0.0"
})
];
const notNeeded = [new NotNeededPackage("jest", "jest", "100.0.0")];
const allPackages = AllPackages.from(typesData, notNeeded);
testo({

View File

@@ -4,20 +4,15 @@ import { GitDiff, getNotNeededPackages, checkNotNeededPackage } from "../src/git
import { NotNeededPackage, TypesDataFile, AllPackages } from "../src/packages";
const typesData: TypesDataFile = {
jquery: createTypingsVersionRaw("jquery", [], []),
known: createTypingsVersionRaw("known", [{ name: "jquery", version: { major: 1 } }], []),
"known-test": createTypingsVersionRaw("known-test", [], ["jquery"]),
"most-recent": createTypingsVersionRaw("most-recent", [{ name: "jquery", version: "*" }], []),
unknown: createTypingsVersionRaw("unknown", [{ name: "COMPLETELY-UNKNOWN", version: { major: 1 } }], []),
"unknown-test": createTypingsVersionRaw("unknown-test", [], ["WAT"])
jquery: createTypingsVersionRaw("jquery", {}, [], {}),
known: createTypingsVersionRaw("known", { jquery: { major: 1 } }, [], {}),
"known-test": createTypingsVersionRaw("known-test", {}, ["jquery"], {}),
"most-recent": createTypingsVersionRaw("most-recent", { jquery: "*" }, [], {}),
unknown: createTypingsVersionRaw("unknown", { "COMPLETELY-UNKNOWN": { major: 1 } }, [], {}),
"unknown-test": createTypingsVersionRaw("unknown-test", {}, ["WAT"], {})
};
const jestNotNeeded = [
new NotNeededPackage("jest", {
libraryName: "jest",
asOfVersion: "100.0.0"
})
];
const jestNotNeeded = [new NotNeededPackage("jest", "jest", "100.0.0")];
const allPackages = AllPackages.from(typesData, jestNotNeeded);
const deleteJestDiffs: GitDiff[] = [
@@ -34,7 +29,7 @@ testo({
expect(() =>
Array.from(
getNotNeededPackages(
AllPackages.from({ jest: createTypingsVersionRaw("jest", [], []) }, jestNotNeeded),
AllPackages.from({ jest: createTypingsVersionRaw("jest", {}, [], {}) }, jestNotNeeded),
deleteJestDiffs
)
)
@@ -65,12 +60,7 @@ testo({
scoped() {
Array.from(
getNotNeededPackages(
AllPackages.from(typesData, [
new NotNeededPackage("ember__object", {
libraryName: "@ember/object",
asOfVersion: "1.0.0"
})
]),
AllPackages.from(typesData, [new NotNeededPackage("ember__object", "@ember/object", "1.0.0")]),
[{ status: "D", file: "types/ember__object/index.d.ts" }]
)
);
@@ -80,6 +70,7 @@ testo({
});
const empty: NpmInfo = {
homepage: "",
distTags: new Map(),
versions: new Map(),
time: new Map()
@@ -103,6 +94,7 @@ testo({
deprecatedSameVersion() {
expect(() => {
checkNotNeededPackage(jestNotNeeded[0], empty, {
homepage: "jest.com",
distTags: new Map([["latest", "100.0.0"]]),
versions: new Map(),
time: new Map([["modified", ""]])
@@ -113,6 +105,7 @@ it is supposed to replace, 100.0.0 of @types/jest.`);
deprecatedOlderVersion() {
expect(() => {
checkNotNeededPackage(jestNotNeeded[0], empty, {
homepage: "jest.com",
distTags: new Map([["latest", "999.0.0"]]),
versions: new Map(),
time: new Map([["modified", ""]])
@@ -123,6 +116,7 @@ it is supposed to replace, 999.0.0 of @types/jest.`);
missingNpmVersion() {
expect(() => {
checkNotNeededPackage(jestNotNeeded[0], empty, {
homepage: "jest.com",
distTags: new Map([["latest", "4.0.0"]]),
versions: new Map(),
time: new Map([["modified", ""]])
@@ -133,16 +127,36 @@ it is supposed to replace, 999.0.0 of @types/jest.`);
expect(() =>
checkNotNeededPackage(
jestNotNeeded[0],
{ distTags: new Map(), versions: new Map([["50.0.0", {}]]), time: new Map([["modified", ""]]) },
{ distTags: new Map([["latest", "4.0.0"]]), versions: new Map(), time: new Map([["modified", ""]]) }
{
homepage: "jest.com",
distTags: new Map(),
versions: new Map([["50.0.0", {}]]),
time: new Map([["modified", ""]])
},
{
homepage: "jest.com",
distTags: new Map([["latest", "4.0.0"]]),
versions: new Map(),
time: new Map([["modified", ""]])
}
)
).toThrow("The specified version 100.0.0 of jest is not on npm.");
},
ok() {
checkNotNeededPackage(
jestNotNeeded[0],
{ distTags: new Map(), versions: new Map([["100.0.0", {}]]), time: new Map([["modified", ""]]) },
{ distTags: new Map([["latest", "4.0.0"]]), versions: new Map(), time: new Map([["modified", ""]]) }
{
homepage: "jest.com",
distTags: new Map(),
versions: new Map([["100.0.0", {}]]),
time: new Map([["modified", ""]])
},
{
homepage: "jest.com",
distTags: new Map([["latest", "4.0.0"]]),
versions: new Map(),
time: new Map([["modified", ""]])
}
);
}
});

View File

@@ -19,10 +19,7 @@ export function skipBadPublishes(pkg: NotNeededPackage, client: CachedNpmInfoCli
) {
const plusOne = new Semver(latest.major, latest.minor, latest.patch + 1);
log(`Deprecation of ${notNeeded.versionString} failed, instead using ${plusOne.versionString}.`);
return new NotNeededPackage(pkg.name, {
libraryName: pkg.libraryName,
asOfVersion: plusOne.versionString
});
return new NotNeededPackage(pkg.name, pkg.libraryName, plusOne.versionString);
}
return pkg;
}

View File

@@ -23,7 +23,7 @@ function createRawPackage(license: License): TypingsDataRaw {
typingsPackageName: "jquery",
dependencies: { madeira: { major: 1 } },
testDependencies: [],
pathMappings: [],
pathMappings: {},
contributors: [{ name: "A", url: "b@c.d", githubUsername: "e" }],
libraryMajorVersion: 1,
libraryMinorVersion: 0,
@@ -49,10 +49,7 @@ function createTypesData(): TypesDataFile {
};
}
function createUnneededPackage() {
return new NotNeededPackage("absalom", {
libraryName: "alternate",
asOfVersion: "1.1.1"
});
return new NotNeededPackage("absalom", "alternate", "1.1.1");
}
testo({
mitLicenseText() {
@@ -143,10 +140,7 @@ testo({
}`);
},
scopedNotNeededPackageJson() {
const scopedUnneeded = new NotNeededPackage("google-cloud__pubsub", {
libraryName: "@google-cloud/chubdub",
asOfVersion: "0.26.0"
});
const scopedUnneeded = new NotNeededPackage("google-cloud__pubsub", "@google-cloud/chubdub", "0.26.0");
const s = createNotNeededPackageJSON(scopedUnneeded, Registry.NPM);
expect(s).toEqual(`{
"name": "@types/google-cloud__pubsub",