UNPKG

@o3r/core

Version:
97 lines 5.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateCustomizationEnvironment = updateCustomizationEnvironment; const node_path_1 = require("node:path"); const schematics_1 = require("@angular-devkit/schematics"); const schematics_2 = require("@o3r/schematics"); const utility_1 = require("@schematics/angular/utility"); const ast_utils_1 = require("@schematics/angular/utility/ast-utils"); const dependencies_1 = require("@schematics/angular/utility/dependencies"); /** * Enable customization capabilities * @param rootPath @see RuleFactory.rootPath * @param o3rCoreVersion * @param options * @param options.projectName * @param isLibrary */ function updateCustomizationEnvironment(rootPath, o3rCoreVersion, options, isLibrary) { /** * Generate customization folder * @param tree * @param context */ const generateC11nFolder = (tree, context) => { const workingDirectory = (options?.projectName && (0, schematics_2.getWorkspaceConfig)(tree)?.projects[options.projectName]?.root) || '.'; if (tree.exists(node_path_1.posix.join(workingDirectory, 'src', 'customization', 'presenters-map.empty.ts'))) { return tree; } const templateSource = (0, schematics_1.apply)((0, schematics_1.url)((0, schematics_2.getTemplateFolder)(rootPath, __dirname)), [ (0, schematics_1.template)({}), (0, schematics_1.renameTemplateFiles)(), (0, schematics_1.move)(workingDirectory) ]); return (0, schematics_1.mergeWith)(templateSource, schematics_1.MergeStrategy.Default)(tree, context); }; /** * Edit main module with the customization required information * @param tree * @param context */ const registerModules = (tree, context) => { const additionalRules = []; const fileInfo = (0, schematics_2.getFileInfo)(tree, context, options?.projectName); if (!fileInfo.moduleFilePath || !fileInfo.appModuleFile || !fileInfo.sourceFile) { return tree; } // if we already have the customization module imported do nothing to avoid overriding custom configs with the empty ones if ((0, ast_utils_1.isImported)(fileInfo.sourceFile, 'C11nModule', '@o3r/components') || (0, ast_utils_1.isImported)(fileInfo.sourceFile, 'provideCustomComponents', '@o3r/components')) { return tree; } const fileContent = tree.readText(fileInfo.moduleFilePath).replace(/\s*/g, ''); const recorder = tree.beginUpdate(fileInfo.moduleFilePath); const moduleIndex = fileInfo.moduleIndex; /** * Insert import on top of the main module file * @param rec * @param name * @param file * @param isDefault */ const insertImportToModuleFile = (rec, name, file, isDefault) => (0, schematics_2.insertImportToModuleFile)(name, file, fileInfo.sourceFile, rec, fileInfo.moduleFilePath, isDefault); /** * Add custom code before the module definition * @param rec * @param line */ const insertBeforeModule = (rec, line) => (0, schematics_2.insertBeforeModule)(line, fileContent, rec, moduleIndex); let updatedRecorder = recorder; updatedRecorder = insertImportToModuleFile(updatedRecorder, 'initializeEntryComponents', '../customization/presenters-map.empty'); updatedRecorder = insertImportToModuleFile(updatedRecorder, 'getCustomComponents', '../customization/presenters-map.empty'); updatedRecorder = insertImportToModuleFile(updatedRecorder, 'Provider', '@angular/core'); updatedRecorder = insertImportToModuleFile(updatedRecorder, 'initializeCustomProviders', '../customization/custom-providers.empty'); additionalRules.push((0, utility_1.addRootImport)(options?.projectName, ({ code }) => code `...entry.customComponentsModules`), (0, utility_1.addRootProvider)(options?.projectName, ({ code }) => code `...customProviders`), (0, utility_1.addRootProvider)(options?.projectName, ({ code }) => code `provideCustomComponents(getCustomComponents())`)); updatedRecorder = insertImportToModuleFile(updatedRecorder, 'provideCustomComponents', '@o3r/components'); updatedRecorder = insertBeforeModule(updatedRecorder, 'const entry = initializeEntryComponents();'); updatedRecorder = insertBeforeModule(updatedRecorder, 'const customProviders: Provider[] = initializeCustomProviders();'); tree.commitUpdate(updatedRecorder); return (0, schematics_1.chain)(additionalRules)(tree, context); }; return (tree, _context) => { const workingDirectory = (options?.projectName && (0, schematics_2.getWorkspaceConfig)(tree)?.projects[options.projectName]?.root) || '.'; return (0, schematics_1.chain)([ generateC11nFolder, registerModules, (0, schematics_2.ngAddPackages)(['@o3r/components', '@o3r/configuration'], { skipConfirmation: true, version: o3rCoreVersion, parentPackageInfo: '@o3r/core - customization environment update', projectName: options?.projectName, dependencyType: isLibrary ? dependencies_1.NodeDependencyType.Peer : dependencies_1.NodeDependencyType.Default, workingDirectory }) ]); }; } //# sourceMappingURL=index.js.map