Skip to content

Commit 1288f18

Browse files
authored
fix: update-app-ng-deps works for all @angular packages (#779)
This should update all angular packages that the project depends on, such as @angular/animations and @angular/compiler-cli.
1 parent ad48c69 commit 1288f18

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

Diff for: nativescript-angular/bin/update-app-ng-deps

+38-23
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,56 @@
33
const path = require("path");
44
const fs = require("fs");
55

6+
const browserDynamicDependency = "@angular/platform-browser-dynamic";
67
const binPath = __dirname;
78
const pluginPath = path.dirname(binPath);
89
const pluginPackageJsonPath = path.join(pluginPath, "package.json");
910
const pluginPackageJson = JSON.parse(fs.readFileSync(pluginPackageJsonPath, "utf8"));
10-
const pluginPeerDeps = pluginPackageJson.peerDependencies;
11-
12-
const projectPath = path.dirname(path.dirname(pluginPath));
13-
const appPackageJsonPath = path.join(projectPath, "package.json");
14-
const appPackageJson = JSON.parse(fs.readFileSync(appPackageJsonPath, "utf8"));
1511

16-
const shouldUpdateDependency = name => name.startsWith("@angular") ||
12+
const isNgDependency = name => name.startsWith("@angular") ||
1713
name === "rxjs" ||
1814
name === "zone.js";
1915

20-
let updatedDependencies = appPackageJson.dependencies;
16+
function updateDeps(deps, newDeps) {
17+
// set app dependencies to ones required from plugin
18+
Object.keys(newDeps)
19+
.filter(isNgDependency)
20+
.filter(dependencyName => deps.hasOwnProperty(dependencyName))
21+
.map(dependencyName => ({
22+
dependencyName,
23+
version: pluginPackageJson.peerDependencies[dependencyName]
24+
}))
25+
.filter(({ dependencyName, version }) => deps[dependencyName] !== version)
26+
.forEach(({ dependencyName, version }) => {
27+
deps[dependencyName] = version;
28+
console.log(`Updated dependency ${dependencyName} to version: ${version}.`);
29+
});
30+
31+
// remove platform-browser-dynamic if present
32+
if (deps.hasOwnProperty(browserDynamicDependency)) {
33+
delete deps[browserDynamicDependency];
34+
console.log(`Removed ${browserDynamicDependency}`);
35+
}
36+
37+
38+
return deps;
39+
}
2140

22-
// set app dependencies to ones required from plugin (peer)
23-
Object.keys(pluginPeerDeps)
24-
.filter(shouldUpdateDependency)
25-
.forEach(dependencyName => {
26-
const version = pluginPackageJson.peerDependencies[dependencyName];
27-
updatedDependencies[dependencyName] = version;
28-
console.log(`Updated dependency ${dependencyName} to version: ${version}.`);
41+
let pluginDeps = pluginPackageJson.peerDependencies;
42+
Object.keys(pluginPackageJson.devDependencies)
43+
.filter(isNgDependency)
44+
.filter(depName => !pluginDeps.hasOwnProperty(depName))
45+
.forEach(depName => {
46+
pluginDeps[depName] = pluginPackageJson.devDependencies[depName];
2947
});
3048

31-
// remove platform-browser-dynamic if present
32-
const browserDynamicDependency = "@angular/platform-browser-dynamic";
33-
if (updatedDependencies.hasOwnProperty(browserDynamicDependency)) {
34-
delete updatedDependencies[browserDynamicDependency];
35-
console.log(`Removed ${browserDynamicDependency}`);
36-
}
49+
const projectPath = path.dirname(path.dirname(pluginPath));
50+
const appPackageJsonPath = path.join(projectPath, "package.json");
51+
const appPackageJson = JSON.parse(fs.readFileSync(appPackageJsonPath, "utf8"));
3752

38-
let updatedPackageJson = appPackageJson;
39-
updatedPackageJson.dependencies = updatedDependencies;
53+
appPackageJson.dependencies = updateDeps(appPackageJson.dependencies, pluginDeps);
54+
appPackageJson.devDependencies = updateDeps(appPackageJson.devDependencies, pluginDeps);
4055

41-
fs.writeFileSync(appPackageJsonPath, JSON.stringify(updatedPackageJson, null, 2));
56+
fs.writeFileSync(appPackageJsonPath, JSON.stringify(appPackageJson, null, 2));
4257

4358
console.log("\nAngular dependencies updated. Don't forget to run `npm install`.");

0 commit comments

Comments
 (0)