UNPKG

5.66 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const schematics_1 = require("@angular-devkit/schematics");
4const workspace_1 = require("@schematics/angular/utility/workspace");
5const schematics_2 = require("@angular/cdk/schematics");
6function default_1(options) {
7 return (0, schematics_1.chain)([
8 addMdbFreeModuleImport(options),
9 addAngularAnimationsModule(options),
10 addStylesAndScriptsToAngularJson(options),
11 addRobotoFontToIndexHtml(options),
12 ]);
13}
14exports.default = default_1;
15function 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}
25function 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}
46function 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}
64function 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//# sourceMappingURL=mdb-setup.js.map
\No newline at end of file