firebase-tools 11.9.0 → 11.10.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.
- package/lib/bin/firebase.js +5 -5
- package/lib/commands/ext-install.js +2 -2
- package/lib/crashlytics/buildToolsJarHelper.js +1 -1
- package/lib/deploy/functions/build.js +3 -4
- package/lib/deploy/functions/cache/applyHash.js +2 -9
- package/lib/deploy/functions/cel.js +86 -47
- package/lib/deploy/functions/deploy.js +21 -2
- package/lib/deploy/functions/params.js +35 -8
- package/lib/deploy/functions/prepare.js +13 -2
- package/lib/deploy/functions/release/planner.js +1 -0
- package/lib/emulator/auth/server.js +6 -0
- package/lib/emulator/auth/state.js +3 -1
- package/lib/emulator/downloadableEmulators.js +10 -10
- package/lib/emulator/functionsEmulator.js +71 -171
- package/lib/emulator/functionsEmulatorRuntime.js +104 -142
- package/lib/emulator/functionsEmulatorShared.js +3 -0
- package/lib/emulator/functionsEmulatorShell.js +1 -1
- package/lib/emulator/functionsRuntimeWorker.js +55 -36
- package/lib/emulator/storage/files.js +5 -5
- package/lib/emulator/storage/rules/runtime.js +41 -6
- package/lib/emulator/storage/rules/types.js +7 -1
- package/lib/emulator/storage/rules/utils.js +3 -1
- package/lib/emulator/storage/server.js +6 -0
- package/lib/ensureApiEnabled.js +2 -0
- package/lib/extensions/askUserForConsent.js +1 -38
- package/lib/extensions/displayExtensionInfo.js +27 -2
- package/lib/extensions/updateHelper.js +3 -35
- package/lib/gcp/cloudfunctionsv2.js +5 -2
- package/lib/previews.js +1 -1
- package/lib/rulesDeploy.js +1 -2
- package/lib/serve/hosting.js +1 -1
- package/npm-shrinkwrap.json +69 -9
- package/package.json +3 -2
|
@@ -1,52 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.promptForPublisherTOS =
|
|
4
|
-
const clc = require("colorette");
|
|
3
|
+
exports.promptForPublisherTOS = void 0;
|
|
5
4
|
const { marked } = require("marked");
|
|
6
5
|
const TerminalRenderer = require("marked-terminal");
|
|
7
6
|
const error_1 = require("../error");
|
|
8
7
|
const extensionsHelper_1 = require("../extensions/extensionsHelper");
|
|
9
|
-
const iam = require("../gcp/iam");
|
|
10
8
|
const prompt_1 = require("../prompt");
|
|
11
9
|
const utils = require("../utils");
|
|
12
10
|
marked.setOptions({
|
|
13
11
|
renderer: new TerminalRenderer(),
|
|
14
12
|
});
|
|
15
|
-
async function formatDescription(extensionName, projectId, roles) {
|
|
16
|
-
const question = `${clc.bold(extensionName)} will be granted the following access to project ${clc.bold(projectId)}`;
|
|
17
|
-
const results = await Promise.all(roles.map((role) => {
|
|
18
|
-
return retrieveRoleInfo(role);
|
|
19
|
-
}));
|
|
20
|
-
results.unshift(question);
|
|
21
|
-
return results.join("\n");
|
|
22
|
-
}
|
|
23
|
-
exports.formatDescription = formatDescription;
|
|
24
|
-
async function retrieveRoleInfo(role) {
|
|
25
|
-
const res = await iam.getRole(role);
|
|
26
|
-
return `- ${res.title} (${res.description})`;
|
|
27
|
-
}
|
|
28
|
-
exports.retrieveRoleInfo = retrieveRoleInfo;
|
|
29
|
-
async function displayRoles(extensionName, projectId, roles) {
|
|
30
|
-
if (!roles.length) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const message = await formatDescription(extensionName, projectId, roles);
|
|
34
|
-
utils.logLabeledBullet(extensionsHelper_1.logPrefix, message);
|
|
35
|
-
}
|
|
36
|
-
exports.displayRoles = displayRoles;
|
|
37
|
-
function displayApis(extensionName, projectId, apis) {
|
|
38
|
-
if (!apis.length) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
const question = `${clc.bold(extensionName)} will enable the following APIs for project ${clc.bold(projectId)}`;
|
|
42
|
-
const results = apis.map((api) => {
|
|
43
|
-
return `- ${api.apiName}: ${api.reason}`;
|
|
44
|
-
});
|
|
45
|
-
results.unshift(question);
|
|
46
|
-
const message = results.join("\n");
|
|
47
|
-
utils.logLabeledBullet(extensionsHelper_1.logPrefix, message);
|
|
48
|
-
}
|
|
49
|
-
exports.displayApis = displayApis;
|
|
50
13
|
async function promptForPublisherTOS() {
|
|
51
14
|
const termsOfServiceMsg = "By registering as a publisher, you confirm that you have read the Firebase Extensions Publisher Terms and Conditions (linked below) and you, on behalf of yourself and the organization you represent, agree to comply with it. Here is a brief summary of the highlights of our terms and conditions:\n" +
|
|
52
15
|
" - You ensure extensions you publish comply with all laws and regulations; do not include any viruses, spyware, Trojan horses, or other malicious code; and do not violate any person’s rights, including intellectual property, privacy, and security rights.\n" +
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.printSourceDownloadLink = exports.displayExtInfo = void 0;
|
|
3
|
+
exports.retrieveRoleInfo = exports.printSourceDownloadLink = exports.displayExtInfo = void 0;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const { marked } = require("marked");
|
|
6
6
|
const TerminalRenderer = require("marked-terminal");
|
|
@@ -8,10 +8,12 @@ const utils = require("../utils");
|
|
|
8
8
|
const extensionsHelper_1 = require("./extensionsHelper");
|
|
9
9
|
const logger_1 = require("../logger");
|
|
10
10
|
const error_1 = require("../error");
|
|
11
|
+
const iam = require("../gcp/iam");
|
|
11
12
|
marked.setOptions({
|
|
12
13
|
renderer: new TerminalRenderer(),
|
|
13
14
|
});
|
|
14
|
-
function displayExtInfo(extensionName, publisher, spec, published = false) {
|
|
15
|
+
async function displayExtInfo(extensionName, publisher, spec, published = false) {
|
|
16
|
+
var _a, _b;
|
|
15
17
|
const lines = [];
|
|
16
18
|
lines.push(`**Name**: ${spec.displayName}`);
|
|
17
19
|
if (publisher) {
|
|
@@ -26,6 +28,12 @@ function displayExtInfo(extensionName, publisher, spec, published = false) {
|
|
|
26
28
|
}
|
|
27
29
|
lines.push(`**Source code**: ${spec.sourceUrl}`);
|
|
28
30
|
}
|
|
31
|
+
if ((_a = spec.apis) === null || _a === void 0 ? void 0 : _a.length) {
|
|
32
|
+
lines.push(displayApis(spec.apis));
|
|
33
|
+
}
|
|
34
|
+
if ((_b = spec.roles) === null || _b === void 0 ? void 0 : _b.length) {
|
|
35
|
+
lines.push(await displayRoles(spec.roles));
|
|
36
|
+
}
|
|
29
37
|
if (lines.length > 0) {
|
|
30
38
|
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `information about '${clc.bold(extensionName)}':`);
|
|
31
39
|
const infoStr = lines.join("\n");
|
|
@@ -48,3 +56,20 @@ function printSourceDownloadLink(sourceDownloadUri) {
|
|
|
48
56
|
utils.logBullet(marked(sourceDownloadMsg));
|
|
49
57
|
}
|
|
50
58
|
exports.printSourceDownloadLink = printSourceDownloadLink;
|
|
59
|
+
async function retrieveRoleInfo(role) {
|
|
60
|
+
const res = await iam.getRole(role);
|
|
61
|
+
return ` ${res.title} (${res.description})`;
|
|
62
|
+
}
|
|
63
|
+
exports.retrieveRoleInfo = retrieveRoleInfo;
|
|
64
|
+
async function displayRoles(roles) {
|
|
65
|
+
const lines = await Promise.all(roles.map((role) => {
|
|
66
|
+
return retrieveRoleInfo(role.role);
|
|
67
|
+
}));
|
|
68
|
+
return clc.bold("**Roles granted to this Extension**:\n") + lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
function displayApis(apis) {
|
|
71
|
+
const lines = apis.map((api) => {
|
|
72
|
+
return ` ${api.apiName} (${api.reason})`;
|
|
73
|
+
});
|
|
74
|
+
return "**APIs used by this Extension**:\n" + lines.join("\n");
|
|
75
|
+
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.inferUpdateSource = exports.
|
|
3
|
+
exports.inferUpdateSource = exports.updateFromUrlSource = exports.updateFromLocalSource = exports.update = exports.warningUpdateToOtherSource = exports.getExistingSourceOrigin = void 0;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const semver = require("semver");
|
|
6
6
|
const { marked } = require("marked");
|
|
7
7
|
const error_1 = require("../error");
|
|
8
8
|
const logger_1 = require("../logger");
|
|
9
9
|
const extensionsApi = require("./extensionsApi");
|
|
10
|
-
const refs = require("./refs");
|
|
11
10
|
const extensionsHelper_1 = require("./extensionsHelper");
|
|
12
11
|
const utils = require("../utils");
|
|
13
12
|
const displayExtensionInfo_1 = require("./displayExtensionInfo");
|
|
14
|
-
const changelog = require("./changelog");
|
|
15
13
|
function invalidSourceErrMsgTemplate(instanceId, source) {
|
|
16
14
|
return `Unable to update from the source \`${clc.bold(source)}\`. To update this instance, you can either:\n
|
|
17
15
|
- Run \`${clc.bold("firebase ext:update " + instanceId)}\` to update from the published source.\n
|
|
@@ -80,7 +78,7 @@ async function update(updateOptions) {
|
|
|
80
78
|
}
|
|
81
79
|
exports.update = update;
|
|
82
80
|
async function updateFromLocalSource(projectId, instanceId, localSource, existingSpec) {
|
|
83
|
-
(0, displayExtensionInfo_1.displayExtInfo)(instanceId, "", existingSpec, false);
|
|
81
|
+
await (0, displayExtensionInfo_1.displayExtInfo)(instanceId, "", existingSpec, false);
|
|
84
82
|
let source;
|
|
85
83
|
try {
|
|
86
84
|
source = await (0, extensionsHelper_1.createSourceFromLocation)(projectId, localSource);
|
|
@@ -95,7 +93,7 @@ async function updateFromLocalSource(projectId, instanceId, localSource, existin
|
|
|
95
93
|
}
|
|
96
94
|
exports.updateFromLocalSource = updateFromLocalSource;
|
|
97
95
|
async function updateFromUrlSource(projectId, instanceId, urlSource, existingSpec) {
|
|
98
|
-
(0, displayExtensionInfo_1.displayExtInfo)(instanceId, "", existingSpec, false);
|
|
96
|
+
await (0, displayExtensionInfo_1.displayExtInfo)(instanceId, "", existingSpec, false);
|
|
99
97
|
let source;
|
|
100
98
|
try {
|
|
101
99
|
source = await (0, extensionsHelper_1.createSourceFromLocation)(projectId, urlSource);
|
|
@@ -109,36 +107,6 @@ async function updateFromUrlSource(projectId, instanceId, urlSource, existingSpe
|
|
|
109
107
|
return source.name;
|
|
110
108
|
}
|
|
111
109
|
exports.updateFromUrlSource = updateFromUrlSource;
|
|
112
|
-
async function updateToVersionFromPublisherSource(projectId, instanceId, extVersionRef, existingSpec) {
|
|
113
|
-
let source;
|
|
114
|
-
const ref = refs.parse(extVersionRef);
|
|
115
|
-
const version = ref.version;
|
|
116
|
-
const extensionRef = refs.toExtensionRef(ref);
|
|
117
|
-
(0, displayExtensionInfo_1.displayExtInfo)(instanceId, ref.publisherId, existingSpec, true);
|
|
118
|
-
const extension = await extensionsApi.getExtension(extensionRef);
|
|
119
|
-
try {
|
|
120
|
-
source = await extensionsApi.getExtensionVersion(extVersionRef);
|
|
121
|
-
}
|
|
122
|
-
catch (err) {
|
|
123
|
-
throw new error_1.FirebaseError(`Could not find source '${clc.bold(extVersionRef)}' because (${clc.bold(version || "")}) is not a published version. To update, use the latest version of this extension (${clc.bold(extension.latestVersion || "")}).`);
|
|
124
|
-
}
|
|
125
|
-
showUpdateVersionInfo(instanceId, existingSpec.version, source.spec.version, extVersionRef);
|
|
126
|
-
warningUpdateToOtherSource(extensionsHelper_1.SourceOrigin.PUBLISHED_EXTENSION);
|
|
127
|
-
const releaseNotes = await changelog.getReleaseNotesForUpdate({
|
|
128
|
-
extensionRef,
|
|
129
|
-
fromVersion: existingSpec.version,
|
|
130
|
-
toVersion: source.spec.version,
|
|
131
|
-
});
|
|
132
|
-
if (Object.keys(releaseNotes).length) {
|
|
133
|
-
changelog.displayReleaseNotes(releaseNotes, existingSpec.version);
|
|
134
|
-
}
|
|
135
|
-
return source.name;
|
|
136
|
-
}
|
|
137
|
-
exports.updateToVersionFromPublisherSource = updateToVersionFromPublisherSource;
|
|
138
|
-
async function updateFromPublisherSource(projectId, instanceId, extRef, existingSpec) {
|
|
139
|
-
return updateToVersionFromPublisherSource(projectId, instanceId, `${extRef}@latest`, existingSpec);
|
|
140
|
-
}
|
|
141
|
-
exports.updateFromPublisherSource = updateFromPublisherSource;
|
|
142
110
|
function inferUpdateSource(updateSource, existingRef) {
|
|
143
111
|
if (!updateSource) {
|
|
144
112
|
return `${existingRef}@latest`;
|
|
@@ -13,7 +13,7 @@ const proto = require("./proto");
|
|
|
13
13
|
const utils = require("../utils");
|
|
14
14
|
const projectConfig = require("../functions/projectConfig");
|
|
15
15
|
const constants_1 = require("../functions/constants");
|
|
16
|
-
exports.API_VERSION = "
|
|
16
|
+
exports.API_VERSION = "v2";
|
|
17
17
|
const client = new apiv2_1.Client({
|
|
18
18
|
urlPrefix: api_1.functionsV2Origin,
|
|
19
19
|
auth: true,
|
|
@@ -112,7 +112,10 @@ async function listFunctionsInternal(projectId, region) {
|
|
|
112
112
|
let pageToken = "";
|
|
113
113
|
while (true) {
|
|
114
114
|
const url = `projects/${projectId}/locations/${region}/functions`;
|
|
115
|
-
const opts =
|
|
115
|
+
const opts = { queryParams: { filter: `environment="GEN_2"` } };
|
|
116
|
+
if (pageToken !== "") {
|
|
117
|
+
opts.queryParams = Object.assign(Object.assign({}, opts.queryParams), { pageToken });
|
|
118
|
+
}
|
|
116
119
|
const res = await client.get(url, opts);
|
|
117
120
|
functions.push(...(res.body.functions || []));
|
|
118
121
|
for (const region of res.body.unreachable || []) {
|
package/lib/previews.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.previews = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
const configstore_1 = require("./configstore");
|
|
6
|
-
exports.previews = Object.assign({ rtdbrules: false, ext: false, extdev: false, rtdbmanagement: false, golang: false, deletegcfartifacts: false, emulatoruisnapshot: false, frameworkawareness: false, functionsparams: false,
|
|
6
|
+
exports.previews = Object.assign({ rtdbrules: false, ext: false, extdev: false, rtdbmanagement: false, golang: false, deletegcfartifacts: false, emulatoruisnapshot: false, frameworkawareness: false, functionsparams: false, skipdeployingnoopfunctions: false }, configstore_1.configstore.get("previews"));
|
|
7
7
|
if (process.env.FIREBASE_CLI_PREVIEWS) {
|
|
8
8
|
process.env.FIREBASE_CLI_PREVIEWS.split(",").forEach((feature) => {
|
|
9
9
|
if ((0, lodash_1.has)(exports.previews, feature)) {
|
package/lib/rulesDeploy.js
CHANGED
|
@@ -11,7 +11,6 @@ const utils = require("./utils");
|
|
|
11
11
|
const prompt_1 = require("./prompt");
|
|
12
12
|
const getProjectNumber_1 = require("./getProjectNumber");
|
|
13
13
|
const resourceManager_1 = require("./gcp/resourceManager");
|
|
14
|
-
const previews_1 = require("./previews");
|
|
15
14
|
const QUOTA_EXCEEDED_STATUS_CODE = 429;
|
|
16
15
|
const RULESET_COUNT_LIMIT = 1000;
|
|
17
16
|
const RULESETS_TO_GC = 10;
|
|
@@ -99,7 +98,7 @@ class RulesDeploy {
|
|
|
99
98
|
this.rulesetNames[filename] = latestRulesetName;
|
|
100
99
|
continue;
|
|
101
100
|
}
|
|
102
|
-
if (
|
|
101
|
+
if (service === RulesetServiceType.FIREBASE_STORAGE) {
|
|
103
102
|
await this.checkStorageRulesIamPermissions((_a = files[0]) === null || _a === void 0 ? void 0 : _a.content);
|
|
104
103
|
}
|
|
105
104
|
utils.logLabeledBullet(RulesetType[this.type], `uploading rules ${(0, colorette_1.bold)(filename)}...`);
|
package/lib/serve/hosting.js
CHANGED
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "firebase-tools",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.10.0",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "firebase-tools",
|
|
9
|
-
"version": "11.
|
|
9
|
+
"version": "11.10.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@google-cloud/pubsub": "^3.0.1",
|
|
@@ -133,10 +133,11 @@
|
|
|
133
133
|
"eslint-plugin-prettier": "^4.0.0",
|
|
134
134
|
"firebase": "^7.24.0",
|
|
135
135
|
"firebase-admin": "^9.4.2",
|
|
136
|
-
"firebase-functions": "^3.
|
|
136
|
+
"firebase-functions": "^3.23.0",
|
|
137
137
|
"google-discovery-to-swagger": "^2.1.0",
|
|
138
138
|
"mocha": "^9.1.3",
|
|
139
139
|
"nock": "^13.0.5",
|
|
140
|
+
"node-mocks-http": "^1.11.0",
|
|
140
141
|
"nyc": "^15.1.0",
|
|
141
142
|
"openapi-merge": "^1.0.23",
|
|
142
143
|
"prettier": "^2.5.1",
|
|
@@ -6349,9 +6350,9 @@
|
|
|
6349
6350
|
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
|
6350
6351
|
},
|
|
6351
6352
|
"node_modules/firebase-functions": {
|
|
6352
|
-
"version": "3.
|
|
6353
|
-
"resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.
|
|
6354
|
-
"integrity": "sha512
|
|
6353
|
+
"version": "3.23.0",
|
|
6354
|
+
"resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.23.0.tgz",
|
|
6355
|
+
"integrity": "sha512-/jujnNChTWIuoXK3IPNGYu1zjXF1fYRy88uYbkrJhs3dhK6EdXZi0rX6JUEOCB7h6IkRQvbio+bvtaoI7h+4Lg==",
|
|
6355
6356
|
"dev": true,
|
|
6356
6357
|
"dependencies": {
|
|
6357
6358
|
"@types/cors": "^2.8.5",
|
|
@@ -9992,6 +9993,39 @@
|
|
|
9992
9993
|
"node": ">= 8"
|
|
9993
9994
|
}
|
|
9994
9995
|
},
|
|
9996
|
+
"node_modules/node-mocks-http": {
|
|
9997
|
+
"version": "1.11.0",
|
|
9998
|
+
"resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.11.0.tgz",
|
|
9999
|
+
"integrity": "sha512-jS/WzSOcKbOeGrcgKbenZeNhxUNnP36Yw11+hL4TTxQXErGfqYZ+MaYNNvhaTiGIJlzNSqgQkk9j8dSu1YWSuw==",
|
|
10000
|
+
"dev": true,
|
|
10001
|
+
"dependencies": {
|
|
10002
|
+
"accepts": "^1.3.7",
|
|
10003
|
+
"content-disposition": "^0.5.3",
|
|
10004
|
+
"depd": "^1.1.0",
|
|
10005
|
+
"fresh": "^0.5.2",
|
|
10006
|
+
"merge-descriptors": "^1.0.1",
|
|
10007
|
+
"methods": "^1.1.2",
|
|
10008
|
+
"mime": "^1.3.4",
|
|
10009
|
+
"parseurl": "^1.3.3",
|
|
10010
|
+
"range-parser": "^1.2.0",
|
|
10011
|
+
"type-is": "^1.6.18"
|
|
10012
|
+
},
|
|
10013
|
+
"engines": {
|
|
10014
|
+
"node": ">=0.6"
|
|
10015
|
+
}
|
|
10016
|
+
},
|
|
10017
|
+
"node_modules/node-mocks-http/node_modules/mime": {
|
|
10018
|
+
"version": "1.6.0",
|
|
10019
|
+
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
|
10020
|
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
|
10021
|
+
"dev": true,
|
|
10022
|
+
"bin": {
|
|
10023
|
+
"mime": "cli.js"
|
|
10024
|
+
},
|
|
10025
|
+
"engines": {
|
|
10026
|
+
"node": ">=4"
|
|
10027
|
+
}
|
|
10028
|
+
},
|
|
9995
10029
|
"node_modules/node-preload": {
|
|
9996
10030
|
"version": "0.2.1",
|
|
9997
10031
|
"resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
|
|
@@ -19307,9 +19341,9 @@
|
|
|
19307
19341
|
}
|
|
19308
19342
|
},
|
|
19309
19343
|
"firebase-functions": {
|
|
19310
|
-
"version": "3.
|
|
19311
|
-
"resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.
|
|
19312
|
-
"integrity": "sha512
|
|
19344
|
+
"version": "3.23.0",
|
|
19345
|
+
"resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.23.0.tgz",
|
|
19346
|
+
"integrity": "sha512-/jujnNChTWIuoXK3IPNGYu1zjXF1fYRy88uYbkrJhs3dhK6EdXZi0rX6JUEOCB7h6IkRQvbio+bvtaoI7h+4Lg==",
|
|
19313
19347
|
"dev": true,
|
|
19314
19348
|
"requires": {
|
|
19315
19349
|
"@types/cors": "^2.8.5",
|
|
@@ -22170,6 +22204,32 @@
|
|
|
22170
22204
|
}
|
|
22171
22205
|
}
|
|
22172
22206
|
},
|
|
22207
|
+
"node-mocks-http": {
|
|
22208
|
+
"version": "1.11.0",
|
|
22209
|
+
"resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.11.0.tgz",
|
|
22210
|
+
"integrity": "sha512-jS/WzSOcKbOeGrcgKbenZeNhxUNnP36Yw11+hL4TTxQXErGfqYZ+MaYNNvhaTiGIJlzNSqgQkk9j8dSu1YWSuw==",
|
|
22211
|
+
"dev": true,
|
|
22212
|
+
"requires": {
|
|
22213
|
+
"accepts": "^1.3.7",
|
|
22214
|
+
"content-disposition": "^0.5.3",
|
|
22215
|
+
"depd": "^1.1.0",
|
|
22216
|
+
"fresh": "^0.5.2",
|
|
22217
|
+
"merge-descriptors": "^1.0.1",
|
|
22218
|
+
"methods": "^1.1.2",
|
|
22219
|
+
"mime": "^1.3.4",
|
|
22220
|
+
"parseurl": "^1.3.3",
|
|
22221
|
+
"range-parser": "^1.2.0",
|
|
22222
|
+
"type-is": "^1.6.18"
|
|
22223
|
+
},
|
|
22224
|
+
"dependencies": {
|
|
22225
|
+
"mime": {
|
|
22226
|
+
"version": "1.6.0",
|
|
22227
|
+
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
|
22228
|
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
|
22229
|
+
"dev": true
|
|
22230
|
+
}
|
|
22231
|
+
}
|
|
22232
|
+
},
|
|
22173
22233
|
"node-preload": {
|
|
22174
22234
|
"version": "0.2.1",
|
|
22175
22235
|
"resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "firebase-tools",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.10.0",
|
|
4
4
|
"description": "Command-Line Interface for Firebase",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -210,10 +210,11 @@
|
|
|
210
210
|
"eslint-plugin-prettier": "^4.0.0",
|
|
211
211
|
"firebase": "^7.24.0",
|
|
212
212
|
"firebase-admin": "^9.4.2",
|
|
213
|
-
"firebase-functions": "^3.
|
|
213
|
+
"firebase-functions": "^3.23.0",
|
|
214
214
|
"google-discovery-to-swagger": "^2.1.0",
|
|
215
215
|
"mocha": "^9.1.3",
|
|
216
216
|
"nock": "^13.0.5",
|
|
217
|
+
"node-mocks-http": "^1.11.0",
|
|
217
218
|
"nyc": "^15.1.0",
|
|
218
219
|
"openapi-merge": "^1.0.23",
|
|
219
220
|
"prettier": "^2.5.1",
|