UNPKG

@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
"use strict"; 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; }; }