From 7016c533a8c07eb764064b89c99887fe50c633fd Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Mon, 27 May 2019 15:57:49 +0200 Subject: [PATCH] fix: recover from missing pkg.name Fallback to dirname if pkg.name is not provided --- install.js | 19 ++++++++++--------- lib/private/install.js | 5 +++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/install.js b/install.js index e12f7ea..5fb1c6f 100644 --- a/install.js +++ b/install.js @@ -1,13 +1,13 @@ "use strict"; -const toPlainObject = require("es5-ext/object/normalize-options") - , ensureString = require("es5-ext/object/validate-stringifiable-value") - , { resolve } = require("path") - , NpmCrossLinkError = require("./lib/npm-cross-link-error") - , ensureConfiguration = require("./lib/private/ensure-user-configuration") - , createProgressData = require("./lib/private/create-progress-data") - , install = require("./lib/private/install") - , getPackageJson = require("./lib/get-package-json"); +const toPlainObject = require("es5-ext/object/normalize-options") + , ensureString = require("es5-ext/object/validate-stringifiable-value") + , { resolve, basename } = require("path") + , NpmCrossLinkError = require("./lib/npm-cross-link-error") + , ensureConfiguration = require("./lib/private/ensure-user-configuration") + , createProgressData = require("./lib/private/create-progress-data") + , install = require("./lib/private/install") + , getPackageJson = require("./lib/get-package-json"); module.exports = (path, userConfiguration, inputOptions = {}) => { path = resolve(ensureString(path)); @@ -17,7 +17,8 @@ module.exports = (path, userConfiguration, inputOptions = {}) => { if (!packageContext.packageJson) { return Promise.reject(new NpmCrossLinkError(`Could not find package.json at ${ path }`)); } - progressData.topPackageName = packageContext.name = packageContext.packageJson.name; + progressData.topPackageName = packageContext.name = + packageContext.packageJson.name || basename(path); const promise = install( packageContext, ensureConfiguration(userConfiguration), toPlainObject(inputOptions), progressData diff --git a/lib/private/install.js b/lib/private/install.js index e2fe194..8490410 100644 --- a/lib/private/install.js +++ b/lib/private/install.js @@ -1,6 +1,6 @@ "use strict"; -const { resolve } = require("path") +const { basename, resolve } = require("path") , wait = require("timers-ext/promise/sleep") , cleanupNpmInstall = require("./cleanup-npm-install") , getPackageJson = require("../get-package-json") @@ -15,7 +15,8 @@ module.exports = async (packageContext, userConfiguration, inputOptions, progres if (!packageContext.packageJson) packageContext.packageJson = getPackageJson(path); const { packageJson } = packageContext; if (!packageJson) return; - let name = (packageContext.name = packageJson.name); + if (!packageContext.name) packageContext.name = packageJson.name || basename(path); + let { name } = packageContext; if (packagesMeta[name] && resolve(packagesPath, name) === path) { await installMaintainedPackage(