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.
Files changed (76) hide show
  1. package/lib/commands/deploy.js +1 -1
  2. package/lib/commands/experimental-functions-shell.js +1 -1
  3. package/lib/commands/ext-configure.js +68 -7
  4. package/lib/commands/ext-export.js +10 -9
  5. package/lib/commands/ext-install.js +73 -9
  6. package/lib/commands/ext-uninstall.js +9 -0
  7. package/lib/commands/ext-update.js +58 -3
  8. package/lib/commands/functions-config-export.js +2 -2
  9. package/lib/commands/functions-shell.js +1 -1
  10. package/lib/commands/hosting-channel-create.js +2 -2
  11. package/lib/commands/hosting-channel-delete.js +2 -2
  12. package/lib/commands/hosting-channel-deploy.js +2 -2
  13. package/lib/commands/hosting-channel-list.js +2 -2
  14. package/lib/commands/hosting-channel-open.js +2 -2
  15. package/lib/commands/hosting-sites-delete.js +2 -2
  16. package/lib/commands/serve.js +1 -1
  17. package/lib/commands/target-apply.js +2 -2
  18. package/lib/commands/target-clear.js +2 -2
  19. package/lib/commands/target-remove.js +2 -2
  20. package/lib/commands/target.js +2 -2
  21. package/lib/config.js +9 -3
  22. package/lib/deploy/extensions/planner.js +15 -9
  23. package/lib/deploy/functions/backend.js +10 -1
  24. package/lib/deploy/functions/checkIam.js +4 -4
  25. package/lib/deploy/functions/prepare.js +2 -1
  26. package/lib/deploy/functions/release/fabricator.js +4 -4
  27. package/lib/deploy/functions/release/planner.js +34 -20
  28. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +6 -1
  29. package/lib/deploy/functions/runtimes/node/index.js +27 -0
  30. package/lib/deploy/functions/runtimes/node/parseTriggers.js +36 -13
  31. package/lib/deploy/functions/services/firebaseAlerts.js +30 -0
  32. package/lib/deploy/functions/services/index.js +9 -1
  33. package/lib/deploy/functions/services/storage.js +10 -4
  34. package/lib/deploy/functions/triggerRegionHelper.js +1 -1
  35. package/lib/emulator/auth/apiSpec.js +37 -0
  36. package/lib/emulator/commandUtils.js +2 -2
  37. package/lib/emulator/constants.js +1 -0
  38. package/lib/emulator/controller.js +9 -7
  39. package/lib/emulator/extensions/validation.js +37 -2
  40. package/lib/emulator/extensionsEmulator.js +47 -9
  41. package/lib/emulator/functionsEmulator.js +17 -12
  42. package/lib/emulator/functionsEmulatorShared.js +34 -11
  43. package/lib/emulator/storage/apis/firebase.js +316 -341
  44. package/lib/emulator/storage/apis/gcloud.js +238 -113
  45. package/lib/emulator/storage/crc.js +5 -1
  46. package/lib/emulator/storage/errors.js +9 -0
  47. package/lib/emulator/storage/files.js +161 -304
  48. package/lib/emulator/storage/index.js +25 -74
  49. package/lib/emulator/storage/metadata.js +63 -49
  50. package/lib/emulator/storage/multipart.js +62 -0
  51. package/lib/emulator/storage/persistence.js +78 -0
  52. package/lib/emulator/storage/rules/config.js +34 -0
  53. package/lib/emulator/storage/rules/manager.js +98 -0
  54. package/lib/emulator/storage/rules/runtime.js +4 -0
  55. package/lib/emulator/storage/rules/utils.js +48 -0
  56. package/lib/emulator/storage/server.js +2 -2
  57. package/lib/emulator/storage/upload.js +106 -0
  58. package/lib/extensions/askUserForParam.js +77 -28
  59. package/lib/extensions/emulator/optionsHelper.js +35 -3
  60. package/lib/extensions/extensionsHelper.js +19 -10
  61. package/lib/extensions/manifest.js +142 -14
  62. package/lib/extensions/paramHelper.js +32 -9
  63. package/lib/fsutils.js +14 -1
  64. package/lib/functions/env.js +4 -6
  65. package/lib/functions/events/v2.js +11 -0
  66. package/lib/gcp/cloudfunctions.js +20 -7
  67. package/lib/gcp/cloudfunctionsv2.js +30 -12
  68. package/lib/gcp/resourceManager.js +4 -4
  69. package/lib/requireConfig.js +11 -9
  70. package/lib/serve/functions.js +2 -1
  71. package/lib/utils.js +14 -1
  72. package/npm-shrinkwrap.json +2 -2
  73. package/package.json +1 -1
  74. package/lib/deploy/extensions/params.js +0 -42
  75. package/lib/deploy/functions/eventTypes.js +0 -10
  76. 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;
@@ -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
- resource: gcfFunction.eventTrigger.resource,
231
- },
232
- retry: !!((_c = gcfFunction.eventTrigger.failurePolicy) === null || _c === void 0 ? void 0 : _c.retry),
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: endpoint.eventTrigger.eventFilters.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-callabled": "true" });
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.PUBSUB_PUBLISH_EVENT = exports.API_VERSION = void 0;
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 === exports.PUBSUB_PUBLISH_EVENT) {
183
- gcfFunction.eventTrigger.pubsubTopic = endpoint.eventTrigger.eventFilters.resource;
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.resource = gcfFunction.eventTrigger.pubsubTopic;
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[attribute] = value;
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(projectId) {
17
- const response = await apiClient.post(`/projects/${projectId}:getIamPolicy`);
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(projectId, newPolicy, updateMask = "") {
22
- const response = await apiClient.post(`/projects/${projectId}:setIamPolicy`, {
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
  });
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
- var { FirebaseError } = require("./error");
3
- module.exports = function (options) {
4
- if (options.config) {
5
- return Promise.resolve();
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
- return Promise.reject(options.configError ||
8
- new FirebaseError("Not in a Firebase project directory (could not locate firebase.json)", {
9
- exit: 1,
10
- }));
11
- };
12
+ }
13
+ exports.requireConfig = requireConfig;
@@ -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;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "10.2.2",
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.2.2",
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,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "10.2.2",
3
+ "version": "10.4.0",
4
4
  "description": "Command-Line Interface for Firebase",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -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";
@@ -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
- };