|
|
|
@ -81,11 +81,23 @@ export function removeImportPath(appModulePath: string, selectedTheme: ThemeOpti
|
|
|
|
|
return (host: Tree) => {
|
|
|
|
|
const recorder = host.beginUpdate(appModulePath);
|
|
|
|
|
const source = createSourceFile(host, appModulePath);
|
|
|
|
|
const impMap = getImportPaths(selectedTheme);
|
|
|
|
|
const impMap = getImportPaths(selectedTheme, true);
|
|
|
|
|
|
|
|
|
|
const nodes = findNodes(source, ts.isImportDeclaration);
|
|
|
|
|
|
|
|
|
|
const filteredNodes = nodes.filter(n => impMap.some(f => n.getFullText().match(f.path)));
|
|
|
|
|
const filteredNodes = nodes.filter(node =>
|
|
|
|
|
impMap.some(({ path, importName }) => {
|
|
|
|
|
const sourceModule = node.getFullText();
|
|
|
|
|
const moduleName = importName.split('.')[0];
|
|
|
|
|
|
|
|
|
|
if (path && sourceModule.match(path)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return !!(moduleName && sourceModule.match(moduleName));
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (filteredNodes?.length < 1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -106,7 +118,7 @@ export function removeImportFromNgModuleMetadata(
|
|
|
|
|
return (host: Tree) => {
|
|
|
|
|
const recorder = host.beginUpdate(appModulePath);
|
|
|
|
|
const source = createSourceFile(host, appModulePath);
|
|
|
|
|
const impMap = getImportPaths(selectedTheme);
|
|
|
|
|
const impMap = getImportPaths(selectedTheme, true);
|
|
|
|
|
|
|
|
|
|
const node = getDecoratorMetadata(source, 'NgModule', '@angular/core')[0] || {};
|
|
|
|
|
if (!node) {
|
|
|
|
@ -144,8 +156,13 @@ export function insertImports(appModulePath: string, selectedTheme: ThemeOptions
|
|
|
|
|
const source = createSourceFile(host, appModulePath);
|
|
|
|
|
const selected = importMap.get(selectedTheme);
|
|
|
|
|
|
|
|
|
|
if (!selected) {
|
|
|
|
|
return host;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const changes: Change[] = [];
|
|
|
|
|
selected!.map(({ importName, path }) =>
|
|
|
|
|
|
|
|
|
|
selected.map(({ importName, path }) =>
|
|
|
|
|
changes.push(...addImportToModule(source, appModulePath, importName, path)),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
@ -168,18 +185,26 @@ export function createSourceFile(host: Tree, appModulePath: string): ts.SourceFi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const sourceText = buffer.toString('utf-8');
|
|
|
|
|
const source = ts.createSourceFile(
|
|
|
|
|
|
|
|
|
|
return ts.createSourceFile(
|
|
|
|
|
appModulePath,
|
|
|
|
|
sourceText,
|
|
|
|
|
ts.ScriptTarget.Latest,
|
|
|
|
|
true,
|
|
|
|
|
ts.ScriptKind.TS,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return source;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function getImportPaths(selectedTheme: ThemeOptionsEnum) {
|
|
|
|
|
/**
|
|
|
|
|
* Returns all import paths except the selected theme
|
|
|
|
|
* @param selectedTheme The selected theme
|
|
|
|
|
* @param getAll If true, returns all import paths
|
|
|
|
|
*/
|
|
|
|
|
export function getImportPaths(selectedTheme: ThemeOptionsEnum, getAll: boolean = false) {
|
|
|
|
|
if (getAll) {
|
|
|
|
|
return Array.from(importMap.values()).reduce((acc, val) => [...acc, ...val], []);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Array.from(importMap.values())
|
|
|
|
|
.filter(f => f !== importMap.get(selectedTheme))
|
|
|
|
|
.reduce((acc, val) => [...acc, ...val], []);
|
|
|
|
|