config.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.getWorkspace = exports.getWorkspacePath = exports.addSchematics = exports.addCli = exports.addArchitectBuilder = exports.addAsset = exports.addStyle = exports.getDefaultAngularAppName = exports.writeConfig = exports.readConfig = void 0;
  4. const schematics_1 = require("@angular-devkit/schematics");
  5. const jsonc_parser_1 = require("jsonc-parser");
  6. const ANGULAR_JSON_PATH = 'angular.json';
  7. function readConfig(host) {
  8. return host.readJson(ANGULAR_JSON_PATH);
  9. }
  10. exports.readConfig = readConfig;
  11. function writeConfig(host, config) {
  12. host.overwrite(ANGULAR_JSON_PATH, JSON.stringify(config, null, 2));
  13. }
  14. exports.writeConfig = writeConfig;
  15. function isAngularBrowserProject(projectConfig) {
  16. if (projectConfig.projectType === 'application') {
  17. const buildConfig = projectConfig.architect.build;
  18. // Angular 16 and lower
  19. const legacyAngularBuilder = buildConfig.builder === '@angular-devkit/build-angular:browser';
  20. // Angular 17+
  21. const modernAngularBuilder = buildConfig.builder === '@angular-devkit/build-angular:application';
  22. return legacyAngularBuilder || modernAngularBuilder;
  23. }
  24. return false;
  25. }
  26. function getDefaultAngularAppName(config) {
  27. const projects = config.projects;
  28. const projectNames = Object.keys(projects);
  29. for (const projectName of projectNames) {
  30. const projectConfig = projects[projectName];
  31. if (isAngularBrowserProject(projectConfig)) {
  32. return projectName;
  33. }
  34. }
  35. return projectNames[0];
  36. }
  37. exports.getDefaultAngularAppName = getDefaultAngularAppName;
  38. function getAngularJson(config, projectName) {
  39. // eslint-disable-next-line no-prototype-builtins
  40. if (!config.projects.hasOwnProperty(projectName)) {
  41. throw new schematics_1.SchematicsException(`Could not find project: ${projectName}`);
  42. }
  43. const projectConfig = config.projects[projectName];
  44. if (isAngularBrowserProject(projectConfig)) {
  45. return projectConfig;
  46. }
  47. if (config.projectType !== 'application') {
  48. throw new schematics_1.SchematicsException(`Invalid projectType for ${projectName}: ${config.projectType}`);
  49. }
  50. else {
  51. const buildConfig = projectConfig.architect.build;
  52. throw new schematics_1.SchematicsException(`Invalid builder for ${projectName}: ${buildConfig.builder}`);
  53. }
  54. }
  55. function addStyle(host, projectName, stylePath) {
  56. const config = readConfig(host);
  57. const angularJson = getAngularJson(config, projectName);
  58. angularJson.architect.build.options.styles.push({
  59. input: stylePath,
  60. });
  61. writeConfig(host, config);
  62. }
  63. exports.addStyle = addStyle;
  64. function addAsset(host, projectName, architect, asset) {
  65. const config = readConfig(host);
  66. const angularJson = getAngularJson(config, projectName);
  67. const target = angularJson.architect[architect];
  68. if (target) {
  69. target.options.assets.push(asset);
  70. writeConfig(host, config);
  71. }
  72. }
  73. exports.addAsset = addAsset;
  74. function addArchitectBuilder(host, projectName, builderName, builderOpts) {
  75. const config = readConfig(host);
  76. const angularJson = getAngularJson(config, projectName);
  77. angularJson.architect[builderName] = builderOpts;
  78. writeConfig(host, config);
  79. }
  80. exports.addArchitectBuilder = addArchitectBuilder;
  81. /**
  82. * Updates the angular.json to add an additional schematic collection
  83. * to the CLI configuration.
  84. */
  85. function addCli(host, collectionName) {
  86. const angularJson = readConfig(host);
  87. if (angularJson.cli === undefined) {
  88. angularJson.cli = {};
  89. }
  90. if (angularJson.cli.schematicCollections === undefined) {
  91. angularJson.cli.schematicCollections = [];
  92. }
  93. angularJson.cli.schematicCollections.push(collectionName);
  94. writeConfig(host, angularJson);
  95. }
  96. exports.addCli = addCli;
  97. function addSchematics(host, schematicName, schematicOpts) {
  98. const angularJson = readConfig(host);
  99. if (angularJson.schematics === undefined) {
  100. angularJson.schematics = {};
  101. }
  102. angularJson.schematics[schematicName] = schematicOpts;
  103. writeConfig(host, angularJson);
  104. }
  105. exports.addSchematics = addSchematics;
  106. function getWorkspacePath(host) {
  107. const possibleFiles = ['/angular.json', '/.angular.json'];
  108. const path = possibleFiles.filter((path) => host.exists(path))[0];
  109. return path;
  110. }
  111. exports.getWorkspacePath = getWorkspacePath;
  112. function getWorkspace(host) {
  113. const path = getWorkspacePath(host);
  114. const configBuffer = host.read(path);
  115. if (configBuffer === null) {
  116. throw new schematics_1.SchematicsException(`Could not find (${path})`);
  117. }
  118. const content = configBuffer.toString();
  119. return (0, jsonc_parser_1.parse)(content);
  120. }
  121. exports.getWorkspace = getWorkspace;