Browse Source

refactor

pull/22645/head
erdemcaygor 1 year ago
parent
commit
c8fc13bbdf
  1. 127
      npm/ng-packs/packages/schematics/src/commands/change-theme/index.ts
  2. 16
      npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts

127
npm/ng-packs/packages/schematics/src/commands/change-theme/index.ts

@ -185,36 +185,27 @@ export function removeImportsFromStandaloneProviders(
const exprText = expr.getText(); const exprText = expr.getText();
if (expr.expression.getText() === 'importProvidersFrom') { if (expr.expression.getText() === 'importProvidersFrom') {
const arrayArg = expr.arguments[0]; const args = expr.arguments;
if (ts.isArrayLiteralExpression(arrayArg)) { let modules: readonly ts.Expression[] = [];
const elements = arrayArg.elements;
const elementsToRemove = elements.filter(el => if (args.length === 1 && ts.isArrayLiteralExpression(args[0])) {
impMap.some(({ importName }) => el.getText().includes(importName)), // importProvidersFrom([Module1, Module2]) tarzı
); modules = (args[0] as ts.ArrayLiteralExpression).elements;
} else {
// importProvidersFrom(Module1, Module2) tarzı
modules = args;
}
const elementsToRemove = modules.filter(el =>
impMap.some(({ importName }) => el.getText().includes(importName)),
);
if (elementsToRemove.length) {
for (const removeEl of elementsToRemove) {
const start = removeEl.getFullStart();
const end = removeEl.getEnd();
if (elementsToRemove.length) {
for (const removeEl of elementsToRemove) {
const start = removeEl.getFullStart();
const end = removeEl.getEnd();
const nextChar = sourceText.slice(end, end + 1);
const prevChar = sourceText.slice(start - 1, start);
if (nextChar === ',') {
recorder.remove(start, end - start + 1);
} else if (prevChar === ',') {
recorder.remove(start - 1, end - start + 1);
} else {
recorder.remove(start, end - start);
}
}
}
const remaining = arrayArg.elements.filter(el => !elementsToRemove.includes(el));
if (remaining.length === 0) {
const start = expr.getFullStart();
const end = expr.getEnd();
const nextChar = sourceText.slice(end, end + 1); const nextChar = sourceText.slice(end, end + 1);
const prevChar = sourceText.slice(start - 1, start); const prevChar = sourceText.slice(start - 1, start);
@ -227,7 +218,25 @@ export function removeImportsFromStandaloneProviders(
} }
} }
} }
// Eğer tüm modüller silinirse, importProvidersFrom() fonksiyonunu da kaldır
const remaining = modules.filter(el => !elementsToRemove.includes(el));
if (remaining.length === 0) {
const start = expr.getFullStart();
const end = expr.getEnd();
const nextChar = sourceText.slice(end, end + 1);
const prevChar = sourceText.slice(start - 1, start);
if (nextChar === ',') {
recorder.remove(start, end - start + 1);
} else if (prevChar === ',') {
recorder.remove(start - 1, end - start + 1);
} else {
recorder.remove(start, end - start);
}
}
} else { } else {
// Diğer bağımsız provider fonksiyonları için
const match = impMap.find(({ importName, provider }) => { const match = impMap.find(({ importName, provider }) => {
const moduleSymbol = importName?.split('.')[0]; const moduleSymbol = importName?.split('.')[0];
return ( return (
@ -276,54 +285,30 @@ export function removeProviderFromNgModuleMetadata(
node as ts.ObjectLiteralExpression, node as ts.ObjectLiteralExpression,
'providers', 'providers',
)[0] as ts.PropertyAssignment; )[0] as ts.PropertyAssignment;
const providersArray = providersProperty.initializer as ts.ArrayLiteralExpression;
const providersArray = providersProperty.initializer as ts.ArrayLiteralExpression;
if (!providersArray.elements.length) return host; if (!providersArray.elements.length) return host;
for (const element of providersArray.elements) { for (const element of providersArray.elements) {
if (ts.isCallExpression(element) && element.expression.getText() === 'importProvidersFrom') { const elementText = element.getText();
const arrayArg = element.arguments[0];
if (ts.isArrayLiteralExpression(arrayArg)) {
const elementsToRemove = arrayArg.elements.filter(el =>
impMap.some(s => el.getText().includes(s.importName)),
);
if (elementsToRemove.length) { const match = impMap.find(({ provider }) => {
for (const removeEl of elementsToRemove) { return provider && elementText.includes(provider);
const start = removeEl.getFullStart(); });
const end = removeEl.getEnd();
const nextChar = source.text.slice(end, end + 1);
const prevChar = source.text.slice(start - 1, start);
if (nextChar === ',') {
recorder.remove(start, end - start + 1); // sağındaki virgülle birlikte sil
} else if (prevChar === ',') {
recorder.remove(start - 1, end - start + 1); // solundaki virgülle birlikte sil
} else {
recorder.remove(start, end - start); // virgül yoksa sadece kendisini sil
}
}
}
// Eğer array boşaldıysa, importProvidersFrom çağrısını da kaldır if (match) {
const remainingElements = arrayArg.elements.filter(el => !elementsToRemove.includes(el)); const start = element.getFullStart();
const end = element.getEnd();
if (remainingElements.length === 0) { const nextChar = source.text.slice(end, end + 1);
const callStart = element.getFullStart(); const prevChar = source.text.slice(start - 1, start);
const callEnd = element.getEnd();
const callNextChar = source.text.slice(callEnd, callEnd + 1);
const callPrevChar = source.text.slice(callStart - 1, callStart);
if (callNextChar === ',') { if (nextChar === ',') {
recorder.remove(callStart, callEnd - callStart + 1); recorder.remove(start, end - start + 1); // sağ virgül ile
} else if (callPrevChar === ',') { } else if (prevChar === ',') {
recorder.remove(callStart - 1, callEnd - callStart + 1); recorder.remove(start - 1, end - start + 1); // sol virgül ile
} else { } else {
recorder.remove(callStart, callEnd - callStart); recorder.remove(start, end - start); // direkt
}
}
} }
} }
} }
@ -348,7 +333,7 @@ export function insertImports(projectName: string, selectedTheme: ThemeOptionsEn
expressions.push(expression.trim()); expressions.push(expression.trim());
} }
} }
return code.code`${expressions.join(',\n')}`; return code.code`${expressions}`;
}); });
} }
export function insertProviders(projectName: string, selectedTheme: ThemeOptionsEnum): Rule { export function insertProviders(projectName: string, selectedTheme: ThemeOptionsEnum): Rule {
@ -358,9 +343,9 @@ export function insertProviders(projectName: string, selectedTheme: ThemeOptions
const providers = selected const providers = selected
.filter(s => !!s.provider) .filter(s => !!s.provider)
.map(({ provider, path }) => { .map(({ provider, path, importName }) => {
const symbol = code.external(provider!, path); code.external(importName, path);
return `${symbol}()`; return `${provider}`;
}); });
return code.code`${providers}`; return code.code`${providers}`;

16
npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts

@ -271,7 +271,11 @@ importMap.set(ThemeOptionsEnum.Basic, [
path: '@abp/ng.theme.basic', path: '@abp/ng.theme.basic',
importName: 'ThemeBasicModule', importName: 'ThemeBasicModule',
expression: 'ThemeBasicModule', expression: 'ThemeBasicModule',
provider: 'provideThemeBasicConfig', },
{
path: '@abp/ng.theme.basic',
importName: 'provideThemeBasicConfig',
provider: 'provideThemeBasicConfig()',
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
@ -285,7 +289,7 @@ importMap.set(ThemeOptionsEnum.Basic, [
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared', provider: 'provideAbpThemeShared()',
}, },
]); ]);
@ -293,7 +297,7 @@ importMap.set(ThemeOptionsEnum.Lepton, [
{ {
path: '@volo/abp.ng.theme.lepton', path: '@volo/abp.ng.theme.lepton',
importName: 'provideThemeLepton', importName: 'provideThemeLepton',
provider: 'provideThemeLepton', provider: 'provideThemeLepton()',
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
@ -311,7 +315,7 @@ importMap.set(ThemeOptionsEnum.Lepton, [
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared', provider: 'provideAbpThemeShared()',
}, },
]); ]);
@ -347,7 +351,7 @@ importMap.set(ThemeOptionsEnum.LeptonXLite, [
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared', provider: 'provideAbpThemeShared()',
}, },
]); ]);
@ -382,6 +386,6 @@ importMap.set(ThemeOptionsEnum.LeptonX, [
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared', provider: 'provideAbpThemeShared()',
}, },
]); ]);

Loading…
Cancel
Save