|
|
@@ -4,8 +4,8 @@ import * as path from 'path';
|
|
|
|
|
|
const EXTENSIONS_DIR = path.join(__dirname, '../src/app/extensions');
|
|
|
const EXTENSIONS_MODULES_DIR = 'modules';
|
|
|
-const originalExtensionsModuleFile = path.join(EXTENSIONS_DIR, 'extensions.module.ts');
|
|
|
-const tempExtensionsModuleFile = path.join(EXTENSIONS_DIR, 'extensions.module.ts.temp');
|
|
|
+const lazyExtensionsModuleFile = path.join(EXTENSIONS_DIR, 'lazy-extensions.module.ts');
|
|
|
+const sharedExtensionsModuleFile = path.join(EXTENSIONS_DIR, 'shared-extensions.module.ts');
|
|
|
|
|
|
/**
|
|
|
* Returns true if currently being executed from inside the Vendure monorepo.
|
|
|
@@ -38,56 +38,59 @@ export function getModuleOutputDir(extension: Required<AdminUiExtension>): strin
|
|
|
return path.join(EXTENSIONS_DIR, EXTENSIONS_MODULES_DIR, extension.id);
|
|
|
}
|
|
|
|
|
|
-export function createExtensionsModule(extensions: Array<Required<AdminUiExtension>>) {
|
|
|
+export function createExtensionsModules(extensions: Array<Required<AdminUiExtension>>) {
|
|
|
const removeTsExtension = (filename: string): string => filename.replace(/\.ts$/, '');
|
|
|
const importPath = (e: Required<AdminUiExtension>): string =>
|
|
|
`./${EXTENSIONS_MODULES_DIR}/${e.id}/${removeTsExtension(e.ngModuleFileName)}`;
|
|
|
- fs.renameSync(originalExtensionsModuleFile, tempExtensionsModuleFile);
|
|
|
|
|
|
- const source = generateExtensionModuleTsSource(
|
|
|
- extensions.map(e => ({ className: e.ngModuleName, path: importPath(e) })),
|
|
|
- );
|
|
|
- fs.writeFileSync(path.join(EXTENSIONS_DIR, 'extensions.module.ts'), source, 'utf-8');
|
|
|
+ for (const type of ['lazy', 'shared'] as const) {
|
|
|
+ const source = generateExtensionModuleTsSource(
|
|
|
+ type,
|
|
|
+ extensions
|
|
|
+ .filter(e => e.type === type)
|
|
|
+ .map(e => ({ className: e.ngModuleName, path: importPath(e) })),
|
|
|
+ );
|
|
|
+ const filePath = type === 'lazy' ? lazyExtensionsModuleFile : sharedExtensionsModuleFile;
|
|
|
+ fs.writeFileSync(filePath, source, 'utf-8');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export function restoreOriginalExtensionsModule() {
|
|
|
- fs.renameSync(originalExtensionsModuleFile, path.join(EXTENSIONS_DIR, 'extensions.module.ts.generated'));
|
|
|
- restoreExtensionsModule();
|
|
|
+ restoreExtensionsModules();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Restores the placeholder ExtensionsModule file from a template.
|
|
|
*/
|
|
|
-export function restoreExtensionsModule() {
|
|
|
- const source = `import { CommonModule } from '@angular/common';
|
|
|
-import { NgModule } from '@angular/core';
|
|
|
-
|
|
|
-/**
|
|
|
- * This is a placeholder module for UI extensions provided by the AdminUiPlugin \`extensions\` option.
|
|
|
- * When the {@link compileUiExtensions} function is executed, this module gets temporarily replaced
|
|
|
- * by a generated module which includes all of the configured extension modules.
|
|
|
- */
|
|
|
-@NgModule({
|
|
|
- imports: [CommonModule],
|
|
|
-})
|
|
|
-export class ExtensionsModule {}
|
|
|
-`;
|
|
|
- fs.writeFileSync(originalExtensionsModuleFile, source, 'utf-8');
|
|
|
+export function restoreExtensionsModules() {
|
|
|
+ for (const type of ['lazy', 'shared'] as const) {
|
|
|
+ const source = generateExtensionModuleTsSource(type, []);
|
|
|
+ const filePath = type === 'lazy' ? lazyExtensionsModuleFile : sharedExtensionsModuleFile;
|
|
|
+ fs.writeFileSync(filePath, source, 'utf-8');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-function generateExtensionModuleTsSource(modules: Array<{ className: string; path: string }>): string {
|
|
|
- return `/** This file is generated by the build() function. Do not edit. */
|
|
|
+function generateExtensionModuleTsSource(
|
|
|
+ type: 'shared' | 'lazy',
|
|
|
+ modules: Array<{ className: string; path: string }>,
|
|
|
+): string {
|
|
|
+ return `/** This file is generated by the createExtensionsModules() function in devkit/common.ts. Do not edit. */
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
import { NgModule } from '@angular/core';
|
|
|
|
|
|
${modules.map(e => `import { ${e.className} } from '${e.path}';`).join('\n')}
|
|
|
|
|
|
+/**
|
|
|
+ * This is a placeholder module for UI extensions provided by the AdminUiPlugin \`extensions\` option.
|
|
|
+ * When the {@link createExtensionsModules} function is executed, this module gets temporarily replaced
|
|
|
+ * by a generated module which includes all of the configured extension modules.
|
|
|
+ */
|
|
|
@NgModule({
|
|
|
imports: [
|
|
|
CommonModule,
|
|
|
${modules.map(e => e.className + ',').join('\n')}
|
|
|
],
|
|
|
})
|
|
|
-export class ExtensionsModule {}
|
|
|
+export class ${type === 'lazy' ? 'Lazy' : 'Shared'}ExtensionsModule {}
|
|
|
`;
|
|
|
}
|