@forge/cli

12.22.012.22.0-experimental-04cc2b9
out/module-add/dependencies-merger.js
~out/module-add/dependencies-merger.jsModified
+25−12
Index: package/out/module-add/dependencies-merger.js
===================================================================
--- package/out/module-add/dependencies-merger.js
+++ package/out/module-add/dependencies-merger.js
@@ -1,7 +1,11 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.planFrontendPackageJson = exports.runPackageManager = exports.writePackageChange = exports.planPackageJsonChange = exports.readPackageJson = void 0;
+exports.readPackageJson = readPackageJson;
+exports.planPackageJsonChange = planPackageJsonChange;
+exports.writePackageChange = writePackageChange;
+exports.runPackageManager = runPackageManager;
+exports.planFrontendPackageJson = planFrontendPackageJson;
 const tslib_1 = require("tslib");
 const fs_1 = tslib_1.__importDefault(require("fs"));
 const path_1 = tslib_1.__importDefault(require("path"));
 const cross_spawn_1 = require("cross-spawn");
@@ -20,9 +24,11 @@
 };
 function readPackageJson(cwd) {
     const packageJsonPath = path_1.default.join(cwd, 'package.json');
     if (!fs_1.default.existsSync(packageJsonPath)) {
-        throw new Error(cli_shared_1.Text.module.add.errorPackageJsonNotFound(packageJsonPath));
+        const scaffold = {};
+        const raw = `${JSON.stringify(scaffold, null, 2)}\n`;
+        return { path: packageJsonPath, raw, parsed: scaffold };
     }
     try {
         const raw = fs_1.default.readFileSync(packageJsonPath, 'utf8');
         const parsed = JSON.parse(raw);
@@ -33,9 +39,8 @@
             cause: err
         });
     }
 }
-exports.readPackageJson = readPackageJson;
 function classifyDeps(templateDependencies, existing, force) {
     const additions = [];
     const conflicts = [];
     const matches = [];
@@ -85,27 +90,32 @@
     }
     const patch = (0, diff_1.createTwoFilesPatch)(packageJsonPath, packageJsonPath, before, after, 'before', 'after');
     return { packageJsonChange: { filePath: packageJsonPath, before, after, patch }, depChanges };
 }
-exports.planPackageJsonChange = planPackageJsonChange;
 function writePackageChange(change, createParentDir) {
     if (!change)
         return false;
     if (createParentDir)
         fs_1.default.mkdirSync(path_1.default.dirname(change.filePath), { recursive: true });
     fs_1.default.writeFileSync(change.filePath, change.after, 'utf8');
     return true;
 }
-exports.writePackageChange = writePackageChange;
 function runPackageManager(cwd, args) {
     const packageManager = detectPackageManager(cwd);
-    return new Promise((resolve) => {
+    const command = `${packageManager} ${args.join(' ')}`;
+    return new Promise((resolve, reject) => {
         const child = (0, cross_spawn_1.spawn)(packageManager, args, { cwd });
-        child.on('close', (code) => resolve(code === 0));
-        child.on('error', () => resolve(false));
+        child.on('close', (code) => {
+            if (code === 0) {
+                resolve();
+            }
+            else {
+                reject(new Error(`Package manager command failed: "${command}" in ${cwd}.`));
+            }
+        });
+        child.on('error', (error) => reject(error));
     });
 }
-exports.runPackageManager = runPackageManager;
 function detectPackageManager(cwd) {
     if (fs_1.default.existsSync(path_1.default.join(cwd, 'yarn.lock')))
         return 'yarn';
     return 'npm';
@@ -166,10 +176,13 @@
         };
     }
     const after = `${JSON.stringify(mergedPackageJson, null, 2)}\n`;
     if (before === after) {
-        return { depChanges };
+        return { depChanges, frontendPackageJsonPath };
     }
-    return { packageJsonChange: { filePath: frontendPackageJsonPath, before, after, patch: '' }, depChanges };
+    return {
+        packageJsonChange: { filePath: frontendPackageJsonPath, before, after, patch: '' },
+        depChanges,
+        frontendPackageJsonPath
+    };
 }
-exports.planFrontendPackageJson = planFrontendPackageJson;
 //# sourceMappingURL=dependencies-merger.js.map
\ No newline at end of file