1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.getPackageJsonDependency = exports.removePackageJsonDependency = exports.addPackageJsonDependency = exports.NodeDependencyType = void 0;
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | const core_1 = require("@angular-devkit/core");
|
12 | const schematics_1 = require("@angular-devkit/schematics");
|
13 | const json_utils_1 = require("./json-utils");
|
14 | const PKG_JSON_PATH = '/package.json';
|
15 | var NodeDependencyType;
|
16 | (function (NodeDependencyType) {
|
17 | NodeDependencyType["Default"] = "dependencies";
|
18 | NodeDependencyType["Dev"] = "devDependencies";
|
19 | NodeDependencyType["Peer"] = "peerDependencies";
|
20 | NodeDependencyType["Optional"] = "optionalDependencies";
|
21 | })(NodeDependencyType = exports.NodeDependencyType || (exports.NodeDependencyType = {}));
|
22 | function addPackageJsonDependency(tree, dependency, pkgJsonPath = PKG_JSON_PATH) {
|
23 | const packageJsonAst = _readPackageJson(tree, pkgJsonPath);
|
24 | const depsNode = json_utils_1.findPropertyInAstObject(packageJsonAst, dependency.type);
|
25 | const recorder = tree.beginUpdate(pkgJsonPath);
|
26 | if (!depsNode) {
|
27 |
|
28 | json_utils_1.appendPropertyInAstObject(recorder, packageJsonAst, dependency.type, {
|
29 | [dependency.name]: dependency.version,
|
30 | }, 2);
|
31 | }
|
32 | else if (depsNode.kind === 'object') {
|
33 |
|
34 | const depNode = json_utils_1.findPropertyInAstObject(depsNode, dependency.name);
|
35 | if (!depNode) {
|
36 |
|
37 | json_utils_1.insertPropertyInAstObjectInOrder(recorder, depsNode, dependency.name, dependency.version, 4);
|
38 | }
|
39 | else if (dependency.overwrite) {
|
40 |
|
41 | const { end, start } = depNode;
|
42 | recorder.remove(start.offset, end.offset - start.offset);
|
43 | recorder.insertRight(start.offset, JSON.stringify(dependency.version));
|
44 | }
|
45 | }
|
46 | tree.commitUpdate(recorder);
|
47 | }
|
48 | exports.addPackageJsonDependency = addPackageJsonDependency;
|
49 | function removePackageJsonDependency(tree, name, pkgJsonPath = PKG_JSON_PATH) {
|
50 | const packageJson = _readPackageJson(tree, pkgJsonPath);
|
51 | const recorder = tree.beginUpdate(pkgJsonPath);
|
52 | [
|
53 | NodeDependencyType.Default,
|
54 | NodeDependencyType.Dev,
|
55 | NodeDependencyType.Optional,
|
56 | NodeDependencyType.Peer,
|
57 | ].forEach(depType => {
|
58 | const depsNode = json_utils_1.findPropertyInAstObject(packageJson, depType);
|
59 | if (depsNode !== null && depsNode.kind === 'object') {
|
60 | json_utils_1.removePropertyInAstObject(recorder, depsNode, name);
|
61 | }
|
62 | });
|
63 | tree.commitUpdate(recorder);
|
64 | }
|
65 | exports.removePackageJsonDependency = removePackageJsonDependency;
|
66 | function getPackageJsonDependency(tree, name, pkgJsonPath = PKG_JSON_PATH) {
|
67 | const packageJson = _readPackageJson(tree, pkgJsonPath);
|
68 | let dep = null;
|
69 | [
|
70 | NodeDependencyType.Default,
|
71 | NodeDependencyType.Dev,
|
72 | NodeDependencyType.Optional,
|
73 | NodeDependencyType.Peer,
|
74 | ].forEach(depType => {
|
75 | if (dep !== null) {
|
76 | return;
|
77 | }
|
78 | const depsNode = json_utils_1.findPropertyInAstObject(packageJson, depType);
|
79 | if (depsNode !== null && depsNode.kind === 'object') {
|
80 | const depNode = json_utils_1.findPropertyInAstObject(depsNode, name);
|
81 | if (depNode !== null && depNode.kind === 'string') {
|
82 | const version = depNode.value;
|
83 | dep = {
|
84 | type: depType,
|
85 | name: name,
|
86 | version: version,
|
87 | };
|
88 | }
|
89 | }
|
90 | });
|
91 | return dep;
|
92 | }
|
93 | exports.getPackageJsonDependency = getPackageJsonDependency;
|
94 | function _readPackageJson(tree, pkgJsonPath) {
|
95 | const buffer = tree.read(pkgJsonPath);
|
96 | if (buffer === null) {
|
97 | throw new schematics_1.SchematicsException(`Could not read ${pkgJsonPath}.`);
|
98 | }
|
99 | const content = buffer.toString();
|
100 | const packageJson = core_1.parseJsonAst(content, core_1.JsonParseMode.Strict);
|
101 | if (packageJson.kind != 'object') {
|
102 | throw new schematics_1.SchematicsException(`Invalid ${pkgJsonPath}. Was expecting an object.`);
|
103 | }
|
104 | return packageJson;
|
105 | }
|