1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const core_1 = require("@angular-devkit/core");
|
4 | const schematics_1 = require("@angular-devkit/schematics");
|
5 | const tasks_1 = require("@angular-devkit/schematics/tasks");
|
6 | const ast_1 = require("./../utils/ast");
|
7 | const config_1 = require("./../utils/config");
|
8 | const package_1 = require("./../utils/package");
|
9 | function addIonicAngularToPackageJson() {
|
10 | return (host) => {
|
11 | package_1.addPackageToPackageJson(host, 'dependencies', '@ionic/angular', 'latest');
|
12 | return host;
|
13 | };
|
14 | }
|
15 | function addIonicAngularToolkitToPackageJson() {
|
16 | return (host) => {
|
17 | package_1.addPackageToPackageJson(host, 'devDependencies', '@ionic/angular-toolkit', 'latest');
|
18 | return host;
|
19 | };
|
20 | }
|
21 | function addIonicAngularModuleToAppModule(projectSourceRoot) {
|
22 | return (host) => {
|
23 | ast_1.addModuleImportToRootModule(host, projectSourceRoot, 'IonicModule.forRoot()', '@ionic/angular');
|
24 | return host;
|
25 | };
|
26 | }
|
27 | function addIonicStyles(projectSourceRoot) {
|
28 | return (host) => {
|
29 | const ionicStyles = [
|
30 | 'node_modules/@ionic/angular/css/normalize.css',
|
31 | 'node_modules/@ionic/angular/css/structure.css',
|
32 | 'node_modules/@ionic/angular/css/typography.css',
|
33 | 'node_modules/@ionic/angular/css/core.css',
|
34 | 'node_modules/@ionic/angular/css/padding.css',
|
35 | 'node_modules/@ionic/angular/css/float-elements.css',
|
36 | 'node_modules/@ionic/angular/css/text-alignment.css',
|
37 | 'node_modules/@ionic/angular/css/text-transformation.css',
|
38 | 'node_modules/@ionic/angular/css/flex-utils.css',
|
39 | `${projectSourceRoot}/theme/variables.css`
|
40 | ].forEach(entry => {
|
41 | config_1.addStyle(host, entry);
|
42 | });
|
43 | return host;
|
44 | };
|
45 | }
|
46 | function addIonicons() {
|
47 | return (host) => {
|
48 | const ioniconsGlob = {
|
49 | glob: '**/*.svg',
|
50 | input: 'node_modules/ionicons/dist/ionicons/svg',
|
51 | output: './svg'
|
52 | };
|
53 | config_1.addAsset(host, ioniconsGlob);
|
54 | return host;
|
55 | };
|
56 | }
|
57 | function addIonicBuilder(projectName) {
|
58 | return (host) => {
|
59 | config_1.addArchitectBuilder(host, 'ionic-cordova-serve', {
|
60 | builder: '@ionic/angular-toolkit:cordova-serve',
|
61 | options: {
|
62 | cordovaBuildTarget: `${projectName}:ionic-cordova-build`,
|
63 | devServerTarget: `${projectName}:serve`
|
64 | },
|
65 | configurations: {
|
66 | production: {
|
67 | cordovaBuildTarget: `${projectName}:ionic-cordova-build:production`,
|
68 | devServerTarget: `${projectName}:serve:production`
|
69 | }
|
70 | }
|
71 | });
|
72 | config_1.addArchitectBuilder(host, 'ionic-cordova-build', {
|
73 | builder: '@ionic/angular-toolkit:cordova-build',
|
74 | options: {
|
75 | browserTarget: `${projectName}:build`
|
76 | },
|
77 | configurations: {
|
78 | production: {
|
79 | browserTarget: `${projectName}:build:production`
|
80 | }
|
81 | }
|
82 | });
|
83 | return host;
|
84 | };
|
85 | }
|
86 | function installNodeDeps() {
|
87 | return (_host, context) => {
|
88 | context.addTask(new tasks_1.NodePackageInstallTask());
|
89 | };
|
90 | }
|
91 | function ngAdd(options) {
|
92 | return (host) => {
|
93 | const workspace = config_1.getWorkspace(host);
|
94 | if (!options.project) {
|
95 | options.project = Object.keys(workspace.projects)[0];
|
96 | }
|
97 | const project = workspace.projects[options.project];
|
98 | if (project.projectType !== 'application') {
|
99 | throw new schematics_1.SchematicsException(`Ionic Add requires a project type of "application".`);
|
100 | }
|
101 | const sourcePath = core_1.join(project.sourceRoot);
|
102 | const rootTemplateSource = schematics_1.apply(schematics_1.url('./files/root'), [
|
103 | schematics_1.template(Object.assign({}, options)),
|
104 | schematics_1.move(sourcePath)
|
105 | ]);
|
106 | return schematics_1.chain([
|
107 |
|
108 | addIonicAngularToPackageJson(),
|
109 | addIonicAngularToolkitToPackageJson(),
|
110 | addIonicAngularModuleToAppModule(sourcePath),
|
111 | addIonicBuilder(options.project),
|
112 | addIonicStyles(sourcePath),
|
113 | addIonicons(),
|
114 | schematics_1.mergeWith(rootTemplateSource),
|
115 |
|
116 | installNodeDeps()
|
117 | ]);
|
118 | };
|
119 | }
|
120 | exports.default = ngAdd;
|