@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/CHANGELOG.md +1 -0
- package/README.md +46 -36
- package/lib/config.d.ts +0 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +0 -100
- package/lib/config.js.map +1 -1
- package/lib/events.d.ts.map +1 -1
- package/lib/events.js.map +1 -1
- package/lib/export-config.d.ts +1 -4
- package/lib/export-config.d.ts.map +1 -1
- package/lib/export-config.js +0 -1
- package/lib/export-config.js.map +1 -1
- package/lib/handlers.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -6
- package/lib/index.js.map +1 -1
- package/lib/init.js.map +1 -1
- package/lib/logs.d.ts +1 -1
- package/lib/logs.d.ts.map +1 -1
- package/lib/logs.js +2 -2
- package/lib/logs.js.map +1 -1
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js.map +1 -1
- package/npm-shrinkwrap.json +239 -1014
- package/package.json +5 -4
- package/src/config.ts +0 -103
- package/src/export-config.ts +1 -5
- package/src/index.ts +7 -6
- package/src/logs.ts +2 -2
- package/tests/config.test.ts +4 -5
- package/tests/export-config.test.ts +0 -4
- package/tests/index.test.ts +68 -0
- package/tsconfig.tsbuildinfo +1 -1
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.
|
|
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
|
|
34
|
+
"@firebaseextensions/firestore-bigquery-change-tracker": "^2.1.0",
|
|
35
35
|
"@google-cloud/bigquery": "^7.6.0",
|
|
36
|
-
"firebase-admin": "^
|
|
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(),
|
package/src/export-config.ts
CHANGED
|
@@ -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`,
|
|
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
|
-
|
|
120
|
-
|
|
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 = (
|
|
184
|
-
logger.info("Started execution
|
|
183
|
+
export const start = () => {
|
|
184
|
+
logger.info("Started execution of extension");
|
|
185
185
|
};
|
|
186
186
|
|
|
187
187
|
export const timestampMissingValue = (fieldName: string) => {
|
package/tests/config.test.ts
CHANGED
|
@@ -162,21 +162,20 @@ describe("buildPartitioningConfig", () => {
|
|
|
162
162
|
});
|
|
163
163
|
|
|
164
164
|
describe("configFromEnv", () => {
|
|
165
|
-
test("maps params
|
|
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.
|
|
179
|
-
|
|
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
|
+
});
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -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"}
|