UNPKG

4.53 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getPackageJsonDependency = exports.removePackageJsonDependency = exports.addPackageJsonDependency = exports.NodeDependencyType = void 0;
4/**
5 * @license
6 * Copyright Google Inc. All Rights Reserved.
7 *
8 * Use of this source code is governed by an MIT-style license that can be
9 * found in the LICENSE file at https://angular.io/license
10 */
11const core_1 = require("@angular-devkit/core");
12const schematics_1 = require("@angular-devkit/schematics");
13const json_utils_1 = require("./json-utils");
14const PKG_JSON_PATH = '/package.json';
15var 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 = {}));
22function 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 // Haven't found the dependencies key, add it to the root of the package.json.
28 json_utils_1.appendPropertyInAstObject(recorder, packageJsonAst, dependency.type, {
29 [dependency.name]: dependency.version,
30 }, 2);
31 }
32 else if (depsNode.kind === 'object') {
33 // check if package already added
34 const depNode = json_utils_1.findPropertyInAstObject(depsNode, dependency.name);
35 if (!depNode) {
36 // Package not found, add it.
37 json_utils_1.insertPropertyInAstObjectInOrder(recorder, depsNode, dependency.name, dependency.version, 4);
38 }
39 else if (dependency.overwrite) {
40 // Package found, update version if overwrite.
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}
48exports.addPackageJsonDependency = addPackageJsonDependency;
49function 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}
65exports.removePackageJsonDependency = removePackageJsonDependency;
66function 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}
93exports.getPackageJsonDependency = getPackageJsonDependency;
94function _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}