firebase-tools 11.21.0 → 11.23.0

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 (94) hide show
  1. package/lib/commands/ext-configure.js +3 -3
  2. package/lib/commands/ext-dev-init.js +16 -4
  3. package/lib/commands/ext-dev-publish.js +3 -3
  4. package/lib/commands/ext-dev-register.js +2 -2
  5. package/lib/commands/ext-info.js +3 -3
  6. package/lib/commands/ext-install.js +2 -2
  7. package/lib/commands/ext-uninstall.js +2 -2
  8. package/lib/commands/ext-update.js +2 -2
  9. package/lib/commands/hosting-channel-create.js +2 -2
  10. package/lib/commands/hosting-channel-delete.js +2 -2
  11. package/lib/commands/hosting-channel-deploy.js +2 -2
  12. package/lib/commands/hosting-clone.js +2 -2
  13. package/lib/deploy/functions/release/fabricator.js +3 -0
  14. package/lib/deploy/functions/runtimes/discovery/index.js +1 -1
  15. package/lib/deploy/functions/runtimes/index.js +5 -2
  16. package/lib/deploy/functions/runtimes/node/index.js +70 -27
  17. package/lib/deploy/functions/runtimes/node/versioning.js +4 -2
  18. package/lib/deploy/functions/runtimes/python/index.js +132 -0
  19. package/lib/deploy/hosting/convertConfig.js +2 -1
  20. package/lib/emulator/auth/apiSpec.js +21 -1
  21. package/lib/emulator/controller.js +5 -5
  22. package/lib/emulator/downloadableEmulators.js +6 -6
  23. package/lib/emulator/extensionsEmulator.js +3 -2
  24. package/lib/emulator/functionsEmulator.js +119 -87
  25. package/lib/emulator/functionsEmulatorRuntime.js +26 -42
  26. package/lib/emulator/functionsRuntimeWorker.js +51 -35
  27. package/lib/emulator/hub.js +6 -6
  28. package/lib/emulator/pubsubEmulator.js +12 -9
  29. package/lib/emulator/storage/apis/shared.js +2 -1
  30. package/lib/emulator/storage/cloudFunctions.js +1 -1
  31. package/lib/emulator/storage/files.js +18 -11
  32. package/lib/emulator/types.js +9 -9
  33. package/lib/extensions/askUserForConsent.js +4 -4
  34. package/lib/extensions/askUserForEventsConfig.js +2 -2
  35. package/lib/extensions/askUserForParam.js +34 -3
  36. package/lib/extensions/billingMigrationHelper.js +4 -4
  37. package/lib/extensions/change-log.js +4 -4
  38. package/lib/extensions/displayExtensionInfo.js +4 -4
  39. package/lib/extensions/emulator/optionsHelper.js +3 -3
  40. package/lib/extensions/emulator/specHelper.js +17 -16
  41. package/lib/extensions/extensionsApi.js +2 -2
  42. package/lib/extensions/extensionsHelper.js +6 -6
  43. package/lib/extensions/provisioningHelper.js +2 -2
  44. package/lib/extensions/updateHelper.js +2 -2
  45. package/lib/extensions/warnings.js +5 -5
  46. package/lib/firestore/checkDatabaseType.js +3 -3
  47. package/lib/frameworks/angular/index.js +6 -4
  48. package/lib/frameworks/index.js +47 -11
  49. package/lib/frameworks/lit/index.js +5 -1
  50. package/lib/frameworks/next/index.js +48 -20
  51. package/lib/frameworks/next/utils.js +1 -1
  52. package/lib/frameworks/nuxt/index.js +18 -26
  53. package/lib/frameworks/nuxt/interfaces.js +2 -0
  54. package/lib/frameworks/nuxt/utils.js +13 -0
  55. package/lib/frameworks/nuxt2/index.js +91 -0
  56. package/lib/frameworks/preact/index.js +5 -1
  57. package/lib/frameworks/react/index.js +5 -1
  58. package/lib/frameworks/svelte/index.js +5 -1
  59. package/lib/frameworks/vite/index.js +6 -4
  60. package/lib/functions/python.js +16 -0
  61. package/lib/gcp/cloudfunctionsv2.js +8 -0
  62. package/lib/getDefaultHostingSite.js +3 -1
  63. package/lib/init/features/firestore/index.js +1 -3
  64. package/lib/init/features/functions/index.js +10 -0
  65. package/lib/init/features/functions/python.js +48 -0
  66. package/lib/init/features/hosting/index.js +3 -2
  67. package/lib/projectUtils.js +2 -2
  68. package/lib/rc.js +4 -4
  69. package/lib/serve/functions.js +1 -3
  70. package/npm-shrinkwrap.json +1295 -276
  71. package/package.json +2 -2
  72. package/templates/extensions/extension.yaml +1 -1
  73. package/templates/extensions/integration-test.env +2 -0
  74. package/templates/extensions/integration-test.json +14 -0
  75. package/templates/extensions/javascript/WELCOME.md +14 -5
  76. package/templates/extensions/javascript/index.js +10 -10
  77. package/templates/extensions/javascript/integration-test.js +13 -0
  78. package/templates/extensions/javascript/package.lint.json +12 -4
  79. package/templates/extensions/javascript/package.nolint.json +11 -2
  80. package/templates/extensions/typescript/WELCOME.md +18 -5
  81. package/templates/extensions/typescript/_mocharc +10 -0
  82. package/templates/extensions/typescript/index.ts +16 -15
  83. package/templates/extensions/typescript/integration-test.ts +13 -0
  84. package/templates/extensions/typescript/package.lint.json +16 -4
  85. package/templates/extensions/typescript/package.nolint.json +12 -4
  86. package/templates/init/functions/javascript/_eslintrc +16 -2
  87. package/templates/init/functions/javascript/package.lint.json +4 -4
  88. package/templates/init/functions/javascript/package.nolint.json +3 -3
  89. package/templates/init/functions/python/_gitignore +0 -0
  90. package/templates/init/functions/python/main.py +13 -0
  91. package/templates/init/functions/python/requirements.txt +1 -0
  92. package/templates/init/functions/typescript/_eslintrc +1 -0
  93. package/templates/init/functions/typescript/package.lint.json +4 -4
  94. package/templates/init/functions/typescript/package.nolint.json +4 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "11.21.0",
3
+ "version": "11.23.0",
4
4
  "description": "Command-Line Interface for Firebase",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -106,7 +106,7 @@
106
106
  "stream-chain": "^2.2.4",
107
107
  "stream-json": "^1.7.3",
108
108
  "strip-ansi": "^6.0.1",
109
- "superstatic": "^9.0.2",
109
+ "superstatic": "^9.0.3",
110
110
  "tar": "^6.1.11",
111
111
  "tcp-port-used": "^1.0.2",
112
112
  "tmp": "^0.2.1",
@@ -40,7 +40,7 @@ resources:
40
40
  location: ${LOCATION}
41
41
  # httpsTrigger is used for an HTTP triggered function.
42
42
  httpsTrigger: {}
43
- runtime: "nodejs12"
43
+ runtime: "nodejs16"
44
44
 
45
45
  # In the `params` field, set up your extension's user-configured parameters.
46
46
  # Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#params-field
@@ -0,0 +1,2 @@
1
+ GREETING=Hello
2
+ LOCATION=us-central1
@@ -0,0 +1,14 @@
1
+ {
2
+ "emulators": {
3
+ "functions": {
4
+ "port": 5001
5
+ },
6
+ "ui": {
7
+ "enabled": true
8
+ },
9
+ "singleProjectMode": true
10
+ },
11
+ "extensions": {
12
+ "greet-the-world": "../.."
13
+ }
14
+ }
@@ -1,9 +1,18 @@
1
- This directory now contains the source files for a simple extension called **greet-the-world**. To try out this extension right away, install it in an existing Firebase project by running:
1
+ This directory now contains the source files for a simple extension called **greet-the-world**. You can try it out right away in the Firebase Emulator suite - just naviagte to the integration-test directory and run:
2
2
 
3
- `firebase ext:install . --project=<project-id>`
3
+ `firebase emulators:start --project=<project-id>`
4
4
 
5
- If you want to jump into the code to customize your extension, then modify **index.js** and **extension.yaml** in your favorite editor. When you're ready to try out your fancy new extension, run:
5
+ If you don't have a project to use, you can instead use '--project=demo-test' to run against a fake project.
6
6
 
7
- `firebase ext:install . --project=<project-id>`
7
+ The `integration-test` directory also includes an end to end test (in the file integration-test.spec.js) that verifies that the extension responds back with the expected greeting. You can see it in action by running:
8
8
 
9
- As always, in the docs, you can find detailed instructions for creating and testing your extension (including using the emulator!).
9
+ `npm run test`
10
+
11
+ If you want to jump into the code to customize your extension, then modify **index.js** and **extension.yaml** in your favorite editor.
12
+
13
+ If you want to deploy your extension to test on a real project, go to a Firebase project directory (or create a new one with `firebase init`) and run:
14
+
15
+ `firebase ext:install ./path/to/extension/directory --project=<project-id>`
16
+ `firebase deploy --only extensions`
17
+
18
+ You can find more information about building extensions in the publisher docs: https://firebase.google.com/docs/extensions/alpha/overview-build-extensions
@@ -1,22 +1,22 @@
1
1
  /*
2
- * This template contains a HTTP function that responds with a greeting when called
3
- *
4
- * Always use the FUNCTIONS HANDLER NAMESPACE
5
- * when writing Cloud Functions for extensions.
6
- * Learn more about the handler namespace in the docs
2
+ * This template contains a HTTP function that
3
+ * responds with a greeting when called
7
4
  *
8
5
  * Reference PARAMETERS in your functions code with:
9
6
  * `process.env.<parameter-name>`
10
- * Learn more about parameters in the docs
7
+ * Learn more about building extensions in the docs:
8
+ * https://firebase.google.com/docs/extensions/alpha/overview
11
9
  */
12
10
 
13
- const functions = require('firebase-functions');
11
+ const functions = require("firebase-functions");
14
12
 
15
- exports.greetTheWorld = functions.handler.https.onRequest((req, res) => {
16
- // Here we reference a user-provided parameter (its value is provided by the user during installation)
13
+ exports.greetTheWorld = functions.https.onRequest((req, res) => {
14
+ // Here we reference a user-provided parameter
15
+ // (its value is provided by the user during installation)
17
16
  const consumerProvidedGreeting = process.env.GREETING;
18
17
 
19
- // And here we reference an auto-populated parameter (its value is provided by Firebase after installation)
18
+ // And here we reference an auto-populated parameter
19
+ // (its value is provided by Firebase after installation)
20
20
  const instanceId = process.env.EXT_INSTANCE_ID;
21
21
 
22
22
  const greeting = `${consumerProvidedGreeting} World from ${instanceId}`;
@@ -0,0 +1,13 @@
1
+ const axios = require("axios");
2
+ const chai = require("chai");
3
+
4
+ describe("greet-the-world", () => {
5
+ it("should respond with the configured greeting", async () => {
6
+ const expected = "Hello World from greet-the-world";
7
+
8
+ const httpFunctionUri = "http://localhost:5001/demo-test/us-central1/ext-greet-the-world-greetTheWorld/";
9
+ const res = await axios.get(httpFunctionUri);
10
+
11
+ return chai.expect(res.data).to.eql(expected);
12
+ }).timeout(10000);
13
+ });
@@ -3,15 +3,23 @@
3
3
  "description": "Greet the world",
4
4
  "main": "index.js",
5
5
  "dependencies": {
6
- "firebase-admin": "^10.2.0",
7
- "firebase-functions": "^3.21.0"
6
+ "firebase-admin": "^11.5.0",
7
+ "firebase-functions": "^4.2.0"
8
8
  },
9
9
  "devDependencies": {
10
10
  "eslint": "^8.15.1",
11
- "eslint-plugin-promise": "^6.0.0"
11
+ "eslint-plugin-promise": "^6.0.0",
12
+ "eslint-config-google": "^0.14.0",
13
+ "eslint-plugin-import": "^2.25.4",
14
+ "axios": "^1.3.2",
15
+ "chai": "^4.3.7",
16
+ "mocha": "^10.2.0"
12
17
  },
13
18
  "scripts": {
14
- "lint": "./node_modules/.bin/eslint --max-warnings=0 .."
19
+ "lint": "./node_modules/.bin/eslint --max-warnings=0 ..",
20
+ "lint:fix": "./node_modules/.bin/eslint --max-warnings=0 --fix ..",
21
+ "mocha": "mocha '**/*.spec.js'",
22
+ "test": "(cd integration-tests && firebase emulators:exec 'npm run mocha' -P demo-test)"
15
23
  },
16
24
  "private": true
17
25
  }
@@ -3,8 +3,17 @@
3
3
  "description": "Greet the world",
4
4
  "main": "index.js",
5
5
  "dependencies": {
6
- "firebase-admin": "^10.2.0",
7
- "firebase-functions": "^3.21.0"
6
+ "firebase-admin": "^11.5.0",
7
+ "firebase-functions": "^4.2.0"
8
+ },
9
+ "devDependencies": {
10
+ "axios": "^1.3.2",
11
+ "chai": "^4.3.7",
12
+ "mocha": "^10.2.0"
13
+ },
14
+ "scripts": {
15
+ "mocha": "mocha '**/*.spec.js'",
16
+ "test": "(cd integration-tests && firebase emulators:exec 'npm run mocha' -P demo-test)"
8
17
  },
9
18
  "private": true
10
19
  }
@@ -1,9 +1,22 @@
1
- This directory now contains the source files for a simple extension called **greet-the-world**. To try out this extension right away, install it in an existing Firebase project by running:
1
+ This directory now contains the source files for a simple extension called **greet-the-world**. You can try it out right away in the Firebase Emulator suite: first, compile your code by running:
2
2
 
3
- `npm run build --prefix=functions && firebase ext:install . --project=<project-id>`
3
+ `npm run build --prefix=functions`
4
4
 
5
- If you want to jump into the code to customize your extension, then modify **index.ts** and **extension.yaml** in your favorite editor. When you're ready to try out your fancy new extension, run:
5
+ Then, navigate to the `functions/integration-test` directory and run:
6
6
 
7
- `npm run build --prefix=functions && firebase ext:install . --project=<project-id>`
7
+ `firebase emulators:start --project=<project-id>`
8
8
 
9
- As always, in the docs, you can find detailed instructions for creating and testing your extension (including using the emulator!).
9
+ If you don't have a project to use, you can instead use '--project=demo-test' to run against a fake project.
10
+
11
+ The `integration-test` directory also includes an end to end test (in the file **integration-test.spec.ts**) that verifies that the extension responds back with the expected greeting. You can see it in action by running:
12
+
13
+ `npm run test`
14
+
15
+ If you want to jump into the code to customize your extension, then modify **index.ts** and **extension.yaml** in your favorite editor.
16
+
17
+ If you want to deploy your extension to test on a real project, go to a Firebase project directory (or create a new one with `firebase init`) and run:
18
+
19
+ `firebase ext:install ./path/to/extension/directory --project=<project-id>`
20
+ `firebase deploy --only extensions`
21
+
22
+ You can find more information about building extensions in the publisher docs: https://firebase.google.com/docs/extensions/alpha/overview-build-extensions
@@ -0,0 +1,10 @@
1
+ {
2
+ "require": "ts-node/register",
3
+ "extensions": ["ts", "tsx"],
4
+ "spec": [
5
+ "integration-tests/**/*.spec.*"
6
+ ],
7
+ "watch-files": [
8
+ "src"
9
+ ]
10
+ }
@@ -1,25 +1,26 @@
1
1
  /*
2
- * This template contains a HTTP function that responds with a greeting when called
3
- *
4
- * Always use the FUNCTIONS HANDLER NAMESPACE
5
- * when writing Cloud Functions for extensions.
6
- * Learn more about the handler namespace in the docs
2
+ * This template contains a HTTP function that responds
3
+ * with a greeting when called
7
4
  *
8
5
  * Reference PARAMETERS in your functions code with:
9
6
  * `process.env.<parameter-name>`
10
- * Learn more about parameters in the docs
7
+ * Learn more about building extensions in the docs:
8
+ * https://firebase.google.com/docs/extensions/alpha/overview
11
9
  */
12
10
 
13
- import * as functions from 'firebase-functions';
11
+ import * as functions from "firebase-functions";
14
12
 
15
- exports.greetTheWorld = functions.handler.https.onRequest((req, res) => {
16
- // Here we reference a user-provided parameter (its value is provided by the user during installation)
17
- const consumerProvidedGreeting = process.env.GREETING;
13
+ exports.greetTheWorld = functions.https.onRequest(
14
+ (req: functions.Request, res: functions.Response) => {
15
+ // Here we reference a user-provided parameter
16
+ // (its value is provided by the user during installation)
17
+ const consumerProvidedGreeting = process.env.GREETING;
18
18
 
19
- // And here we reference an auto-populated parameter (its value is provided by Firebase after installation)
20
- const instanceId = process.env.EXT_INSTANCE_ID;
19
+ // And here we reference an auto-populated parameter
20
+ // (its value is provided by Firebase after installation)
21
+ const instanceId = process.env.EXT_INSTANCE_ID;
21
22
 
22
- const greeting = `${consumerProvidedGreeting} World from ${instanceId}`;
23
+ const greeting = `${consumerProvidedGreeting} World from ${instanceId}`;
23
24
 
24
- res.send(greeting);
25
- });
25
+ res.send(greeting);
26
+ });
@@ -0,0 +1,13 @@
1
+ import axios from "axios";
2
+ import { expect } from "chai";
3
+
4
+ describe("greet-the-world", () => {
5
+ it("should respond with the configured greeting", async () => {
6
+ const expected = "Hello World from greet-the-world";
7
+
8
+ const httpFunctionUri = "http://localhost:5001/demo-test/us-central1/ext-greet-the-world-greetTheWorld/";
9
+ const res = await axios.get(httpFunctionUri);
10
+
11
+ return expect(res.data).to.eql(expected);
12
+ }).timeout(10000);
13
+ });
@@ -2,18 +2,30 @@
2
2
  "name": "functions",
3
3
  "scripts": {
4
4
  "lint": "eslint \"src/**/*\"",
5
+ "lint:fix": "eslint \"src/**/*\" --fix",
5
6
  "build": "tsc",
6
- "build:watch": "tsc --watch"
7
+ "build:watch": "tsc --watch",
8
+ "mocha": "mocha '**/*.spec.ts'",
9
+ "test": "(cd integration-tests && firebase emulators:exec 'npm run mocha' -P demo-test)"
7
10
  },
8
11
  "main": "lib/index.js",
9
12
  "dependencies": {
10
- "firebase-admin": "^10.2.0",
11
- "firebase-functions": "^3.21.0"
13
+ "firebase-admin": "^11.5.0",
14
+ "firebase-functions": "^4.2.0"
12
15
  },
13
16
  "devDependencies": {
17
+ "@types/chai": "^4.3.4",
18
+ "@types/mocha": "^10.0.1",
19
+ "@typescript-eslint/eslint-plugin": "^5.12.0",
20
+ "@typescript-eslint/parser": "^5.12.0",
14
21
  "eslint": "^8.15.1",
15
22
  "eslint-plugin-import": "^2.26.0",
16
- "typescript": "^4.6.4"
23
+ "eslint-config-google": "^0.14.0",
24
+ "typescript": "^4.9.0",
25
+ "axios": "^1.3.2",
26
+ "chai": "^4.3.7",
27
+ "mocha": "^10.2.0",
28
+ "ts-node": "^10.4.0"
17
29
  },
18
30
  "private": true
19
31
  }
@@ -2,15 +2,23 @@
2
2
  "name": "functions",
3
3
  "scripts": {
4
4
  "build": "tsc",
5
- "build:watch": "tsc --watch"
5
+ "build:watch": "tsc --watch",
6
+ "mocha": "mocha '**/*.spec.ts'",
7
+ "test": "(cd integration-tests && firebase emulators:exec 'npm run mocha' -P demo-test)"
6
8
  },
7
9
  "main": "lib/index.js",
8
10
  "dependencies": {
9
- "firebase-admin": "^9.8.0",
10
- "firebase-functions": "^3.14.1"
11
+ "firebase-admin": "^11.5.0",
12
+ "firebase-functions": "^4.2.0"
11
13
  },
12
14
  "devDependencies": {
13
- "typescript": "^3.8.0"
15
+ "@types/chai": "^4.3.4",
16
+ "@types/mocha": "^10.0.1",
17
+ "typescript": "^4.9.0",
18
+ "axios": "^1.3.2",
19
+ "chai": "^4.3.7",
20
+ "mocha": "^10.2.0",
21
+ "ts-node": "^10.4.0"
14
22
  },
15
23
  "private": true
16
24
  }
@@ -1,14 +1,28 @@
1
1
  module.exports = {
2
- root: true,
3
2
  env: {
4
3
  es6: true,
5
4
  node: true,
6
5
  },
6
+ parserOptions: {
7
+ "ecmaVersion": 2018,
8
+ },
7
9
  extends: [
8
10
  "eslint:recommended",
9
11
  "google",
10
12
  ],
11
13
  rules: {
12
- quotes: ["error", "double"],
14
+ "no-restricted-globals": ["error", "name", "length"],
15
+ "prefer-arrow-callback": "error",
16
+ "quotes": ["error", "double", {"allowTemplateLiterals": true}],
13
17
  },
18
+ overrides: [
19
+ {
20
+ files: ["**/*.spec.*"],
21
+ env: {
22
+ mocha: true,
23
+ },
24
+ rules: {},
25
+ },
26
+ ],
27
+ globals: {},
14
28
  };
@@ -14,13 +14,13 @@
14
14
  },
15
15
  "main": "index.js",
16
16
  "dependencies": {
17
- "firebase-admin": "^10.0.2",
18
- "firebase-functions": "^3.18.0"
17
+ "firebase-admin": "^111.5.0",
18
+ "firebase-functions": "^4.2.0"
19
19
  },
20
20
  "devDependencies": {
21
- "eslint": "^8.9.0",
21
+ "eslint": "^8.15.0",
22
22
  "eslint-config-google": "^0.14.0",
23
- "firebase-functions-test": "^0.2.0"
23
+ "firebase-functions-test": "^3.0.0"
24
24
  },
25
25
  "private": true
26
26
  }
@@ -13,11 +13,11 @@
13
13
  },
14
14
  "main": "index.js",
15
15
  "dependencies": {
16
- "firebase-admin": "^10.0.2",
17
- "firebase-functions": "^3.18.0"
16
+ "firebase-admin": "^11.5.0",
17
+ "firebase-functions": "^4.2.0"
18
18
  },
19
19
  "devDependencies": {
20
- "firebase-functions-test": "^0.2.0"
20
+ "firebase-functions-test": "^3.0.0"
21
21
  },
22
22
  "private": true
23
23
  }
File without changes
@@ -0,0 +1,13 @@
1
+ # Welcome to Cloud Functions for Firebase for Python!
2
+ # To get started, simply uncomment the below code or create your own.
3
+ # Deploy with `firebase deploy`
4
+
5
+ from firebase_functions import https
6
+ from firebase_admin import initialize_app
7
+
8
+ # initialize_app()
9
+ #
10
+ #
11
+ # @https.on_request()
12
+ # def on_request_example(req: https.Request) -> https.Response:
13
+ # return https.Response("Hello world!")
@@ -0,0 +1 @@
1
+ git+https://github.com/firebase/firebase-functions-python.git@main#egg=firebase-functions
@@ -27,5 +27,6 @@ module.exports = {
27
27
  rules: {
28
28
  "quotes": ["error", "double"],
29
29
  "import/no-unresolved": 0,
30
+ "indent": ["error", 2]
30
31
  },
31
32
  };
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "main": "lib/index.js",
17
17
  "dependencies": {
18
- "firebase-admin": "^10.0.2",
19
- "firebase-functions": "^3.18.0"
18
+ "firebase-admin": "^11.5.0",
19
+ "firebase-functions": "^4.2.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@typescript-eslint/eslint-plugin": "^5.12.0",
@@ -24,8 +24,8 @@
24
24
  "eslint": "^8.9.0",
25
25
  "eslint-config-google": "^0.14.0",
26
26
  "eslint-plugin-import": "^2.25.4",
27
- "firebase-functions-test": "^0.2.0",
28
- "typescript": "^4.5.4"
27
+ "firebase-functions-test": "^3.0.0",
28
+ "typescript": "^4.9.0"
29
29
  },
30
30
  "private": true
31
31
  }
@@ -14,11 +14,12 @@
14
14
  },
15
15
  "main": "lib/index.js",
16
16
  "dependencies": {
17
- "firebase-admin": "^10.2.0",
18
- "firebase-functions": "^3.21.0"
17
+ "firebase-admin": "^11.5.0",
18
+ "firebase-functions": "^4.2.0"
19
19
  },
20
20
  "devDependencies": {
21
- "typescript": "^4.6.4"
21
+ "typescript": "^4.9.0",
22
+ "firebase-functions-test": "^3.0.0"
22
23
  },
23
24
  "private": true
24
25
  }