diff --git a/scripts/package-artifacts.mjs b/scripts/package-artifacts.mjs index 5934b9faf..5d615dd32 100644 --- a/scripts/package-artifacts.mjs +++ b/scripts/package-artifacts.mjs @@ -31,10 +31,10 @@ function packPackages(packages, tarballDirectory) { stdio: ["inherit", "pipe", "inherit"], }); const parsed = JSON.parse(output); - if (!Array.isArray(parsed) || parsed.length !== 1 || !parsed[0]?.filename) { + const packed = Array.isArray(parsed) ? (parsed.length === 1 ? parsed[0] : undefined) : parsed?.[pkg.name]; + if (packed?.name !== pkg.name || typeof packed.filename !== "string") { throw new Error(`npm pack returned an unexpected result for ${pkg.name}`); } - const packed = parsed[0]; const originalPath = join(tarballDirectory, packed.filename); const contents = readFileSync(originalPath); diff --git a/scripts/package-artifacts.test.mjs b/scripts/package-artifacts.test.mjs index b5ec291f5..52aa7e1ee 100644 --- a/scripts/package-artifacts.test.mjs +++ b/scripts/package-artifacts.test.mjs @@ -15,6 +15,7 @@ function writePackage(directory, manifest, files) { } } +// #10633: Covers npm 12's package-keyed `npm pack --json` output only when npm 12 is on PATH. test("produces a verified, content-addressed artifact set", (t) => { const temporaryRoot = mkdtempSync(join(tmpdir(), "pi-package-artifacts-test-")); t.after(() => rmSync(temporaryRoot, { recursive: true, force: true }));