@syncfusion/ej2-angular-base
Version:
A common package of Essential JS 2 base Angular libraries, methods and class definitions
120 lines (119 loc) • 5.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.install = void 0;
const core_1 = require("@angular-devkit/core");
const schematics_1 = require("@angular-devkit/schematics");
const tasks_1 = require("@angular-devkit/schematics/tasks");
const helpers_1 = require("../utils/helpers/helpers");
const ast_1 = require("../utils/ast");
const get_project_1 = require("../utils/get-project");
const theme_1 = require("./theme");
const package_1 = require("./../utils/package");
function addEJ2ToPackageJson(libOptions) {
return (host) => {
(0, package_1.addEJ2PackageToPackageJson)(host, 'dependencies', libOptions.pkgName, libOptions.pkgVer);
return host;
};
}
/*
* Install the packages
*/
function installNodePackages() {
return (host, context) => {
context.addTask(new tasks_1.NodePackageInstallTask());
return host;
};
}
/*
* Install function to accept the schema, package name and version
*/
function install(options, libOptions) {
const theme = options.theme || 'material';
return (0, schematics_1.chain)([
options && options.skipPackageJson ? (0, schematics_1.noop)() : addEJ2ToPackageJson(libOptions),
(0, theme_1.addEJ2ThemeToPackageJson)(options, libOptions),
(options && !options.skipPackageJson) ? installNodePackages() : (0, schematics_1.noop)(),
addEJ2PackageRootConfig(options, libOptions),
(0, theme_1.addEJ2Theme)(options, theme)
]);
}
exports.install = install;
function validateEJ2Modules(moduleName, libOptions) {
return libOptions.moduleName.split(',').filter((module) => {
return ((module.trim().split('Module'))[0].toLowerCase() === moduleName.toLowerCase());
});
}
function detectRootModulePath(host, project) {
const projectRoot = project.root || '';
const sourceRoot = project.sourceRoot || `${projectRoot}/src`;
const possiblePaths = [
`${sourceRoot}/app/app.ts`,
`${sourceRoot}/app/app.component.ts`,
`${sourceRoot}/app/app.module.ts`,
`${projectRoot}/app/app.ts`,
`${projectRoot}/app/app.component.ts`,
`${projectRoot}/app/app.module.ts` // Alternative NgModule path
];
for (const path of possiblePaths) {
if (host.exists(path)) {
return path;
}
}
return null;
}
function addModuleImportToCustomModule(host, options, validModules, libOptions) {
if (host.exists(options.modulePath.toString())) {
(0, ast_1.addModuleImportToModule)(host, (0, core_1.normalize)(options.modulePath.toString()), validModules, libOptions.pkgName);
}
else {
throw new schematics_1.SchematicsException(`Could not find the module file. The given path \'${options.modulePath}\' is invalid. ` +
`Please provide a valid relative path to the module file.\n` +
`For example: src/app/app.module.ts`);
}
}
/*
* Add browser animation module to app.module
*/
function addEJ2PackageRootConfig(options, libOptions) {
return (host) => {
const workspace = (0, helpers_1.getWorkspace)(host);
const project = (0, get_project_1.getProjectFromWorkspace)(workspace, options.project);
const architect = project.architect;
let validModules;
let availableModules = libOptions.moduleName.replace(/Module/g, '').trim();
if (options.modules !== '') {
let preferredModule = [];
options.modules.split(',').forEach((module) => {
let validatedModule = (validateEJ2Modules(module.trim(), libOptions)).toString().trim();
if (validatedModule === '') {
console.log('\x1b[31m%s\x1b[0m', 'The ' + module + 'module is not part of the' +
' package, ' + libOptions.pkgName + '. The available modules are ' + availableModules + '.');
}
else {
preferredModule.push(validatedModule);
}
});
validModules = preferredModule.toString().replace(/,/g, ', ');
}
else {
validModules = libOptions.moduleName;
}
if (architect.build.options.main) {
if (options.modulePath !== undefined && options.modulePath !== "") {
addModuleImportToCustomModule(host, options, validModules, libOptions);
}
else {
// Resolve the module path from the main file
const mainPath = architect.build.options.main;
const modulePath = (0, helpers_1.getAppModulePath)(host, mainPath);
(0, ast_1.addModuleImportToModule)(host, modulePath, validModules, libOptions.pkgName);
}
}
else {
// Auto-detect root module/component for different Angular versions
const detectedPath = detectRootModulePath(host, project);
(0, ast_1.addModuleImportToModule)(host, detectedPath, validModules, libOptions.pkgName);
}
return host;
};
}