UNPKG

@o3r/core

Version:
80 lines 5.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateComponentDecorators = void 0; const schematics_1 = require("@o3r/schematics"); const ast_utils_1 = require("@schematics/angular/utility/ast-utils"); const change_1 = require("@schematics/angular/utility/change"); const ts = require("typescript"); const computeRemovePosition = (node) => ({ start: node.getFullStart(), length: node.getEnd() - node.getFullStart() }); const removeImport = (source, symbolName, fileName) => { const importNode = source.statements.filter((statement) => ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === fileName).map((statement) => statement.importClause?.namedBindings && ts.isNamedImports(statement.importClause.namedBindings) ? statement.importClause.namedBindings.elements.find((e) => e.name.escapedText.toString() === symbolName) : undefined).find((element) => !!element); return importNode ? computeRemovePosition(importNode) : undefined; }; /** * Update component file with new decorators for otter devtools * @param tree Tree */ const updateComponentDecorators = (tree) => { const componentFiles = new Set((0, schematics_1.getFilesInFolderFromWorkspaceProjectsInTree)(tree, '', 'component.ts')); componentFiles.forEach((filePath) => { const source = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.ES2015, true); const recorder = tree.beginUpdate(filePath); const importO3rComponentChange = (0, ast_utils_1.insertImport)(source, filePath, 'O3rComponent', '@o3r/core'); if (importO3rComponentChange instanceof change_1.InsertChange) { recorder.insertLeft(importO3rComponentChange.pos, `${importO3rComponentChange.toAdd}\n`); } source.forEachChild((node) => { if (ts.isClassDeclaration(node)) { const componentTypeNode = node.heritageClauses ?.find((clause) => clause.getText().startsWith('implements')) ?.types .find((type) => { const text = type.expression.getText(); return text === 'Block' || text === 'Page'; }); const componentType = componentTypeNode?.expression?.getText() || 'Component'; if (!!componentTypeNode && (componentType === 'Block' || componentType === 'Page' || componentType === 'ExposedComponent')) { recorder.remove(componentTypeNode.getFullStart(), componentTypeNode.end - componentTypeNode.getFullStart()); const removePos = removeImport(source, componentType, '@o3r/core'); if (removePos) { recorder.remove(removePos.start, removePos.length); } } recorder.insertLeft(node.getStart(), `@O3rComponent({\n componentType: '${componentType}'\n})\n`); const dynamicConfigObserver = node.members.find((member) => ts.isPropertyDeclaration(member) && member.type && ts.isTypeReferenceNode(member.type) && ts.isIdentifier(member.type.typeName) && member.type.typeName.escapedText.toString() === 'ConfigurationObserver'); if (dynamicConfigObserver) { const importConfigObserverChange = (0, ast_utils_1.insertImport)(source, filePath, 'ConfigObserver', '@o3r/configuration'); if (importConfigObserverChange instanceof change_1.InsertChange) { recorder.insertLeft(importConfigObserverChange.pos, `${importConfigObserverChange.toAdd}\n`); } recorder.insertLeft(dynamicConfigObserver.getStart(), '@ConfigObserver()\n '); } const inputMergeDecorator = node.members .filter((member) => ts.isPropertyDeclaration(member)) .reduce((acc, member) => acc.concat(ts.canHaveDecorators(member) ? ts.getDecorators(member) || [] : []), []) .find((decorator) => ts.isCallExpression(decorator.expression) && ts.isIdentifier(decorator.expression.expression) && decorator.expression.expression.escapedText.toString() === 'InputMerge'); if (inputMergeDecorator) { const inputMergeDecoratorRemovePos = computeRemovePosition(inputMergeDecorator); recorder.remove(inputMergeDecoratorRemovePos.start, inputMergeDecoratorRemovePos.length); const removePos = removeImport(source, 'InputMerge', '@o3r/localization'); if (removePos) { recorder.remove(removePos.start, removePos.length); } } } }); tree.commitUpdate(recorder); }); }; exports.updateComponentDecorators = updateComponentDecorators; //# sourceMappingURL=index.js.map