@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
JavaScript
;
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;