@ionic/angular
Version:
Angular specific wrappers for @ionic/core
122 lines (121 loc) • 4.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWorkspace = exports.getWorkspacePath = exports.addSchematics = exports.addCli = exports.addArchitectBuilder = exports.addAsset = exports.addStyle = exports.getDefaultAngularAppName = exports.writeConfig = exports.readConfig = void 0;
const schematics_1 = require("@angular-devkit/schematics");
const jsonc_parser_1 = require("jsonc-parser");
const ANGULAR_JSON_PATH = 'angular.json';
function readConfig(host) {
return host.readJson(ANGULAR_JSON_PATH);
}
exports.readConfig = readConfig;
function writeConfig(host, config) {
host.overwrite(ANGULAR_JSON_PATH, JSON.stringify(config, null, 2));
}
exports.writeConfig = writeConfig;
function isAngularBrowserProject(projectConfig) {
if (projectConfig.projectType === 'application') {
const buildConfig = projectConfig.architect.build;
// Angular 16 and lower
const legacyAngularBuilder = buildConfig.builder === '@angular-devkit/build-angular:browser';
// Angular 17+
const modernAngularBuilder = buildConfig.builder === '@angular-devkit/build-angular:application';
return legacyAngularBuilder || modernAngularBuilder;
}
return false;
}
function getDefaultAngularAppName(config) {
const projects = config.projects;
const projectNames = Object.keys(projects);
for (const projectName of projectNames) {
const projectConfig = projects[projectName];
if (isAngularBrowserProject(projectConfig)) {
return projectName;
}
}
return projectNames[0];
}
exports.getDefaultAngularAppName = getDefaultAngularAppName;
function getAngularJson(config, projectName) {
// eslint-disable-next-line no-prototype-builtins
if (!config.projects.hasOwnProperty(projectName)) {
throw new schematics_1.SchematicsException(`Could not find project: ${projectName}`);
}
const projectConfig = config.projects[projectName];
if (isAngularBrowserProject(projectConfig)) {
return projectConfig;
}
if (config.projectType !== 'application') {
throw new schematics_1.SchematicsException(`Invalid projectType for ${projectName}: ${config.projectType}`);
}
else {
const buildConfig = projectConfig.architect.build;
throw new schematics_1.SchematicsException(`Invalid builder for ${projectName}: ${buildConfig.builder}`);
}
}
function addStyle(host, projectName, stylePath) {
const config = readConfig(host);
const angularJson = getAngularJson(config, projectName);
angularJson.architect.build.options.styles.push({
input: stylePath,
});
writeConfig(host, config);
}
exports.addStyle = addStyle;
function addAsset(host, projectName, architect, asset) {
const config = readConfig(host);
const angularJson = getAngularJson(config, projectName);
const target = angularJson.architect[architect];
if (target) {
target.options.assets.push(asset);
writeConfig(host, config);
}
}
exports.addAsset = addAsset;
function addArchitectBuilder(host, projectName, builderName, builderOpts) {
const config = readConfig(host);
const angularJson = getAngularJson(config, projectName);
angularJson.architect[builderName] = builderOpts;
writeConfig(host, config);
}
exports.addArchitectBuilder = addArchitectBuilder;
/**
* Updates the angular.json to add an additional schematic collection
* to the CLI configuration.
*/
function addCli(host, collectionName) {
const angularJson = readConfig(host);
if (angularJson.cli === undefined) {
angularJson.cli = {};
}
if (angularJson.cli.schematicCollections === undefined) {
angularJson.cli.schematicCollections = [];
}
angularJson.cli.schematicCollections.push(collectionName);
writeConfig(host, angularJson);
}
exports.addCli = addCli;
function addSchematics(host, schematicName, schematicOpts) {
const angularJson = readConfig(host);
if (angularJson.schematics === undefined) {
angularJson.schematics = {};
}
angularJson.schematics[schematicName] = schematicOpts;
writeConfig(host, angularJson);
}
exports.addSchematics = addSchematics;
function getWorkspacePath(host) {
const possibleFiles = ['/angular.json', '/.angular.json'];
const path = possibleFiles.filter((path) => host.exists(path))[0];
return path;
}
exports.getWorkspacePath = getWorkspacePath;
function getWorkspace(host) {
const path = getWorkspacePath(host);
const configBuffer = host.read(path);
if (configBuffer === null) {
throw new schematics_1.SchematicsException(`Could not find (${path})`);
}
const content = configBuffer.toString();
return (0, jsonc_parser_1.parse)(content);
}
exports.getWorkspace = getWorkspace;
;