UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

134 lines 5.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const schematics_1 = require("@angular-devkit/schematics"); const tasks_1 = require("@angular-devkit/schematics/tasks"); const ast_1 = require("../utils/ast"); const custom_theme_1 = require("../utils/custom-theme"); const config_1 = require("../utils/devkit-utils/config"); const lib_versions_1 = require("../utils/lib-versions"); const package_1 = require("../utils/package"); const project_targets_1 = require("../utils/project-targets"); const ADD_CONFIG = { LESS_VERSION: '^2.7.3', CUSTOM_THEME_PATH: 'src/theme.less', COMPILED_THEME_PATH: 'node_modules/ng-zorro-antd-mobile/src/ng-zorro-antd-mobile.min.css', BOOT_PAGE_PATH: 'src/app/app.component.html', BOOT_PAGE_HTML: `<!-- NG-ZORRO-MOBILE --> <a href="https://github.com/NG-ZORRO/ng-zorro-antd-mobile" target="_blank" style="display: flex;align-items: center;justify-content: center;height: 100%;width: 100%;"> <img height="300" src="https://img.alicdn.com/tfs/TB15EhGJwHqK1RjSZFPXXcwapXa-500-539.png"> </a>` }; function default_1(options) { return schematics_1.chain([ options && options.skipPackageJson ? schematics_1.noop() : addZorroToPackageJson(), setBootstrapPage(), addThemeToAppStyles(options), addModulesToAppModule(options), (options && !options.skipPackageJson) || (options && !options.theme) ? installNodeDeps() : schematics_1.noop() ]); } exports.default = default_1; /** 添加 ng-zorro-antd-mobile 到 package.json 的 dependencies */ function addZorroToPackageJson() { return (host) => { package_1.addPackageToPackageJson(host, 'dependencies', 'ng-zorro-antd-mobile', lib_versions_1.zorroVersion); return host; }; } /** 添加 BrowserAnimationsModule FormsModule HttpClientModule NgZorroAntdMobileModule 到 app.module */ function addModulesToAppModule(options) { return (host) => { const workspace = config_1.getWorkspace(host); const project = config_1.getProjectFromWorkspace(workspace, options.project); ast_1.addModuleImportToRootModule(host, 'BrowserAnimationsModule', '@angular/platform-browser/animations', project); ast_1.addModuleImportToRootModule(host, 'FormsModule', '@angular/forms', project); ast_1.addModuleImportToRootModule(host, 'HttpClientModule', '@angular/common/http', project); ast_1.addModuleImportToRootModule(host, 'NgZorroAntdMobileModule', 'ng-zorro-antd-mobile', project); return host; }; } /** 添加样式配置 */ function addThemeToAppStyles(options) { return function (host) { const workspace = config_1.getWorkspace(host); const project = config_1.getProjectFromWorkspace(workspace, options.project); if (options.theme) { insertCustomTheme(project, host, workspace); } else { insertCompiledTheme(project, host, workspace); } return host; }; } exports.addThemeToAppStyles = addThemeToAppStyles; /** 将预设样式写入 theme.less,并添加到 angular.json */ function insertCustomTheme(project, host, workspace) { const themePath = ADD_CONFIG.CUSTOM_THEME_PATH; const customTheme = custom_theme_1.createCustomTheme(); if (host.exists(themePath)) { const beforeContent = host.read(themePath).toString('utf8'); if (beforeContent.indexOf(customTheme) === -1) { host.overwrite(themePath, `${customTheme}\n${beforeContent}`); } } else { host.create(themePath, custom_theme_1.createCustomTheme()); } if (project.targets || project.architect) { addStyleToTarget('build', host, workspace, project, themePath, ADD_CONFIG.COMPILED_THEME_PATH); addStyleToTarget('test', host, workspace, project, themePath, ADD_CONFIG.COMPILED_THEME_PATH); } else { throw new schematics_1.SchematicsException(`${project.name} does not have an architect or targets configuration`); } } /** 设置引导页面到 app.component.ts */ function setBootstrapPage() { return (host) => { host.overwrite(ADD_CONFIG.BOOT_PAGE_PATH, ADD_CONFIG.BOOT_PAGE_HTML); return host; }; } /** 安装依赖 */ function installNodeDeps() { return (host, context) => { context.addTask(new tasks_1.NodePackageInstallTask()); }; } /** 将编译的 css 添加到 angular.json */ function insertCompiledTheme(project, host, workspace) { const themePath = ADD_CONFIG.COMPILED_THEME_PATH; if (project.targets || project.architect) { addStyleToTarget('build', host, workspace, project, themePath); addStyleToTarget('test', host, workspace, project, themePath); } else { throw new schematics_1.SchematicsException(`${project.name} does not have an architect or targets configuration`); } } /** Adds a style entry to the given target. */ function addStyleToTarget(targetName, host, workspace, project, asset, exclude = '') { const styleEntry = asset; const targetOptions = project_targets_1.getProjectTargetOptions(project, targetName); // We can't assume that any of these properties are defined, so safely add them as we go // if necessary. if (!targetOptions.styles) { targetOptions.styles = [styleEntry]; } else { const existingStyles = targetOptions.styles.map(s => typeof s === 'string' ? s : s.input); const hasGivenTheme = existingStyles.find(s => s.includes(asset)); if (exclude) { const removeIndex = targetOptions.styles.indexOf(exclude); if (removeIndex >= 0) { targetOptions.styles.splice(removeIndex, 1); } } if (!hasGivenTheme) { targetOptions.styles.splice(0, 0, styleEntry); } } host.overwrite('angular.json', JSON.stringify(workspace, null, 2)); } //# sourceMappingURL=index.js.map