Improve change-theme command

pull/17732/head
Masum ULU 1 year ago
parent 929f637ae5
commit 900c2de61b

@ -77,10 +77,10 @@ function updateAppModule(selectedProject: string, targetThemeName: ThemeOptionsE
};
}
function removeImportPath(appModulePath: string, selectedTheme: ThemeOptionsEnum): Rule {
export function removeImportPath(appModulePath: string, selectedTheme: ThemeOptionsEnum): Rule {
return (host: Tree) => {
const recorder = host.beginUpdate(appModulePath);
const source = getSource(host, appModulePath);
const source = createSourceFile(host, appModulePath);
const impMap = getImportPaths(selectedTheme);
const nodes = findNodes(source, ts.isImportDeclaration);
@ -99,13 +99,13 @@ function removeImportPath(appModulePath: string, selectedTheme: ThemeOptionsEnum
};
}
function removeImportFromNgModuleMetadata(
export function removeImportFromNgModuleMetadata(
appModulePath: string,
selectedTheme: ThemeOptionsEnum,
): Rule {
return (host: Tree) => {
const recorder = host.beginUpdate(appModulePath);
const source = getSource(host, appModulePath);
const source = createSourceFile(host, appModulePath);
const impMap = getImportPaths(selectedTheme);
const node = getDecoratorMetadata(source, 'NgModule', '@angular/core')[0] || {};
@ -119,12 +119,13 @@ function removeImportFromNgModuleMetadata(
const elements = assignmentInit.elements;
if (!elements || elements.length < 1) {
return;
throw new SchematicsException(`Elements could not found: ${elements}`);
}
const filteredElements = elements.filter(f =>
impMap.some(s => f.getText().match(s.importName)),
);
if (!filteredElements || filteredElements.length < 1) {
return;
}
@ -137,10 +138,10 @@ function removeImportFromNgModuleMetadata(
};
}
function insertImports(appModulePath: string, selectedTheme: ThemeOptionsEnum): Rule {
export function insertImports(appModulePath: string, selectedTheme: ThemeOptionsEnum): Rule {
return (host: Tree) => {
const recorder = host.beginUpdate(appModulePath);
const source = getSource(host, appModulePath);
const source = createSourceFile(host, appModulePath);
const selected = importMap.get(selectedTheme);
const changes: Change[] = [];
@ -160,11 +161,16 @@ function insertImports(appModulePath: string, selectedTheme: ThemeOptionsEnum):
};
}
function getSource(host: Tree, appModulePath: string): ts.SourceFile {
const sourceText = host.read(appModulePath)?.toString('utf-8');
export function createSourceFile(host: Tree, appModulePath: string): ts.SourceFile {
const buffer = host.read(appModulePath);
if (!buffer || buffer.length === 0) {
throw new SchematicsException(`${appModulePath} file could not be read.`);
}
const sourceText = buffer.toString('utf-8');
const source = ts.createSourceFile(
appModulePath,
sourceText!,
sourceText,
ts.ScriptTarget.Latest,
true,
ts.ScriptKind.TS,
@ -173,7 +179,7 @@ function getSource(host: Tree, appModulePath: string): ts.SourceFile {
return source;
}
function getImportPaths(selectedTheme: ThemeOptionsEnum) {
export function getImportPaths(selectedTheme: ThemeOptionsEnum) {
return Array.from(importMap.values())
.filter(f => f !== importMap.get(selectedTheme))
.reduce((acc, val) => [...acc, ...val], []);

Loading…
Cancel
Save