1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const schematics_1 = require("@angular-devkit/schematics");
|
4 | const workspace_1 = require("@schematics/angular/utility/workspace");
|
5 | const schematics_2 = require("@angular/cdk/schematics");
|
6 | function default_1(options) {
|
7 | return (0, schematics_1.chain)([
|
8 | addMdbFreeModuleImport(options),
|
9 | addAngularAnimationsModule(options),
|
10 | addStylesAndScriptsToAngularJson(options),
|
11 | addRobotoFontToIndexHtml(options),
|
12 | ]);
|
13 | }
|
14 | exports.default = default_1;
|
15 | function addMdbFreeModuleImport(options) {
|
16 | return (tree) => {
|
17 | const workspace = (0, workspace_1.getWorkspace)(tree);
|
18 | const project = (0, schematics_2.getProjectFromWorkspace)(workspace, options.project);
|
19 | const mdbFreeModuleName = 'MDBBootstrapModule.forRoot()';
|
20 | const mdbFreeModulePath = 'angular-bootstrap-md';
|
21 | (0, schematics_2.addModuleImportToRootModule)(tree, mdbFreeModuleName, mdbFreeModulePath, project);
|
22 | return tree;
|
23 | };
|
24 | }
|
25 | function addAngularAnimationsModule(options) {
|
26 | return (tree, context) => {
|
27 | const workspace = (0, workspace_1.getWorkspace)(tree);
|
28 | const project = (0, schematics_2.getProjectFromWorkspace)(workspace, options.project);
|
29 | const appModulePath = (0, schematics_2.getAppModulePath)(tree, (0, schematics_2.getProjectMainFile)(project));
|
30 | const browserAnimationModule = 'BrowserAnimationsModule';
|
31 | const animationsModulePath = '@angular/platform-browser/animations';
|
32 | const noopAnimationModule = 'NoopAnimationsModule';
|
33 | if (options.animations) {
|
34 | if ((0, schematics_2.hasNgModuleImport)(tree, appModulePath, noopAnimationModule)) {
|
35 | context.logger.error(`Could not add ${browserAnimationModule} because ${noopAnimationModule} is already added`);
|
36 | return;
|
37 | }
|
38 | (0, schematics_2.addModuleImportToRootModule)(tree, browserAnimationModule, animationsModulePath, project);
|
39 | }
|
40 | else if (!(0, schematics_2.hasNgModuleImport)(tree, appModulePath, noopAnimationModule)) {
|
41 | (0, schematics_2.addModuleImportToRootModule)(tree, noopAnimationModule, animationsModulePath, project);
|
42 | }
|
43 | return tree;
|
44 | };
|
45 | }
|
46 | function addRobotoFontToIndexHtml(options) {
|
47 | return (tree, context) => {
|
48 | const fontUrl = 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,600&display=swap';
|
49 | const workspace = (0, workspace_1.getWorkspace)(tree);
|
50 | const project = (0, schematics_2.getProjectFromWorkspace)(workspace, options.project);
|
51 | const projectIndexFiles = (0, schematics_2.getProjectIndexFiles)(project);
|
52 | const logger = context.logger;
|
53 | if (!projectIndexFiles.length) {
|
54 | logger.error('Index HTML not found');
|
55 | logger.info('Add roboto font manually');
|
56 | return;
|
57 | }
|
58 | projectIndexFiles.forEach((indexFile) => {
|
59 | (0, schematics_2.appendHtmlElementToHead)(tree, indexFile, `<link href="${fontUrl}" rel="stylesheet">`);
|
60 | });
|
61 | return tree;
|
62 | };
|
63 | }
|
64 | function addStylesAndScriptsToAngularJson(options) {
|
65 | return (tree, context) => {
|
66 | const logger = context.logger;
|
67 | const mainStyles = [
|
68 | {
|
69 | name: 'bootstrap',
|
70 | path: './node_modules/angular-bootstrap-md/assets/scss/bootstrap/bootstrap.scss',
|
71 | },
|
72 | { name: 'mdb', path: './node_modules/angular-bootstrap-md/assets/scss/mdb.scss' },
|
73 | ];
|
74 | const additionalStyles = [
|
75 | {
|
76 | name: 'fontawesome',
|
77 | path: './node_modules/@fortawesome/fontawesome-free/scss/fontawesome.scss',
|
78 | },
|
79 | {
|
80 | name: 'fontawesome-solid',
|
81 | path: './node_modules/@fortawesome/fontawesome-free/scss/solid.scss',
|
82 | },
|
83 | {
|
84 | name: 'fontawesome-regular',
|
85 | path: './node_modules/@fortawesome/fontawesome-free/scss/regular.scss',
|
86 | },
|
87 | {
|
88 | name: 'fontawesome-brand',
|
89 | path: './node_modules/@fortawesome/fontawesome-free/scss/brands.scss',
|
90 | },
|
91 | { name: 'animate.css', path: './node_modules/animate.css/animate.css' },
|
92 | ];
|
93 | const allStyles = options.externalDependencies ? [...mainStyles, ...additionalStyles] : mainStyles;
|
94 | const additionalScripts = [
|
95 | { name: 'chart.js', path: './node_modules/chart.js/dist/Chart.js' },
|
96 | { name: 'hammerjs', path: './node_modules/hammerjs/hammer.min.js' },
|
97 | ];
|
98 | const angularJsonFile = tree.read('angular.json');
|
99 | if (angularJsonFile) {
|
100 | const angularJsonFileObject = JSON.parse(angularJsonFile.toString('utf-8'));
|
101 | const project = options.project
|
102 | ? options.project
|
103 | : Object.keys(angularJsonFileObject['projects'])[0];
|
104 | const projectObject = angularJsonFileObject.projects[project];
|
105 | const styles = projectObject.architect.build.options.styles;
|
106 | const scripts = projectObject.architect.build.options.scripts;
|
107 | allStyles.forEach(style => {
|
108 | styles.unshift(style.path);
|
109 | });
|
110 | additionalScripts.forEach(script => {
|
111 | scripts.push(script.path);
|
112 | });
|
113 | tree.overwrite('angular.json', JSON.stringify(angularJsonFileObject, null, 2));
|
114 | }
|
115 | else {
|
116 | logger.error('Failed to add scripts or styles to angular.json');
|
117 | }
|
118 | return tree;
|
119 | };
|
120 | }
|
121 |
|
\ | No newline at end of file |