From f372f1365040d5eb5a1ccd81eabd5438cc281356 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 3 May 2017 11:32:52 +0300 Subject: [PATCH] fix: update-app-ng-deps works for all @angular packages This should update all angular packages that the project depends on, such as @angular/animations and @angular/compiler-cli. --- nativescript-angular/bin/update-app-ng-deps | 61 +++++++++++++-------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/nativescript-angular/bin/update-app-ng-deps b/nativescript-angular/bin/update-app-ng-deps index 511bb76a8..7676e3313 100644 --- a/nativescript-angular/bin/update-app-ng-deps +++ b/nativescript-angular/bin/update-app-ng-deps @@ -3,41 +3,56 @@ const path = require("path"); const fs = require("fs"); +const browserDynamicDependency = "@angular/platform-browser-dynamic"; const binPath = __dirname; const pluginPath = path.dirname(binPath); const pluginPackageJsonPath = path.join(pluginPath, "package.json"); const pluginPackageJson = JSON.parse(fs.readFileSync(pluginPackageJsonPath, "utf8")); -const pluginPeerDeps = pluginPackageJson.peerDependencies; - -const projectPath = path.dirname(path.dirname(pluginPath)); -const appPackageJsonPath = path.join(projectPath, "package.json"); -const appPackageJson = JSON.parse(fs.readFileSync(appPackageJsonPath, "utf8")); -const shouldUpdateDependency = name => name.startsWith("@angular") || +const isNgDependency = name => name.startsWith("@angular") || name === "rxjs" || name === "zone.js"; -let updatedDependencies = appPackageJson.dependencies; +function updateDeps(deps, newDeps) { + // set app dependencies to ones required from plugin + Object.keys(newDeps) + .filter(isNgDependency) + .filter(dependencyName => deps.hasOwnProperty(dependencyName)) + .map(dependencyName => ({ + dependencyName, + version: pluginPackageJson.peerDependencies[dependencyName] + })) + .filter(({ dependencyName, version }) => deps[dependencyName] !== version) + .forEach(({ dependencyName, version }) => { + deps[dependencyName] = version; + console.log(`Updated dependency ${dependencyName} to version: ${version}.`); + }); + + // remove platform-browser-dynamic if present + if (deps.hasOwnProperty(browserDynamicDependency)) { + delete deps[browserDynamicDependency]; + console.log(`Removed ${browserDynamicDependency}`); + } + + + return deps; +} -// set app dependencies to ones required from plugin (peer) -Object.keys(pluginPeerDeps) - .filter(shouldUpdateDependency) - .forEach(dependencyName => { - const version = pluginPackageJson.peerDependencies[dependencyName]; - updatedDependencies[dependencyName] = version; - console.log(`Updated dependency ${dependencyName} to version: ${version}.`); +let pluginDeps = pluginPackageJson.peerDependencies; +Object.keys(pluginPackageJson.devDependencies) + .filter(isNgDependency) + .filter(depName => !pluginDeps.hasOwnProperty(depName)) + .forEach(depName => { + pluginDeps[depName] = pluginPackageJson.devDependencies[depName]; }); -// remove platform-browser-dynamic if present -const browserDynamicDependency = "@angular/platform-browser-dynamic"; -if (updatedDependencies.hasOwnProperty(browserDynamicDependency)) { - delete updatedDependencies[browserDynamicDependency]; - console.log(`Removed ${browserDynamicDependency}`); -} +const projectPath = path.dirname(path.dirname(pluginPath)); +const appPackageJsonPath = path.join(projectPath, "package.json"); +const appPackageJson = JSON.parse(fs.readFileSync(appPackageJsonPath, "utf8")); -let updatedPackageJson = appPackageJson; -updatedPackageJson.dependencies = updatedDependencies; +appPackageJson.dependencies = updateDeps(appPackageJson.dependencies, pluginDeps); +appPackageJson.devDependencies = updateDeps(appPackageJson.devDependencies, pluginDeps); -fs.writeFileSync(appPackageJsonPath, JSON.stringify(updatedPackageJson, null, 2)); +fs.writeFileSync(appPackageJsonPath, JSON.stringify(appPackageJson, null, 2)); console.log("\nAngular dependencies updated. Don't forget to run `npm install`.");