mirror of
https://github.com/chenasraf/DefinitelyTyped-tools.git
synced 2026-05-18 01:49:03 +00:00
* Revert "Use cached npm info (#451)"
This reverts commit e246b08817.
* Fix package.json version
This commit is contained in:
@@ -28,6 +28,6 @@
|
||||
"ts-jest": "^25.2.1",
|
||||
"tslint": "^6.1.2",
|
||||
"tslint-microsoft-contrib": "^6.2.0",
|
||||
"typescript": "^4.6.4"
|
||||
"typescript": "^4.5.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,12 +24,10 @@
|
||||
"@definitelytyped/utils": "^0.0.115-next.0",
|
||||
"@types/node": "^14.14.35",
|
||||
"fs-extra": "^9.1.0",
|
||||
"pacote": "^13.6.0",
|
||||
"semver": "^7.3.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/fs-extra": "^9.0.8",
|
||||
"@types/pacote": "^11.1.4"
|
||||
"@types/fs-extra": "^9.0.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "*"
|
||||
|
||||
@@ -1,13 +1,37 @@
|
||||
import { ParseDefinitionsOptions } from "./get-definitely-typed";
|
||||
import { TypingsData, AllPackages, formatTypingVersion } from "./packages";
|
||||
import { mapDefined, nAtATime, FS, logger, writeLog, Logger, defaultCacheDir, max, min } from "@definitelytyped/utils";
|
||||
import * as pacote from "pacote";
|
||||
import {
|
||||
assertDefined,
|
||||
mapDefined,
|
||||
nAtATime,
|
||||
FS,
|
||||
logger,
|
||||
writeLog,
|
||||
Logger,
|
||||
UncachedNpmInfoClient,
|
||||
NpmInfoRawVersions,
|
||||
NpmInfoVersion,
|
||||
max,
|
||||
min,
|
||||
} from "@definitelytyped/utils";
|
||||
import * as semver from "semver";
|
||||
|
||||
export async function checkParseResults(
|
||||
includeNpmChecks: boolean,
|
||||
includeNpmChecks: false,
|
||||
dt: FS,
|
||||
options: ParseDefinitionsOptions
|
||||
): Promise<void>;
|
||||
export async function checkParseResults(
|
||||
includeNpmChecks: true,
|
||||
dt: FS,
|
||||
options: ParseDefinitionsOptions,
|
||||
client: UncachedNpmInfoClient
|
||||
): Promise<void>;
|
||||
export async function checkParseResults(
|
||||
includeNpmChecks: boolean,
|
||||
dt: FS,
|
||||
options: ParseDefinitionsOptions,
|
||||
client?: UncachedNpmInfoClient
|
||||
): Promise<void> {
|
||||
const allPackages = await AllPackages.read(dt);
|
||||
const [log, logResult] = logger();
|
||||
@@ -33,7 +57,7 @@ export async function checkParseResults(
|
||||
await nAtATime(
|
||||
10,
|
||||
allPackages.allTypings(),
|
||||
(pkg) => checkNpm(pkg, log, dependedOn),
|
||||
(pkg) => checkNpm(pkg, log, dependedOn, client!),
|
||||
options.progress
|
||||
? {
|
||||
name: "Checking for typed packages...",
|
||||
@@ -96,16 +120,14 @@ Check the path mappings for [${Array.from(allPackages.allDependencyTypings(pkg))
|
||||
async function checkNpm(
|
||||
{ major, minor, name, libraryName, projectName, contributors }: TypingsData,
|
||||
log: Logger,
|
||||
dependedOn: ReadonlySet<string>
|
||||
dependedOn: ReadonlySet<string>,
|
||||
client: UncachedNpmInfoClient
|
||||
): Promise<void> {
|
||||
if (notNeededExceptions.has(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const info = await pacote.packument(name, { cache: defaultCacheDir, fullMetadata: true }).catch((reason) => {
|
||||
if (reason.code !== "E404") throw reason;
|
||||
return undefined;
|
||||
}); // Gets info for the real package, not the @types package
|
||||
const info = await client.fetchRawNpmInfo(name); // Gets info for the real package, not the @types package
|
||||
if (!info) {
|
||||
return;
|
||||
}
|
||||
@@ -147,12 +169,13 @@ async function checkNpm(
|
||||
}
|
||||
}
|
||||
|
||||
export async function packageHasTypes(packageName: string): Promise<boolean> {
|
||||
return versionHasTypes(await pacote.manifest(packageName, { cache: defaultCacheDir, fullMetadata: true }));
|
||||
export async function packageHasTypes(packageName: string, client: UncachedNpmInfoClient): Promise<boolean> {
|
||||
const info = assertDefined(await client.fetchRawNpmInfo(packageName));
|
||||
return versionHasTypes(info.versions[info["dist-tags"].latest]);
|
||||
}
|
||||
|
||||
function getRegularVersions(
|
||||
versions: pacote.Packument["versions"]
|
||||
versions: NpmInfoRawVersions
|
||||
): readonly { readonly version: semver.SemVer; readonly hasTypes: boolean }[] {
|
||||
return Object.entries(versions).map(([versionString, info]) => ({
|
||||
version: new semver.SemVer(versionString),
|
||||
@@ -160,7 +183,7 @@ function getRegularVersions(
|
||||
}));
|
||||
}
|
||||
|
||||
function versionHasTypes(info: pacote.Manifest): boolean {
|
||||
function versionHasTypes(info: NpmInfoVersion): boolean {
|
||||
return "types" in info || "typings" in info;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ import {
|
||||
FS,
|
||||
consoleLogger,
|
||||
assertDefined,
|
||||
defaultCacheDir,
|
||||
UncachedNpmInfoClient,
|
||||
NpmInfo,
|
||||
} from "@definitelytyped/utils";
|
||||
import * as pacote from "pacote";
|
||||
import * as semver from "semver";
|
||||
import { getAffectedPackages } from "./get-affected-packages";
|
||||
|
||||
@@ -96,8 +96,11 @@ export async function getAffectedPackagesFromDiff(
|
||||
const allPackages = await AllPackages.read(dt);
|
||||
const diffs = await gitDiff(consoleLogger.info, definitelyTypedPath);
|
||||
if (diffs.find((d) => d.file === "notNeededPackages.json")) {
|
||||
const uncached = new UncachedNpmInfoClient();
|
||||
for (const deleted of getNotNeededPackages(allPackages, diffs)) {
|
||||
checkNotNeededPackage(deleted);
|
||||
const source = await uncached.fetchNpmInfo(deleted.libraryName); // eg @babel/parser
|
||||
const typings = await uncached.fetchNpmInfo(deleted.fullNpmName); // eg @types/babel__parser
|
||||
checkNotNeededPackage(deleted, source, typings);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,30 +133,30 @@ export async function getAffectedPackagesFromDiff(
|
||||
* 2. asOfVersion must be newer than `@types/name@latest` on npm
|
||||
* 3. `name@asOfVersion` must exist on npm
|
||||
*/
|
||||
export async function checkNotNeededPackage(unneeded: NotNeededPackage) {
|
||||
await pacote.manifest(`${unneeded.libraryName}@${unneeded.version}`, { cache: defaultCacheDir }).catch((reason) => {
|
||||
throw reason.code === "E404"
|
||||
? new Error(
|
||||
`The entry for ${unneeded.fullNpmName} in notNeededPackages.json has
|
||||
export function checkNotNeededPackage(
|
||||
unneeded: NotNeededPackage,
|
||||
source: NpmInfo | undefined,
|
||||
typings: NpmInfo | undefined
|
||||
) {
|
||||
source = assertDefined(
|
||||
source,
|
||||
`The entry for ${unneeded.fullNpmName} in notNeededPackages.json has
|
||||
"libraryName": "${unneeded.libraryName}", but there is no npm package with this name.
|
||||
Unneeded packages have to be replaced with a package on npm.`,
|
||||
{ cause: reason }
|
||||
)
|
||||
: reason.code === "ETARGET"
|
||||
? new Error(`The specified version ${unneeded.version} of ${unneeded.libraryName} is not on npm.`, {
|
||||
cause: reason,
|
||||
})
|
||||
: reason;
|
||||
}); // eg @babel/parser
|
||||
const typings = await pacote.manifest(unneeded.fullNpmName, { cache: defaultCacheDir }).catch((reason) => {
|
||||
throw reason.code === "E404"
|
||||
? new Error(`Unexpected error: @types package not found for ${unneeded.fullNpmName}`, { cause: reason })
|
||||
: reason;
|
||||
}); // eg @types/babel__parser
|
||||
Unneeded packages have to be replaced with a package on npm.`
|
||||
);
|
||||
typings = assertDefined(typings, `Unexpected error: @types package not found for ${unneeded.fullNpmName}`);
|
||||
const latestTypings = assertDefined(
|
||||
typings.distTags.get("latest"),
|
||||
`Unexpected error: ${unneeded.fullNpmName} is missing the "latest" tag.`
|
||||
);
|
||||
assert(
|
||||
semver.gt(unneeded.version, typings.version),
|
||||
semver.gt(unneeded.version, latestTypings),
|
||||
`The specified version ${unneeded.version} of ${unneeded.libraryName} must be newer than the version
|
||||
it is supposed to replace, ${typings.version} of ${unneeded.fullNpmName}.`
|
||||
it is supposed to replace, ${latestTypings} of ${unneeded.fullNpmName}.`
|
||||
);
|
||||
assert(
|
||||
source.versions.has(String(unneeded.version)),
|
||||
`The specified version ${unneeded.version} of ${unneeded.libraryName} is not on npm.`
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -227,6 +227,11 @@ export abstract class PackageBase {
|
||||
return getFullNpmName(this.name);
|
||||
}
|
||||
|
||||
/** '@types%2ffoo' for a package 'foo'. */
|
||||
get fullEscapedNpmName(): string {
|
||||
return `@${scopeName}%2f${this.name}`;
|
||||
}
|
||||
|
||||
abstract readonly major: number;
|
||||
abstract readonly minor: number;
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as util from "util";
|
||||
import * as pacote from "pacote";
|
||||
import { NpmInfo } from "@definitelytyped/utils";
|
||||
import { createTypingsVersionRaw, testo } from "./utils";
|
||||
import { GitDiff, getNotNeededPackages, checkNotNeededPackage } from "../src/git";
|
||||
import { NotNeededPackage, TypesDataFile, AllPackages } from "../src/packages";
|
||||
@@ -66,62 +65,94 @@ testo({
|
||||
// TODO: Test with dependents, etc etc
|
||||
});
|
||||
|
||||
jest.mock("pacote", () => ({
|
||||
async manifest(spec: string, opts: pacote.Options) {
|
||||
switch (spec) {
|
||||
case "jest@4.0.0": // Older than the @types/jest package.
|
||||
case "jest@50.0.0": // The same version as the @types/jest package.
|
||||
case "jest@100.0.0": // Newer than the @types/jest package.
|
||||
// These versions exist (don't throw).
|
||||
return;
|
||||
case "jest@999.0.0": // A nonexistent version of the replacement package.
|
||||
// eslint-disable-next-line no-throw-literal
|
||||
throw { code: "ETARGET" };
|
||||
case "@types/jest": // The @types/jest package.
|
||||
return { version: "50.0.0" };
|
||||
case "nonexistent@100.0.0": // A nonexistent replacement package.
|
||||
case "@types/nonexistent": // A nonexistent @types package.
|
||||
// eslint-disable-next-line no-throw-literal
|
||||
throw { code: opts.offline ? "ENOTCACHED" : "E404" };
|
||||
}
|
||||
throw new Error(`Unexpected npm registry fetch: ${util.inspect(spec)}`);
|
||||
},
|
||||
}));
|
||||
|
||||
const newerReplacement = new NotNeededPackage("jest", "jest", "100.0.0");
|
||||
const olderReplacement = new NotNeededPackage("jest", "jest", "4.0.0");
|
||||
const sameVersion = new NotNeededPackage("jest", "jest", "50.0.0");
|
||||
const nonexistentReplacementVersion = new NotNeededPackage("jest", "jest", "999.0.0");
|
||||
const nonexistentReplacementPackage = new NotNeededPackage("jest", "nonexistent", "100.0.0");
|
||||
const nonexistentTypesPackage = new NotNeededPackage("nonexistent", "jest", "100.0.0");
|
||||
|
||||
const empty: NpmInfo = {
|
||||
homepage: "",
|
||||
distTags: new Map(),
|
||||
versions: new Map(),
|
||||
time: new Map(),
|
||||
};
|
||||
testo({
|
||||
missingSource() {
|
||||
return expect(checkNotNeededPackage(nonexistentReplacementPackage)).rejects.toThrow(
|
||||
expect(() => checkNotNeededPackage(jestNotNeeded[0], undefined, empty)).toThrow(
|
||||
"The entry for @types/jest in notNeededPackages.json"
|
||||
);
|
||||
},
|
||||
missingTypings() {
|
||||
return expect(checkNotNeededPackage(nonexistentTypesPackage)).rejects.toThrow(
|
||||
"@types package not found for @types/nonexistent"
|
||||
expect(() => checkNotNeededPackage(jestNotNeeded[0], empty, undefined)).toThrow(
|
||||
"@types package not found for @types/jest"
|
||||
);
|
||||
},
|
||||
missingTypingsLatest() {
|
||||
expect(() => checkNotNeededPackage(jestNotNeeded[0], empty, empty)).toThrow(
|
||||
'@types/jest is missing the "latest" tag'
|
||||
);
|
||||
},
|
||||
deprecatedSameVersion() {
|
||||
return expect(checkNotNeededPackage(sameVersion)).rejects
|
||||
.toThrow(`The specified version 50.0.0 of jest must be newer than the version
|
||||
it is supposed to replace, 50.0.0 of @types/jest.`);
|
||||
expect(() => {
|
||||
checkNotNeededPackage(jestNotNeeded[0], empty, {
|
||||
homepage: "jest.com",
|
||||
distTags: new Map([["latest", "100.0.0"]]),
|
||||
versions: new Map(),
|
||||
time: new Map([["modified", ""]]),
|
||||
});
|
||||
}).toThrow(`The specified version 100.0.0 of jest must be newer than the version
|
||||
it is supposed to replace, 100.0.0 of @types/jest.`);
|
||||
},
|
||||
deprecatedOlderVersion() {
|
||||
return expect(checkNotNeededPackage(olderReplacement)).rejects
|
||||
.toThrow(`The specified version 4.0.0 of jest must be newer than the version
|
||||
it is supposed to replace, 50.0.0 of @types/jest.`);
|
||||
expect(() => {
|
||||
checkNotNeededPackage(jestNotNeeded[0], empty, {
|
||||
homepage: "jest.com",
|
||||
distTags: new Map([["latest", "999.0.0"]]),
|
||||
versions: new Map(),
|
||||
time: new Map([["modified", ""]]),
|
||||
});
|
||||
}).toThrow(`The specified version 100.0.0 of jest must be newer than the version
|
||||
it is supposed to replace, 999.0.0 of @types/jest.`);
|
||||
},
|
||||
missingNpmVersion() {
|
||||
return expect(checkNotNeededPackage(nonexistentReplacementVersion)).rejects.toThrow(
|
||||
"The specified version 999.0.0 of jest is not on npm."
|
||||
);
|
||||
expect(() => {
|
||||
checkNotNeededPackage(jestNotNeeded[0], empty, {
|
||||
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.");
|
||||
},
|
||||
olderNpmVersion() {
|
||||
expect(() =>
|
||||
checkNotNeededPackage(
|
||||
jestNotNeeded[0],
|
||||
{
|
||||
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() {
|
||||
return checkNotNeededPackage(newerReplacement);
|
||||
checkNotNeededPackage(
|
||||
jestNotNeeded[0],
|
||||
{
|
||||
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", ""]]),
|
||||
}
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
@@ -190,6 +190,12 @@ describe(TypingsData, () => {
|
||||
expect(data.fullNpmName).toBe("@types/foo__bar");
|
||||
});
|
||||
});
|
||||
|
||||
describe("fullEscapedNpmName", () => {
|
||||
it("returns escaped name", () => {
|
||||
expect(data.fullEscapedNpmName).toBe("@types%2fknown");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe(getMangledNameForScopedPackage, () => {
|
||||
|
||||
@@ -260,7 +260,7 @@ function getLatestTypesVersionForTypeScriptVersion(
|
||||
): string | undefined {
|
||||
const tsVersion = new semver.SemVer(typeScriptVersion);
|
||||
for (let i = typesVersions.length - 1; i > 0; i--) {
|
||||
if (semver.gte(tsVersion, `${typesVersions[i]}.0-0`)) {
|
||||
if (semver.gte(tsVersion, `${typesVersions[i]}.0-`)) {
|
||||
return typesVersions[i];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
"hh-mm-ss": "^1.2.0",
|
||||
"longjohn": "^0.2.11",
|
||||
"oboe": "^2.1.3",
|
||||
"pacote": "^13.6.0",
|
||||
"semver": "^7.3.7",
|
||||
"source-map-support": "^0.4.0",
|
||||
"typescript": "^4.1.0",
|
||||
@@ -32,7 +31,6 @@
|
||||
"@types/hh-mm-ss": "^1.2.1",
|
||||
"@types/mz": "^0.0.31",
|
||||
"@types/oboe": "^2.0.28",
|
||||
"@types/pacote": "^11.1.4",
|
||||
"@types/source-map-support": "^0.4.0",
|
||||
"@types/yargs": "^15.0.4"
|
||||
},
|
||||
|
||||
@@ -2,33 +2,49 @@ import { defaultLocalOptions } from "./lib/common";
|
||||
import { ChangedPackages, ChangedPackagesJson, ChangedTypingJson, versionsFilename } from "./lib/versions";
|
||||
import { getDefinitelyTyped, AllPackages, NotNeededPackage, writeDataFile } from "@definitelytyped/definitions-parser";
|
||||
import {
|
||||
assertDefined,
|
||||
mapDefinedAsync,
|
||||
logUncaughtErrors,
|
||||
loggerWithErrors,
|
||||
FS,
|
||||
LoggerWithErrors,
|
||||
defaultCacheDir,
|
||||
UncachedNpmInfoClient,
|
||||
withNpmCache,
|
||||
CachedNpmInfoClient,
|
||||
} from "@definitelytyped/utils";
|
||||
import { fetchTypesPackageVersionInfo } from "@definitelytyped/retag";
|
||||
import * as pacote from "pacote";
|
||||
import { cacheDirPath } from "./lib/settings";
|
||||
|
||||
if (!module.parent) {
|
||||
const log = loggerWithErrors()[0];
|
||||
logUncaughtErrors(async () => calculateVersions(await getDefinitelyTyped(defaultLocalOptions, log), log));
|
||||
logUncaughtErrors(async () =>
|
||||
calculateVersions(await getDefinitelyTyped(defaultLocalOptions, log), new UncachedNpmInfoClient(), log)
|
||||
);
|
||||
}
|
||||
|
||||
export default async function calculateVersions(dt: FS, log: LoggerWithErrors): Promise<ChangedPackages> {
|
||||
export default async function calculateVersions(
|
||||
dt: FS,
|
||||
uncachedClient: UncachedNpmInfoClient,
|
||||
log: LoggerWithErrors
|
||||
): Promise<ChangedPackages> {
|
||||
log.info("=== Calculating versions ===");
|
||||
log.info("* Reading packages...");
|
||||
const packages = await AllPackages.read(dt);
|
||||
return computeAndSaveChangedPackages(packages, log);
|
||||
return withNpmCache(
|
||||
uncachedClient,
|
||||
async (client) => {
|
||||
log.info("* Reading packages...");
|
||||
const packages = await AllPackages.read(dt);
|
||||
return computeAndSaveChangedPackages(packages, log, client);
|
||||
},
|
||||
cacheDirPath
|
||||
);
|
||||
}
|
||||
|
||||
async function computeAndSaveChangedPackages(
|
||||
allPackages: AllPackages,
|
||||
log: LoggerWithErrors
|
||||
log: LoggerWithErrors,
|
||||
client: CachedNpmInfoClient
|
||||
): Promise<ChangedPackages> {
|
||||
const cp = await computeChangedPackages(allPackages, log);
|
||||
const cp = await computeChangedPackages(allPackages, log, client);
|
||||
const json: ChangedPackagesJson = {
|
||||
changedTypings: cp.changedTypings.map(
|
||||
({ pkg: { id }, version, latestVersion }): ChangedTypingJson => ({ id, version, latestVersion })
|
||||
@@ -39,37 +55,36 @@ async function computeAndSaveChangedPackages(
|
||||
return cp;
|
||||
}
|
||||
|
||||
async function computeChangedPackages(allPackages: AllPackages, log: LoggerWithErrors): Promise<ChangedPackages> {
|
||||
async function computeChangedPackages(
|
||||
allPackages: AllPackages,
|
||||
log: LoggerWithErrors,
|
||||
client: CachedNpmInfoClient
|
||||
): Promise<ChangedPackages> {
|
||||
log.info("# Computing changed packages...");
|
||||
const changedTypings = await mapDefinedAsync(allPackages.allTypings(), async (pkg) => {
|
||||
const { version, needsPublish } = await fetchTypesPackageVersionInfo(pkg, /*publish*/ true, log);
|
||||
const { version, needsPublish } = await fetchTypesPackageVersionInfo(pkg, client, /*publish*/ true, log);
|
||||
if (needsPublish) {
|
||||
log.info(`Need to publish: ${pkg.desc}@${version}`);
|
||||
for (const { name } of pkg.packageJsonDependencies) {
|
||||
await pacote.manifest(name, { cache: defaultCacheDir }).catch((reason) => {
|
||||
throw reason.code === "E404"
|
||||
? new Error(
|
||||
`'${pkg.name}' depends on '${name}' which does not exist on npm. All dependencies must exist.`,
|
||||
{ cause: reason }
|
||||
)
|
||||
: reason;
|
||||
});
|
||||
assertDefined(
|
||||
await client.fetchAndCacheNpmInfo(name),
|
||||
`'${pkg.name}' depends on '${name}' which does not exist on npm. All dependencies must exist.`
|
||||
);
|
||||
}
|
||||
const latestVersion = pkg.isLatest
|
||||
? undefined
|
||||
: (await fetchTypesPackageVersionInfo(allPackages.getLatest(pkg), /*publish*/ true)).version;
|
||||
: (await fetchTypesPackageVersionInfo(allPackages.getLatest(pkg), client, /*publish*/ true)).version;
|
||||
return { pkg, version, latestVersion };
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
log.info("# Computing deprecated packages...");
|
||||
const changedNotNeededPackages = await mapDefinedAsync(allPackages.allNotNeeded(), async (pkg) => {
|
||||
if (!(await isAlreadyDeprecated(pkg, log))) {
|
||||
await pacote.manifest(pkg.libraryName, { cache: defaultCacheDir }).catch((reason) => {
|
||||
throw reason.code === "E404"
|
||||
? new Error(`To deprecate '@types/${pkg.name}', '${pkg.libraryName}' must exist on npm.`, { cause: reason })
|
||||
: reason;
|
||||
});
|
||||
if (!(await isAlreadyDeprecated(pkg, client, log))) {
|
||||
assertDefined(
|
||||
await client.fetchAndCacheNpmInfo(pkg.libraryName),
|
||||
`To deprecate '@types/${pkg.name}', '${pkg.libraryName}' must exist on npm.`
|
||||
);
|
||||
log.info(`To be deprecated: ${pkg.name}`);
|
||||
return pkg;
|
||||
}
|
||||
@@ -78,23 +93,19 @@ async function computeChangedPackages(allPackages: AllPackages, log: LoggerWithE
|
||||
return { changedTypings, changedNotNeededPackages };
|
||||
}
|
||||
|
||||
async function isAlreadyDeprecated(pkg: NotNeededPackage, log: LoggerWithErrors): Promise<unknown> {
|
||||
const offline = await pacote
|
||||
.manifest(pkg.fullNpmName, {
|
||||
cache: defaultCacheDir,
|
||||
fullMetadata: true,
|
||||
offline: true,
|
||||
})
|
||||
.catch((reason) => {
|
||||
if (reason.code !== "ENOTCACHED") throw reason;
|
||||
return undefined;
|
||||
});
|
||||
if (offline?.deprecated) return offline.deprecated;
|
||||
log.info(`Version info not cached for deprecated package ${pkg.desc}`);
|
||||
const online = await pacote.manifest(pkg.fullNpmName, {
|
||||
cache: defaultCacheDir,
|
||||
fullMetadata: true,
|
||||
preferOnline: true,
|
||||
});
|
||||
return online.deprecated;
|
||||
async function isAlreadyDeprecated(
|
||||
pkg: NotNeededPackage,
|
||||
client: CachedNpmInfoClient,
|
||||
log: LoggerWithErrors
|
||||
): Promise<boolean> {
|
||||
const cachedInfo = client.getNpmInfoFromCache(pkg.fullEscapedNpmName);
|
||||
let latestVersion = cachedInfo && assertDefined(cachedInfo.distTags.get("latest"));
|
||||
let latestVersionInfo = cachedInfo && latestVersion && assertDefined(cachedInfo.versions.get(latestVersion));
|
||||
if (!latestVersionInfo || !latestVersionInfo.deprecated) {
|
||||
log.info(`Version info not cached for deprecated package ${pkg.desc}`);
|
||||
const info = assertDefined(await client.fetchAndCacheNpmInfo(pkg.fullEscapedNpmName));
|
||||
latestVersion = assertDefined(info.distTags.get("latest"));
|
||||
latestVersionInfo = assertDefined(info.versions.get(latestVersion));
|
||||
}
|
||||
return !!latestVersionInfo.deprecated;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
logUncaughtErrors,
|
||||
ProgressBar,
|
||||
strProgress,
|
||||
UncachedNpmInfoClient,
|
||||
npmRegistry,
|
||||
} from "@definitelytyped/utils";
|
||||
import { defaultLocalOptions } from "./lib/common";
|
||||
@@ -19,10 +20,11 @@ if (!module.parent) {
|
||||
async function main(options: ParseDefinitionsOptions): Promise<void> {
|
||||
const all = await allNpmPackages();
|
||||
await writeDataFile("all-npm-packages.json", all);
|
||||
const client = new UncachedNpmInfoClient();
|
||||
const allTyped = await filterNAtATimeOrdered(
|
||||
10,
|
||||
all,
|
||||
(pkg) => packageHasTypes(pkg),
|
||||
(pkg) => packageHasTypes(pkg, client),
|
||||
options.progress
|
||||
? {
|
||||
name: "Checking for types...",
|
||||
|
||||
@@ -7,7 +7,14 @@ import generatePackages from "./generate-packages";
|
||||
import publishPackages from "./publish-packages";
|
||||
import publishRegistry from "./publish-registry";
|
||||
import { getDefinitelyTyped, parseDefinitions, ParseDefinitionsOptions } from "@definitelytyped/definitions-parser";
|
||||
import { Fetcher, logUncaughtErrors, loggerWithErrors, LoggerWithErrors, assertDefined } from "@definitelytyped/utils";
|
||||
import {
|
||||
Fetcher,
|
||||
logUncaughtErrors,
|
||||
loggerWithErrors,
|
||||
LoggerWithErrors,
|
||||
assertDefined,
|
||||
UncachedNpmInfoClient,
|
||||
} from "@definitelytyped/utils";
|
||||
import { numberOfOsProcesses } from "./util/util";
|
||||
import { defaultLocalOptions } from "./lib/common";
|
||||
|
||||
@@ -29,6 +36,7 @@ export default async function full(
|
||||
options: ParseDefinitionsOptions,
|
||||
log: LoggerWithErrors
|
||||
): Promise<void> {
|
||||
const infoClient = new UncachedNpmInfoClient();
|
||||
clean();
|
||||
const dt = await getDefinitelyTyped(options, log);
|
||||
const allPackages = await parseDefinitions(
|
||||
@@ -38,8 +46,8 @@ export default async function full(
|
||||
: undefined,
|
||||
log
|
||||
);
|
||||
const changedPackages = await calculateVersions(dt, log);
|
||||
const changedPackages = await calculateVersions(dt, infoClient, log);
|
||||
await generatePackages(dt, allPackages, changedPackages);
|
||||
await publishPackages(changedPackages, dry, githubAccessToken, fetcher);
|
||||
await publishRegistry(dt, allPackages, dry);
|
||||
await publishRegistry(dt, allPackages, dry, infoClient);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { makeTypesVersionsForPackageJson } from "@definitelytyped/header-parser";
|
||||
import assert = require("assert");
|
||||
import { emptyDir, mkdir, mkdirp, readFileSync } from "fs-extra";
|
||||
import path = require("path");
|
||||
import yargs = require("yargs");
|
||||
|
||||
import { defaultLocalOptions } from "./lib/common";
|
||||
import { outputDirPath, sourceBranch } from "./lib/settings";
|
||||
import { outputDirPath, sourceBranch, cacheDirPath } from "./lib/settings";
|
||||
import {
|
||||
assertNever,
|
||||
joinPaths,
|
||||
@@ -16,8 +17,10 @@ import {
|
||||
writeLog,
|
||||
writeFile,
|
||||
Logger,
|
||||
defaultCacheDir,
|
||||
writeTgz,
|
||||
withNpmCache,
|
||||
UncachedNpmInfoClient,
|
||||
CachedNpmInfoClient,
|
||||
} from "@definitelytyped/utils";
|
||||
import {
|
||||
getDefinitelyTyped,
|
||||
@@ -31,7 +34,6 @@ import {
|
||||
License,
|
||||
formatTypingVersion,
|
||||
} from "@definitelytyped/definitions-parser";
|
||||
import * as pacote from "pacote";
|
||||
import { readChangedPackages, ChangedPackages } from "./lib/versions";
|
||||
import { outputDirectory } from "./util/util";
|
||||
import { skipBadPublishes } from "./lib/npm";
|
||||
@@ -68,10 +70,16 @@ export default async function generatePackages(
|
||||
log(` * ${pkg.desc}`);
|
||||
}
|
||||
log("## Generating deprecated packages");
|
||||
for (const pkg of changedPackages.changedNotNeededPackages) {
|
||||
log(` * ${pkg.libraryName}`);
|
||||
await generateNotNeededPackage(pkg, log);
|
||||
}
|
||||
await withNpmCache(
|
||||
new UncachedNpmInfoClient(),
|
||||
async (client) => {
|
||||
for (const pkg of changedPackages.changedNotNeededPackages) {
|
||||
log(` * ${pkg.libraryName}`);
|
||||
await generateNotNeededPackage(pkg, client, log);
|
||||
}
|
||||
},
|
||||
cacheDirPath
|
||||
);
|
||||
await writeLog("package-generator.md", logResult());
|
||||
}
|
||||
async function generateTypingPackage(
|
||||
@@ -92,9 +100,14 @@ async function generateTypingPackage(
|
||||
);
|
||||
}
|
||||
|
||||
async function generateNotNeededPackage(pkg: NotNeededPackage, log: Logger): Promise<void> {
|
||||
pkg = await skipBadPublishes(pkg, log);
|
||||
const info = await pacote.manifest(pkg.libraryName, { cache: defaultCacheDir, fullMetadata: true });
|
||||
async function generateNotNeededPackage(
|
||||
pkg: NotNeededPackage,
|
||||
client: CachedNpmInfoClient,
|
||||
log: Logger
|
||||
): Promise<void> {
|
||||
pkg = skipBadPublishes(pkg, client, log);
|
||||
const info = await client.fetchAndCacheNpmInfo(pkg.libraryName);
|
||||
assert(info);
|
||||
const readme = `This is a stub types definition for ${getFullNpmName(pkg.name)} (${info.homepage}).\n
|
||||
${pkg.libraryName} provides its own type definitions, so you don't need ${getFullNpmName(pkg.name)} installed!`;
|
||||
await writeCommonOutputs(pkg, createNotNeededPackageJSON(pkg), readme);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { NotNeededPackage } from "@definitelytyped/definitions-parser";
|
||||
import { Logger, defaultCacheDir } from "@definitelytyped/utils";
|
||||
import * as pacote from "pacote";
|
||||
import { Logger, assertDefined, CachedNpmInfoClient, max } from "@definitelytyped/utils";
|
||||
import * as semver from "semver";
|
||||
|
||||
/**
|
||||
@@ -8,11 +7,11 @@ import * as semver from "semver";
|
||||
* So the keys of 'time' give the actual 'latest'.
|
||||
* If that's not equal to the expected latest, try again by bumping the patch version of the last attempt by 1.
|
||||
*/
|
||||
export async function skipBadPublishes(pkg: NotNeededPackage, log: Logger) {
|
||||
export function skipBadPublishes(pkg: NotNeededPackage, client: CachedNpmInfoClient, log: Logger) {
|
||||
// because this is called right after isAlreadyDeprecated, we can rely on the cache being up-to-date
|
||||
const info = await pacote.packument(pkg.fullNpmName, { cache: defaultCacheDir });
|
||||
const info = assertDefined(client.getNpmInfoFromCache(pkg.fullEscapedNpmName));
|
||||
const notNeeded = pkg.version;
|
||||
const latest = semver.maxSatisfying(Object.keys(info.versions), "*")!;
|
||||
const latest = new semver.SemVer(findActualLatest(info.time));
|
||||
if (semver.lte(notNeeded, latest)) {
|
||||
const plusOne = semver.inc(latest, "patch")!;
|
||||
log(`Deprecation of ${notNeeded} failed, instead using ${plusOne}.`);
|
||||
@@ -20,3 +19,14 @@ export async function skipBadPublishes(pkg: NotNeededPackage, log: Logger) {
|
||||
}
|
||||
return pkg;
|
||||
}
|
||||
|
||||
function findActualLatest(times: Map<string, string>) {
|
||||
const actual = max(
|
||||
[...times].filter(([version]) => version !== "modified" && version !== "created"),
|
||||
([, a], [, b]) => (new Date(a) as never) - (new Date(b) as never)
|
||||
);
|
||||
if (!actual) {
|
||||
throw new Error("failed to find actual latest");
|
||||
}
|
||||
return actual[0];
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import { toS } from "hh-mm-ss";
|
||||
const hostJson = require("../../host.json");
|
||||
const root = joinPaths(__dirname, "..", "..");
|
||||
const storageDirPath = process.env.STORAGE_DIR || root;
|
||||
export const cacheDirPath = joinPaths(storageDirPath, "cache");
|
||||
export const outputDirPath = joinPaths(storageDirPath, "output");
|
||||
export const validateOutputPath = joinPaths(storageDirPath, "validateOutput");
|
||||
export const logDir = joinPaths(storageDirPath, "logs");
|
||||
|
||||
@@ -11,10 +11,13 @@ import {
|
||||
Fetcher,
|
||||
writeLog,
|
||||
NpmPublishClient,
|
||||
withNpmCache,
|
||||
UncachedNpmInfoClient,
|
||||
} from "@definitelytyped/utils";
|
||||
import { readChangedPackages, ChangedPackages } from "./lib/versions";
|
||||
import { skipBadPublishes } from "./lib/npm";
|
||||
import { getSecret, Secret } from "./lib/secrets";
|
||||
import { cacheDirPath } from "./lib/settings";
|
||||
|
||||
if (!module.parent) {
|
||||
const dry = !!yargs.argv.dry;
|
||||
@@ -140,10 +143,16 @@ export default async function publishPackages(
|
||||
}
|
||||
}
|
||||
|
||||
for (const n of changedPackages.changedNotNeededPackages) {
|
||||
const target = await skipBadPublishes(n, log);
|
||||
await publishNotNeededPackage(client, target, dry, log);
|
||||
}
|
||||
await withNpmCache(
|
||||
new UncachedNpmInfoClient(),
|
||||
async (infoClient) => {
|
||||
for (const n of changedPackages.changedNotNeededPackages) {
|
||||
const target = skipBadPublishes(n, infoClient, log);
|
||||
await publishNotNeededPackage(client, target, dry, log);
|
||||
}
|
||||
},
|
||||
cacheDirPath
|
||||
);
|
||||
|
||||
await writeLog("publishing.md", logResult());
|
||||
console.log("Done!");
|
||||
|
||||
@@ -3,7 +3,7 @@ import { emptyDir } from "fs-extra";
|
||||
import * as yargs from "yargs";
|
||||
|
||||
import { defaultLocalOptions } from "./lib/common";
|
||||
import { outputDirPath, validateOutputPath } from "./lib/settings";
|
||||
import { outputDirPath, validateOutputPath, cacheDirPath } from "./lib/settings";
|
||||
import {
|
||||
getDefinitelyTyped,
|
||||
AllPackages,
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
TypingsData,
|
||||
} from "@definitelytyped/definitions-parser";
|
||||
import {
|
||||
assertDefined,
|
||||
computeHash,
|
||||
execAndThrowErrors,
|
||||
joinPaths,
|
||||
@@ -26,11 +27,13 @@ import {
|
||||
sleep,
|
||||
npmInstallFlags,
|
||||
readJson,
|
||||
UncachedNpmInfoClient,
|
||||
withNpmCache,
|
||||
NpmPublishClient,
|
||||
defaultCacheDir,
|
||||
CachedNpmInfoClient,
|
||||
isObject,
|
||||
max,
|
||||
} from "@definitelytyped/utils";
|
||||
import * as pacote from "pacote";
|
||||
import * as semver from "semver";
|
||||
import { getSecret, Secret } from "./lib/secrets";
|
||||
// @ts-ignore
|
||||
@@ -45,21 +48,32 @@ if (!module.parent) {
|
||||
const dry = !!yargs.argv.dry;
|
||||
logUncaughtErrors(async () => {
|
||||
const dt = await getDefinitelyTyped(defaultLocalOptions, loggerWithErrors()[0]);
|
||||
await publishRegistry(dt, await AllPackages.read(dt), dry);
|
||||
await publishRegistry(dt, await AllPackages.read(dt), dry, new UncachedNpmInfoClient());
|
||||
});
|
||||
}
|
||||
|
||||
export default async function publishRegistry(dt: FS, allPackages: AllPackages, dry: boolean): Promise<void> {
|
||||
export default async function publishRegistry(
|
||||
dt: FS,
|
||||
allPackages: AllPackages,
|
||||
dry: boolean,
|
||||
client: UncachedNpmInfoClient
|
||||
): Promise<void> {
|
||||
const [log, logResult] = logger();
|
||||
log("=== Publishing types-registry ===");
|
||||
|
||||
const { npmVersion, highestSemverVersion, npmContentHash, lastModified } = await fetchAndProcessNpmInfo(
|
||||
typesRegistry
|
||||
typesRegistry,
|
||||
client
|
||||
);
|
||||
assert(semver.satisfies(npmVersion, "~0.1"));
|
||||
assert.strictEqual(npmVersion.major, 0);
|
||||
assert.strictEqual(npmVersion.minor, 1);
|
||||
|
||||
// Don't include not-needed packages in the registry.
|
||||
const registryJsonData = await generateRegistry(allPackages.allLatestTypings());
|
||||
const registryJsonData = await withNpmCache(
|
||||
client,
|
||||
(cachedClient) => generateRegistry(allPackages.allLatestTypings(), cachedClient),
|
||||
cacheDirPath
|
||||
);
|
||||
const registry = JSON.stringify(registryJsonData);
|
||||
const newContentHash = computeHash(registry);
|
||||
const newVersion = semver.inc(npmVersion, "patch")!;
|
||||
@@ -75,13 +89,13 @@ export default async function publishRegistry(dt: FS, allPackages: AllPackages,
|
||||
const token = await getSecret(Secret.NPM_TOKEN);
|
||||
|
||||
const publishClient = () => NpmPublishClient.create(token, { defaultTag: "next" });
|
||||
if (highestSemverVersion !== npmVersion) {
|
||||
if (!semver.eq(highestSemverVersion, npmVersion)) {
|
||||
// There was an error in the last publish and types-registry wasn't validated.
|
||||
// This may have just been due to a timeout, so test if types-registry@next is a subset of the one we're about to publish.
|
||||
// If so, we should just update it to "latest" now.
|
||||
log("Old version of types-registry was never tagged latest, so updating");
|
||||
await validateIsSubset(readNotNeededPackages(dt), log);
|
||||
await (await publishClient()).tag(typesRegistry, highestSemverVersion, "latest", dry, log);
|
||||
await (await publishClient()).tag(typesRegistry, String(highestSemverVersion), "latest", dry, log);
|
||||
} else if (npmContentHash !== newContentHash && isTimeForNewVersion) {
|
||||
log("New packages have been added, so publishing a new registry.");
|
||||
await publish(await publishClient(), typesRegistry, packageJson, newVersion, dry, log);
|
||||
@@ -235,37 +249,53 @@ interface Registry {
|
||||
};
|
||||
};
|
||||
}
|
||||
async function generateRegistry(typings: readonly TypingsData[]): Promise<Registry> {
|
||||
return {
|
||||
entries: Object.fromEntries(
|
||||
await Promise.all(
|
||||
typings.map(async (typing) => [
|
||||
typing.name,
|
||||
filterTags((await pacote.packument(typing.fullNpmName, { cache: defaultCacheDir }))["dist-tags"]),
|
||||
])
|
||||
)
|
||||
),
|
||||
};
|
||||
async function generateRegistry(typings: readonly TypingsData[], client: CachedNpmInfoClient): Promise<Registry> {
|
||||
const entries: { [packageName: string]: { [distTags: string]: string } } = {};
|
||||
for (const typing of typings) {
|
||||
// Unconditionally use cached info, this should have been set in calculate-versions so should be recent enough.
|
||||
const info = client.getNpmInfoFromCache(typing.fullEscapedNpmName);
|
||||
if (!info) {
|
||||
const missings = typings
|
||||
.filter((t) => !client.getNpmInfoFromCache(t.fullEscapedNpmName))
|
||||
.map((t) => t.fullEscapedNpmName);
|
||||
throw new Error(`${missings.toString()} not found in cached npm info.`);
|
||||
}
|
||||
entries[typing.name] = filterTags(info.distTags);
|
||||
}
|
||||
return { entries };
|
||||
|
||||
function filterTags(tags: pacote.Packument["dist-tags"]): { readonly [tag: string]: string } {
|
||||
return Object.fromEntries(
|
||||
Object.entries(tags).filter(([tag, version]) => tag === "latest" || version !== tags.latest)
|
||||
);
|
||||
function filterTags(tags: Map<string, string>): { readonly [tag: string]: string } {
|
||||
const latestTag = "latest";
|
||||
const latestVersion = tags.get(latestTag);
|
||||
const out: { [tag: string]: string } = {};
|
||||
tags.forEach((value, tag) => {
|
||||
if (tag === latestTag || value !== latestVersion) {
|
||||
out[tag] = value;
|
||||
}
|
||||
});
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
interface ProcessedNpmInfo {
|
||||
readonly npmVersion: string;
|
||||
readonly highestSemverVersion: string;
|
||||
readonly npmContentHash: unknown;
|
||||
readonly npmVersion: semver.SemVer;
|
||||
readonly highestSemverVersion: semver.SemVer;
|
||||
readonly npmContentHash: string;
|
||||
readonly lastModified: Date;
|
||||
}
|
||||
|
||||
async function fetchAndProcessNpmInfo(packageName: string): Promise<ProcessedNpmInfo> {
|
||||
const info = await pacote.packument(packageName, { cache: defaultCacheDir, fullMetadata: true });
|
||||
const npmVersion = info["dist-tags"].latest;
|
||||
const highestSemverVersion = semver.maxSatisfying(Object.keys(info.versions), "*");
|
||||
assert.strictEqual(highestSemverVersion, info["dist-tags"].next);
|
||||
const npmContentHash = info.versions[npmVersion].typesPublisherContentHash;
|
||||
return { npmVersion, highestSemverVersion, npmContentHash, lastModified: new Date(info.time!.modified) };
|
||||
async function fetchAndProcessNpmInfo(
|
||||
escapedPackageName: string,
|
||||
client: UncachedNpmInfoClient
|
||||
): Promise<ProcessedNpmInfo> {
|
||||
const info = assertDefined(await client.fetchNpmInfo(escapedPackageName));
|
||||
const npmVersion = new semver.SemVer(assertDefined(info.distTags.get("latest")));
|
||||
const { distTags, versions, time } = info;
|
||||
const highestSemverVersion = max(
|
||||
Array.from(versions.keys(), (v) => new semver.SemVer(v)),
|
||||
semver.compare
|
||||
)!;
|
||||
assert.strictEqual(String(highestSemverVersion), distTags.get("next"));
|
||||
const npmContentHash = versions.get(String(npmVersion))!.typesPublisherContentHash || "";
|
||||
return { npmVersion, highestSemverVersion, npmContentHash, lastModified: new Date(time.get("modified")!) };
|
||||
}
|
||||
|
||||
@@ -21,13 +21,11 @@
|
||||
"@definitelytyped/definitions-parser": "^0.0.115-next.0",
|
||||
"@definitelytyped/typescript-versions": "^0.0.114",
|
||||
"@definitelytyped/utils": "^0.0.115-next.0",
|
||||
"pacote": "^13.6.0",
|
||||
"semver": "^7.3.7",
|
||||
"yargs": "^15.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^10.17.21",
|
||||
"@types/pacote": "^11.1.4",
|
||||
"@types/yargs": "^15.0.5"
|
||||
},
|
||||
"main": "dist/index.js",
|
||||
|
||||
@@ -8,13 +8,17 @@ import os = require("os");
|
||||
import { TypeScriptVersion } from "@definitelytyped/typescript-versions";
|
||||
import {
|
||||
Logger,
|
||||
assertDefined,
|
||||
withNpmCache,
|
||||
NpmPublishClient,
|
||||
UncachedNpmInfoClient,
|
||||
consoleLogger,
|
||||
NpmInfoVersion,
|
||||
logUncaughtErrors,
|
||||
loggerWithErrors,
|
||||
LoggerWithErrors,
|
||||
defaultCacheDir,
|
||||
nAtATime,
|
||||
CachedNpmInfoClient,
|
||||
} from "@definitelytyped/utils";
|
||||
import {
|
||||
AnyPackage,
|
||||
@@ -23,7 +27,6 @@ import {
|
||||
parseDefinitions,
|
||||
getDefinitelyTyped,
|
||||
} from "@definitelytyped/definitions-parser";
|
||||
import * as pacote from "pacote";
|
||||
import * as semver from "semver";
|
||||
|
||||
if (!module.parent) {
|
||||
@@ -59,19 +62,21 @@ async function tag(dry: boolean, nProcesses: number, name?: string) {
|
||||
const token = process.env.NPM_TOKEN as string;
|
||||
|
||||
const publishClient = await NpmPublishClient.create(token, {});
|
||||
if (name) {
|
||||
const pkg = await AllPackages.readSingle(name);
|
||||
const version = await getLatestTypingVersion(pkg);
|
||||
await updateTypeScriptVersionTags(pkg, version, publishClient, consoleLogger.info, dry);
|
||||
await updateLatestTag(pkg.fullNpmName, version, publishClient, consoleLogger.info, dry);
|
||||
} else {
|
||||
await nAtATime(10, await AllPackages.readLatestTypings(), async (pkg) => {
|
||||
// Only update tags for the latest version of the package.
|
||||
const version = await getLatestTypingVersion(pkg);
|
||||
await withNpmCache(new UncachedNpmInfoClient(), async (infoClient) => {
|
||||
if (name) {
|
||||
const pkg = await AllPackages.readSingle(name);
|
||||
const version = await getLatestTypingVersion(pkg, infoClient);
|
||||
await updateTypeScriptVersionTags(pkg, version, publishClient, consoleLogger.info, dry);
|
||||
await updateLatestTag(pkg.fullNpmName, version, publishClient, consoleLogger.info, dry);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
await nAtATime(10, await AllPackages.readLatestTypings(), async (pkg) => {
|
||||
// Only update tags for the latest version of the package.
|
||||
const version = await getLatestTypingVersion(pkg, infoClient);
|
||||
await updateTypeScriptVersionTags(pkg, version, publishClient, consoleLogger.info, dry);
|
||||
await updateLatestTag(pkg.fullNpmName, version, publishClient, consoleLogger.info, dry);
|
||||
});
|
||||
}
|
||||
});
|
||||
// Don't tag notNeeded packages
|
||||
}
|
||||
|
||||
@@ -109,44 +114,45 @@ export async function updateLatestTag(
|
||||
}
|
||||
}
|
||||
|
||||
export async function getLatestTypingVersion(pkg: TypingsData): Promise<string> {
|
||||
return (await fetchTypesPackageVersionInfo(pkg, /*publish*/ false)).version;
|
||||
export async function getLatestTypingVersion(pkg: TypingsData, client: CachedNpmInfoClient): Promise<string> {
|
||||
return (await fetchTypesPackageVersionInfo(pkg, client, /*publish*/ false)).version;
|
||||
}
|
||||
|
||||
export async function fetchTypesPackageVersionInfo(
|
||||
pkg: TypingsData,
|
||||
client: CachedNpmInfoClient,
|
||||
canPublish: boolean,
|
||||
log?: LoggerWithErrors
|
||||
): Promise<{ version: string; needsPublish: boolean }> {
|
||||
const spec = `${pkg.fullNpmName}@~${pkg.major}.${pkg.minor}`;
|
||||
let info = await pacote
|
||||
.manifest(spec, { cache: defaultCacheDir, fullMetadata: true, offline: true })
|
||||
.catch((reason) => {
|
||||
if (reason.code !== "ENOTCACHED" && reason.code !== "ETARGET") throw reason;
|
||||
return undefined;
|
||||
});
|
||||
if (!info || info.typesPublisherContentHash !== pkg.contentHash) {
|
||||
let info = client.getNpmInfoFromCache(pkg.fullEscapedNpmName);
|
||||
let latestVersion = info && getHighestVersionForMajor(info.versions, pkg);
|
||||
let latestVersionInfo = latestVersion && assertDefined(info!.versions.get(latestVersion));
|
||||
if (!latestVersionInfo || latestVersionInfo.typesPublisherContentHash !== pkg.contentHash) {
|
||||
if (log) {
|
||||
log.info(`Version info not cached for ${pkg.desc}@${info ? info.version : "(no latest version)"}`);
|
||||
log.info(`Version info not cached for ${pkg.desc}@${latestVersion || "(no latest version)"}`);
|
||||
}
|
||||
info = await pacote
|
||||
.manifest(spec, { cache: defaultCacheDir, fullMetadata: true, preferOnline: true })
|
||||
.catch((reason) => {
|
||||
if (reason.code !== "E404" && reason.code !== "ETARGET") throw reason;
|
||||
return undefined;
|
||||
});
|
||||
if (!info) {
|
||||
info = await client.fetchAndCacheNpmInfo(pkg.fullEscapedNpmName);
|
||||
latestVersion = info && getHighestVersionForMajor(info.versions, pkg);
|
||||
if (!latestVersion) {
|
||||
return { version: `${pkg.major}.${pkg.minor}.0`, needsPublish: true };
|
||||
}
|
||||
latestVersionInfo = assertDefined(info!.versions.get(latestVersion));
|
||||
}
|
||||
|
||||
if (info.deprecated) {
|
||||
if (latestVersionInfo.deprecated) {
|
||||
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/22306
|
||||
assert(
|
||||
pkg.name === "angular-ui-router" || pkg.name === "ui-router-extras",
|
||||
`Package ${pkg.name} has been deprecated, so we shouldn't have parsed it. Was it re-added?`
|
||||
);
|
||||
}
|
||||
const needsPublish = canPublish && pkg.contentHash !== info.typesPublisherContentHash;
|
||||
return { version: needsPublish ? semver.inc(info.version, "patch")! : info.version, needsPublish };
|
||||
const needsPublish = canPublish && pkg.contentHash !== latestVersionInfo.typesPublisherContentHash;
|
||||
return { version: needsPublish ? semver.inc(latestVersion!, "patch")! : latestVersion!, needsPublish };
|
||||
}
|
||||
|
||||
function getHighestVersionForMajor(
|
||||
versions: ReadonlyMap<string, NpmInfoVersion>,
|
||||
{ major, minor }: TypingsData
|
||||
): string | null {
|
||||
return semver.maxSatisfying([...versions.keys()], `~${major}.${minor}`);
|
||||
}
|
||||
|
||||
@@ -185,6 +185,26 @@ export function sortObjectKeys<T extends { [key: string]: unknown }>(data: T): T
|
||||
return out;
|
||||
}
|
||||
|
||||
export function recordToMap<T>(record: Record<string, T>): Map<string, T>;
|
||||
export function recordToMap<T, U>(record: Record<string, T>, cb: (t: T) => U): Map<string, U>;
|
||||
export function recordToMap<T, U>(record: Record<string, T>, cb?: (t: T) => U): Map<string, T | U> {
|
||||
const m = new Map<string, T | U>();
|
||||
for (const key of Object.keys(record)) {
|
||||
m.set(key, cb ? cb(record[key]) : record[key]);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
export function mapToRecord<T>(map: Map<string, T>): Record<string, T>;
|
||||
export function mapToRecord<T, U>(map: Map<string, T>, cb: (t: T) => U): Record<string, U>;
|
||||
export function mapToRecord<T, U>(map: Map<string, T>, cb?: (t: T) => U): Record<string, T | U> {
|
||||
const o: Record<string, T | U> = {};
|
||||
map.forEach((value, key) => {
|
||||
o[key] = cb ? cb(value) : value;
|
||||
});
|
||||
return o;
|
||||
}
|
||||
|
||||
export function min<T>(array: readonly [T, ...(T | undefined)[]]): T;
|
||||
export function min<T>(array: readonly T[], compare?: (a: T, b: T) => number): T | undefined;
|
||||
export function min<T>(array: readonly T[], compare?: (a: T, b: T) => number) {
|
||||
|
||||
@@ -1,14 +1,157 @@
|
||||
import { readFile } from "fs-extra";
|
||||
import assert = require("assert");
|
||||
import { ensureFile, pathExists, readJson, writeJson, readFile } from "fs-extra";
|
||||
import RegClient from "@qiwi/npm-registry-client";
|
||||
import { resolve as resolveUrl } from "url";
|
||||
import { joinPaths } from "./fs";
|
||||
import { Logger } from "./logging";
|
||||
import { createTgz } from "./io";
|
||||
import { loggerWithErrors, Logger } from "./logging";
|
||||
import { mapToRecord, recordToMap } from "./collections";
|
||||
import { Fetcher, createTgz } from "./io";
|
||||
import { sleep, identity } from "./miscellany";
|
||||
|
||||
export const npmRegistryHostName = "registry.npmjs.org";
|
||||
export const npmRegistry = `https://${npmRegistryHostName}/`;
|
||||
export const npmApi = "api.npmjs.org";
|
||||
|
||||
export const defaultCacheDir = joinPaths(__dirname, "..", "cache");
|
||||
const defaultCacheDir = joinPaths(__dirname, "..", "cache");
|
||||
const cacheFileBasename = "npmInfo.json";
|
||||
|
||||
export type NpmInfoCache = ReadonlyMap<string, NpmInfo>;
|
||||
|
||||
export interface NpmInfoRaw {
|
||||
readonly "dist-tags": {
|
||||
readonly [tag: string]: string;
|
||||
};
|
||||
readonly versions: NpmInfoRawVersions;
|
||||
readonly time: {
|
||||
readonly [s: string]: string;
|
||||
};
|
||||
readonly homepage: string;
|
||||
}
|
||||
export interface NpmInfoRawVersions {
|
||||
readonly [version: string]: NpmInfoVersion;
|
||||
}
|
||||
|
||||
// Processed npm info. Intentially kept small so it can be cached.
|
||||
export interface NpmInfo {
|
||||
readonly distTags: Map<string, string>;
|
||||
readonly versions: Map<string, NpmInfoVersion>;
|
||||
readonly time: Map<string, string>;
|
||||
readonly homepage: string;
|
||||
}
|
||||
export interface NpmInfoVersion {
|
||||
readonly typesPublisherContentHash?: string;
|
||||
readonly deprecated?: string;
|
||||
}
|
||||
|
||||
export interface CachedNpmInfoClient {
|
||||
getNpmInfoFromCache(escapedPackageName: string): NpmInfo | undefined;
|
||||
fetchAndCacheNpmInfo(escapedPackageName: string): Promise<NpmInfo | undefined>;
|
||||
}
|
||||
|
||||
export async function withNpmCache<T>(
|
||||
uncachedClient: UncachedNpmInfoClient,
|
||||
cb: (client: CachedNpmInfoClient) => Promise<T>,
|
||||
cacheDir = defaultCacheDir
|
||||
): Promise<T> {
|
||||
const log = loggerWithErrors()[0];
|
||||
const cacheFile = joinPaths(cacheDir, cacheFileBasename);
|
||||
let unroll: Map<string, NpmInfo>;
|
||||
log.info(`Checking for cache file at ${cacheFile}...`);
|
||||
const cacheFileExists = await pathExists(cacheFile);
|
||||
if (cacheFileExists) {
|
||||
log.info("Reading cache file...");
|
||||
const cachedJson = (await readJson(cacheFile)) as Record<string, NpmInfoRaw>;
|
||||
log.info(`Cache file ${cacheFile} exists, copying to map...`);
|
||||
unroll = recordToMap(cachedJson, npmInfoFromJson);
|
||||
} else {
|
||||
log.info("Cache file doesn't exist, using empty map.");
|
||||
unroll = new Map();
|
||||
}
|
||||
|
||||
const res = await cb({ getNpmInfoFromCache, fetchAndCacheNpmInfo });
|
||||
log.info("Writing npm cache.");
|
||||
await ensureFile(cacheFile);
|
||||
await writeJson(cacheFile, mapToRecord(unroll, jsonFromNpmInfo));
|
||||
return res;
|
||||
|
||||
/** May return old info -- caller should check that this looks up-to-date. */
|
||||
function getNpmInfoFromCache(escapedPackageName: string): NpmInfo | undefined {
|
||||
return unroll.get(escapedPackageName);
|
||||
}
|
||||
|
||||
/** Call this when the result of getNpmInfoFromCache looks potentially out-of-date. */
|
||||
async function fetchAndCacheNpmInfo(escapedPackageName: string): Promise<NpmInfo | undefined> {
|
||||
const info = await uncachedClient.fetchNpmInfo(escapedPackageName);
|
||||
if (info) {
|
||||
unroll.set(escapedPackageName, info);
|
||||
}
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
export class UncachedNpmInfoClient {
|
||||
private readonly fetcher = new Fetcher();
|
||||
|
||||
async fetchNpmInfo(escapedPackageName: string): Promise<NpmInfo | undefined> {
|
||||
const raw = await this.fetchRawNpmInfo(escapedPackageName);
|
||||
await sleep(0.01); // If we don't do this, npm resets the connection?
|
||||
return raw === undefined ? undefined : npmInfoFromJson(raw);
|
||||
}
|
||||
|
||||
async fetchRawNpmInfo(escapedPackageName: string): Promise<NpmInfoRaw | undefined> {
|
||||
const info = (await this.fetcher.fetchJson({
|
||||
hostname: npmRegistryHostName,
|
||||
path: escapedPackageName,
|
||||
retries: true,
|
||||
})) as { readonly error: string } | NpmInfoRaw;
|
||||
if ("error" in info) {
|
||||
if (info.error === "Not found") {
|
||||
return undefined;
|
||||
}
|
||||
throw new Error(`Error getting version at ${escapedPackageName}: ${info.error}`);
|
||||
}
|
||||
if (!info["dist-tags"] && !info.versions) {
|
||||
// Unpublished
|
||||
return undefined;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
// See https://github.com/npm/download-counts
|
||||
async getDownloads(packageNames: readonly string[]): Promise<readonly number[]> {
|
||||
// NPM uses a different API if there's only a single name, so ensure there's at least 2 for every batch of 128.
|
||||
const names = packageNames.length % 128 === 1 ? [...packageNames, "dummy"] : packageNames;
|
||||
const nameGroups = Array.from(splitToFixedSizeGroups(names, 128)); // NPM has a limit of 128 packages at a time.
|
||||
|
||||
const out: number[] = [];
|
||||
for (const nameGroup of nameGroups) {
|
||||
const data = (await this.fetcher.fetchJson({
|
||||
hostname: npmApi,
|
||||
path: `/downloads/point/last-month/${nameGroup.join(",")}`,
|
||||
retries: true,
|
||||
})) as { readonly error: string } | { readonly [key: string]: { readonly downloads: number } };
|
||||
if ("error" in data) {
|
||||
throw new Error(data.error as string);
|
||||
}
|
||||
for (const key of Object.keys(data)) {
|
||||
assert(
|
||||
key === names[out.length],
|
||||
`at index ${out.length} of ${Object.keys(data).toString()} : ${key} !== ${names[out.length]}`
|
||||
);
|
||||
out.push(data[key] ? data[key].downloads : 0);
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
function splitToFixedSizeGroups(names: readonly string[], chunkSize: number): readonly (readonly string[])[] {
|
||||
const out: string[][] = [];
|
||||
for (let i = 0; i < names.length; i += chunkSize) {
|
||||
out.push(names.slice(i, i + chunkSize));
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
type NeedToFixNpmRegistryClientTypings = any;
|
||||
|
||||
@@ -62,7 +205,7 @@ export class NpmPublishClient {
|
||||
}
|
||||
|
||||
deprecate(packageName: string, version: string, message: string): Promise<void> {
|
||||
const url = resolveUrl(npmRegistry, packageName);
|
||||
const url = resolveUrl(npmRegistry, packageName.replace("/", "%2f"));
|
||||
const params = {
|
||||
message,
|
||||
version,
|
||||
@@ -74,6 +217,28 @@ export class NpmPublishClient {
|
||||
}
|
||||
}
|
||||
|
||||
function npmInfoFromJson(n: NpmInfoRaw): NpmInfo {
|
||||
return {
|
||||
...n,
|
||||
distTags: recordToMap(n["dist-tags"], identity),
|
||||
// Callback ensures we remove any other properties
|
||||
versions: recordToMap(n.versions, ({ typesPublisherContentHash, deprecated }) => ({
|
||||
typesPublisherContentHash,
|
||||
deprecated,
|
||||
})),
|
||||
time: recordToMap(n.time),
|
||||
};
|
||||
}
|
||||
|
||||
function jsonFromNpmInfo(n: NpmInfo): NpmInfoRaw {
|
||||
return {
|
||||
...n,
|
||||
"dist-tags": mapToRecord(n.distTags),
|
||||
versions: mapToRecord(n.versions),
|
||||
time: mapToRecord(n.time),
|
||||
};
|
||||
}
|
||||
|
||||
function promisifyVoid(callsBack: (cb: (error: Error | undefined) => void) => void): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
callsBack((error) => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2019",
|
||||
"target": "es2018",
|
||||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
@@ -13,7 +13,6 @@
|
||||
"allowUnreachableCode": false,
|
||||
"allowUnusedLabels": false,
|
||||
"composite": true,
|
||||
"types": ["node"],
|
||||
"lib": ["es2022"]
|
||||
"types": ["node"]
|
||||
}
|
||||
}
|
||||
|
||||
517
yarn.lock
517
yarn.lock
@@ -481,11 +481,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
|
||||
integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
|
||||
|
||||
"@gar/promisify@^1.1.3":
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
|
||||
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
|
||||
|
||||
"@humanwhocodes/config-array@^0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
|
||||
@@ -1393,14 +1388,6 @@
|
||||
"@gar/promisify" "^1.0.1"
|
||||
semver "^7.3.5"
|
||||
|
||||
"@npmcli/fs@^2.1.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109"
|
||||
integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==
|
||||
dependencies:
|
||||
"@gar/promisify" "^1.1.3"
|
||||
semver "^7.3.5"
|
||||
|
||||
"@npmcli/git@^2.1.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6"
|
||||
@@ -1415,22 +1402,7 @@
|
||||
semver "^7.3.5"
|
||||
which "^2.0.2"
|
||||
|
||||
"@npmcli/git@^3.0.0":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d"
|
||||
integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==
|
||||
dependencies:
|
||||
"@npmcli/promise-spawn" "^3.0.0"
|
||||
lru-cache "^7.4.4"
|
||||
mkdirp "^1.0.4"
|
||||
npm-pick-manifest "^7.0.0"
|
||||
proc-log "^2.0.0"
|
||||
promise-inflight "^1.0.1"
|
||||
promise-retry "^2.0.1"
|
||||
semver "^7.3.5"
|
||||
which "^2.0.2"
|
||||
|
||||
"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7":
|
||||
"@npmcli/installed-package-contents@^1.0.6":
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa"
|
||||
integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==
|
||||
@@ -1446,24 +1418,11 @@
|
||||
mkdirp "^1.0.4"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
"@npmcli/move-file@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02"
|
||||
integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==
|
||||
dependencies:
|
||||
mkdirp "^1.0.4"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
"@npmcli/node-gyp@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede"
|
||||
integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==
|
||||
|
||||
"@npmcli/node-gyp@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35"
|
||||
integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==
|
||||
|
||||
"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2":
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5"
|
||||
@@ -1471,13 +1430,6 @@
|
||||
dependencies:
|
||||
infer-owner "^1.0.4"
|
||||
|
||||
"@npmcli/promise-spawn@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573"
|
||||
integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==
|
||||
dependencies:
|
||||
infer-owner "^1.0.4"
|
||||
|
||||
"@npmcli/run-script@^1.8.2":
|
||||
version "1.8.6"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7"
|
||||
@@ -1488,16 +1440,6 @@
|
||||
node-gyp "^7.1.0"
|
||||
read-package-json-fast "^2.0.1"
|
||||
|
||||
"@npmcli/run-script@^3.0.1":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58"
|
||||
integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==
|
||||
dependencies:
|
||||
"@npmcli/node-gyp" "^2.0.0"
|
||||
"@npmcli/promise-spawn" "^3.0.0"
|
||||
node-gyp "^8.4.1"
|
||||
read-package-json-fast "^2.0.3"
|
||||
|
||||
"@octokit/auth-token@^2.4.0":
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f"
|
||||
@@ -1728,11 +1670,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
|
||||
|
||||
"@tootallnate/once@2":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
|
||||
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
|
||||
|
||||
"@types/babel__core@^7.1.7":
|
||||
version "7.1.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89"
|
||||
@@ -1879,14 +1816,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node-fetch@*":
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975"
|
||||
integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
form-data "^3.0.0"
|
||||
|
||||
"@types/node-fetch@^2.5.0":
|
||||
version "2.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"
|
||||
@@ -1925,27 +1854,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
|
||||
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
|
||||
|
||||
"@types/npm-package-arg@*":
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/npm-package-arg/-/npm-package-arg-6.1.1.tgz#9e2d8adc04d39824a3d9f36f738010a3f7da3c1a"
|
||||
integrity sha512-452/1Kp9IdM/oR10AyqAgZOxUt7eLbm+EMJ194L6oarMYdZNiFIFAOJ7IIr0OrZXTySgfHjJezh2oiyk2kc3ag==
|
||||
|
||||
"@types/npm-registry-fetch@*":
|
||||
version "8.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/npm-registry-fetch/-/npm-registry-fetch-8.0.4.tgz#77b2737cde22314ccda1dfdb9568fd7769e95b90"
|
||||
integrity sha512-R9yEj6+NDmXLpKNS19cIaMyaHfV0aHjy/1qbo8K9jiHyjyaYg0CEmuOV/L0Q91DZDi3SuxlYY+2XYwh9TbB+eQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/node-fetch" "*"
|
||||
"@types/npm-package-arg" "*"
|
||||
"@types/npmlog" "*"
|
||||
"@types/ssri" "*"
|
||||
|
||||
"@types/npmlog@*":
|
||||
version "4.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.4.tgz#30eb872153c7ead3e8688c476054ddca004115f6"
|
||||
integrity sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==
|
||||
|
||||
"@types/oboe@^2.0.28":
|
||||
version "2.0.28"
|
||||
resolved "https://registry.yarnpkg.com/@types/oboe/-/oboe-2.0.28.tgz#3afcb0cc949fcdf777861d96e8571f3b486f0fa7"
|
||||
@@ -1953,16 +1861,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/pacote@^11.1.4":
|
||||
version "11.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/pacote/-/pacote-11.1.4.tgz#d7aeb508ce238d4750f21d82269257f9c5cdafc9"
|
||||
integrity sha512-wWZOztJ/Msh8MqbKr2ESQ6WPRv4BF+OPC4nri3W4UKl/1P5Hdul+IvN5Up7FPIK0XhUAOTCz+1QZoyi9PKGx+w==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/npm-registry-fetch" "*"
|
||||
"@types/npmlog" "*"
|
||||
"@types/ssri" "*"
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
|
||||
@@ -1998,13 +1896,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/ssri@*":
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/ssri/-/ssri-7.1.1.tgz#2a2c94abf0d3a8c3b07bb4ff08142dd571407bb5"
|
||||
integrity sha512-DPP/jkDaqGiyU75MyMURxLWyYLwKSjnAuGe9ZCsLp9QZOpXmDfuevk769F0BS86TmRuD5krnp06qw9nSoNO+0g==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/stack-utils@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
||||
@@ -2218,15 +2109,6 @@ agentkeepalive@^4.1.3:
|
||||
depd "^1.1.2"
|
||||
humanize-ms "^1.2.1"
|
||||
|
||||
agentkeepalive@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717"
|
||||
integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==
|
||||
dependencies:
|
||||
debug "^4.1.0"
|
||||
depd "^1.1.2"
|
||||
humanize-ms "^1.2.1"
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||
@@ -2337,19 +2219,11 @@ aproba@^1.0.3:
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
||||
"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0:
|
||||
aproba@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
|
||||
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
|
||||
|
||||
are-we-there-yet@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d"
|
||||
integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||
@@ -2643,13 +2517,6 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
brace-expansion@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
|
||||
braces@^2.3.1:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
|
||||
@@ -2732,13 +2599,6 @@ builtins@^1.0.3:
|
||||
resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
|
||||
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
|
||||
|
||||
builtins@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
|
||||
integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==
|
||||
dependencies:
|
||||
semver "^7.0.0"
|
||||
|
||||
byline@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
|
||||
@@ -2773,30 +2633,6 @@ cacache@^15.0.5, cacache@^15.2.0:
|
||||
tar "^6.0.2"
|
||||
unique-filename "^1.1.1"
|
||||
|
||||
cacache@^16.0.0, cacache@^16.1.0:
|
||||
version "16.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.0.tgz#87a6bae558a511c9cb2a13768073e240ca76153a"
|
||||
integrity sha512-Pk4aQkwCW82A4jGKFvcGkQFqZcMspfP9YWq9Pr87/ldDvlWf718zeI6KWCdKt/jeihu6BytHRUicJPB1K2k8EQ==
|
||||
dependencies:
|
||||
"@npmcli/fs" "^2.1.0"
|
||||
"@npmcli/move-file" "^2.0.0"
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.1.0"
|
||||
glob "^8.0.1"
|
||||
infer-owner "^1.0.4"
|
||||
lru-cache "^7.7.1"
|
||||
minipass "^3.1.6"
|
||||
minipass-collect "^1.0.2"
|
||||
minipass-flush "^1.0.5"
|
||||
minipass-pipeline "^1.2.4"
|
||||
mkdirp "^1.0.4"
|
||||
p-map "^4.0.0"
|
||||
promise-inflight "^1.0.1"
|
||||
rimraf "^3.0.2"
|
||||
ssri "^9.0.0"
|
||||
tar "^6.1.11"
|
||||
unique-filename "^1.1.1"
|
||||
|
||||
cache-base@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
||||
@@ -3036,11 +2872,6 @@ color-name@~1.1.4:
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
color-support@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
|
||||
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
|
||||
|
||||
columnify@^1.5.4:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
|
||||
@@ -3107,7 +2938,7 @@ config-chain@^1.1.12:
|
||||
ini "^1.3.4"
|
||||
proto-list "~1.2.1"
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
|
||||
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
@@ -3330,13 +3161,6 @@ debug@^4.1.0:
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.3.3:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debuglog@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
|
||||
@@ -3577,7 +3401,7 @@ emoji-regex@^8.0.0:
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
encoding@^0.1.12, encoding@^0.1.13:
|
||||
encoding@^0.1.12:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
|
||||
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
|
||||
@@ -4231,20 +4055,6 @@ functional-red-black-tree@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
|
||||
|
||||
gauge@^4.0.3:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
|
||||
integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
|
||||
dependencies:
|
||||
aproba "^1.0.3 || ^2.0.0"
|
||||
color-support "^1.1.3"
|
||||
console-control-strings "^1.1.0"
|
||||
has-unicode "^2.0.1"
|
||||
signal-exit "^3.0.7"
|
||||
string-width "^4.2.3"
|
||||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
@@ -4409,17 +4219,6 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^8.0.1:
|
||||
version "8.0.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e"
|
||||
integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^5.0.1"
|
||||
once "^1.3.0"
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
@@ -4459,11 +4258,6 @@ graceful-fs@^4.2.3:
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
|
||||
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
|
||||
|
||||
graceful-fs@^4.2.6:
|
||||
version "4.2.10"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
||||
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
|
||||
|
||||
growly@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
|
||||
@@ -4588,13 +4382,6 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1:
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
hosted-git-info@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56"
|
||||
integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==
|
||||
dependencies:
|
||||
lru-cache "^7.5.1"
|
||||
|
||||
html-encoding-sniffer@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
|
||||
@@ -4626,15 +4413,6 @@ http-proxy-agent@^4.0.1:
|
||||
agent-base "6"
|
||||
debug "4"
|
||||
|
||||
http-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
|
||||
integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
|
||||
dependencies:
|
||||
"@tootallnate/once" "2"
|
||||
agent-base "6"
|
||||
debug "4"
|
||||
|
||||
http-signature@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||
@@ -4695,13 +4473,6 @@ ignore-walk@^3.0.3:
|
||||
dependencies:
|
||||
minimatch "^3.0.4"
|
||||
|
||||
ignore-walk@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776"
|
||||
integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==
|
||||
dependencies:
|
||||
minimatch "^5.0.1"
|
||||
|
||||
ignore@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||
@@ -4865,13 +4636,6 @@ is-core-module@^2.5.0:
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-core-module@^2.8.1:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
|
||||
integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-data-descriptor@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
|
||||
@@ -5605,7 +5369,7 @@ json-parse-better-errors@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
|
||||
|
||||
json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
|
||||
json-parse-even-better-errors@^2.3.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
|
||||
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
|
||||
@@ -6011,11 +5775,6 @@ lru-cache@^6.0.0:
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
|
||||
version "7.10.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab"
|
||||
integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==
|
||||
|
||||
macos-release@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
|
||||
@@ -6041,28 +5800,6 @@ make-error@1.x:
|
||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
make-fetch-happen@^10.0.6:
|
||||
version "10.1.6"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.6.tgz#22b3ac3b077a7cfa80525af12e637e349f21d26e"
|
||||
integrity sha512-/iKDlRQF0fkxyB/w/duW2yRYrGwBcbJjC37ijgi0CmOZ32bzMc86BCSSAHWvuyRFCB408iBPziTSzazBSrKo3w==
|
||||
dependencies:
|
||||
agentkeepalive "^4.2.1"
|
||||
cacache "^16.1.0"
|
||||
http-cache-semantics "^4.1.0"
|
||||
http-proxy-agent "^5.0.0"
|
||||
https-proxy-agent "^5.0.0"
|
||||
is-lambda "^1.0.1"
|
||||
lru-cache "^7.7.1"
|
||||
minipass "^3.1.6"
|
||||
minipass-collect "^1.0.2"
|
||||
minipass-fetch "^2.0.3"
|
||||
minipass-flush "^1.0.5"
|
||||
minipass-pipeline "^1.2.4"
|
||||
negotiator "^0.6.3"
|
||||
promise-retry "^2.0.1"
|
||||
socks-proxy-agent "^6.1.1"
|
||||
ssri "^9.0.0"
|
||||
|
||||
make-fetch-happen@^8.0.9:
|
||||
version "8.0.14"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222"
|
||||
@@ -6084,7 +5821,7 @@ make-fetch-happen@^8.0.9:
|
||||
socks-proxy-agent "^5.0.0"
|
||||
ssri "^8.0.0"
|
||||
|
||||
make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0:
|
||||
make-fetch-happen@^9.0.1:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
|
||||
integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
|
||||
@@ -6228,13 +5965,6 @@ minimatch@^3.0.4:
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^5.0.1:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7"
|
||||
integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==
|
||||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
minimist-options@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
|
||||
@@ -6267,17 +5997,6 @@ minipass-fetch@^1.3.0, minipass-fetch@^1.3.2:
|
||||
optionalDependencies:
|
||||
encoding "^0.1.12"
|
||||
|
||||
minipass-fetch@^2.0.3:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8"
|
||||
integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==
|
||||
dependencies:
|
||||
minipass "^3.1.6"
|
||||
minipass-sized "^1.0.3"
|
||||
minizlib "^2.1.2"
|
||||
optionalDependencies:
|
||||
encoding "^0.1.13"
|
||||
|
||||
minipass-flush@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
|
||||
@@ -6322,13 +6041,6 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minipass@^3.1.6:
|
||||
version "3.1.6"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
|
||||
integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minizlib@^1.2.1:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
|
||||
@@ -6336,7 +6048,7 @@ minizlib@^1.2.1:
|
||||
dependencies:
|
||||
minipass "^2.9.0"
|
||||
|
||||
minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2:
|
||||
minizlib@^2.0.0, minizlib@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
||||
@@ -6453,11 +6165,6 @@ negotiator@^0.6.2:
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
|
||||
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
||||
|
||||
negotiator@^0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
|
||||
|
||||
neo-async@^2.6.0:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||
@@ -6520,22 +6227,6 @@ node-gyp@^7.1.0:
|
||||
tar "^6.0.2"
|
||||
which "^2.0.2"
|
||||
|
||||
node-gyp@^8.4.1:
|
||||
version "8.4.1"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
|
||||
integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.6"
|
||||
make-fetch-happen "^9.1.0"
|
||||
nopt "^5.0.0"
|
||||
npmlog "^6.0.0"
|
||||
rimraf "^3.0.2"
|
||||
semver "^7.3.5"
|
||||
tar "^6.1.2"
|
||||
which "^2.0.2"
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
|
||||
@@ -6592,16 +6283,6 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2, "normalize-package
|
||||
semver "^7.3.4"
|
||||
validate-npm-package-license "^3.0.1"
|
||||
|
||||
normalize-package-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c"
|
||||
integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==
|
||||
dependencies:
|
||||
hosted-git-info "^5.0.0"
|
||||
is-core-module "^2.8.1"
|
||||
semver "^7.3.5"
|
||||
validate-npm-package-license "^3.0.4"
|
||||
|
||||
normalize-path@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
|
||||
@@ -6619,7 +6300,7 @@ normalize-url@^3.3.0:
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
|
||||
integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
|
||||
|
||||
npm-bundled@^1.1.1, npm-bundled@^1.1.2:
|
||||
npm-bundled@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
|
||||
integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
|
||||
@@ -6633,13 +6314,6 @@ npm-install-checks@^4.0.0:
|
||||
dependencies:
|
||||
semver "^7.1.1"
|
||||
|
||||
npm-install-checks@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234"
|
||||
integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==
|
||||
dependencies:
|
||||
semver "^7.1.1"
|
||||
|
||||
npm-lifecycle@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309"
|
||||
@@ -6668,15 +6342,6 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
|
||||
semver "^7.3.4"
|
||||
validate-npm-package-name "^3.0.0"
|
||||
|
||||
npm-package-arg@^9.0.0, npm-package-arg@^9.0.1:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.0.2.tgz#f3ef7b1b3b02e82564af2d5228b4c36567dcd389"
|
||||
integrity sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==
|
||||
dependencies:
|
||||
hosted-git-info "^5.0.0"
|
||||
semver "^7.3.5"
|
||||
validate-npm-package-name "^4.0.0"
|
||||
|
||||
npm-packlist@^2.1.4:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8"
|
||||
@@ -6687,16 +6352,6 @@ npm-packlist@^2.1.4:
|
||||
npm-bundled "^1.1.1"
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
|
||||
npm-packlist@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.0.tgz#f3fd52903a021009913a133732022132eb355ce7"
|
||||
integrity sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==
|
||||
dependencies:
|
||||
glob "^8.0.1"
|
||||
ignore-walk "^5.0.1"
|
||||
npm-bundled "^1.1.2"
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
|
||||
npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148"
|
||||
@@ -6707,16 +6362,6 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1:
|
||||
npm-package-arg "^8.1.2"
|
||||
semver "^7.3.4"
|
||||
|
||||
npm-pick-manifest@^7.0.0:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c"
|
||||
integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==
|
||||
dependencies:
|
||||
npm-install-checks "^5.0.0"
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
npm-package-arg "^9.0.0"
|
||||
semver "^7.3.5"
|
||||
|
||||
npm-registry-fetch@^11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76"
|
||||
@@ -6729,19 +6374,6 @@ npm-registry-fetch@^11.0.0:
|
||||
minizlib "^2.0.0"
|
||||
npm-package-arg "^8.0.0"
|
||||
|
||||
npm-registry-fetch@^13.0.1:
|
||||
version "13.1.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b"
|
||||
integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==
|
||||
dependencies:
|
||||
make-fetch-happen "^10.0.6"
|
||||
minipass "^3.1.6"
|
||||
minipass-fetch "^2.0.3"
|
||||
minipass-json-stream "^1.0.1"
|
||||
minizlib "^2.1.2"
|
||||
npm-package-arg "^9.0.1"
|
||||
proc-log "^2.0.0"
|
||||
|
||||
npm-registry-fetch@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661"
|
||||
@@ -6780,16 +6412,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
npmlog@^6.0.0:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
|
||||
integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
|
||||
dependencies:
|
||||
are-we-there-yet "^3.0.0"
|
||||
console-control-strings "^1.1.0"
|
||||
gauge "^4.0.3"
|
||||
set-blocking "^2.0.0"
|
||||
|
||||
number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
@@ -7088,33 +6710,6 @@ pacote@^11.2.6:
|
||||
ssri "^8.0.1"
|
||||
tar "^6.1.0"
|
||||
|
||||
pacote@^13.6.0:
|
||||
version "13.6.0"
|
||||
resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.0.tgz#79ea3d3ae5a2b29e2994dcf18d75494e8d888032"
|
||||
integrity sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg==
|
||||
dependencies:
|
||||
"@npmcli/git" "^3.0.0"
|
||||
"@npmcli/installed-package-contents" "^1.0.7"
|
||||
"@npmcli/promise-spawn" "^3.0.0"
|
||||
"@npmcli/run-script" "^3.0.1"
|
||||
cacache "^16.0.0"
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.1.0"
|
||||
infer-owner "^1.0.4"
|
||||
minipass "^3.1.6"
|
||||
mkdirp "^1.0.4"
|
||||
npm-package-arg "^9.0.0"
|
||||
npm-packlist "^5.1.0"
|
||||
npm-pick-manifest "^7.0.0"
|
||||
npm-registry-fetch "^13.0.1"
|
||||
proc-log "^2.0.0"
|
||||
promise-retry "^2.0.1"
|
||||
read-package-json "^5.0.0"
|
||||
read-package-json-fast "^2.0.3"
|
||||
rimraf "^3.0.2"
|
||||
ssri "^9.0.0"
|
||||
tar "^6.1.11"
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
@@ -7332,11 +6927,6 @@ pretty-format@^25.2.1, pretty-format@^25.5.0:
|
||||
ansi-styles "^4.0.0"
|
||||
react-is "^16.12.0"
|
||||
|
||||
proc-log@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685"
|
||||
integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
@@ -7455,7 +7045,7 @@ read-cmd-shim@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9"
|
||||
integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==
|
||||
|
||||
read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.3:
|
||||
read-package-json-fast@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83"
|
||||
integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==
|
||||
@@ -7495,16 +7085,6 @@ read-package-json@^4.1.1:
|
||||
normalize-package-data "^3.0.0"
|
||||
npm-normalize-package-bin "^1.0.0"
|
||||
|
||||
read-package-json@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26"
|
||||
integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==
|
||||
dependencies:
|
||||
glob "^8.0.1"
|
||||
json-parse-even-better-errors "^2.3.1"
|
||||
normalize-package-data "^4.0.0"
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
|
||||
read-package-tree@^5.3.1:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636"
|
||||
@@ -7557,7 +7137,7 @@ read@1, read@~1.0.1:
|
||||
dependencies:
|
||||
mute-stream "~0.0.4"
|
||||
|
||||
readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||
readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||
@@ -7861,7 +7441,7 @@ semver@6.x, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.0.0, semver@^7.3.7:
|
||||
semver@^7.3.7:
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
|
||||
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
|
||||
@@ -7938,11 +7518,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||
|
||||
signal-exit@^3.0.7:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
|
||||
simple-concat@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
|
||||
@@ -7986,11 +7561,6 @@ smart-buffer@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
|
||||
integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
|
||||
|
||||
smart-buffer@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
|
||||
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
|
||||
|
||||
snapdragon-node@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
||||
@@ -8039,15 +7609,6 @@ socks-proxy-agent@^6.0.0:
|
||||
debug "^4.3.1"
|
||||
socks "^2.6.1"
|
||||
|
||||
socks-proxy-agent@^6.1.1:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce"
|
||||
integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==
|
||||
dependencies:
|
||||
agent-base "^6.0.2"
|
||||
debug "^4.3.3"
|
||||
socks "^2.6.2"
|
||||
|
||||
socks@^2.3.3, socks@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
|
||||
@@ -8056,14 +7617,6 @@ socks@^2.3.3, socks@^2.6.1:
|
||||
ip "^1.1.5"
|
||||
smart-buffer "^4.1.0"
|
||||
|
||||
socks@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a"
|
||||
integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==
|
||||
dependencies:
|
||||
ip "^1.1.5"
|
||||
smart-buffer "^4.2.0"
|
||||
|
||||
sort-keys@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
|
||||
@@ -8198,13 +7751,6 @@ ssri@^8.0.0, ssri@^8.0.1:
|
||||
dependencies:
|
||||
minipass "^3.1.1"
|
||||
|
||||
ssri@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057"
|
||||
integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==
|
||||
dependencies:
|
||||
minipass "^3.1.1"
|
||||
|
||||
stack-chain@^1.3.7:
|
||||
version "1.3.7"
|
||||
resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285"
|
||||
@@ -8265,15 +7811,6 @@ string-width@^1.0.1:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^4.1.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
|
||||
@@ -8283,6 +7820,15 @@ string-width@^4.1.0:
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string.prototype.trimend@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
|
||||
@@ -8472,7 +8018,7 @@ tar@^4.4.12:
|
||||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.3"
|
||||
|
||||
tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2:
|
||||
tar@^6.0.2, tar@^6.1.0, tar@^6.1.11:
|
||||
version "6.1.11"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
|
||||
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
|
||||
@@ -8847,16 +8393,11 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typescript@^4.1.0:
|
||||
typescript@^4.1.0, typescript@^4.5.5:
|
||||
version "4.5.5"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
|
||||
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
|
||||
|
||||
typescript@^4.6.4:
|
||||
version "4.7.2"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.2.tgz#1f9aa2ceb9af87cca227813b4310fff0b51593c4"
|
||||
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
|
||||
|
||||
typescript@next:
|
||||
version "4.6.0-dev.20211126"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.0-dev.20211126.tgz#d27ce3a360dc4da1dcdebd80efe42b51afdeebdb"
|
||||
@@ -9026,13 +8567,6 @@ validate-npm-package-name@^3.0.0:
|
||||
dependencies:
|
||||
builtins "^1.0.3"
|
||||
|
||||
validate-npm-package-name@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747"
|
||||
integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==
|
||||
dependencies:
|
||||
builtins "^5.0.0"
|
||||
|
||||
verror@1.10.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
||||
@@ -9162,13 +8696,6 @@ wide-align@^1.1.0:
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
wide-align@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2 || 3 || 4"
|
||||
|
||||
windows-release@^3.1.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.0.tgz#dce167e9f8be733f21c849ebd4d03fe66b29b9f0"
|
||||
|
||||
Reference in New Issue
Block a user