UNPKG

@taiga-ui/cdk

Version:

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

117 lines (116 loc) 5.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addTaigaModules = void 0; const tslib_1 = require("tslib"); const workspace_1 = require("@schematics/angular/utility/workspace"); const ng_morph_1 = require("ng-morph"); const constants_1 = require("../../constants"); const add_unique_import_1 = require("../../utils/add-unique-import"); const get_component_from_identifier_1 = require("../../utils/get-component-from-identifier"); const get_project_target_options_1 = require("../../utils/get-project-target-options"); const get_projects_1 = require("../../utils/get-projects"); const get_standalone_bootstrap_function_1 = require("../../utils/get-standalone-bootstrap-function"); const push_to_array_property_1 = require("../../utils/push-to-array-property"); const modules_1 = require("../constants/modules"); function addTuiModules({ mainClass, context, }) { const modules = getModules([modules_1.BROWSER_ANIMATION_MODULE]); const mainModulePath = mainClass.getSourceFile().getFilePath(); modules.forEach((module) => { (0, ng_morph_1.addImportToNgModule)(mainClass, module.name, { unique: true }); (0, add_unique_import_1.addUniqueImport)(mainModulePath, module.name, module.packageName); }); (0, ng_morph_1.addProviderToNgModule)(mainClass, 'provideEventPlugins()', { unique: true }); (0, add_unique_import_1.addUniqueImport)(mainModulePath, 'provideEventPlugins', '@taiga-ui/event-plugins'); context.logger.info(`${modules.map((module) => module.name)} was added to ${mainModulePath}`); } function addTuiEntitiesToStandalone({ bootstrapFunction, options, context, }) { const [rootComponentIdentifier, bootstrapOptions = bootstrapFunction.addArgument('{providers}: []'),] = bootstrapFunction.getArguments(); if (!rootComponentIdentifier) { return; } const mainClass = (0, get_component_from_identifier_1.getComponentFromIdentifier)(rootComponentIdentifier); const optionsObject = getOptionsObject(bootstrapOptions); if (!optionsObject) { return; } if (mainClass) { addMainModuleToRootComponent({ mainClass, options, context }); addRootTuiProvidersToBootstrapFn(optionsObject); } } function addRootTuiProvidersToBootstrapFn(bootstrapOptions) { const property = bootstrapOptions.getProperty('providers'); const initializer = property.getInitializer(); const provideAnimations = initializer .getElements() .find((el) => ng_morph_1.Node.isCallExpression(el) && el.getExpression().getText() === 'provideAnimations'); (0, push_to_array_property_1.pushToObjectArrayProperty)(bootstrapOptions, 'providers', 'provideEventPlugins()'); const modules = []; if (!provideAnimations) { modules.push({ name: 'provideAnimations', packageName: '@angular/platform-browser/animations', }); (0, push_to_array_property_1.pushToObjectArrayProperty)(bootstrapOptions, 'providers', 'provideAnimations()', { index: 0, }); } modules.push({ name: 'provideEventPlugins', packageName: '@taiga-ui/event-plugins' }); modules.forEach(({ name, packageName }) => { (0, add_unique_import_1.addUniqueImport)(bootstrapOptions.getSourceFile().getFilePath(), name, packageName); }); } function addMainModuleToRootComponent({ mainClass, context, }) { const rootComponentPath = mainClass.getSourceFile().getFilePath(); const modules = getModules(); modules.forEach(({ name, packageName }) => { (0, ng_morph_1.addImportToComponent)(mainClass, name); (0, add_unique_import_1.addUniqueImport)(rootComponentPath, name, packageName); }); context.logger.info(`${modules.map(({ name }) => name)} was added to ${rootComponentPath}`); } function getModules(extraModules) { return [...(extraModules || []), modules_1.MAIN_MODULE]; } function getOptionsObject(options) { var _a; if (ng_morph_1.Node.isObjectLiteralExpression(options)) { return options; } const [definition] = options.getDefinitionNodes(); return (_a = definition === null || definition === void 0 ? void 0 : definition.getChildrenOfKind(ng_morph_1.SyntaxKind.ObjectLiteralExpression)[0]) !== null && _a !== void 0 ? _a : null; } function addTaigaModules(options) { return (tree, context) => tslib_1.__awaiter(this, void 0, void 0, function* () { const workspace = yield (0, workspace_1.getWorkspace)(tree); const [project] = (0, get_projects_1.getProjects)(options, workspace); if (!project) { context.logger.warn('[WARNING]: Target project not found in current workspace'); return; } const buildOptions = (0, get_project_target_options_1.getProjectTargetOptions)(project, 'build'); const mainFilePath = (buildOptions.main || buildOptions.browser); if (!mainFilePath) { context.logger.error('[ERROR]: Could not find the project main file'); return; } (0, ng_morph_1.setActiveProject)((0, ng_morph_1.createProject)(tree, '/', constants_1.ALL_FILES)); const bootstrapFunction = (0, get_standalone_bootstrap_function_1.getStandaloneBootstrapFunction)(mainFilePath); if (bootstrapFunction) { addTuiEntitiesToStandalone({ bootstrapFunction, options, context, }); } else { const mainClass = (0, ng_morph_1.getMainModule)(mainFilePath); if (mainClass) { addTuiModules({ mainClass, options, context }); } } (0, ng_morph_1.saveActiveProject)(); }); } exports.addTaigaModules = addTaigaModules;