firebase-tools 10.2.2 → 10.3.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 (54) hide show
  1. package/lib/commands/ext-configure.js +58 -4
  2. package/lib/commands/ext-export.js +4 -9
  3. package/lib/commands/ext-install.js +63 -4
  4. package/lib/commands/ext-uninstall.js +9 -0
  5. package/lib/commands/ext-update.js +55 -2
  6. package/lib/config.js +6 -3
  7. package/lib/deploy/extensions/planner.js +6 -6
  8. package/lib/deploy/functions/backend.js +10 -1
  9. package/lib/deploy/functions/checkIam.js +4 -4
  10. package/lib/deploy/functions/prepare.js +2 -1
  11. package/lib/deploy/functions/release/fabricator.js +4 -4
  12. package/lib/deploy/functions/release/planner.js +34 -20
  13. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +6 -1
  14. package/lib/deploy/functions/runtimes/node/index.js +27 -0
  15. package/lib/deploy/functions/runtimes/node/parseTriggers.js +24 -8
  16. package/lib/deploy/functions/services/firebaseAlerts.js +30 -0
  17. package/lib/deploy/functions/services/index.js +9 -1
  18. package/lib/deploy/functions/services/storage.js +10 -4
  19. package/lib/deploy/functions/triggerRegionHelper.js +1 -1
  20. package/lib/emulator/constants.js +1 -0
  21. package/lib/emulator/controller.js +9 -7
  22. package/lib/emulator/extensions/validation.js +37 -2
  23. package/lib/emulator/extensionsEmulator.js +44 -9
  24. package/lib/emulator/functionsEmulator.js +13 -8
  25. package/lib/emulator/functionsEmulatorShared.js +17 -10
  26. package/lib/emulator/storage/apis/firebase.js +312 -335
  27. package/lib/emulator/storage/apis/gcloud.js +238 -113
  28. package/lib/emulator/storage/crc.js +5 -1
  29. package/lib/emulator/storage/errors.js +9 -0
  30. package/lib/emulator/storage/files.js +161 -304
  31. package/lib/emulator/storage/index.js +27 -73
  32. package/lib/emulator/storage/metadata.js +63 -49
  33. package/lib/emulator/storage/multipart.js +62 -0
  34. package/lib/emulator/storage/persistence.js +78 -0
  35. package/lib/emulator/storage/rules/config.js +33 -0
  36. package/lib/emulator/storage/rules/manager.js +81 -0
  37. package/lib/emulator/storage/rules/utils.js +48 -0
  38. package/lib/emulator/storage/server.js +2 -2
  39. package/lib/emulator/storage/upload.js +106 -0
  40. package/lib/extensions/emulator/optionsHelper.js +35 -3
  41. package/lib/extensions/extensionsHelper.js +19 -10
  42. package/lib/extensions/manifest.js +109 -13
  43. package/lib/extensions/paramHelper.js +5 -4
  44. package/lib/functions/env.js +4 -6
  45. package/lib/functions/events/v2.js +11 -0
  46. package/lib/gcp/cloudfunctions.js +18 -6
  47. package/lib/gcp/cloudfunctionsv2.js +30 -12
  48. package/lib/gcp/resourceManager.js +4 -4
  49. package/lib/serve/functions.js +2 -1
  50. package/lib/utils.js +14 -1
  51. package/npm-shrinkwrap.json +2 -2
  52. package/package.json +1 -1
  53. package/lib/deploy/extensions/params.js +0 -42
  54. package/lib/deploy/functions/eventTypes.js +0 -10
@@ -5,9 +5,10 @@ const _ = require("lodash");
5
5
  const os = require("os");
6
6
  const path = require("path");
7
7
  const fs = require("fs");
8
+ const backend = require("../deploy/functions/backend");
8
9
  const constants_1 = require("./constants");
9
- const backend_1 = require("../deploy/functions/backend");
10
10
  const proto_1 = require("../gcp/proto");
11
+ const logger_1 = require("../logger");
11
12
  const memoryLookup = {
12
13
  "128MB": 128,
13
14
  "256MB": 256,
@@ -60,30 +61,35 @@ function emulatedFunctionsFromEndpoints(endpoints) {
60
61
  id: `${endpoint.region}-${endpoint.id}`,
61
62
  };
62
63
  (0, proto_1.copyIfPresent)(def, endpoint, "timeout", "availableMemoryMb", "labels", "platform", "secretEnvironmentVariables");
63
- if ((0, backend_1.isHttpsTriggered)(endpoint)) {
64
+ if (backend.isHttpsTriggered(endpoint)) {
64
65
  def.httpsTrigger = endpoint.httpsTrigger;
65
66
  }
66
- else if ((0, backend_1.isEventTriggered)(endpoint)) {
67
+ else if (backend.isEventTriggered(endpoint)) {
67
68
  const eventTrigger = endpoint.eventTrigger;
68
69
  if (endpoint.platform === "gcfv1") {
70
+ const resourceFilter = backend.findEventFilter(endpoint, "resource");
71
+ if (!resourceFilter) {
72
+ logger_1.logger.debug(`Invalid event trigger ${JSON.stringify(endpoint)}, expected event filter with resource attribute. Skipping.`);
73
+ continue;
74
+ }
69
75
  def.eventTrigger = {
70
76
  eventType: eventTrigger.eventType,
71
- resource: eventTrigger.eventFilters.resource,
77
+ resource: resourceFilter.value,
72
78
  };
73
79
  }
74
80
  else {
75
- const { resource, topic, bucket } = endpoint.eventTrigger.eventFilters;
76
- const eventResource = resource || topic || bucket;
77
- if (!eventResource) {
81
+ const [eventFilter] = endpoint.eventTrigger.eventFilters;
82
+ if (!eventFilter) {
83
+ logger_1.logger.debug(`Invalid event trigger ${JSON.stringify(endpoint)}, expected at least one event filter. Skipping.`);
78
84
  continue;
79
85
  }
80
86
  def.eventTrigger = {
81
87
  eventType: eventTrigger.eventType,
82
- resource: eventResource,
88
+ resource: eventFilter.value,
83
89
  };
84
90
  }
85
91
  }
86
- else if ((0, backend_1.isScheduleTriggered)(endpoint)) {
92
+ else if (backend.isScheduleTriggered(endpoint)) {
87
93
  def.eventTrigger = { eventType: "pubsub", resource: "" };
88
94
  def.schedule = endpoint.scheduleTrigger;
89
95
  }
@@ -94,7 +100,7 @@ function emulatedFunctionsFromEndpoints(endpoints) {
94
100
  return regionDefinitions;
95
101
  }
96
102
  exports.emulatedFunctionsFromEndpoints = emulatedFunctionsFromEndpoints;
97
- function emulatedFunctionsByRegion(definitions) {
103
+ function emulatedFunctionsByRegion(definitions, secretEnvVariables = []) {
98
104
  const regionDefinitions = [];
99
105
  for (const def of definitions) {
100
106
  if (!def.regions) {
@@ -106,6 +112,7 @@ function emulatedFunctionsByRegion(definitions) {
106
112
  defDeepCopy.region = region;
107
113
  defDeepCopy.id = `${region}-${defDeepCopy.name}`;
108
114
  defDeepCopy.platform = defDeepCopy.platform || "gcfv1";
115
+ defDeepCopy.secretEnvironmentVariables = secretEnvVariables;
109
116
  regionDefinitions.push(defDeepCopy);
110
117
  }
111
118
  }