@simondotm/nx-firebase 2.2.0 → 17.3.1

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.
Files changed (58) hide show
  1. package/README.md +106 -21
  2. package/executors.json +2 -2
  3. package/generators.json +1 -1
  4. package/package.json +7 -7
  5. package/src/__generated__/nx-firebase-versions.d.ts +11 -0
  6. package/src/__generated__/nx-firebase-versions.js +19 -0
  7. package/src/__generated__/nx-firebase-versions.js.map +1 -0
  8. package/src/executors/serve/schema.json +3 -3
  9. package/src/generators/application/application.d.ts +6 -6
  10. package/src/generators/application/application.js +65 -36
  11. package/src/generators/application/application.js.map +1 -1
  12. package/src/generators/application/files/firestore.indexes.json +25 -2
  13. package/src/generators/application/files/firestore.rules +10 -6
  14. package/src/generators/application/files/public/404.html +33 -0
  15. package/src/generators/application/files/public/index.html +11 -11
  16. package/src/generators/application/files/storage.rules +6 -3
  17. package/src/generators/application/lib/create-files.d.ts +2 -2
  18. package/src/generators/application/lib/create-files.js +11 -0
  19. package/src/generators/application/lib/create-files.js.map +1 -1
  20. package/src/generators/application/schema.d.ts +9 -4
  21. package/src/generators/application/schema.json +14 -9
  22. package/src/generators/function/files/src/main.ts__tmpl__ +4 -7
  23. package/src/generators/function/function.d.ts +6 -6
  24. package/src/generators/function/function.js +63 -26
  25. package/src/generators/function/function.js.map +1 -1
  26. package/src/generators/function/lib/add-function-config.d.ts +2 -2
  27. package/src/generators/function/lib/add-function-config.js +2 -2
  28. package/src/generators/function/lib/add-function-config.js.map +1 -1
  29. package/src/generators/function/lib/create-files.d.ts +3 -3
  30. package/src/generators/function/lib/create-files.js +16 -5
  31. package/src/generators/function/lib/create-files.js.map +1 -1
  32. package/src/generators/function/lib/delete-files.d.ts +4 -4
  33. package/src/generators/function/lib/delete-files.js +3 -3
  34. package/src/generators/function/lib/delete-files.js.map +1 -1
  35. package/src/generators/function/lib/update-project.d.ts +2 -2
  36. package/src/generators/function/lib/update-project.js +11 -5
  37. package/src/generators/function/lib/update-project.js.map +1 -1
  38. package/src/generators/function/schema.d.ts +15 -11
  39. package/src/generators/function/schema.json +14 -8
  40. package/src/generators/init/init.d.ts +2 -2
  41. package/src/generators/init/init.js +10 -4
  42. package/src/generators/init/init.js.map +1 -1
  43. package/src/generators/init/lib/add-dependencies.js +19 -10
  44. package/src/generators/init/lib/add-dependencies.js.map +1 -1
  45. package/src/generators/init/schema.d.ts +3 -1
  46. package/src/generators/init/schema.json +7 -1
  47. package/src/generators/migrate/schema.json +1 -2
  48. package/src/utils/index.d.ts +0 -1
  49. package/src/utils/index.js +0 -1
  50. package/src/utils/index.js.map +1 -1
  51. package/src/utils/update-tsconfig.d.ts +2 -1
  52. package/src/utils/update-tsconfig.js +13 -3
  53. package/src/utils/update-tsconfig.js.map +1 -1
  54. package/src/utils/workspace.js +5 -3
  55. package/src/utils/workspace.js.map +1 -1
  56. package/src/utils/versions.d.ts +0 -13
  57. package/src/utils/versions.js +0 -33
  58. package/src/utils/versions.js.map +0 -1
@@ -12,24 +12,29 @@
12
12
  "$source": "argv",
13
13
  "index": 0
14
14
  },
15
- "x-prompt": "What name would you like to use for the firebase node application?"
15
+ "x-prompt": "What name would you like to use for the firebase application?"
16
16
  },
17
17
  "directory": {
18
- "description": "The directory of the new application.",
19
- "type": "string"
18
+ "description": "A directory where the application is placed.",
19
+ "type": "string",
20
+ "alias": "d"
20
21
  },
21
22
  "tags": {
22
- "description": "Add tags to the application (used for linting).",
23
- "type": "string"
23
+ "type": "string",
24
+ "description": "Add tags to the project (used for linting)",
25
+ "alias": "t"
26
+ },
27
+ "projectNameAndRootFormat": {
28
+ "description": "Whether to generate the project name and root directory as provided (`as-provided`) or generate them composing their values and taking the configured layout into account (`derived`).",
29
+ "type": "string",
30
+ "enum": ["as-provided", "derived"]
24
31
  },
25
32
  "project": {
26
33
  "type": "string",
27
- "description": "The firebase project that should be associated with this application",
34
+ "description": "The firebase CLI project that should be associated with this application",
28
35
  "default": ""
29
36
  }
30
37
  },
31
38
  "additionalProperties": false,
32
- "required": [
33
- "name"
34
- ]
39
+ "required": ["name"]
35
40
  }
@@ -10,13 +10,10 @@
10
10
  import {onRequest} from "firebase-functions/v2/https";
11
11
  import * as logger from "firebase-functions/logger";
12
12
 
13
- // import { initializeApp } from "firebase-admin/app";
14
- // initializeApp()
15
-
16
13
  // Start writing functions
17
14
  // https://firebase.google.com/docs/functions/typescript
18
15
 
19
- export const helloWorld = onRequest((request, response) => {
20
- logger.info("Hello logs!", {structuredData: true});
21
- response.send("Hello from Firebase!");
22
- });
16
+ // export const helloWorld = onRequest((request, response) => {
17
+ // logger.info("Hello logs!", {structuredData: true});
18
+ // response.send("Hello from Firebase!");
19
+ // });
@@ -1,14 +1,14 @@
1
1
  import { GeneratorCallback, Tree } from '@nx/devkit';
2
- import type { FunctionGeneratorOptions, NormalizedOptions } from './schema';
3
- export declare function normalizeOptions(tree: Tree, options: FunctionGeneratorOptions): NormalizedOptions;
2
+ import type { Schema, NormalizedSchema } from './schema';
3
+ export declare function normalizeOptions(host: Tree, options: Schema, callingGenerator?: string): Promise<NormalizedSchema>;
4
4
  /**
5
5
  * Firebase 'functions' application generator
6
6
  * Uses the `@nx/node` application generator as a base implementation
7
7
  *
8
- * @param tree
9
- * @param rawOptions
8
+ * @param host
9
+ * @param schema
10
10
  * @returns
11
11
  */
12
- export declare function functionGenerator(tree: Tree, rawOptions: FunctionGeneratorOptions): Promise<GeneratorCallback>;
12
+ export declare function functionGenerator(host: Tree, schema: Schema): Promise<GeneratorCallback>;
13
13
  export default functionGenerator;
14
- export declare const functionSchematic: (generatorOptions: FunctionGeneratorOptions) => (tree: any, context: any) => Promise<any>;
14
+ export declare const functionSchematic: (generatorOptions: Schema) => (tree: any, context: any) => Promise<any>;
@@ -7,46 +7,83 @@ const node_1 = require("@nx/node");
7
7
  const init_1 = require("../init/init");
8
8
  const utils_1 = require("../../utils");
9
9
  const lib_1 = require("./lib");
10
- function normalizeOptions(tree, options) {
11
- const { projectName, projectRoot } = (0, utils_1.getProjectName)(tree, options.name, options.directory);
12
- // get & validate the firebase app project this function will be attached to
13
- const firebaseApp = (0, devkit_1.names)(options.app).fileName;
14
- const projects = (0, devkit_1.getProjects)(tree);
15
- if (!projects.has(firebaseApp)) {
16
- throw new Error(`A firebase application project called '${firebaseApp}' was not found in this workspace.`);
17
- }
18
- const firebaseAppProject = (0, devkit_1.readProjectConfiguration)(tree, firebaseApp);
19
- // read the firebase config used by the parent app project
20
- const firebaseConfigName = (0, utils_1.getFirebaseConfigFromProject)(tree, firebaseAppProject);
21
- return Object.assign(Object.assign({}, options), { runTime: options.runTime || '16', format: options.format || 'esm', projectRoot,
22
- projectName,
23
- firebaseConfigName,
24
- firebaseAppProject });
10
+ const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
11
+ const nx_firebase_versions_1 = require("../../__generated__/nx-firebase-versions");
12
+ function normalizeOptions(host, options, callingGenerator = '@simondotm/nx-firebase:function') {
13
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
14
+ const { projectName: appProjectName, projectRoot, projectNameAndRootFormat, } = yield (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
15
+ name: options.name,
16
+ projectType: 'application',
17
+ directory: options.directory,
18
+ projectNameAndRootFormat: options.projectNameAndRootFormat,
19
+ rootProject: options.rootProject,
20
+ callingGenerator,
21
+ });
22
+ options.rootProject = projectRoot === '.';
23
+ options.projectNameAndRootFormat = projectNameAndRootFormat;
24
+ const parsedTags = options.tags
25
+ ? options.tags.split(',').map((s) => s.trim())
26
+ : [];
27
+ // const { projectName, projectRoot } = getProjectName(
28
+ // host,
29
+ // options.name,
30
+ // options.directory,
31
+ // )
32
+ // get & validate the firebase app project this function will be attached to
33
+ const firebaseApp = (0, devkit_1.names)(options.app).fileName;
34
+ const projects = (0, devkit_1.getProjects)(host);
35
+ if (!projects.has(firebaseApp)) {
36
+ throw new Error(`A firebase application project called '${firebaseApp}' was not found in this workspace.`);
37
+ }
38
+ const firebaseAppProject = (0, devkit_1.readProjectConfiguration)(host, firebaseApp);
39
+ // read the firebase config used by the parent app project
40
+ const firebaseConfigName = (0, utils_1.getFirebaseConfigFromProject)(host, firebaseAppProject);
41
+ return Object.assign(Object.assign({}, options), { name: (0, devkit_1.names)(options.name).fileName, projectName: appProjectName, projectRoot,
42
+ parsedTags,
43
+ firebaseConfigName,
44
+ firebaseAppProject });
45
+ // return {
46
+ // ...options,
47
+ // runTime: options.runTime || '16',
48
+ // format: options.format || 'esm',
49
+ // projectRoot,
50
+ // projectName,
51
+ // firebaseConfigName,
52
+ // firebaseAppProject,
53
+ // }
54
+ });
25
55
  }
26
56
  exports.normalizeOptions = normalizeOptions;
27
57
  /**
28
58
  * Firebase 'functions' application generator
29
59
  * Uses the `@nx/node` application generator as a base implementation
30
60
  *
31
- * @param tree
32
- * @param rawOptions
61
+ * @param host
62
+ * @param schema
33
63
  * @returns
34
64
  */
35
- function functionGenerator(tree, rawOptions) {
65
+ function functionGenerator(host, schema) {
36
66
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
37
67
  const tasks = [];
38
- const options = normalizeOptions(tree, rawOptions);
68
+ const options = yield normalizeOptions(host, Object.assign({
69
+ // set default options
70
+ projectNameAndRootFormat: 'derived', runTime: nx_firebase_versions_1.packageVersions.nodeEngine }, schema));
71
+ if (!options.runTime) {
72
+ throw new Error('No runtime specified for the function app');
73
+ }
74
+ // const options = normalizeOptions(host, schema)
39
75
  // initialise plugin
40
- const initTask = yield (0, init_1.initGenerator)(tree, {});
76
+ const initTask = yield (0, init_1.initGenerator)(host, {});
41
77
  tasks.push(initTask);
42
78
  // We use @nx/node:app to scaffold our function application, then modify as required
43
79
  // `nx g @nx/node:app function-name --directory functions/dir --e2eTestRunner=none --framework=none --unitTestRunner=jest --bundler=esbuild --tags=firebase:firebase-app`
44
80
  // Function apps are tagged so that they can built/watched with run-many
45
81
  const tags = `firebase:function,firebase:name:${options.projectName},firebase:dep:${options.firebaseAppProject.name}` +
46
82
  (options.tags ? `,${options.tags}` : '');
47
- const nodeApplicationTask = yield (0, node_1.applicationGenerator)(tree, {
83
+ const nodeApplicationTask = yield (0, node_1.applicationGenerator)(host, {
48
84
  name: options.name,
49
85
  directory: options.directory,
86
+ projectNameAndRootFormat: options.projectNameAndRootFormat,
50
87
  tags,
51
88
  setParserOptionsProject: options.setParserOptionsProject,
52
89
  skipFormat: options.skipFormat,
@@ -57,16 +94,16 @@ function functionGenerator(tree, rawOptions) {
57
94
  });
58
95
  tasks.push(nodeApplicationTask);
59
96
  // generate function app specific files
60
- (0, lib_1.createFiles)(tree, options);
97
+ (0, lib_1.createFiles)(host, options);
61
98
  // update TS config for esm or cjs
62
- (0, utils_1.updateTsConfig)(tree, options.projectRoot, options.runTime, options.format);
99
+ (0, utils_1.updateTsConfig)(host, options.projectRoot, options.runTime, options.format);
63
100
  // reconfigure the @nx/node:app to suit firebase functions
64
- (0, lib_1.updateProject)(tree, options);
101
+ (0, lib_1.updateProject)(host, options);
65
102
  // update firebase functions config
66
- (0, lib_1.addFunctionConfig)(tree, options);
103
+ (0, lib_1.addFunctionConfig)(host, options);
67
104
  // ensures newly added files are formatted to match workspace style
68
105
  if (!options.skipFormat) {
69
- yield (0, devkit_1.formatFiles)(tree);
106
+ yield (0, devkit_1.formatFiles)(host);
70
107
  }
71
108
  return (0, devkit_1.runTasksInSerial)(...tasks);
72
109
  });
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../../../packages/nx-firebase/src/generators/function/function.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../../../packages/nx-firebase/src/generators/function/function.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { Tree } from '@nx/devkit';
2
- import type { NormalizedOptions } from '../schema';
3
- export declare function addFunctionConfig(tree: Tree, options: NormalizedOptions): void;
2
+ import type { NormalizedSchema } from '../schema';
3
+ export declare function addFunctionConfig(host: Tree, options: NormalizedSchema): void;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addFunctionConfig = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- function addFunctionConfig(tree, options) {
6
- (0, devkit_1.updateJson)(tree, options.firebaseConfigName, (json) => {
5
+ function addFunctionConfig(host, options) {
6
+ (0, devkit_1.updateJson)(host, options.firebaseConfigName, (json) => {
7
7
  const functionConfig = {
8
8
  codebase: options.projectName,
9
9
  source: (0, devkit_1.joinPathFragments)('dist', options.projectRoot),
@@ -1 +1 @@
1
- {"version":3,"file":"add-function-config.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/add-function-config.ts"],"names":[],"mappings":";;;AAAA,uCAAgE;AAIhE,SAAgB,iBAAiB,CAAC,IAAU,EAAE,OAA0B;IACtE,IAAA,mBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAoB,EAAE,EAAE;QACpE,MAAM,cAAc,GAAG;YACrB,QAAQ,EAAE,OAAO,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAA,0BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;YACtD,OAAO,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE;YACnC,MAAM,EAAE,CAAC,SAAS,CAAC;SACpB,CAAA;QAED,kEAAkE;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1D,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE;gBACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;aACtC;SACF;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACnC,uCAAuC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;YAC/D,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAxBD,8CAwBC"}
1
+ {"version":3,"file":"add-function-config.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/add-function-config.ts"],"names":[],"mappings":";;;AAAA,uCAAgE;AAIhE,SAAgB,iBAAiB,CAAC,IAAU,EAAE,OAAyB;IACrE,IAAA,mBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAoB,EAAE,EAAE;QACpE,MAAM,cAAc,GAAG;YACrB,QAAQ,EAAE,OAAO,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAA,0BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;YACtD,OAAO,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE;YACnC,MAAM,EAAE,CAAC,SAAS,CAAC;SACpB,CAAA;QAED,kEAAkE;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1D,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE;gBACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;aACtC;SACF;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACnC,uCAAuC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;YAC/D,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAxBD,8CAwBC"}
@@ -1,9 +1,9 @@
1
1
  import { Tree } from '@nx/devkit';
2
- import type { NormalizedOptions } from '../schema';
2
+ import type { NormalizedSchema } from '../schema';
3
3
  /**
4
4
  * Generate the firebase app specific files
5
5
  *
6
- * @param tree
6
+ * @param host
7
7
  * @param options
8
8
  */
9
- export declare function createFiles(tree: Tree, options: NormalizedOptions): void;
9
+ export declare function createFiles(host: Tree, options: NormalizedSchema): void;
@@ -2,16 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFiles = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const devkit_2 = require("@nx/devkit");
5
+ const nx_firebase_versions_1 = require("../../../__generated__/nx-firebase-versions");
6
6
  /**
7
7
  * Generate the firebase app specific files
8
8
  *
9
- * @param tree
9
+ * @param host
10
10
  * @param options
11
11
  */
12
- function createFiles(tree, options) {
12
+ function createFiles(host, options) {
13
13
  const firebaseAppConfig = options.firebaseConfigName;
14
- const firebaseAppConfigPath = (0, devkit_2.joinPathFragments)((0, devkit_1.offsetFromRoot)(options.projectRoot), firebaseAppConfig);
14
+ const firebaseAppConfigPath = (0, devkit_1.joinPathFragments)((0, devkit_1.offsetFromRoot)(options.projectRoot), firebaseAppConfig);
15
15
  const substitutions = {
16
16
  tmpl: '',
17
17
  projectName: options.projectName,
@@ -31,7 +31,18 @@ function createFiles(tree, options) {
31
31
  // Rules and index files also get generated in the application folder;
32
32
  // 1. so that they dont clutter up the root workspace
33
33
  // 2. so that they are located within the nx firebase application project they relate to
34
- (0, devkit_2.generateFiles)(tree, (0, devkit_2.joinPathFragments)(__dirname, '..', 'files'), options.projectRoot, substitutions);
34
+ (0, devkit_1.generateFiles)(host, (0, devkit_1.joinPathFragments)(__dirname, '..', 'files'), options.projectRoot, substitutions);
35
+ // set dependencies for the firebase function
36
+ const firebasePackageDependencies = {};
37
+ if ((0, devkit_1.detectPackageManager)() === 'pnpm') {
38
+ firebasePackageDependencies['@google-cloud/functions-framework'] = `^${nx_firebase_versions_1.packageVersions.googleCloudFunctionsFramework}`;
39
+ }
40
+ if (Object.keys(firebasePackageDependencies).length > 0) {
41
+ (0, devkit_1.updateJson)(host, (0, devkit_1.joinPathFragments)(options.projectRoot, 'package.json'), (json) => {
42
+ json.dependencies = firebasePackageDependencies;
43
+ return json;
44
+ });
45
+ }
35
46
  }
36
47
  exports.createFiles = createFiles;
37
48
  //# sourceMappingURL=create-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-files.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/create-files.ts"],"names":[],"mappings":";;;AAAA,uCAAiD;AACjD,uCAA6D;AAG7D;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,IAAU,EAAE,OAA0B;IAChE,MAAM,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAA;IACpD,MAAM,qBAAqB,GAAG,IAAA,0BAAiB,EAC7C,IAAA,uBAAc,EAAC,OAAO,CAAC,WAAW,CAAC,EACnC,iBAAiB,CAClB,CAAA;IAED,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAEhC,eAAe,EAAE,OAAO,CAAC,GAAG;QAC5B,iBAAiB;QACjB,qBAAqB;QAErB,kBAAkB,EAAE,OAAO,CAAC,OAAO;QAEnC,uBAAuB;QACvB,sBAAsB;QAEtB,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;KAC7D,CAAA;IAED,wFAAwF;IACxF,yCAAyC;IACzC,uGAAuG;IACvG,EAAE;IACF,sEAAsE;IACtE,qDAAqD;IACrD,wFAAwF;IACxF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,EAC3C,OAAO,CAAC,WAAW,EACnB,aAAa,CACd,CAAA;AACH,CAAC;AArCD,kCAqCC"}
1
+ {"version":3,"file":"create-files.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/create-files.ts"],"names":[],"mappings":";;;AAAA,uCAOmB;AAEnB,sFAA6E;AAE7E;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,IAAU,EAAE,OAAyB;IAC/D,MAAM,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAA;IACpD,MAAM,qBAAqB,GAAG,IAAA,0BAAiB,EAC7C,IAAA,uBAAc,EAAC,OAAO,CAAC,WAAW,CAAC,EACnC,iBAAiB,CAClB,CAAA;IAED,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAEhC,eAAe,EAAE,OAAO,CAAC,GAAG;QAC5B,iBAAiB;QACjB,qBAAqB;QAErB,kBAAkB,EAAE,OAAO,CAAC,OAAO;QAEnC,uBAAuB;QACvB,sBAAsB;QAEtB,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;KAC7D,CAAA;IAED,wFAAwF;IACxF,yCAAyC;IACzC,uGAAuG;IACvG,EAAE;IACF,sEAAsE;IACtE,qDAAqD;IACrD,wFAAwF;IACxF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,EAC3C,OAAO,CAAC,WAAW,EACnB,aAAa,CACd,CAAA;IAED,6CAA6C;IAC7C,MAAM,2BAA2B,GAAG,EAAE,CAAA;IACtC,IAAI,IAAA,6BAAoB,GAAE,KAAK,MAAM,EAAE;QACrC,2BAA2B,CACzB,mCAAmC,CACpC,GAAG,IAAI,sCAAe,CAAC,6BAA6B,EAAE,CAAA;KACxD;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACvD,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,EACtD,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,CAAC,YAAY,GAAG,2BAA2B,CAAA;YAC/C,OAAO,IAAI,CAAA;QACb,CAAC,CACF,CAAA;KACF;AACH,CAAC;AAxDD,kCAwDC"}
@@ -1,8 +1,8 @@
1
- import type { Tree } from '@nx/devkit';
2
- import type { NormalizedOptions } from '../schema';
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedSchema } from '../schema';
3
3
  /**
4
4
  * Delete unwanted files created by the node generator
5
- * @param tree
5
+ * @param host
6
6
  * @param options
7
7
  */
8
- export declare function deleteFiles(tree: Tree, options: NormalizedOptions): void;
8
+ export declare function deleteFiles(host: Tree, options: NormalizedSchema): void;
@@ -4,10 +4,10 @@ exports.deleteFiles = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  /**
6
6
  * Delete unwanted files created by the node generator
7
- * @param tree
7
+ * @param host
8
8
  * @param options
9
9
  */
10
- function deleteFiles(tree, options) {
10
+ function deleteFiles(host, options) {
11
11
  const nodeFilesToDelete = [
12
12
  (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'main.ts'),
13
13
  (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'app', '.gitkeep'),
@@ -16,7 +16,7 @@ function deleteFiles(tree, options) {
16
16
  (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'environments', 'environment.ts'),
17
17
  ];
18
18
  for (const path of nodeFilesToDelete) {
19
- tree.delete(path);
19
+ host.delete(path);
20
20
  }
21
21
  }
22
22
  exports.deleteFiles = deleteFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"delete-files.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/delete-files.ts"],"names":[],"mappings":";;;AACA,uCAA8C;AAG9C;;;;GAIG;AACH,SAAgB,WAAW,CAAC,IAAU,EAAE,OAA0B;IAChE,MAAM,iBAAiB,GAAG;QACxB,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC;QACxD,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;QAChE,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;QACnE,IAAA,0BAAiB,EACf,OAAO,CAAC,WAAW,EACnB,KAAK,EACL,cAAc,EACd,qBAAqB,CACtB;QACD,IAAA,0BAAiB,EACf,OAAO,CAAC,WAAW,EACnB,KAAK,EACL,cAAc,EACd,gBAAgB,CACjB;KACF,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAClB;AACH,CAAC;AAtBD,kCAsBC"}
1
+ {"version":3,"file":"delete-files.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/delete-files.ts"],"names":[],"mappings":";;;AAAA,uCAAyD;AAGzD;;;;GAIG;AACH,SAAgB,WAAW,CAAC,IAAU,EAAE,OAAyB;IAC/D,MAAM,iBAAiB,GAAG;QACxB,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC;QACxD,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;QAChE,IAAA,0BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;QACnE,IAAA,0BAAiB,EACf,OAAO,CAAC,WAAW,EACnB,KAAK,EACL,cAAc,EACd,qBAAqB,CACtB;QACD,IAAA,0BAAiB,EACf,OAAO,CAAC,WAAW,EACnB,KAAK,EACL,cAAc,EACd,gBAAgB,CACjB;KACF,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAClB;AACH,CAAC;AAtBD,kCAsBC"}
@@ -1,3 +1,3 @@
1
1
  import { Tree } from '@nx/devkit';
2
- import type { NormalizedOptions } from '../schema';
3
- export declare function updateProject(tree: Tree, options: NormalizedOptions): void;
2
+ import type { NormalizedSchema } from '../schema';
3
+ export declare function updateProject(host: Tree, options: NormalizedSchema): void;
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateProject = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- function updateProject(tree, options) {
6
- const project = (0, devkit_1.readProjectConfiguration)(tree, options.projectName);
5
+ function updateProject(host, options) {
6
+ var _a;
7
+ const project = (0, devkit_1.readProjectConfiguration)(host, options.projectName);
7
8
  const firebaseAppProject = options.firebaseAppProject;
8
9
  // replace the default node build target with a simplified version
9
10
  // we dont need dev/production build configurations for firebase functions since its a confined secure environment
@@ -21,7 +22,7 @@ function updateProject(tree, options) {
21
22
  bundle: true,
22
23
  thirdParty: false,
23
24
  dependenciesFieldType: 'dependencies',
24
- target: 'node16',
25
+ target: `node${options.runTime}`,
25
26
  format: [options.format || 'esm'],
26
27
  esbuildOptions: {
27
28
  logLevel: 'info',
@@ -51,12 +52,17 @@ function updateProject(tree, options) {
51
52
  // No serve target for functions, since we may have multiple functions in a firebase project
52
53
  // Instead we serve at the firebase app project
53
54
  delete project.targets.serve;
54
- (0, devkit_1.updateProjectConfiguration)(tree, options.projectName, project);
55
+ // Nx 17+ no longer includes passWithNoTests in the test target by default
56
+ // Add it so that functions without tests don't fail when running the app's test target
57
+ if ((_a = project.targets.test) === null || _a === void 0 ? void 0 : _a.options) {
58
+ project.targets.test.options.passWithNoTests = true;
59
+ }
60
+ (0, devkit_1.updateProjectConfiguration)(host, options.projectName, project);
55
61
  // Add function project as implicit dep of firebase app project
56
62
  firebaseAppProject.implicitDependencies || (firebaseAppProject.implicitDependencies = []);
57
63
  firebaseAppProject.implicitDependencies.push(options.projectName);
58
64
  firebaseAppProject.implicitDependencies.sort();
59
- (0, devkit_1.updateProjectConfiguration)(tree, options.app, firebaseAppProject);
65
+ (0, devkit_1.updateProjectConfiguration)(host, options.app, firebaseAppProject);
60
66
  }
61
67
  exports.updateProject = updateProject;
62
68
  //# sourceMappingURL=update-project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-project.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/update-project.ts"],"names":[],"mappings":";;;AAAA,uCAImB;AAInB,SAAgB,aAAa,CAAC,IAAU,EAAE,OAA0B;IAClE,MAAM,OAAO,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAEnE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;IAErD,kEAAkE;IAClE,kHAAkH;IAClH,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG;QACtB,QAAQ,EAAE,qBAAqB;QAC/B,OAAO,EAAE,CAAC,sBAAsB,CAAC;QACjC,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU;YACpD,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;YACxC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;YAChD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;YAC5C,mBAAmB,EAAE,IAAI;YACzB,gEAAgE;YAChE,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK;YACjB,qBAAqB,EAAE,cAAc;YACrC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;YACjC,cAAc,EAAE;gBACd,QAAQ,EAAE,MAAM;aACjB;SACF;KACF,CAAA;IAED,mDAAmD;IACnD,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAA;IAC/C,MAAM,MAAM,GAA0B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;IAC1E,MAAM,IAAI,GAAuB;QAC/B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,GAAG,eAAe,cAAc;QACvC,MAAM,EAAE,GAAG;KACZ,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjB,oBAAoB;IACpB,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG;QACvB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE;YACP,2EAA2E;YAC3E,oGAAoG;YACpG,OAAO,EAAE,UAAU,kBAAkB,CAAC,IAAI,4BAA4B,OAAO,CAAC,WAAW,EAAE;SAC5F;QACD,SAAS,EAAE,CAAC,OAAO,CAAC;KACrB,CAAA;IAED,uCAAuC;IACvC,4FAA4F;IAC5F,+CAA+C;IAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAA;IAE5B,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAE9D,+DAA+D;IAC/D,kBAAkB,CAAC,oBAAoB,KAAvC,kBAAkB,CAAC,oBAAoB,GAAK,EAAE,EAAA;IAC9C,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjE,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;IAC9C,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;AACnE,CAAC;AA9DD,sCA8DC"}
1
+ {"version":3,"file":"update-project.js","sourceRoot":"","sources":["../../../../../../../packages/nx-firebase/src/generators/function/lib/update-project.ts"],"names":[],"mappings":";;;AAAA,uCAImB;AAInB,SAAgB,aAAa,CAAC,IAAU,EAAE,OAAyB;;IACjE,MAAM,OAAO,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAEnE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;IAErD,kEAAkE;IAClE,kHAAkH;IAClH,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG;QACtB,QAAQ,EAAE,qBAAqB;QAC/B,OAAO,EAAE,CAAC,sBAAsB,CAAC;QACjC,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU;YACpD,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;YACxC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;YAChD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;YAC5C,mBAAmB,EAAE,IAAI;YACzB,gEAAgE;YAChE,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK;YACjB,qBAAqB,EAAE,cAAc;YACrC,MAAM,EAAE,OAAO,OAAO,CAAC,OAAO,EAAE;YAChC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;YACjC,cAAc,EAAE;gBACd,QAAQ,EAAE,MAAM;aACjB;SACF;KACF,CAAA;IAED,mDAAmD;IACnD,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAA;IAC/C,MAAM,MAAM,GAA0B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;IAC1E,MAAM,IAAI,GAAuB;QAC/B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,GAAG,eAAe,cAAc;QACvC,MAAM,EAAE,GAAG;KACZ,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjB,oBAAoB;IACpB,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG;QACvB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE;YACP,2EAA2E;YAC3E,oGAAoG;YACpG,OAAO,EAAE,UAAU,kBAAkB,CAAC,IAAI,4BAA4B,OAAO,CAAC,WAAW,EAAE;SAC5F;QACD,SAAS,EAAE,CAAC,OAAO,CAAC;KACrB,CAAA;IAED,uCAAuC;IACvC,4FAA4F;IAC5F,+CAA+C;IAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAA;IAE5B,0EAA0E;IAC1E,uFAAuF;IACvF,IAAI,MAAA,OAAO,CAAC,OAAO,CAAC,IAAI,0CAAE,OAAO,EAAE;QACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAA;KACpD;IAED,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAE9D,+DAA+D;IAC/D,kBAAkB,CAAC,oBAAoB,KAAvC,kBAAkB,CAAC,oBAAoB,GAAK,EAAE,EAAA;IAC9C,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjE,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;IAC9C,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;AACnE,CAAC;AApED,sCAoEC"}
@@ -1,4 +1,5 @@
1
1
  import { ProjectConfiguration } from '@nx/devkit'
2
+ import { ProjectNameAndRootFormat } from '@nx/devkit/src/generators/project-name-and-root-utils'
2
3
 
3
4
  // export interface Schema {
4
5
  // name: string;
@@ -23,29 +24,32 @@ import { ProjectConfiguration } from '@nx/devkit'
23
24
  // isNest?: boolean;
24
25
  // }
25
26
 
26
- // subset of @nx/node:application options that we forward to node app generator
27
- interface SupportedNodeGeneratorOptions {
27
+ export interface Schema {
28
+ // standard nx generator options
29
+ name: string
30
+ directory?: string
31
+ tags?: string
32
+ projectNameAndRootFormat?: ProjectNameAndRootFormat
33
+ rootProject?: boolean
34
+
35
+ // subset of @nx/node:application options that we forward to node app generator
28
36
  setParserOptionsProject?: boolean
29
37
  skipFormat?: boolean
30
38
  // unitTestRunner is always jest
31
39
  // bundler is always esbuild
32
40
  // linter is always eslint
33
- }
34
-
35
- export interface FunctionGeneratorOptions
36
- extends SupportedNodeGeneratorOptions {
37
- name: string
38
- directory?: string
39
- tags?: string
40
41
 
42
+ // nx-firebase:function generator specific options
41
43
  app: string
42
44
  runTime?: '16' | '18' | '20'
43
45
  format?: 'esm' | 'cjs'
44
46
  }
45
47
 
46
- interface NormalizedOptions extends FunctionGeneratorOptions {
47
- projectRoot: Path
48
+ interface NormalizedSchema extends Schema {
48
49
  projectName: string
50
+ projectRoot: string
51
+ parsedTags: string[]
52
+
49
53
  firebaseConfigName: string
50
54
  firebaseAppProject: ProjectConfiguration
51
55
  }
@@ -16,12 +16,19 @@
16
16
  "x-prompt": "What name would you like to use for the firebase function project?"
17
17
  },
18
18
  "directory": {
19
- "description": "The directory of the new function project.",
20
- "type": "string"
19
+ "description": "A directory where the function is placed.",
20
+ "type": "string",
21
+ "alias": "d"
21
22
  },
22
23
  "tags": {
23
- "description": "Add tags to the application (used for linting).",
24
- "type": "string"
24
+ "type": "string",
25
+ "description": "Add tags to the project (used for linting)",
26
+ "alias": "t"
27
+ },
28
+ "projectNameAndRootFormat": {
29
+ "description": "Whether to generate the project name and root directory as provided (`as-provided`) or generate them composing their values and taking the configured layout into account (`derived`).",
30
+ "type": "string",
31
+ "enum": ["as-provided", "derived"]
25
32
  },
26
33
  "setParserOptionsProject": {
27
34
  "type": "boolean",
@@ -43,14 +50,13 @@
43
50
  "description": "The name of the parent Nx firebase application project this function will be added to.",
44
51
  "type": "string",
45
52
  "x-prompt": "Which firebase Nx application project will this function be created for?"
46
- },
53
+ },
47
54
  "runTime": {
48
55
  "description": "The node runtime target for this function.",
49
56
  "type": "string",
50
- "enum": ["16", "18", "20"],
51
- "default": "16"
57
+ "enum": ["18", "20", "22"],
58
+ "default": "18"
52
59
  }
53
-
54
60
  },
55
61
  "additionalProperties": false,
56
62
  "required": ["name", "app"]
@@ -1,4 +1,4 @@
1
- import type { GeneratorCallback, Tree } from '@nx/devkit';
1
+ import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
2
  import type { InitGeneratorOptions } from './schema';
3
3
  /**
4
4
  * `nx g @simondotm/nx-firebase:init`
@@ -7,5 +7,5 @@ import type { InitGeneratorOptions } from './schema';
7
7
  * It also adds `@nx/node` if it is not already installed
8
8
  *
9
9
  */
10
- export declare function initGenerator(tree: Tree, options: InitGeneratorOptions): Promise<GeneratorCallback>;
10
+ export declare function initGenerator(host: Tree, schema: InitGeneratorOptions): Promise<GeneratorCallback>;
11
11
  export default initGenerator;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initGenerator = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
5
6
  const lib_1 = require("./lib");
6
7
  const add_git_ignore_entry_1 = require("./lib/add-git-ignore-entry");
7
8
  /**
@@ -11,11 +12,16 @@ const add_git_ignore_entry_1 = require("./lib/add-git-ignore-entry");
11
12
  * It also adds `@nx/node` if it is not already installed
12
13
  *
13
14
  */
14
- function initGenerator(tree, options) {
15
+ function initGenerator(host, schema) {
15
16
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
- (0, add_git_ignore_entry_1.addGitIgnore)(tree);
17
- (0, add_git_ignore_entry_1.addNxIgnore)(tree);
18
- return (0, lib_1.addDependencies)(tree);
17
+ const tasks = [];
18
+ (0, add_git_ignore_entry_1.addGitIgnore)(host);
19
+ (0, add_git_ignore_entry_1.addNxIgnore)(host);
20
+ if (!schema.skipFormat) {
21
+ yield (0, devkit_1.formatFiles)(host);
22
+ }
23
+ tasks.push((0, lib_1.addDependencies)(host));
24
+ return (0, devkit_1.runTasksInSerial)(...tasks);
19
25
  });
20
26
  }
21
27
  exports.initGenerator = initGenerator;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/nx-firebase/src/generators/init/init.ts"],"names":[],"mappings":";;;;AACA,+BAAuC;AACvC,qEAAsE;AAGtE;;;;;;GAMG;AACH,SAAsB,aAAa,CACjC,IAAU,EACV,OAA6B;;QAE7B,IAAA,mCAAY,EAAC,IAAI,CAAC,CAAA;QAClB,IAAA,kCAAW,EAAC,IAAI,CAAC,CAAA;QACjB,OAAO,IAAA,qBAAe,EAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;CAAA;AAPD,sCAOC;AAED,kBAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/nx-firebase/src/generators/init/init.ts"],"names":[],"mappings":";;;;AAAA,uCAKmB;AACnB,+BAAuC;AACvC,qEAAsE;AAGtE;;;;;;GAMG;AACH,SAAsB,aAAa,CACjC,IAAU,EACV,MAA4B;;QAE5B,MAAM,KAAK,GAAwB,EAAE,CAAA;QACrC,IAAA,mCAAY,EAAC,IAAI,CAAC,CAAA;QAClB,IAAA,kCAAW,EAAC,IAAI,CAAC,CAAA;QACjB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACtB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;SACxB;QACD,KAAK,CAAC,IAAI,CAAC,IAAA,qBAAe,EAAC,IAAI,CAAC,CAAC,CAAA;QACjC,OAAO,IAAA,yBAAgB,EAAC,GAAG,KAAK,CAAC,CAAA;IACnC,CAAC;CAAA;AAZD,sCAYC;AAED,kBAAe,aAAa,CAAA"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addDependencies = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const utils_1 = require("../../../utils");
6
- const versions_1 = require("../../../utils/versions");
6
+ const nx_firebase_versions_1 = require("../../../__generated__/nx-firebase-versions");
7
7
  function addDependencies(tree) {
8
8
  const dependencies = {};
9
9
  const devDependencies = {};
@@ -15,26 +15,35 @@ function addDependencies(tree) {
15
15
  function addDependencyIfNotPresent(packageName, packageVersion) {
16
16
  if (!packageJson.dependencies || !packageJson.dependencies[packageName]) {
17
17
  dependencies[packageName] = packageVersion;
18
+ return true;
18
19
  }
20
+ return false;
19
21
  }
20
22
  function addDevDependencyIfNotPresent(packageName, packageVersion) {
21
23
  if (!packageJson.devDependencies ||
22
24
  !packageJson.devDependencies[packageName]) {
23
25
  devDependencies[packageName] = packageVersion;
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ // Firebase packages are not managed by the plugin
31
+ // but they are added if they do not exist already in the workspace
32
+ addDependencyIfNotPresent('firebase', `^${nx_firebase_versions_1.packageVersions.firebase}`);
33
+ addDependencyIfNotPresent('firebase-admin', `^${nx_firebase_versions_1.packageVersions.firebaseAdmin}`);
34
+ addDependencyIfNotPresent('firebase-functions', `^${nx_firebase_versions_1.packageVersions.firebaseFunctions}`);
35
+ // if the workspace uses pnpm, we need to add the @google-cloud/functions-framework package
36
+ if ((0, devkit_1.detectPackageManager)() === 'pnpm') {
37
+ if (addDependencyIfNotPresent('@google-cloud/functions-framework', `^${nx_firebase_versions_1.packageVersions.googleCloudFunctionsFramework}`)) {
38
+ devkit_1.logger.info(`This workspace is using pnpm, adding '@google-cloud/functions-framework' dependency for firebase functions compatibility\nSee https://github.com/firebase/firebase-tools/issues/5911#issuecomment-1730263400\n\n`);
24
39
  }
25
40
  }
26
- // firebase dependencies
27
- addDependencyIfNotPresent('firebase', versions_1.firebaseVersion);
28
- addDependencyIfNotPresent('firebase-admin', versions_1.firebaseAdminVersion);
29
- addDependencyIfNotPresent('firebase-functions', versions_1.firebaseFunctionsVersion);
30
- //SM: not convinced we should be adding tslib in this plugin
31
- //addDependencyIfNotPresent('tslib', tsLibVersion)
32
41
  // firebase dev dependencies
33
- addDevDependencyIfNotPresent('firebase-tools', versions_1.firebaseToolsVersion);
34
- addDevDependencyIfNotPresent('firebase-functions-test', versions_1.firebaseFunctionsTestVersion);
42
+ addDevDependencyIfNotPresent('firebase-tools', `^${nx_firebase_versions_1.packageVersions.firebaseTools}`);
43
+ addDevDependencyIfNotPresent('firebase-functions-test', `^${nx_firebase_versions_1.packageVersions.firebaseFunctionsTest}`);
35
44
  // kill-port is used by the emulate target to ensure clean emulator startup
36
45
  // since Nx doesn't kill processes cleanly atm
37
- addDevDependencyIfNotPresent('kill-port', versions_1.killportVersion);
46
+ addDevDependencyIfNotPresent('kill-port', `^${nx_firebase_versions_1.packageVersions.killPort}`);
38
47
  // @nx/node is used by the plugin function generator as a proxy for creating a typescript app
39
48
  // since users have to create a firebase app before they generate a function, we can be sure
40
49
  // this plugin init will have been run before the function generator that requires @nx/node is used