@firebase-function-kits/firestore-bigquery-export 0.0.2-rc.1 → 0.0.2-rc.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firebase-function-kits/firestore-bigquery-export",
3
- "version": "0.0.2-rc.1",
3
+ "version": "0.0.2-rc.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/firebase/extensions.git",
@@ -31,15 +31,16 @@
31
31
  "serve": "firebase emulators:start --only functions"
32
32
  },
33
33
  "dependencies": {
34
- "@firebaseextensions/firestore-bigquery-change-tracker": "^2.0.4",
34
+ "@firebaseextensions/firestore-bigquery-change-tracker": "^2.1.0",
35
35
  "@google-cloud/bigquery": "^7.6.0",
36
- "firebase-admin": "^14.1.0",
37
- "firebase-functions": "7.3.2",
36
+ "firebase-admin": "^13.6.0",
37
+ "firebase-functions": "^7.3.2",
38
38
  "generate-schema": "^2.6.0",
39
39
  "lodash": "^4.17.14"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/lodash": "^4.17.0",
43
+ "typescript": "^5.9.3",
43
44
  "vitest": "^3.2.4"
44
45
  }
45
46
  }
package/src/config.ts CHANGED
@@ -78,53 +78,6 @@ const DATASET_LOCATION_OPTIONS = [
78
78
  "us-south1",
79
79
  "us-east5",
80
80
  ] as const;
81
- const DATABASE_REGION_OPTIONS = [
82
- "eur3",
83
- "nam5",
84
- "nam7",
85
- "us-central1",
86
- "us-west1",
87
- "us-west2",
88
- "us-west3",
89
- "us-west4",
90
- "us-east1",
91
- "us-east4",
92
- "us-east5",
93
- "us-south1",
94
- "northamerica-northeast1",
95
- "northamerica-northeast2",
96
- "northamerica-south1",
97
- "southamerica-east1",
98
- "southamerica-west1",
99
- "europe-west1",
100
- "europe-west2",
101
- "europe-west3",
102
- "europe-west4",
103
- "europe-west6",
104
- "europe-west8",
105
- "europe-west9",
106
- "europe-west10",
107
- "europe-west12",
108
- "europe-southwest1",
109
- "europe-north1",
110
- "europe-north2",
111
- "europe-central2",
112
- "me-central1",
113
- "me-central2",
114
- "me-west1",
115
- "asia-south1",
116
- "asia-south2",
117
- "asia-southeast1",
118
- "asia-southeast2",
119
- "asia-east1",
120
- "asia-east2",
121
- "asia-northeast1",
122
- "asia-northeast2",
123
- "asia-northeast3",
124
- "australia-southeast1",
125
- "australia-southeast2",
126
- "africa-south1",
127
- ] as const;
128
81
  const TABLE_PARTITIONING_OPTIONS = [
129
82
  "HOUR",
130
83
  "DAY",
@@ -148,7 +101,6 @@ export interface ConfigExpressions {
148
101
  collectionPath: ConfigExpression<string>;
149
102
  datasetId: ConfigExpression<string>;
150
103
  tableId: ConfigExpression<string>;
151
- location: ConfigExpression<string>;
152
104
  database: ConfigExpression<string>;
153
105
  }
154
106
 
@@ -173,59 +125,6 @@ const params = {
173
125
  default: "(default)",
174
126
  input: { text: { example: "(default)" } },
175
127
  }),
176
- databaseRegion: defineString("DATABASE_REGION", {
177
- label: "Firestore Instance Location",
178
- description:
179
- "Where is the Firestore database located? You can check your current database location at https://console.cloud.google.com/firestore/databases.",
180
-
181
- input: select({
182
- "Multi-region (Europe - Belgium and Netherlands)": "eur3",
183
- "Multi-region (United States)": "nam5",
184
- "Multi-region (Iowa, North Virginia, and Oklahoma)": "nam7",
185
- "Iowa (us-central1)": "us-central1",
186
- "Oregon (us-west1)": "us-west1",
187
- "Los Angeles (us-west2)": "us-west2",
188
- "Salt Lake City (us-west3)": "us-west3",
189
- "Las Vegas (us-west4)": "us-west4",
190
- "South Carolina (us-east1)": "us-east1",
191
- "Northern Virginia (us-east4)": "us-east4",
192
- "Columbus (us-east5)": "us-east5",
193
- "Dallas (us-south1)": "us-south1",
194
- "Montreal (northamerica-northeast1)": "northamerica-northeast1",
195
- "Toronto (northamerica-northeast2)": "northamerica-northeast2",
196
- "Queretaro (northamerica-south1)": "northamerica-south1",
197
- "Sao Paulo (southamerica-east1)": "southamerica-east1",
198
- "Santiago (southamerica-west1)": "southamerica-west1",
199
- "Belgium (europe-west1)": "europe-west1",
200
- "London (europe-west2)": "europe-west2",
201
- "Frankfurt (europe-west3)": "europe-west3",
202
- "Netherlands (europe-west4)": "europe-west4",
203
- "Zurich (europe-west6)": "europe-west6",
204
- "Milan (europe-west8)": "europe-west8",
205
- "Paris (europe-west9)": "europe-west9",
206
- "Berlin (europe-west10)": "europe-west10",
207
- "Turin (europe-west12)": "europe-west12",
208
- "Madrid (europe-southwest1)": "europe-southwest1",
209
- "Finland (europe-north1)": "europe-north1",
210
- "Stockholm (europe-north2)": "europe-north2",
211
- "Warsaw (europe-central2)": "europe-central2",
212
- "Doha (me-central1)": "me-central1",
213
- "Dammam (me-central2)": "me-central2",
214
- "Tel Aviv (me-west1)": "me-west1",
215
- "Mumbai (asia-south1)": "asia-south1",
216
- "Delhi (asia-south2)": "asia-south2",
217
- "Singapore (asia-southeast1)": "asia-southeast1",
218
- "Jakarta (asia-southeast2)": "asia-southeast2",
219
- "Taiwan (asia-east1)": "asia-east1",
220
- "Hong Kong (asia-east2)": "asia-east2",
221
- "Tokyo (asia-northeast1)": "asia-northeast1",
222
- "Osaka (asia-northeast2)": "asia-northeast2",
223
- "Seoul (asia-northeast3)": "asia-northeast3",
224
- "Sydney (australia-southeast1)": "australia-southeast1",
225
- "Melbourne (australia-southeast2)": "australia-southeast2",
226
- "Johannesburg (africa-south1)": "africa-south1",
227
- }),
228
- }),
229
128
  collectionPath: defineString("COLLECTION_PATH", {
230
129
  label: "Collection path",
231
130
  description:
@@ -495,7 +394,6 @@ export const CONFIG_EXPRESSIONS: ConfigExpressions = {
495
394
  collectionPath: params.collectionPath,
496
395
  datasetId: params.datasetId,
497
396
  tableId: params.tableId,
498
- location: params.databaseRegion,
499
397
  database: params.database,
500
398
  };
501
399
 
@@ -667,7 +565,6 @@ export function configFromEnv(): ExportConfig {
667
565
  collectionPath: params.collectionPath.value(),
668
566
  datasetId: params.datasetId.value(),
669
567
  tableId: params.tableId.value(),
670
- location: params.databaseRegion.value(),
671
568
  datasetLocation: optional(params.datasetLocation.value()),
672
569
  bqProjectId: optional(params.bigqueryProjectId.value()),
673
570
  projectId: projectID.value(),
@@ -34,7 +34,7 @@ export type ViewType =
34
34
  * The export configuration. The main entry point builds it from deploy-time
35
35
  * params; handler consumers can construct it directly.
36
36
  *
37
- * `collectionPath`, `datasetId`, `tableId`, `location`, and `projectId` are
37
+ * `collectionPath`, `datasetId`, `tableId`, and `projectId` are
38
38
  * required; everything else has a sensible default.
39
39
  */
40
40
  export interface ExportConfig {
@@ -46,8 +46,6 @@ export interface ExportConfig {
46
46
  /** BigQuery changelog table id. */
47
47
  tableId: ConfigValue<string>;
48
48
 
49
- /** Region for the trigger and task queue. */
50
- location: ConfigValue<string>;
51
49
  /** BigQuery dataset location, e.g. `us`, `eu`. Defaults to `us`. */
52
50
  datasetLocation?: ConfigValue<string>;
53
51
  /** Project that owns the BigQuery dataset, if different from the function's
@@ -92,7 +90,6 @@ export interface ResolvedExportConfig {
92
90
  collectionPath: string;
93
91
  datasetId: string;
94
92
  tableId: string;
95
- location: string;
96
93
  datasetLocation: string;
97
94
  bqProjectId?: string;
98
95
  projectId: string;
@@ -146,7 +143,6 @@ export function resolveExportConfig(
146
143
  collectionPath: resolveConfigValue(config.collectionPath),
147
144
  datasetId: resolveConfigValue(config.datasetId),
148
145
  tableId: resolveConfigValue(config.tableId),
149
- location: resolveConfigValue(config.location),
150
146
  datasetLocation: resolveOptionalConfigValue(config.datasetLocation) ?? "us",
151
147
  bqProjectId: resolveOptionalConfigValue(config.bqProjectId),
152
148
  projectId,
package/src/index.ts CHANGED
@@ -116,9 +116,13 @@ function getHandlerContext(): HandlerContext {
116
116
  return ctx;
117
117
  }
118
118
 
119
- const functionOptions = {
120
- region: CONFIG_EXPRESSIONS.location,
121
- };
119
+ /*
120
+ * None of the exported functions set `region`. Firestore locations such as
121
+ * `nam5` are not Cloud Run regions, so the database location must never become
122
+ * a function region. The Firebase CLI resolves each function's deploy region
123
+ * itself and pins the Firestore trigger to the database's own region via the
124
+ * `database` option.
125
+ */
122
126
 
123
127
  /**
124
128
  * Firestore trigger: streams document writes on the watched collection into the
@@ -127,7 +131,6 @@ const functionOptions = {
127
131
  */
128
132
  export const fsexportbigquery = onDocumentWritten(
129
133
  {
130
- ...functionOptions,
131
134
  document: expr`${CONFIG_EXPRESSIONS.collectionPath}/{documentId}`,
132
135
  database: CONFIG_EXPRESSIONS.database,
133
136
  retry: true,
@@ -155,7 +158,6 @@ async function handleBigQuerySyncInitialization(): Promise<void> {
155
158
  */
156
159
  export const initBigQuerySync = onTaskDispatched(
157
160
  {
158
- ...functionOptions,
159
161
  retryConfig: LIFECYCLE_RETRY_CONFIG,
160
162
  },
161
163
  handleBigQuerySyncInitialization
@@ -167,7 +169,6 @@ export const initBigQuerySync = onTaskDispatched(
167
169
  */
168
170
  export const setupBigQuerySync = onTaskDispatched(
169
171
  {
170
- ...functionOptions,
171
172
  retryConfig: LIFECYCLE_RETRY_CONFIG,
172
173
  },
173
174
  handleBigQuerySyncInitialization
package/src/logs.ts CHANGED
@@ -180,8 +180,8 @@ export const init = (config?: unknown) => {
180
180
  logger.info("Initializing with configuration", config);
181
181
  };
182
182
 
183
- export const start = (config?: unknown) => {
184
- logger.info("Started execution with configuration", config);
183
+ export const start = () => {
184
+ logger.info("Started execution of extension");
185
185
  };
186
186
 
187
187
  export const timestampMissingValue = (fieldName: string) => {
@@ -162,21 +162,20 @@ describe("buildPartitioningConfig", () => {
162
162
  });
163
163
 
164
164
  describe("configFromEnv", () => {
165
- test("maps params without inventing a region default", () => {
165
+ test("maps params", () => {
166
166
  const config = configFromEnv();
167
167
  expect(config.projectId).toBe("test-project");
168
168
  expect(config.bqProjectId).toBe("test-project");
169
169
  expect(config.databaseId).toBe("(default)");
170
- expect(resolveExportConfig(config).location).toBe("");
171
170
  expect(config.viewType).toBe("view");
171
+ expect(resolveExportConfig(config)).not.toHaveProperty("location");
172
172
  });
173
173
 
174
174
  test("exposes deploy-time expressions for trigger metadata", () => {
175
175
  expect(CONFIG_EXPRESSIONS.collectionPath.toString()).toBe(
176
176
  "params.COLLECTION_PATH"
177
177
  );
178
- expect(CONFIG_EXPRESSIONS.location.toString()).toBe(
179
- "params.DATABASE_REGION"
180
- );
178
+ expect(CONFIG_EXPRESSIONS.database.toString()).toBe("params.DATABASE");
179
+ expect(CONFIG_EXPRESSIONS).not.toHaveProperty("location");
181
180
  });
182
181
  });
@@ -22,7 +22,6 @@ describe("resolveExportConfig", () => {
22
22
  collectionPath: "users",
23
23
  datasetId: "analytics",
24
24
  tableId: "users",
25
- location: "us-central1",
26
25
  projectId: "test-project",
27
26
  };
28
27
 
@@ -42,12 +41,10 @@ describe("resolveExportConfig", () => {
42
41
  test("keeps caller-supplied values", () => {
43
42
  const resolved = resolveExportConfig({
44
43
  ...minimal,
45
- location: "europe-west2",
46
44
  databaseId: "secondary",
47
45
  wildcardIds: true,
48
46
  });
49
47
 
50
- expect(resolved.location).toBe("europe-west2");
51
48
  expect(resolved.databaseId).toBe("secondary");
52
49
  expect(resolved.wildcardIds).toBe(true);
53
50
  });
@@ -65,7 +62,6 @@ describe("toTrackerConfig", () => {
65
62
  collectionPath: "users",
66
63
  datasetId: "analytics",
67
64
  tableId: "users",
68
- location: "us-central1",
69
65
  projectId: "test-project",
70
66
  };
71
67
 
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { describe, expect, test, vi } from "vitest";
18
+
19
+ vi.mock("firebase-functions/firestore", () => ({
20
+ onDocumentWritten: vi.fn(() => ({})),
21
+ }));
22
+ vi.mock("firebase-functions/tasks", () => ({
23
+ onTaskDispatched: vi.fn(() => ({})),
24
+ }));
25
+ vi.mock("firebase-functions/v2", () => ({
26
+ requiresAPI: vi.fn(),
27
+ requiresRole: vi.fn(),
28
+ }));
29
+ vi.mock("firebase-functions/v2/lifecycle", () => ({
30
+ afterFirstDeploy: vi.fn(),
31
+ afterRedeploy: vi.fn(),
32
+ }));
33
+
34
+ import { onDocumentWritten } from "firebase-functions/firestore";
35
+ import { onTaskDispatched } from "firebase-functions/tasks";
36
+ import "../src/index";
37
+
38
+ function triggerOptions(): Record<string, unknown> {
39
+ const call = vi.mocked(onDocumentWritten).mock.calls[0];
40
+ return call[0] as unknown as Record<string, unknown>;
41
+ }
42
+
43
+ function taskOptions(): Array<Record<string, unknown>> {
44
+ return vi
45
+ .mocked(onTaskDispatched)
46
+ .mock.calls.map((call) => call[0] as unknown as Record<string, unknown>);
47
+ }
48
+
49
+ describe("exported function options", () => {
50
+ test("no function sets a region (DATABASE_REGION values like nam5 are Firestore locations, not Cloud Run regions)", () => {
51
+ expect(triggerOptions()).not.toHaveProperty("region");
52
+
53
+ const tasks = taskOptions();
54
+ expect(tasks).toHaveLength(2);
55
+ for (const opts of tasks) {
56
+ expect(opts).not.toHaveProperty("region");
57
+ }
58
+ });
59
+
60
+ test("the trigger binds to the configured database instance", () => {
61
+ expect(String(triggerOptions().database)).toBe("params.DATABASE");
62
+ });
63
+
64
+ test("the trigger watches the configured collection path", () => {
65
+ const document = triggerOptions().document as { toCEL(): string };
66
+ expect(document.toCEL()).toContain("params.COLLECTION_PATH");
67
+ });
68
+ });
@@ -1 +1 @@
1
- {"version":"7.0.2","root":["./src/config.ts","./src/events.ts","./src/export-config.ts","./src/handlers.ts","./src/index.ts","./src/init.ts","./src/lib.ts","./src/logs.ts","./src/util.ts"],"packageJsons":["./node_modules/@firebase/app-types/package.json","./node_modules/@firebase/component/package.json","./node_modules/@firebase/database-types/package.json","./node_modules/@firebase/logger/package.json","./node_modules/@firebase/util/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/package.json","./node_modules/@google-cloud/bigquery/package.json","./node_modules/@google-cloud/common/package.json","./node_modules/@google-cloud/firestore/node_modules/@grpc/proto-loader/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/build/esm/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/package.json","./node_modules/@google-cloud/firestore/node_modules/gcp-metadata/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/package.json","./node_modules/@google-cloud/firestore/node_modules/google-logging-utils/package.json","./node_modules/@google-cloud/firestore/node_modules/gtoken/package.json","./node_modules/@google-cloud/firestore/node_modules/proto3-json-serializer/package.json","./node_modules/@google-cloud/firestore/package.json","./node_modules/@google-cloud/paginator/package.json","./node_modules/@google-cloud/precise-date/package.json","./node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/package.json","./node_modules/@grpc/grpc-js/package.json","./node_modules/@js-sdsl/ordered-map/package.json","./node_modules/@types/body-parser/package.json","./node_modules/@types/connect/package.json","./node_modules/@types/cors/package.json","./node_modules/@types/express-serve-static-core/package.json","./node_modules/@types/express/package.json","./node_modules/@types/http-errors/package.json","./node_modules/@types/node/package.json","./node_modules/@types/qs/package.json","./node_modules/@types/range-parser/package.json","./node_modules/@types/send/package.json","./node_modules/@types/serve-static/package.json","./node_modules/body-parser/package.json","./node_modules/cors/package.json","./node_modules/express/package.json","./node_modules/firebase-admin/package.json","./node_modules/firebase-functions/package.json","./node_modules/gaxios/package.json","./node_modules/gcp-metadata/package.json","./node_modules/google-auth-library/package.json","./node_modules/gtoken/package.json","./node_modules/http-errors/package.json","./node_modules/long/package.json","./node_modules/long/umd/package.json","./node_modules/protobufjs/package.json","./node_modules/qs/package.json","./node_modules/range-parser/package.json","./node_modules/send/package.json","./node_modules/serve-static/package.json","./node_modules/string_decoder/package.json","./node_modules/teeny-request/package.json","./node_modules/undici-types/package.json","./package.json"],"missingPackageJsons":["./node_modules/@apollo/server/package.json","./node_modules/@as-integrations/express4/package.json","./node_modules/@firebase/logger/dist/package.json","./node_modules/@firebase/logger/dist/src/package.json","./node_modules/@firebase/util/dist/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/lib/bigquery/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/lib/bigquery/partitioning/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/lib/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/node_modules/@google-cloud/bigquery/package.json","./node_modules/@firebaseextensions/firestore-bigquery-change-tracker/node_modules/@types/google-cloud__bigquery/package.json","./node_modules/@google-cloud/bigquery/build/package.json","./node_modules/@google-cloud/bigquery/build/src/package.json","./node_modules/@google-cloud/common/build/package.json","./node_modules/@google-cloud/common/build/src/package.json","./node_modules/@google-cloud/common/build/src/util/package.json","./node_modules/@google-cloud/firestore/node_modules/@grpc/grpc-js/build/src/client/package.json","./node_modules/@google-cloud/firestore/node_modules/@grpc/grpc-js/package.json","./node_modules/@google-cloud/firestore/node_modules/@grpc/proto-loader/build/package.json","./node_modules/@google-cloud/firestore/node_modules/@grpc/proto-loader/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/events/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/build/cjs/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/build/cjs/src/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/build/esm/src/package.json","./node_modules/@google-cloud/firestore/node_modules/gaxios/build/package.json","./node_modules/@google-cloud/firestore/node_modules/gcp-metadata/build/package.json","./node_modules/@google-cloud/firestore/node_modules/gcp-metadata/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/build/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/build/src/auth/googleauth/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/build/src/auth/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/build/src/crypto/package.json","./node_modules/@google-cloud/firestore/node_modules/google-auth-library/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/protos/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/bundlingCalls/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/longRunningCalls/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/normalCalls/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/paginationCalls/package.json","./node_modules/@google-cloud/firestore/node_modules/google-gax/build/src/streamingCalls/package.json","./node_modules/@google-cloud/firestore/node_modules/google-logging-utils/build/package.json","./node_modules/@google-cloud/firestore/node_modules/google-logging-utils/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/gtoken/build/cjs/package.json","./node_modules/@google-cloud/firestore/node_modules/gtoken/build/cjs/src/package.json","./node_modules/@google-cloud/firestore/node_modules/gtoken/build/package.json","./node_modules/@google-cloud/firestore/node_modules/http/package.json","./node_modules/@google-cloud/firestore/node_modules/long/package.json","./node_modules/@google-cloud/firestore/node_modules/proto3-json-serializer/build/package.json","./node_modules/@google-cloud/firestore/node_modules/proto3-json-serializer/build/src/package.json","./node_modules/@google-cloud/firestore/node_modules/protobufjs/ext/descriptor/package.json","./node_modules/@google-cloud/firestore/node_modules/protobufjs/minimal/package.json","./node_modules/@google-cloud/firestore/node_modules/protobufjs/package.json","./node_modules/@google-cloud/firestore/node_modules/querystring/package.json","./node_modules/@google-cloud/firestore/node_modules/stream/package.json","./node_modules/@google-cloud/firestore/node_modules/undici-types/package.json","./node_modules/@google-cloud/firestore/types/package.json","./node_modules/@google-cloud/firestore/types/protos/package.json","./node_modules/@google-cloud/firestore/types/v1/package.json","./node_modules/@google-cloud/firestore/types/v1beta1/package.json","./node_modules/@google-cloud/paginator/build/package.json","./node_modules/@google-cloud/paginator/build/src/package.json","./node_modules/@google-cloud/precise-date/build/package.json","./node_modules/@google-cloud/precise-date/build/src/package.json","./node_modules/@grpc/grpc-js/build/package.json","./node_modules/@grpc/grpc-js/build/src/client/package.json","./node_modules/@grpc/grpc-js/build/src/generated/google/package.json","./node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/package.json","./node_modules/@grpc/grpc-js/build/src/generated/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/v3/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/package.json","./node_modules/@grpc/grpc-js/build/src/package.json","./node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/package.json","./node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/src/package.json","./node_modules/@grpc/grpc-js/node_modules/@js-sdsl/ordered-map/package.json","./node_modules/@grpc/grpc-js/node_modules/events/package.json","./node_modules/@grpc/grpc-js/node_modules/http2/package.json","./node_modules/@grpc/grpc-js/node_modules/long/package.json","./node_modules/@grpc/grpc-js/node_modules/net/package.json","./node_modules/@grpc/grpc-js/node_modules/protobufjs/ext/descriptor/package.json","./node_modules/@grpc/grpc-js/node_modules/protobufjs/package.json","./node_modules/@grpc/grpc-js/node_modules/stream/package.json","./node_modules/@grpc/grpc-js/node_modules/tls/package.json","./node_modules/@js-sdsl/ordered-map/dist/esm/package.json","./node_modules/@js-sdsl/ordered-map/dist/package.json","./node_modules/@types/assert/package.json","./node_modules/@types/assert/strict/package.json","./node_modules/@types/async_hooks/package.json","./node_modules/@types/buffer/package.json","./node_modules/@types/child_process/package.json","./node_modules/@types/cluster/package.json","./node_modules/@types/console/package.json","./node_modules/@types/constants/package.json","./node_modules/@types/crypto/package.json","./node_modules/@types/dgram/package.json","./node_modules/@types/diagnostics_channel/package.json","./node_modules/@types/dns/package.json","./node_modules/@types/dns/promises/package.json","./node_modules/@types/domain/package.json","./node_modules/@types/events/package.json","./node_modules/@types/fs/package.json","./node_modules/@types/fs/promises/package.json","./node_modules/@types/http/package.json","./node_modules/@types/http2/package.json","./node_modules/@types/https/package.json","./node_modules/@types/inspector/package.json","./node_modules/@types/inspector/promises/package.json","./node_modules/@types/module/package.json","./node_modules/@types/net/package.json","./node_modules/@types/node/assert/package.json","./node_modules/@types/node/dns/package.json","./node_modules/@types/node/fs/package.json","./node_modules/@types/node/inspector/package.json","./node_modules/@types/node/path/package.json","./node_modules/@types/node/readline/package.json","./node_modules/@types/node/stream/package.json","./node_modules/@types/node/test/package.json","./node_modules/@types/node/timers/package.json","./node_modules/@types/node/util/package.json","./node_modules/@types/node/web-globals/package.json","./node_modules/@types/node/zlib/package.json","./node_modules/@types/os/package.json","./node_modules/@types/path/package.json","./node_modules/@types/path/posix/package.json","./node_modules/@types/path/win32/package.json","./node_modules/@types/perf_hooks/package.json","./node_modules/@types/process/package.json","./node_modules/@types/punycode/package.json","./node_modules/@types/querystring/package.json","./node_modules/@types/readline/package.json","./node_modules/@types/readline/promises/package.json","./node_modules/@types/repl/package.json","./node_modules/@types/stream/consumers/package.json","./node_modules/@types/stream/iter/package.json","./node_modules/@types/stream/package.json","./node_modules/@types/stream/promises/package.json","./node_modules/@types/stream/web/package.json","./node_modules/@types/string_decoder/package.json","./node_modules/@types/timers/package.json","./node_modules/@types/timers/promises/package.json","./node_modules/@types/tls/package.json","./node_modules/@types/trace_events/package.json","./node_modules/@types/tty/package.json","./node_modules/@types/url/package.json","./node_modules/@types/util/package.json","./node_modules/@types/util/types/package.json","./node_modules/@types/v8/package.json","./node_modules/@types/vm/package.json","./node_modules/@types/wasi/package.json","./node_modules/@types/worker_threads/package.json","./node_modules/@types/zlib/package.json","./node_modules/assert/package.json","./node_modules/assert/strict/package.json","./node_modules/async_hooks/package.json","./node_modules/buffer/package.json","./node_modules/child_process/package.json","./node_modules/cluster/package.json","./node_modules/connect/package.json","./node_modules/console/package.json","./node_modules/constants/package.json","./node_modules/crypto/package.json","./node_modules/dgram/package.json","./node_modules/diagnostics_channel/package.json","./node_modules/dns/package.json","./node_modules/dns/promises/package.json","./node_modules/domain/package.json","./node_modules/events/package.json","./node_modules/express-serve-static-core/package.json","./node_modules/firebase-admin/app-check/package.json","./node_modules/firebase-admin/app/package.json","./node_modules/firebase-admin/auth/package.json","./node_modules/firebase-admin/database/package.json","./node_modules/firebase-admin/eventarc/package.json","./node_modules/firebase-admin/firestore/package.json","./node_modules/firebase-admin/lib/app-check/package.json","./node_modules/firebase-admin/lib/app/package.json","./node_modules/firebase-admin/lib/auth/package.json","./node_modules/firebase-admin/lib/database/package.json","./node_modules/firebase-admin/lib/eventarc/package.json","./node_modules/firebase-admin/lib/firestore/package.json","./node_modules/firebase-admin/lib/package.json","./node_modules/firebase-admin/lib/utils/package.json","./node_modules/firebase-admin/node_modules/@firebase/database-types/package.json","./node_modules/firebase-admin/node_modules/@google-cloud/firestore/package.json","./node_modules/firebase-admin/node_modules/http/package.json","./node_modules/firebase-functions/firestore/package.json","./node_modules/firebase-functions/lib/common/package.json","./node_modules/firebase-functions/lib/common/providers/package.json","./node_modules/firebase-functions/lib/lifecycle/package.json","./node_modules/firebase-functions/lib/logger/package.json","./node_modules/firebase-functions/lib/package.json","./node_modules/firebase-functions/lib/params/package.json","./node_modules/firebase-functions/lib/runtime/package.json","./node_modules/firebase-functions/lib/v1/package.json","./node_modules/firebase-functions/lib/v1/providers/package.json","./node_modules/firebase-functions/lib/v2/package.json","./node_modules/firebase-functions/lib/v2/providers/alerts/package.json","./node_modules/firebase-functions/lib/v2/providers/dataconnect/package.json","./node_modules/firebase-functions/lib/v2/providers/package.json","./node_modules/firebase-functions/params/package.json","./node_modules/firebase-functions/tasks/package.json","./node_modules/firebase-functions/v2/lifecycle/package.json","./node_modules/firebase-functions/v2/package.json","./node_modules/fs/package.json","./node_modules/fs/promises/package.json","./node_modules/gaxios/build/package.json","./node_modules/gaxios/build/src/package.json","./node_modules/gcp-metadata/build/package.json","./node_modules/gcp-metadata/build/src/package.json","./node_modules/google-auth-library/build/package.json","./node_modules/google-auth-library/build/src/auth/package.json","./node_modules/google-auth-library/build/src/crypto/package.json","./node_modules/google-auth-library/build/src/package.json","./node_modules/graphql/package.json","./node_modules/gtoken/build/package.json","./node_modules/gtoken/build/src/package.json","./node_modules/http/package.json","./node_modules/http2/package.json","./node_modules/https/package.json","./node_modules/inspector/package.json","./node_modules/inspector/promises/package.json","./node_modules/module/package.json","./node_modules/net/package.json","./node_modules/os/package.json","./node_modules/path/package.json","./node_modules/path/posix/package.json","./node_modules/path/win32/package.json","./node_modules/perf_hooks/package.json","./node_modules/process/package.json","./node_modules/protobufjs/ext/descriptor/package.json","./node_modules/protobufjs/ext/package.json","./node_modules/protobufjs/minimal/package.json","./node_modules/punycode/package.json","./node_modules/querystring/package.json","./node_modules/readline/package.json","./node_modules/readline/promises/package.json","./node_modules/repl/package.json","./node_modules/stream/consumers/package.json","./node_modules/stream/iter/package.json","./node_modules/stream/package.json","./node_modules/stream/promises/package.json","./node_modules/stream/web/package.json","./node_modules/teeny-request/build/package.json","./node_modules/teeny-request/build/src/package.json","./node_modules/teeny-request/node_modules/http/package.json","./node_modules/teeny-request/node_modules/https/package.json","./node_modules/teeny-request/node_modules/stream/package.json","./node_modules/timers/package.json","./node_modules/timers/promises/package.json","./node_modules/tls/package.json","./node_modules/trace_events/package.json","./node_modules/tty/package.json","./node_modules/url/package.json","./node_modules/util/package.json","./node_modules/util/types/package.json","./node_modules/v8/package.json","./node_modules/vm/package.json","./node_modules/wasi/package.json","./node_modules/worker_threads/package.json","./node_modules/zlib/package.json"]}
1
+ {"root":["./src/config.ts","./src/events.ts","./src/export-config.ts","./src/handlers.ts","./src/index.ts","./src/init.ts","./src/lib.ts","./src/logs.ts","./src/util.ts"],"version":"5.9.3"}