dependencies.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. "use strict";
  2. Object.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. */
  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. // 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. }
  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. }