@angular/fire 7.1.0-rc.0 → 7.1.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,6 +41,10 @@
41
41
  "type": "string",
42
42
  "description": "The Firebase project name or project alias to use when deploying"
43
43
  },
44
+ "target": {
45
+ "type": "string",
46
+ "description": "The Firebase hosting target in firebase.json for multi-site"
47
+ },
44
48
  "firebaseHostingSite": {
45
49
  "type": "string",
46
50
  "description": "The Firebase Hosting site to deploy to"
@@ -16,6 +16,8 @@ const prompts_1 = require("./prompts");
16
16
  const ssr_1 = require("./ssr");
17
17
  const static_1 = require("./static");
18
18
  const firebaseTools_1 = require("../firebaseTools");
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
19
21
  const setupProject = (tree, context, features, config) => __awaiter(void 0, void 0, void 0, function* () {
20
22
  const { path: workspacePath, workspace } = utils_1.getWorkspace(tree);
21
23
  const { project, projectName } = utils_1.getProject(config, tree);
@@ -24,6 +26,7 @@ const setupProject = (tree, context, features, config) => __awaiter(void 0, void
24
26
  const featuresToImport = features.filter(it => it !== 0);
25
27
  if (featuresToImport.length > 0) {
26
28
  utils_1.addToNgModule(tree, { features: featuresToImport, sourcePath });
29
+ utils_1.addFixesToServer(tree, { features: featuresToImport, sourcePath });
27
30
  }
28
31
  if (config.sdkConfig) {
29
32
  const source = `
@@ -82,26 +85,31 @@ ${Object.entries(config.sdkConfig).reduce((c, [k, v]) => c.concat(` ${k}: '${
82
85
  });
83
86
  exports.setupProject = setupProject;
84
87
  const ngAddSetupProject = (options) => (host, context) => __awaiter(void 0, void 0, void 0, function* () {
88
+ const projectRoot = host._backend._root;
85
89
  const features = yield prompts_1.featuresPrompt();
86
90
  if (features.length > 0) {
87
91
  const firebaseTools = yield firebaseTools_1.getFirebaseTools();
88
- yield firebaseTools.login();
92
+ if (!host.exists('/firebase.json')) {
93
+ fs_1.writeFileSync(path_1.join(projectRoot, 'firebase.json'), '{}');
94
+ }
95
+ const user = yield prompts_1.userPrompt({ projectRoot });
96
+ yield firebaseTools.login.use(user.email, { projectRoot });
89
97
  const { project: ngProject, projectName: ngProjectName } = utils_1.getProject(options, host);
90
98
  const [defaultProjectName] = utils_1.getFirebaseProjectNameFromHost(host, ngProjectName);
91
- const firebaseProject = yield prompts_1.projectPrompt(defaultProjectName);
99
+ const firebaseProject = yield prompts_1.projectPrompt(defaultProjectName, { projectRoot });
92
100
  let hosting = { projectType: 0, prerender: false };
93
101
  let firebaseHostingSite;
94
102
  if (features.includes(0)) {
95
103
  const results = yield prompts_1.projectTypePrompt(ngProject, ngProjectName);
96
104
  hosting = Object.assign(Object.assign({}, hosting), results);
97
- firebaseHostingSite = yield prompts_1.sitePrompt(firebaseProject);
105
+ firebaseHostingSite = yield prompts_1.sitePrompt(firebaseProject, { projectRoot });
98
106
  }
99
107
  let firebaseApp;
100
108
  let sdkConfig;
101
109
  if (features.find(it => it !== 0)) {
102
110
  const defaultAppId = firebaseHostingSite === null || firebaseHostingSite === void 0 ? void 0 : firebaseHostingSite.appId;
103
- firebaseApp = yield prompts_1.appPrompt(firebaseProject, defaultAppId);
104
- const result = yield firebaseTools.apps.sdkconfig('web', firebaseApp.appId, { nonInteractive: true });
111
+ firebaseApp = yield prompts_1.appPrompt(firebaseProject, defaultAppId, { projectRoot });
112
+ const result = yield firebaseTools.apps.sdkconfig('web', firebaseApp.appId, { nonInteractive: true, projectRoot });
105
113
  sdkConfig = result.sdkConfig;
106
114
  }
107
115
  yield exports.setupProject(host, context, features, Object.assign(Object.assign(Object.assign({}, options), hosting), { firebaseProject, firebaseApp, firebaseHostingSite, sdkConfig }));
@@ -28,12 +28,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
28
28
  });
29
29
  };
30
30
  Object.defineProperty(exports, "__esModule", { value: true });
31
- exports.projectTypePrompt = exports.prerenderPrompt = exports.sitePrompt = exports.appPrompt = exports.projectPrompt = exports.featuresPrompt = exports.searchSites = exports.searchApps = exports.searchProjects = void 0;
31
+ exports.projectTypePrompt = exports.sitePrompt = exports.appPrompt = exports.projectPrompt = exports.userPrompt = exports.featuresPrompt = exports.searchSites = exports.searchApps = exports.searchProjects = void 0;
32
32
  const fuzzy = __importStar(require("fuzzy"));
33
33
  const inquirer = __importStar(require("inquirer"));
34
34
  const interfaces_1 = require("../interfaces");
35
35
  const utils_1 = require("../utils");
36
36
  const firebaseTools_1 = require("../firebaseTools");
37
+ const common_1 = require("../common");
37
38
  inquirer.registerPrompt('autocomplete', require('inquirer-autocomplete-prompt'));
38
39
  const NEW_OPTION = '~~angularfire-new~~';
39
40
  const DEFAULT_SITE_TYPE = 'DEFAULT_SITE';
@@ -116,7 +117,7 @@ const searchSites = (promise) => (_, input) => promise.then(sites => {
116
117
  return {
117
118
  name: original.defaultUrl,
118
119
  title: original.defaultUrl,
119
- value: utils_1.shortSiteName(original),
120
+ value: common_1.shortSiteName(original),
120
121
  };
121
122
  });
122
123
  });
@@ -133,9 +134,37 @@ const featuresPrompt = () => __awaiter(void 0, void 0, void 0, function* () {
133
134
  return features;
134
135
  });
135
136
  exports.featuresPrompt = featuresPrompt;
136
- const projectPrompt = (defaultProject) => __awaiter(void 0, void 0, void 0, function* () {
137
+ const userPrompt = (options) => __awaiter(void 0, void 0, void 0, function* () {
138
+ var _a;
137
139
  const firebaseTools = yield firebaseTools_1.getFirebaseTools();
138
- const projects = firebaseTools.projects.list({});
140
+ const users = yield firebaseTools.login.list();
141
+ if (!users || users.length === 0) {
142
+ yield firebaseTools.login();
143
+ const user = yield firebaseTools.login(options);
144
+ return user;
145
+ }
146
+ else {
147
+ const defaultUser = yield firebaseTools.login(options);
148
+ const choices = users.map(({ user }) => ({ name: user.email, value: user }));
149
+ const newChoice = { name: '[Login in with another account]', value: NEW_OPTION };
150
+ const { user } = yield inquirer.prompt({
151
+ type: 'list',
152
+ name: 'user',
153
+ choices: [newChoice].concat(choices),
154
+ message: 'Which Firebase account would you like to use?',
155
+ default: (_a = choices.find(it => it.value.email === defaultUser.email)) === null || _a === void 0 ? void 0 : _a.value,
156
+ });
157
+ if (user === NEW_OPTION) {
158
+ const { user } = yield firebaseTools.login.add();
159
+ return user;
160
+ }
161
+ return user;
162
+ }
163
+ });
164
+ exports.userPrompt = userPrompt;
165
+ const projectPrompt = (defaultProject, options) => __awaiter(void 0, void 0, void 0, function* () {
166
+ const firebaseTools = yield firebaseTools_1.getFirebaseTools();
167
+ const projects = firebaseTools.projects.list(options);
139
168
  const { projectId } = yield autocomplete({
140
169
  type: 'autocomplete',
141
170
  name: 'projectId',
@@ -155,14 +184,14 @@ const projectPrompt = (defaultProject) => __awaiter(void 0, void 0, void 0, func
155
184
  message: 'What would you like to call your project?',
156
185
  default: projectId,
157
186
  });
158
- return yield firebaseTools.projects.create(projectId, { displayName, nonInteractive: true });
187
+ return yield firebaseTools.projects.create(projectId, Object.assign(Object.assign({}, options), { displayName, nonInteractive: true }));
159
188
  }
160
189
  return (yield projects).find(it => it.projectId === projectId);
161
190
  });
162
191
  exports.projectPrompt = projectPrompt;
163
- const appPrompt = ({ projectId: project }, defaultAppId) => __awaiter(void 0, void 0, void 0, function* () {
192
+ const appPrompt = ({ projectId: project }, defaultAppId, options) => __awaiter(void 0, void 0, void 0, function* () {
164
193
  const firebaseTools = yield firebaseTools_1.getFirebaseTools();
165
- const apps = firebaseTools.apps.list('web', { project });
194
+ const apps = firebaseTools.apps.list('web', Object.assign(Object.assign({}, options), { project }));
166
195
  const { appId } = yield autocomplete({
167
196
  type: 'autocomplete',
168
197
  name: 'appId',
@@ -176,17 +205,14 @@ const appPrompt = ({ projectId: project }, defaultAppId) => __awaiter(void 0, vo
176
205
  name: 'displayName',
177
206
  message: 'What would you like to call your app?',
178
207
  });
179
- return yield firebaseTools.apps.create('web', displayName, { nonInteractive: true, project });
208
+ return yield firebaseTools.apps.create('web', displayName, Object.assign(Object.assign({}, options), { nonInteractive: true, project }));
180
209
  }
181
210
  return (yield apps).find(it => utils_1.shortAppId(it) === appId);
182
211
  });
183
212
  exports.appPrompt = appPrompt;
184
- const sitePrompt = ({ projectId: project }) => __awaiter(void 0, void 0, void 0, function* () {
213
+ const sitePrompt = ({ projectId: project }, options) => __awaiter(void 0, void 0, void 0, function* () {
185
214
  const firebaseTools = yield firebaseTools_1.getFirebaseTools();
186
- if (!firebaseTools.hosting.sites) {
187
- return undefined;
188
- }
189
- const sites = firebaseTools.hosting.sites.list({ project }).then(it => {
215
+ const sites = firebaseTools.hosting.sites.list(Object.assign(Object.assign({}, options), { project })).then(it => {
190
216
  if (it.sites.length === 0) {
191
217
  return [{
192
218
  name: project,
@@ -204,7 +230,7 @@ const sitePrompt = ({ projectId: project }) => __awaiter(void 0, void 0, void 0,
204
230
  name: 'siteName',
205
231
  source: exports.searchSites(sites),
206
232
  message: 'Please select a hosting site:',
207
- default: _ => sites.then(it => utils_1.shortSiteName(it.find(it => it.type === DEFAULT_SITE_TYPE))),
233
+ default: _ => sites.then(it => common_1.shortSiteName(it.find(it => it.type === DEFAULT_SITE_TYPE))),
208
234
  });
209
235
  if (siteName === NEW_OPTION) {
210
236
  const { subdomain } = yield inquirer.prompt({
@@ -212,35 +238,23 @@ const sitePrompt = ({ projectId: project }) => __awaiter(void 0, void 0, void 0,
212
238
  name: 'subdomain',
213
239
  message: 'Please provide an unique, URL-friendly id for the site (<id>.web.app):',
214
240
  });
215
- return yield firebaseTools.hosting.sites.create(subdomain, { nonInteractive: true, project });
241
+ return yield firebaseTools.hosting.sites.create(subdomain, Object.assign(Object.assign({}, options), { nonInteractive: true, project }));
216
242
  }
217
- return (yield sites).find(it => utils_1.shortSiteName(it) === siteName);
243
+ return (yield sites).find(it => common_1.shortSiteName(it) === siteName);
218
244
  });
219
245
  exports.sitePrompt = sitePrompt;
220
- const prerenderPrompt = (project, prerender) => {
221
- if (utils_1.isUniversalApp(project)) {
222
- return inquirer.prompt({
223
- type: 'prompt',
224
- name: 'prerender',
225
- message: 'We detected an Angular Universal project. How would you like to render server-side content?',
226
- default: true
227
- });
228
- }
229
- return Promise.resolve({ projectType: 0 });
230
- };
231
- exports.prerenderPrompt = prerenderPrompt;
232
246
  const projectTypePrompt = (project, name) => __awaiter(void 0, void 0, void 0, function* () {
233
- var _a, _b, _c, _d, _e, _f, _g, _h;
247
+ var _b, _c, _d, _e, _f, _g, _h, _j;
234
248
  let prerender = false;
235
249
  let nodeVersion;
236
250
  let serverTarget;
237
- let browserTarget = `${name}:build:${((_b = (_a = project.architect) === null || _a === void 0 ? void 0 : _a.build) === null || _b === void 0 ? void 0 : _b.defaultConfiguration) || 'production'}`;
251
+ let browserTarget = `${name}:build:${((_c = (_b = project.architect) === null || _b === void 0 ? void 0 : _b.build) === null || _c === void 0 ? void 0 : _c.defaultConfiguration) || 'production'}`;
238
252
  let prerenderTarget;
239
253
  if (utils_1.isUniversalApp(project)) {
240
- serverTarget = `${name}:server:${((_d = (_c = project.architect) === null || _c === void 0 ? void 0 : _c.server) === null || _d === void 0 ? void 0 : _d.defaultConfiguration) || 'production'}`;
241
- browserTarget = `${name}:build:${((_f = (_e = project.architect) === null || _e === void 0 ? void 0 : _e.build) === null || _f === void 0 ? void 0 : _f.defaultConfiguration) || 'production'}`;
254
+ serverTarget = `${name}:server:${((_e = (_d = project.architect) === null || _d === void 0 ? void 0 : _d.server) === null || _e === void 0 ? void 0 : _e.defaultConfiguration) || 'production'}`;
255
+ browserTarget = `${name}:build:${((_g = (_f = project.architect) === null || _f === void 0 ? void 0 : _f.build) === null || _g === void 0 ? void 0 : _g.defaultConfiguration) || 'production'}`;
242
256
  if (utils_1.hasPrerenderOption(project)) {
243
- prerenderTarget = `${name}:prerender:${((_h = (_g = project.architect) === null || _g === void 0 ? void 0 : _g.prerender) === null || _h === void 0 ? void 0 : _h.defaultConfiguration) || 'production'}`;
257
+ prerenderTarget = `${name}:prerender:${((_j = (_h = project.architect) === null || _h === void 0 ? void 0 : _h.prerender) === null || _j === void 0 ? void 0 : _j.defaultConfiguration) || 'production'}`;
244
258
  const { shouldPrerender } = yield inquirer.prompt({
245
259
  type: 'confirm',
246
260
  name: 'shouldPrerender',
@@ -5,7 +5,7 @@ const schematics_1 = require("@angular-devkit/schematics");
5
5
  const common_1 = require("../common");
6
6
  const versions_json_1 = require("../versions.json");
7
7
  const tasks_1 = require("@angular-devkit/schematics/tasks");
8
- const utils_1 = require("../utils");
8
+ const common_2 = require("../common");
9
9
  function generateHostingConfig(project, dist, functionName, projectType) {
10
10
  return {
11
11
  target: project,
@@ -15,7 +15,13 @@ function generateHostingConfig(project, dist, functionName, projectType) {
15
15
  source: '*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)',
16
16
  headers: [{
17
17
  key: 'Cache-Control',
18
- value: 'public,max-age=31536000,immutable'
18
+ value: 'public,max-age=31536000,immutable',
19
+ }]
20
+ }, {
21
+ source: '/@(ngsw-worker.js|ngsw.json)',
22
+ headers: [{
23
+ key: 'Cache-Control',
24
+ value: 'no-cache',
19
25
  }]
20
26
  }],
21
27
  rewrites: [
@@ -78,10 +84,14 @@ const setupUniversalDeployment = (config) => {
78
84
  `ssr_${options.project}`;
79
85
  project.architect.deploy = {
80
86
  builder: '@angular/fire:deploy',
81
- options: Object.assign(Object.assign(Object.assign({ ssr: config.projectType === 2 ? 'cloud-run' : 'cloud-functions', prerender: options.prerender, firebaseProject: options.firebaseProject.projectId, firebaseHostingSite: utils_1.shortSiteName(options.firebaseHostingSite), functionName, functionsNodeVersion: config.nodeVersion, region: 'us-central1', browserTarget: options.browserTarget }, (options.serverTarget ? { serverTarget: options.serverTarget } : {})), (options.prerenderTarget ? { prerenderTarget: options.prerenderTarget } : {})), { outputPath: functionsOutput })
87
+ options: Object.assign(Object.assign(Object.assign({ ssr: config.projectType === 2 ? 'cloud-run' : 'cloud-functions', prerender: options.prerender, firebaseProject: options.firebaseProject.projectId, firebaseHostingSite: common_2.shortSiteName(options.firebaseHostingSite), functionName, functionsNodeVersion: config.nodeVersion, region: 'us-central1', browserTarget: options.browserTarget }, (options.serverTarget ? { serverTarget: options.serverTarget } : {})), (options.prerenderTarget ? { prerenderTarget: options.prerenderTarget } : {})), { outputPath: functionsOutput })
82
88
  };
83
89
  tree.overwrite(workspacePath, JSON.stringify(workspace, null, 2));
84
- common_1.addDependencies(tree, versions_json_1.firebaseFunctionsDependencies, config.context);
90
+ common_1.addDependencies(tree, Object.entries(versions_json_1.firebaseFunctionsDependencies).reduce((acc, [dep, deets]) => {
91
+ deets.dev = true;
92
+ acc[dep] = deets;
93
+ return acc;
94
+ }, {}), config.context);
85
95
  config.context.addTask(new tasks_1.NodePackageInstallTask());
86
96
  generateFirebaseJson(tree, 'firebase.json', options.project, staticOutput, functionsOutput, functionName, config.projectType);
87
97
  common_1.generateFirebaseRc(tree, '.firebaserc', options.firebaseProject.projectId, options.firebaseHostingSite, options.project);
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupStaticDeployment = exports.generateFirebaseJson = void 0;
4
4
  const schematics_1 = require("@angular-devkit/schematics");
5
5
  const common_1 = require("../common");
6
- const utils_1 = require("../utils");
6
+ const common_2 = require("../common");
7
7
  function emptyFirebaseJson() {
8
8
  return {
9
9
  hosting: []
@@ -18,13 +18,19 @@ function generateHostingConfig(project, dist) {
18
18
  source: '*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)',
19
19
  headers: [{
20
20
  key: 'Cache-Control',
21
- value: 'public,max-age=31536000,immutable'
22
- }]
21
+ value: 'public,max-age=31536000,immutable',
22
+ }],
23
+ }, {
24
+ source: '/@(ngsw-worker.js|ngsw.json)',
25
+ headers: [{
26
+ key: 'Cache-Control',
27
+ value: 'no-cache',
28
+ }],
23
29
  }],
24
30
  rewrites: [
25
31
  {
26
32
  source: '**',
27
- destination: '/index.html'
33
+ destination: '/index.html',
28
34
  }
29
35
  ]
30
36
  };
@@ -62,7 +68,7 @@ const setupStaticDeployment = (config) => {
62
68
  const outputPath = project.architect.build.options.outputPath;
63
69
  project.architect.deploy = {
64
70
  builder: '@angular/fire:deploy',
65
- options: Object.assign(Object.assign({ prerender: options.prerender, ssr: false, browserTarget: options.browserTarget, firebaseProject: options.firebaseProject.projectId, firebaseHostingSite: utils_1.shortSiteName(options.firebaseHostingSite) }, (options.serverTarget ? { serverTarget: options.serverTarget } : {})), (options.prerenderTarget ? { prerenderTarget: options.prerenderTarget } : {}))
71
+ options: Object.assign(Object.assign({ prerender: options.prerender, ssr: false, browserTarget: options.browserTarget, firebaseProject: options.firebaseProject.projectId, firebaseHostingSite: common_2.shortSiteName(options.firebaseHostingSite) }, (options.serverTarget ? { serverTarget: options.serverTarget } : {})), (options.prerenderTarget ? { prerenderTarget: options.prerenderTarget } : {}))
66
72
  };
67
73
  tree.overwrite(workspacePath, JSON.stringify(workspace, null, 2));
68
74
  generateFirebaseJson(tree, 'firebase.json', options.project, outputPath);
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.addIgnoreFiles = exports.addToNgModule = exports.addEnvironmentEntry = exports.getFirebaseProjectNameFromFs = exports.getFirebaseProjectNameFromHost = exports.getProject = exports.getWorkspace = exports.shortSiteName = exports.shortAppId = exports.hasPrerenderOption = exports.isUniversalApp = void 0;
6
+ exports.addIgnoreFiles = exports.addToNgModule = exports.addFixesToServer = exports.addEnvironmentEntry = exports.getFirebaseProjectNameFromFs = exports.getFirebaseProjectNameFromHost = exports.getProject = exports.getWorkspace = exports.shortAppId = exports.hasPrerenderOption = exports.isUniversalApp = void 0;
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = require("path");
9
9
  const schematics_1 = require("@angular-devkit/schematics");
@@ -18,8 +18,6 @@ const hasPrerenderOption = (project) => { var _a; return (_a = project.architect
18
18
  exports.hasPrerenderOption = hasPrerenderOption;
19
19
  const shortAppId = (app) => (app === null || app === void 0 ? void 0 : app.appId) && app.appId.split('/').pop();
20
20
  exports.shortAppId = shortAppId;
21
- const shortSiteName = (site) => (site === null || site === void 0 ? void 0 : site.name) && site.name.split('/').pop();
22
- exports.shortSiteName = shortSiteName;
23
21
  function getWorkspace(host) {
24
22
  const path = '/angular.json';
25
23
  const configBuffer = path && host.read(path);
@@ -118,14 +116,29 @@ function addEnvironmentEntry(host, filePath, data) {
118
116
  return host;
119
117
  }
120
118
  exports.addEnvironmentEntry = addEnvironmentEntry;
121
- function addToNgModule(host, options) {
122
- const modulePath = find_module_1.findModuleFromOptions(host, {
123
- name: 'app',
124
- path: options.sourcePath,
125
- });
126
- if (!modulePath) {
119
+ function addFixesToServer(host, options) {
120
+ const serverPath = `/server.ts`;
121
+ if (!host.exists(serverPath)) {
127
122
  return host;
128
123
  }
124
+ const text = host.read(serverPath);
125
+ if (text === null) {
126
+ throw new schematics_1.SchematicsException(`File ${serverPath} does not exist.`);
127
+ }
128
+ const sourceText = text.toString('utf-8');
129
+ const addZonePatch = !sourceText.includes('import \'zone.js/dist/zone-patch-rxjs\';');
130
+ const addFirestorePatch = options.features.includes(7) &&
131
+ !sourceText.includes('import \'@angular/fire/firestore-protos\';');
132
+ if (addZonePatch || addFirestorePatch) {
133
+ common_1.overwriteIfExists(host, serverPath, sourceText.replace('import \'zone.js/dist/zone-node\';', `import 'zone.js/dist/zone-node';
134
+ ${addZonePatch ? 'import \'zone.js/dist/zone-patch-rxjs\';' : ''}
135
+ ${addFirestorePatch ? 'import \'@angular/fire/firestore-protos\';' : ''}`));
136
+ }
137
+ return host;
138
+ }
139
+ exports.addFixesToServer = addFixesToServer;
140
+ function addToNgModule(host, options) {
141
+ const modulePath = `/${options.sourcePath}/app/app.module.ts`;
129
142
  if (!host.exists(modulePath)) {
130
143
  throw new Error(`Specified module path ${modulePath} does not exist`);
131
144
  }
@@ -11,11 +11,11 @@
11
11
  },
12
12
  "firebaseFunctionsDependencies": {
13
13
  "firebase-admin": {
14
- "dev": true,
14
+ "dev": false,
15
15
  "version": "^9.11.1"
16
16
  },
17
17
  "firebase-functions": {
18
- "dev": true,
18
+ "dev": false,
19
19
  "version": "^3.6.0"
20
20
  }
21
21
  }