UNPKG

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