@o3r/core
Version:
Core of the Otter Framework
97 lines • 5.47 kB
JavaScript
;
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