diff --git a/dist/npm.js b/dist/npm.js index da6e0e7..ce9a9b4 100644 --- a/dist/npm.js +++ b/dist/npm.js @@ -1645,7 +1645,7 @@ function publish_default(context, config, inDir) { if (packageJson.scripts.preshrinkwrap != null) { yield exec3.exec("npm", ["run", "preshrinkwrap"], { cwd }); } - pruneShrinkwrap(inDir); + pruneShrinkwrap(context, inDir); } if (config.tarballDir != null) { const tgzFile = yield npmPack(inDir); @@ -1693,10 +1693,17 @@ function publish_default(context, config, inDir) { } }); } -function pruneShrinkwrap(inDir) { +function pruneShrinkwrap(context, inDir) { const shrinkwrapPath = inDir != null ? path2.join(inDir, "npm-shrinkwrap.json") : "npm-shrinkwrap.json"; const lockfile = JSON.parse(fs3.readFileSync(shrinkwrapPath, "utf-8")); const filterPkgs = (obj, key) => { + if (obj[key] == null) { + if (key === "dependencies" && lockfile.lockfileVersion === 3) { + context.logger.info("'Dependencies' is not supported in lockfileVersion 3."); + } + context.logger.info(`Property '${key}' does not exist. Skipping prune operation!`); + return; + } for (const [pkgName, pkgData] of Object.entries(obj[key])) { if (["dev", "extraneous"].some((prop) => pkgData[prop])) { delete obj[key][pkgName]; diff --git a/packages/npm/src/publish.ts b/packages/npm/src/publish.ts index e6f21f8..46e5683 100644 --- a/packages/npm/src/publish.ts +++ b/packages/npm/src/publish.ts @@ -29,7 +29,7 @@ export default async function (context: IContext, config: IPluginConfig, inDir?: if (packageJson.scripts.preshrinkwrap != null) { await exec.exec("npm", ["run", "preshrinkwrap"], { cwd }); } - pruneShrinkwrap(inDir); + pruneShrinkwrap(context, inDir); } if (config.tarballDir != null) { @@ -87,10 +87,18 @@ export default async function (context: IContext, config: IPluginConfig, inDir?: } } -function pruneShrinkwrap(inDir?: string): void { +function pruneShrinkwrap(context: IContext, inDir?: string): void { const shrinkwrapPath = inDir != null ? path.join(inDir, "npm-shrinkwrap.json") : "npm-shrinkwrap.json"; const lockfile = JSON.parse(fs.readFileSync(shrinkwrapPath, "utf-8")); const filterPkgs = (obj: Record, key: string) => { + if (obj[key] == null) { + // lockfileVersion 3 does not contain a `dependencies` + if (key === "dependencies" && lockfile.lockfileVersion === 3) { + context.logger.info("'Dependencies' is not supported in lockfileVersion 3."); + } + context.logger.info(`Property '${key}' does not exist. Skipping prune operation!`); + return; + } for (const [pkgName, pkgData] of Object.entries(obj[key]) as any) { if (["dev", "extraneous"].some(prop => pkgData[prop])) { delete obj[key][pkgName];