firebase-tools 10.2.2 → 10.4.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/commands/deploy.js +1 -1
- package/lib/commands/experimental-functions-shell.js +1 -1
- package/lib/commands/ext-configure.js +68 -7
- package/lib/commands/ext-export.js +10 -9
- package/lib/commands/ext-install.js +73 -9
- package/lib/commands/ext-uninstall.js +9 -0
- package/lib/commands/ext-update.js +58 -3
- package/lib/commands/functions-config-export.js +2 -2
- package/lib/commands/functions-shell.js +1 -1
- package/lib/commands/hosting-channel-create.js +2 -2
- package/lib/commands/hosting-channel-delete.js +2 -2
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-channel-list.js +2 -2
- package/lib/commands/hosting-channel-open.js +2 -2
- package/lib/commands/hosting-sites-delete.js +2 -2
- package/lib/commands/serve.js +1 -1
- package/lib/commands/target-apply.js +2 -2
- package/lib/commands/target-clear.js +2 -2
- package/lib/commands/target-remove.js +2 -2
- package/lib/commands/target.js +2 -2
- package/lib/config.js +9 -3
- package/lib/deploy/extensions/planner.js +15 -9
- package/lib/deploy/functions/backend.js +10 -1
- package/lib/deploy/functions/checkIam.js +4 -4
- package/lib/deploy/functions/prepare.js +2 -1
- package/lib/deploy/functions/release/fabricator.js +4 -4
- package/lib/deploy/functions/release/planner.js +34 -20
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +6 -1
- package/lib/deploy/functions/runtimes/node/index.js +27 -0
- package/lib/deploy/functions/runtimes/node/parseTriggers.js +36 -13
- package/lib/deploy/functions/services/firebaseAlerts.js +30 -0
- package/lib/deploy/functions/services/index.js +9 -1
- package/lib/deploy/functions/services/storage.js +10 -4
- package/lib/deploy/functions/triggerRegionHelper.js +1 -1
- package/lib/emulator/auth/apiSpec.js +37 -0
- package/lib/emulator/commandUtils.js +2 -2
- package/lib/emulator/constants.js +1 -0
- package/lib/emulator/controller.js +9 -7
- package/lib/emulator/extensions/validation.js +37 -2
- package/lib/emulator/extensionsEmulator.js +47 -9
- package/lib/emulator/functionsEmulator.js +17 -12
- package/lib/emulator/functionsEmulatorShared.js +34 -11
- package/lib/emulator/storage/apis/firebase.js +316 -341
- package/lib/emulator/storage/apis/gcloud.js +238 -113
- package/lib/emulator/storage/crc.js +5 -1
- package/lib/emulator/storage/errors.js +9 -0
- package/lib/emulator/storage/files.js +161 -304
- package/lib/emulator/storage/index.js +25 -74
- package/lib/emulator/storage/metadata.js +63 -49
- package/lib/emulator/storage/multipart.js +62 -0
- package/lib/emulator/storage/persistence.js +78 -0
- package/lib/emulator/storage/rules/config.js +34 -0
- package/lib/emulator/storage/rules/manager.js +98 -0
- package/lib/emulator/storage/rules/runtime.js +4 -0
- package/lib/emulator/storage/rules/utils.js +48 -0
- package/lib/emulator/storage/server.js +2 -2
- package/lib/emulator/storage/upload.js +106 -0
- package/lib/extensions/askUserForParam.js +77 -28
- package/lib/extensions/emulator/optionsHelper.js +35 -3
- package/lib/extensions/extensionsHelper.js +19 -10
- package/lib/extensions/manifest.js +142 -14
- package/lib/extensions/paramHelper.js +32 -9
- package/lib/fsutils.js +14 -1
- package/lib/functions/env.js +4 -6
- package/lib/functions/events/v2.js +11 -0
- package/lib/gcp/cloudfunctions.js +20 -7
- package/lib/gcp/cloudfunctionsv2.js +30 -12
- package/lib/gcp/resourceManager.js +4 -4
- package/lib/requireConfig.js +11 -9
- package/lib/serve/functions.js +2 -1
- package/lib/utils.js +14 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/lib/deploy/extensions/params.js +0 -42
- package/lib/deploy/functions/eventTypes.js +0 -10
- package/lib/prepareUpload.js +0 -44
package/lib/fsutils.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dirExistsSync = exports.fileExistsSync = void 0;
|
|
3
|
+
exports.readFile = exports.dirExistsSync = exports.fileExistsSync = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
|
+
const error_1 = require("./error");
|
|
5
6
|
function fileExistsSync(path) {
|
|
6
7
|
try {
|
|
7
8
|
return (0, fs_1.statSync)(path).isFile();
|
|
@@ -20,3 +21,15 @@ function dirExistsSync(path) {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
exports.dirExistsSync = dirExistsSync;
|
|
24
|
+
function readFile(path) {
|
|
25
|
+
try {
|
|
26
|
+
return (0, fs_1.readFileSync)(path).toString();
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
if (e.code === "ENOENT") {
|
|
30
|
+
throw new error_1.FirebaseError(`File not found: ${path}`);
|
|
31
|
+
}
|
|
32
|
+
throw e;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.readFile = readFile;
|
package/lib/functions/env.js
CHANGED
|
@@ -121,15 +121,13 @@ function parseStrict(data) {
|
|
|
121
121
|
exports.parseStrict = parseStrict;
|
|
122
122
|
function findEnvfiles(functionsSource, projectId, projectAlias, isEmulator) {
|
|
123
123
|
const files = [".env"];
|
|
124
|
+
files.push(`.env.${projectId}`);
|
|
125
|
+
if (projectAlias) {
|
|
126
|
+
files.push(`.env.${projectAlias}`);
|
|
127
|
+
}
|
|
124
128
|
if (isEmulator) {
|
|
125
129
|
files.push(FUNCTIONS_EMULATOR_DOTENV);
|
|
126
130
|
}
|
|
127
|
-
else {
|
|
128
|
-
files.push(`.env.${projectId}`);
|
|
129
|
-
if (projectAlias && projectAlias.length) {
|
|
130
|
-
files.push(`.env.${projectAlias}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
131
|
return files
|
|
134
132
|
.map((f) => path.join(functionsSource, f))
|
|
135
133
|
.filter(fs.existsSync)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FIREBASE_ALERTS_PUBLISH_EVENT = exports.STORAGE_EVENTS = exports.PUBSUB_PUBLISH_EVENT = void 0;
|
|
4
|
+
exports.PUBSUB_PUBLISH_EVENT = "google.cloud.pubsub.topic.v1.messagePublished";
|
|
5
|
+
exports.STORAGE_EVENTS = [
|
|
6
|
+
"google.cloud.storage.object.v1.finalized",
|
|
7
|
+
"google.cloud.storage.object.v1.archived",
|
|
8
|
+
"google.cloud.storage.object.v1.deleted",
|
|
9
|
+
"google.cloud.storage.object.v1.metadataUpdated",
|
|
10
|
+
];
|
|
11
|
+
exports.FIREBASE_ALERTS_PUBLISH_EVENT = "google.firebase.firebasealerts.alerts.v1.published";
|
|
@@ -202,7 +202,7 @@ async function listAllFunctions(projectId) {
|
|
|
202
202
|
}
|
|
203
203
|
exports.listAllFunctions = listAllFunctions;
|
|
204
204
|
function endpointFromFunction(gcfFunction) {
|
|
205
|
-
var _a, _b, _c;
|
|
205
|
+
var _a, _b, _c, _d, _e;
|
|
206
206
|
const [, project, , region, , id] = gcfFunction.name.split("/");
|
|
207
207
|
let trigger;
|
|
208
208
|
let uri;
|
|
@@ -217,6 +217,12 @@ function endpointFromFunction(gcfFunction) {
|
|
|
217
217
|
taskQueueTrigger: {},
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
+
else if (((_c = gcfFunction.labels) === null || _c === void 0 ? void 0 : _c["deployment-callable"]) ||
|
|
221
|
+
((_d = gcfFunction.labels) === null || _d === void 0 ? void 0 : _d["deployment-callabled"])) {
|
|
222
|
+
trigger = {
|
|
223
|
+
callableTrigger: {},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
220
226
|
else if (gcfFunction.httpsTrigger) {
|
|
221
227
|
trigger = { httpsTrigger: {} };
|
|
222
228
|
uri = gcfFunction.httpsTrigger.url;
|
|
@@ -226,10 +232,13 @@ function endpointFromFunction(gcfFunction) {
|
|
|
226
232
|
trigger = {
|
|
227
233
|
eventTrigger: {
|
|
228
234
|
eventType: gcfFunction.eventTrigger.eventType,
|
|
229
|
-
eventFilters:
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
eventFilters: [
|
|
236
|
+
{
|
|
237
|
+
attribute: "resource",
|
|
238
|
+
value: gcfFunction.eventTrigger.resource,
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
retry: !!((_e = gcfFunction.eventTrigger.failurePolicy) === null || _e === void 0 ? void 0 : _e.retry),
|
|
233
242
|
},
|
|
234
243
|
};
|
|
235
244
|
}
|
|
@@ -269,9 +278,13 @@ function functionFromEndpoint(endpoint, sourceUploadUrl) {
|
|
|
269
278
|
};
|
|
270
279
|
proto.copyIfPresent(gcfFunction, endpoint, "labels");
|
|
271
280
|
if (backend.isEventTriggered(endpoint)) {
|
|
281
|
+
const resourceFilter = backend.findEventFilter(endpoint, "resource");
|
|
282
|
+
if (!resourceFilter) {
|
|
283
|
+
throw new error_1.FirebaseError("Invalid event trigger definition. Expected event filter with 'resource' attribute.");
|
|
284
|
+
}
|
|
272
285
|
gcfFunction.eventTrigger = {
|
|
273
286
|
eventType: endpoint.eventTrigger.eventType,
|
|
274
|
-
resource:
|
|
287
|
+
resource: resourceFilter.value,
|
|
275
288
|
};
|
|
276
289
|
gcfFunction.eventTrigger.failurePolicy = endpoint.eventTrigger.retry
|
|
277
290
|
? { retry: {} }
|
|
@@ -292,7 +305,7 @@ function functionFromEndpoint(endpoint, sourceUploadUrl) {
|
|
|
292
305
|
else {
|
|
293
306
|
gcfFunction.httpsTrigger = {};
|
|
294
307
|
if (backend.isCallableTriggered(endpoint)) {
|
|
295
|
-
gcfFunction.labels = Object.assign(Object.assign({}, gcfFunction.labels), { "deployment-
|
|
308
|
+
gcfFunction.labels = Object.assign(Object.assign({}, gcfFunction.labels), { "deployment-callable": "true" });
|
|
296
309
|
}
|
|
297
310
|
if (endpoint.securityLevel) {
|
|
298
311
|
gcfFunction.httpsTrigger.securityLevel = endpoint.securityLevel;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.endpointFromFunction = exports.functionFromEndpoint = exports.deleteFunction = exports.updateFunction = exports.listAllFunctions = exports.listFunctions = exports.getFunction = exports.createFunction = exports.generateUploadUrl = exports.megabytes = exports.
|
|
3
|
+
exports.endpointFromFunction = exports.functionFromEndpoint = exports.deleteFunction = exports.updateFunction = exports.listAllFunctions = exports.listFunctions = exports.getFunction = exports.createFunction = exports.generateUploadUrl = exports.megabytes = exports.API_VERSION = void 0;
|
|
4
4
|
const clc = require("cli-color");
|
|
5
5
|
const apiv2_1 = require("../apiv2");
|
|
6
6
|
const error_1 = require("../error");
|
|
7
7
|
const api_1 = require("../api");
|
|
8
8
|
const logger_1 = require("../logger");
|
|
9
|
+
const v2_1 = require("../functions/events/v2");
|
|
9
10
|
const backend = require("../deploy/functions/backend");
|
|
10
11
|
const runtimes = require("../deploy/functions/runtimes");
|
|
11
12
|
const proto = require("./proto");
|
|
@@ -16,7 +17,6 @@ const client = new apiv2_1.Client({
|
|
|
16
17
|
auth: true,
|
|
17
18
|
apiVersion: exports.API_VERSION,
|
|
18
19
|
});
|
|
19
|
-
exports.PUBSUB_PUBLISH_EVENT = "google.cloud.pubsub.topic.v1.messagePublished";
|
|
20
20
|
const BYTES_PER_UNIT = {
|
|
21
21
|
"": 1,
|
|
22
22
|
k: 1e3,
|
|
@@ -179,14 +179,24 @@ function functionFromEndpoint(endpoint, source) {
|
|
|
179
179
|
gcfFunction.eventTrigger = {
|
|
180
180
|
eventType: endpoint.eventTrigger.eventType,
|
|
181
181
|
};
|
|
182
|
-
if (gcfFunction.eventTrigger.eventType ===
|
|
183
|
-
|
|
182
|
+
if (gcfFunction.eventTrigger.eventType === v2_1.PUBSUB_PUBLISH_EVENT) {
|
|
183
|
+
const pubsubFilter = backend.findEventFilter(endpoint, "topic");
|
|
184
|
+
if (!pubsubFilter) {
|
|
185
|
+
throw new error_1.FirebaseError("Invalid pubsub endpoint. Expected eventFilter with 'topic' attribute but found none.");
|
|
186
|
+
}
|
|
187
|
+
gcfFunction.eventTrigger.pubsubTopic = pubsubFilter.value;
|
|
188
|
+
for (const filter of endpoint.eventTrigger.eventFilters) {
|
|
189
|
+
if (filter.attribute === "topic") {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (!gcfFunction.eventTrigger.eventFilters) {
|
|
193
|
+
gcfFunction.eventTrigger.eventFilters = [];
|
|
194
|
+
}
|
|
195
|
+
gcfFunction.eventTrigger.eventFilters.push(filter);
|
|
196
|
+
}
|
|
184
197
|
}
|
|
185
198
|
else {
|
|
186
|
-
gcfFunction.eventTrigger.eventFilters =
|
|
187
|
-
for (const [attribute, value] of Object.entries(endpoint.eventTrigger.eventFilters)) {
|
|
188
|
-
gcfFunction.eventTrigger.eventFilters.push({ attribute, value });
|
|
189
|
-
}
|
|
199
|
+
gcfFunction.eventTrigger.eventFilters = endpoint.eventTrigger.eventFilters;
|
|
190
200
|
}
|
|
191
201
|
proto.renameIfPresent(gcfFunction.eventTrigger, endpoint.eventTrigger, "triggerRegion", "region");
|
|
192
202
|
if (endpoint.eventTrigger.retry) {
|
|
@@ -207,7 +217,7 @@ function functionFromEndpoint(endpoint, source) {
|
|
|
207
217
|
}
|
|
208
218
|
exports.functionFromEndpoint = functionFromEndpoint;
|
|
209
219
|
function endpointFromFunction(gcfFunction) {
|
|
210
|
-
var _a, _b;
|
|
220
|
+
var _a, _b, _c;
|
|
211
221
|
const [, project, , region, , id] = gcfFunction.name.split("/");
|
|
212
222
|
let trigger;
|
|
213
223
|
if (((_a = gcfFunction.labels) === null || _a === void 0 ? void 0 : _a["deployment-scheduled"]) === "true") {
|
|
@@ -220,20 +230,28 @@ function endpointFromFunction(gcfFunction) {
|
|
|
220
230
|
taskQueueTrigger: {},
|
|
221
231
|
};
|
|
222
232
|
}
|
|
233
|
+
else if (((_c = gcfFunction.labels) === null || _c === void 0 ? void 0 : _c["deployment-callable"]) === "true") {
|
|
234
|
+
trigger = {
|
|
235
|
+
callableTrigger: {},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
223
238
|
else if (gcfFunction.eventTrigger) {
|
|
224
239
|
trigger = {
|
|
225
240
|
eventTrigger: {
|
|
226
241
|
eventType: gcfFunction.eventTrigger.eventType,
|
|
227
|
-
eventFilters:
|
|
242
|
+
eventFilters: [],
|
|
228
243
|
retry: false,
|
|
229
244
|
},
|
|
230
245
|
};
|
|
231
246
|
if (gcfFunction.eventTrigger.pubsubTopic) {
|
|
232
|
-
trigger.eventTrigger.eventFilters.
|
|
247
|
+
trigger.eventTrigger.eventFilters.push({
|
|
248
|
+
attribute: "topic",
|
|
249
|
+
value: gcfFunction.eventTrigger.pubsubTopic,
|
|
250
|
+
});
|
|
233
251
|
}
|
|
234
252
|
else {
|
|
235
253
|
for (const { attribute, value } of gcfFunction.eventTrigger.eventFilters || []) {
|
|
236
|
-
trigger.eventTrigger.eventFilters
|
|
254
|
+
trigger.eventTrigger.eventFilters.push({ attribute, value });
|
|
237
255
|
}
|
|
238
256
|
}
|
|
239
257
|
proto.renameIfPresent(trigger.eventTrigger, gcfFunction.eventTrigger, "region", "triggerRegion");
|
|
@@ -13,13 +13,13 @@ exports.firebaseRoles = {
|
|
|
13
13
|
hostingAdmin: "roles/firebasehosting.admin",
|
|
14
14
|
runViewer: "roles/run.viewer",
|
|
15
15
|
};
|
|
16
|
-
async function getIamPolicy(
|
|
17
|
-
const response = await apiClient.post(`/projects/${
|
|
16
|
+
async function getIamPolicy(projectIdOrNumber) {
|
|
17
|
+
const response = await apiClient.post(`/projects/${projectIdOrNumber}:getIamPolicy`);
|
|
18
18
|
return response.body;
|
|
19
19
|
}
|
|
20
20
|
exports.getIamPolicy = getIamPolicy;
|
|
21
|
-
async function setIamPolicy(
|
|
22
|
-
const response = await apiClient.post(`/projects/${
|
|
21
|
+
async function setIamPolicy(projectIdOrNumber, newPolicy, updateMask = "") {
|
|
22
|
+
const response = await apiClient.post(`/projects/${projectIdOrNumber}:setIamPolicy`, {
|
|
23
23
|
policy: newPolicy,
|
|
24
24
|
updateMask: updateMask,
|
|
25
25
|
});
|
package/lib/requireConfig.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireConfig = void 0;
|
|
4
|
+
const error_1 = require("./error");
|
|
5
|
+
async function requireConfig(options) {
|
|
6
|
+
await Promise.resolve();
|
|
7
|
+
if (!options.config) {
|
|
8
|
+
throw options.configError
|
|
9
|
+
? options.configError
|
|
10
|
+
: new error_1.FirebaseError("Not in a Firebase project directory (could not locate firebase.json)");
|
|
6
11
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exit: 1,
|
|
10
|
-
}));
|
|
11
|
-
};
|
|
12
|
+
}
|
|
13
|
+
exports.requireConfig = requireConfig;
|
package/lib/serve/functions.js
CHANGED
|
@@ -29,8 +29,9 @@ class FunctionsServer {
|
|
|
29
29
|
functionsDir,
|
|
30
30
|
nodeMajorVersion,
|
|
31
31
|
env: {},
|
|
32
|
+
secretEnv: [],
|
|
32
33
|
};
|
|
33
|
-
const args = Object.assign({ projectId, projectDir: options.config.projectDir, emulatableBackends: [this.backend], account }, partialArgs);
|
|
34
|
+
const args = Object.assign({ projectId, projectDir: options.config.projectDir, emulatableBackends: [this.backend], projectAlias: options.projectAlias, account }, partialArgs);
|
|
34
35
|
if (options.host) {
|
|
35
36
|
utils.assertIsStringOrUndefined(options.host);
|
|
36
37
|
args.host = options.host;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertIsStringOrUndefined = exports.assertIsNumber = exports.assertIsString = exports.assertDefined = exports.thirtyDaysFromNow = exports.isRunningInWSL = exports.isCloudEnvironment = exports.datetimeString = exports.createDestroyer = exports.promiseWithSpinner = exports.setupLoggers = exports.tryParse = exports.tryStringify = exports.promiseProps = exports.promiseWhile = exports.promiseAllSettled = exports.getFunctionsEventProvider = exports.endpoint = exports.makeActiveProject = exports.streamToString = exports.stringToStream = exports.explainStdin = exports.allSettled = exports.reject = exports.logLabeledError = exports.logLabeledWarning = exports.logWarning = exports.logLabeledBullet = exports.logBullet = exports.logLabeledSuccess = exports.logSuccess = exports.addSubdomain = exports.addDatabaseNamespace = exports.getDatabaseViewDataUrl = exports.getDatabaseUrl = exports.envOverride = exports.getInheritedOption = exports.consoleUrl = exports.envOverrides = void 0;
|
|
3
|
+
exports.groupBy = exports.assertIsStringOrUndefined = exports.assertIsNumber = exports.assertIsString = exports.assertDefined = exports.thirtyDaysFromNow = exports.isRunningInWSL = exports.isCloudEnvironment = exports.datetimeString = exports.createDestroyer = exports.promiseWithSpinner = exports.setupLoggers = exports.tryParse = exports.tryStringify = exports.promiseProps = exports.promiseWhile = exports.promiseAllSettled = exports.getFunctionsEventProvider = exports.endpoint = exports.makeActiveProject = exports.streamToString = exports.stringToStream = exports.explainStdin = exports.allSettled = exports.reject = exports.logLabeledError = exports.logLabeledWarning = exports.logWarning = exports.logLabeledBullet = exports.logBullet = exports.logLabeledSuccess = exports.logSuccess = exports.addSubdomain = exports.addDatabaseNamespace = exports.getDatabaseViewDataUrl = exports.getDatabaseUrl = exports.envOverride = exports.getInheritedOption = exports.consoleUrl = exports.envOverrides = void 0;
|
|
4
4
|
const _ = require("lodash");
|
|
5
5
|
const url = require("url");
|
|
6
6
|
const clc = require("cli-color");
|
|
@@ -393,3 +393,16 @@ function assertIsStringOrUndefined(val, message) {
|
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
395
|
exports.assertIsStringOrUndefined = assertIsStringOrUndefined;
|
|
396
|
+
function groupBy(arr, f) {
|
|
397
|
+
return arr.reduce((result, item) => {
|
|
398
|
+
const key = f(item);
|
|
399
|
+
if (result[key]) {
|
|
400
|
+
result[key].push(item);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
result[key] = [item];
|
|
404
|
+
}
|
|
405
|
+
return result;
|
|
406
|
+
}, {});
|
|
407
|
+
}
|
|
408
|
+
exports.groupBy = groupBy;
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "firebase-tools",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.4.0",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "firebase-tools",
|
|
9
|
-
"version": "10.
|
|
9
|
+
"version": "10.4.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@google-cloud/pubsub": "^2.18.4",
|
package/package.json
CHANGED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readParams = void 0;
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const logger_1 = require("../../logger");
|
|
6
|
-
const paramHelper_1 = require("../../extensions/paramHelper");
|
|
7
|
-
const error_1 = require("../../error");
|
|
8
|
-
const ENV_DIRECTORY = "extensions";
|
|
9
|
-
function readParams(args) {
|
|
10
|
-
const filesToCheck = [
|
|
11
|
-
`${args.instanceId}.env`,
|
|
12
|
-
...args.aliases.map((alias) => `${args.instanceId}.env.${alias}`),
|
|
13
|
-
`${args.instanceId}.env.${args.projectNumber}`,
|
|
14
|
-
`${args.instanceId}.env.${args.projectId}`,
|
|
15
|
-
];
|
|
16
|
-
if (args.checkLocal) {
|
|
17
|
-
filesToCheck.push(`${args.instanceId}.env.local`);
|
|
18
|
-
}
|
|
19
|
-
let noFilesFound = true;
|
|
20
|
-
const combinedParams = {};
|
|
21
|
-
for (const fileToCheck of filesToCheck) {
|
|
22
|
-
try {
|
|
23
|
-
const params = readParamsFile(args.projectDir, fileToCheck);
|
|
24
|
-
logger_1.logger.debug(`Successfully read params from ${fileToCheck}`);
|
|
25
|
-
noFilesFound = false;
|
|
26
|
-
Object.assign(combinedParams, params);
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
logger_1.logger.debug(`${err}`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (noFilesFound) {
|
|
33
|
-
throw new error_1.FirebaseError(`No params file found for ${args.instanceId}`);
|
|
34
|
-
}
|
|
35
|
-
return combinedParams;
|
|
36
|
-
}
|
|
37
|
-
exports.readParams = readParams;
|
|
38
|
-
function readParamsFile(projectDir, fileName) {
|
|
39
|
-
const paramPath = path.join(projectDir, ENV_DIRECTORY, fileName);
|
|
40
|
-
const params = (0, paramHelper_1.readEnvFile)(paramPath);
|
|
41
|
-
return params;
|
|
42
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PUBSUB_V2_EVENT = exports.STORAGE_V2_EVENTS = void 0;
|
|
4
|
-
exports.STORAGE_V2_EVENTS = [
|
|
5
|
-
"google.cloud.storage.object.v1.finalized",
|
|
6
|
-
"google.cloud.storage.object.v1.archived",
|
|
7
|
-
"google.cloud.storage.object.v1.deleted",
|
|
8
|
-
"google.cloud.storage.object.v1.metadataUpdated",
|
|
9
|
-
];
|
|
10
|
-
exports.PUBSUB_V2_EVENT = "google.cloud.pubsub.topic.v1.messagePublished";
|
package/lib/prepareUpload.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var fs = require("fs");
|
|
3
|
-
var path = require("path");
|
|
4
|
-
var tar = require("tar");
|
|
5
|
-
var tmp = require("tmp");
|
|
6
|
-
var { listFiles } = require("./listFiles");
|
|
7
|
-
var { FirebaseError } = require("./error");
|
|
8
|
-
var fsutils = require("./fsutils");
|
|
9
|
-
module.exports = function (options) {
|
|
10
|
-
var hostingConfig = options.config.get("hosting");
|
|
11
|
-
var publicDir = options.config.path(hostingConfig.public);
|
|
12
|
-
var indexPath = path.join(publicDir, "index.html");
|
|
13
|
-
var tmpFile = tmp.fileSync({
|
|
14
|
-
prefix: "firebase-upload-",
|
|
15
|
-
postfix: ".tar.gz",
|
|
16
|
-
});
|
|
17
|
-
var manifest = listFiles(publicDir, hostingConfig.ignore);
|
|
18
|
-
return tar
|
|
19
|
-
.c({
|
|
20
|
-
gzip: true,
|
|
21
|
-
file: tmpFile.name,
|
|
22
|
-
cwd: publicDir,
|
|
23
|
-
prefix: "public",
|
|
24
|
-
follow: true,
|
|
25
|
-
noDirRecurse: true,
|
|
26
|
-
portable: true,
|
|
27
|
-
}, manifest.slice(0))
|
|
28
|
-
.then(function () {
|
|
29
|
-
var stats = fs.statSync(tmpFile.name);
|
|
30
|
-
return {
|
|
31
|
-
file: tmpFile.name,
|
|
32
|
-
stream: fs.createReadStream(tmpFile.name),
|
|
33
|
-
manifest: manifest,
|
|
34
|
-
foundIndex: fsutils.fileExistsSync(indexPath),
|
|
35
|
-
size: stats.size,
|
|
36
|
-
};
|
|
37
|
-
})
|
|
38
|
-
.catch(function (err) {
|
|
39
|
-
return Promise.reject(new FirebaseError("There was an issue preparing Hosting files for upload.", {
|
|
40
|
-
original: err,
|
|
41
|
-
exit: 2,
|
|
42
|
-
}));
|
|
43
|
-
});
|
|
44
|
-
};
|