UNPKG

4.53 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const core_1 = require("@angular-devkit/core");
4const schematics_1 = require("@angular-devkit/schematics");
5const tasks_1 = require("@angular-devkit/schematics/tasks");
6const ast_1 = require("./../utils/ast");
7const config_1 = require("./../utils/config");
8const package_1 = require("./../utils/package");
9function addIonicAngularToPackageJson() {
10 return (host) => {
11 package_1.addPackageToPackageJson(host, 'dependencies', '@ionic/angular', 'latest');
12 return host;
13 };
14}
15function addIonicAngularToolkitToPackageJson() {
16 return (host) => {
17 package_1.addPackageToPackageJson(host, 'devDependencies', '@ionic/angular-toolkit', 'latest');
18 return host;
19 };
20}
21function addIonicAngularModuleToAppModule(projectSourceRoot) {
22 return (host) => {
23 ast_1.addModuleImportToRootModule(host, projectSourceRoot, 'IonicModule.forRoot()', '@ionic/angular');
24 return host;
25 };
26}
27function 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}
46function 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}
57function 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}
86function installNodeDeps() {
87 return (_host, context) => {
88 context.addTask(new tasks_1.NodePackageInstallTask());
89 };
90}
91function 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 // @ionic/angular
108 addIonicAngularToPackageJson(),
109 addIonicAngularToolkitToPackageJson(),
110 addIonicAngularModuleToAppModule(sourcePath),
111 addIonicBuilder(options.project),
112 addIonicStyles(sourcePath),
113 addIonicons(),
114 schematics_1.mergeWith(rootTemplateSource),
115 // install freshly added dependencies
116 installNodeDeps()
117 ]);
118 };
119}
120exports.default = ngAdd;