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