@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
101 lines • 5.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addTaigaModules = addTaigaModules;
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, 'provideTaiga()', { unique: true });
(0, add_unique_import_1.addUniqueImport)(mainModulePath, 'provideTaiga', '@taiga-ui/core');
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) {
(0, push_to_array_property_1.pushToObjectArrayProperty)(bootstrapOptions, 'providers', 'provideTaiga()');
const modules = [];
modules.push({ name: 'provideTaiga', packageName: '@taiga-ui/core' });
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)();
});
}
//# sourceMappingURL=add-taiga-modules.js.map