




















@@ -51,6 +51,10 @@ function npmPackArchiveMetadataArgv(archivePath: string): string[] {
5151return ["npm", "pack", archivePath, "--ignore-scripts", "--dry-run", "--json"];
5252}
535354+function commandKey(argv: readonly string[]): string {
55+return argv.join("\0");
56+}
57+5458function resolveManagedFileDependency(npmRoot: string, dependencySpec: string): string | null {
5559if (!dependencySpec.startsWith("file:")) {
5660return null;
@@ -264,13 +268,23 @@ function mockNpmViewAndInstall(params: {
264268265269function mockNpmViewAndInstallMany(packages: MockNpmPackage[]) {
266270const packagesByName = new Map(packages.map((pkg) => [pkg.packageName, pkg]));
271+const packPackagesByArgv = new Map(
272+packages
273+.filter((pkg) => pkg.packArchivePath)
274+.map((pkg) => [commandKey(npmPackArchiveMetadataArgv(pkg.packArchivePath ?? "")), pkg]),
275+);
276+const viewPackagesByArgv = new Map(
277+packages.filter((pkg) => pkg.spec).map((pkg) => [commandKey(npmViewArgv(pkg.spec ?? "")), pkg]),
278+);
279+const versionsPackagesByArgv = new Map(
280+packages
281+.filter((pkg) => pkg.versions)
282+.map((pkg) => [commandKey(npmViewVersionsArgv(pkg.packageName)), pkg]),
283+);
267284runCommandWithTimeoutMock.mockImplementation(
268285async (argv: string[], options?: { cwd?: string }) => {
269-const packPackage = packages.find(
270-(pkg) =>
271-pkg.packArchivePath &&
272-JSON.stringify(argv) === JSON.stringify(npmPackArchiveMetadataArgv(pkg.packArchivePath)),
273-);
286+const argvKey = commandKey(argv);
287+const packPackage = packPackagesByArgv.get(argvKey);
274288if (packPackage) {
275289return successfulSpawn(
276290JSON.stringify([
@@ -287,9 +301,7 @@ function mockNpmViewAndInstallMany(packages: MockNpmPackage[]) {
287301]),
288302);
289303}
290-const viewPackage = packages.find(
291-(pkg) => pkg.spec && JSON.stringify(argv) === JSON.stringify(npmViewArgv(pkg.spec)),
292-);
304+const viewPackage = viewPackagesByArgv.get(argvKey);
293305if (viewPackage) {
294306return successfulSpawn(
295307JSON.stringify({
@@ -302,9 +314,7 @@ function mockNpmViewAndInstallMany(packages: MockNpmPackage[]) {
302314}),
303315);
304316}
305-const versionsPackage = packages.find(
306-(pkg) => JSON.stringify(argv) === JSON.stringify(npmViewVersionsArgv(pkg.packageName)),
307-);
317+const versionsPackage = versionsPackagesByArgv.get(argvKey);
308318if (versionsPackage) {
309319return successfulSpawn(
310320JSON.stringify(versionsPackage.versions ?? [versionsPackage.version]),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。