UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

94 lines 4.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tuiLetMigration = tuiLetMigration; const schematics_1 = require("@angular/cdk/schematics"); const ng_morph_1 = require("ng-morph"); const file_globs_1 = require("../../../constants/file-globs"); const colored_log_1 = require("../../../utils/colored-log"); const remove_module_1 = require("../../../utils/remove-module"); const get_component_templates_1 = require("../../../utils/templates/get-component-templates"); const template_resource_1 = require("../../../utils/templates/template-resource"); const get_file_system_1 = require("../../utils/get-file-system"); const STRUCTURAL_ATTR = '*tuiLet'; function tuiLetMigration(tree, options) { const fileSystem = (0, get_file_system_1.getFileSystem)(tree); (0, remove_module_1.removeModule)('TuiLet', '@taiga-ui/cdk'); const resources = (0, get_component_templates_1.getComponentTemplates)(file_globs_1.ALL_FILES); for (const resource of resources) { migrateTemplate(resource, fileSystem, options); } fileSystem.commitEdits(); (0, ng_morph_1.saveActiveProject)(); } function migrateTemplate(resource, fileSystem, options) { const templatePath = fileSystem.resolve((0, template_resource_1.getPathFromTemplateResource)(resource)); const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem); const recorder = fileSystem.edit(templatePath); const offset = (0, template_resource_1.getTemplateOffset)(resource); const elements = (0, schematics_1.findElementsWithAttribute)(template, STRUCTURAL_ATTR); for (const element of elements) { migrateStructuralLet(element, template, recorder, offset, options); } } function migrateStructuralLet(element, template, recorder, offset, options) { const attr = element.attrs.find((a) => a.name === STRUCTURAL_ATTR.toLowerCase()); if (!attr) { return; } const { expr, key } = parseLetExpression(attr.value); if (!expr || !key) { return; } if (containsDuplicateLet(template, key)) { if (!options['skip-logs']) { (0, colored_log_1.errorLog)(`The @let with key ${key} is already defined`); } return; } insertLetDeclaration({ recorder, offset, element, template, expr, key }); removeStructuralAttribute({ recorder, offset, element, attr }); } function parseLetExpression(value) { const [expr = '', key = ''] = value.split(' as ').map((v) => v.trim()); return { expr, key }; } function containsDuplicateLet(template, key) { const pattern = new RegExp(String.raw `@let\s+${key}\s+=`); return pattern.test(template); } function insertLetDeclaration({ recorder, element, key, expr, template, offset, }) { const loc = element.sourceCodeLocation; const indent = computeIndent(template, loc.startOffset); const indentStr = ' '.repeat(indent); recorder.insertLeft(offset + loc.startOffset, `@let ${key} = ${expr};\n${indentStr}`); } function computeIndent(template, pos) { const lastNewLine = template.lastIndexOf('\n', pos); return pos - (lastNewLine + 1); } function removeStructuralAttribute({ recorder, offset, element, attr, }) { var _a; const loc = element.sourceCodeLocation; const attrLoc = (_a = loc.attrs) === null || _a === void 0 ? void 0 : _a[attr.name]; const isPureNgContainer = element.tagName === 'ng-container' && element.attrs.length === 1; if (isPureNgContainer) { unwrapNgContainer(recorder, offset, element); return; } if (attrLoc) { recorder.remove(offset + attrLoc.startOffset - 1, attrLoc.endOffset - attrLoc.startOffset + 1); } } function unwrapNgContainer(recorder, offset, element) { const loc = element.sourceCodeLocation; const children = element.childNodes; if (!children.length) { recorder.remove(offset + loc.startOffset, loc.endOffset - loc.startOffset); return; } const first = children[0].sourceCodeLocation; const last = children[children.length - 1].sourceCodeLocation; recorder.remove(offset + loc.startOffset, first.startOffset - loc.startOffset); recorder.remove(offset + last.endOffset, loc.endOffset - last.endOffset); } //# sourceMappingURL=migrate-tui-let.js.map