nx/packages/workspace/src/utils/cli-config-utils.ts

77 lines
2.0 KiB
TypeScript

import { Tree } from '@angular-devkit/schematics';
import { readJsonInTree } from './ast-utils';
import { NxJson } from '../command-line/shared';
export const angularSchematicNames = [
'class',
'component',
'directive',
'guard',
'module',
'pipe',
'service'
];
export function getWorkspacePath(host: Tree) {
const possibleFiles = ['/angular.json', '/.angular.json'];
return possibleFiles.filter(path => host.exists(path))[0];
}
export function getNpmScope(host: Tree) {
return readJsonInTree<NxJson>(host, 'nx.json').npmScope;
}
export function parseTarget(targetString: string) {
const [project, target, config] = targetString.split(':');
return {
project,
target,
config
};
}
export function editTarget(targetString: string, callback) {
const parsedTarget = parseTarget(targetString);
return serializeTarget(callback(parsedTarget));
}
export function serializeTarget({ project, target, config }) {
return [project, target, config].filter(part => !!part).join(':');
}
export function replaceAppNameWithPath(
node: any,
appName: string,
root: string
): any {
if (typeof node === 'string') {
const matchPattern = new RegExp(
`([^a-z0-9]+(${appName}))|((${appName})[^a-z0-9:]+)`,
'gi'
);
if (!!node.match(matchPattern)) {
const r = node.replace(appName, root);
return r.startsWith('/apps') || r.startsWith('/libs')
? r.substring(1)
: r;
} else {
return node;
}
} else if (Array.isArray(node)) {
return node.map(j => replaceAppNameWithPath(j, appName, root));
} else if (typeof node === 'object' && node) {
const forbiddenPropertyList: string[] = ['prefix', 'builder']; // Some of the properties should not be renamed
return Object.keys(node).reduce(
(m, c) => (
(m[c] = !forbiddenPropertyList.includes(c)
? replaceAppNameWithPath(node[c], appName, root)
: node[c]),
m
),
{} as any
);
} else {
return node;
}
}