@firebaseextensions/firestore-bigquery-change-tracker 1.1.22 → 1.1.24

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/README.md CHANGED
@@ -1,4 +1,4 @@
1
- The `firestore-bigquery-change-tracker` package is a dependency for the official Firebase Extension [_Export Collections to BigQuery_](https://github.com/firebase/extensions/tree/master/firestore-bigquery-export), [_schema views script_](https://github.com/firebase/extensions/blob/master/firestore-bigquery-export/guides/GENERATE_SCHEMA_VIEWS.md) & the [_import Firestore documents script_](https://github.com/firebase/extensions/blob/master/firestore-bigquery-export/guides/IMPORT_EXISTING_DOCUMENTS.md).
1
+ The `firestore-bigquery-change-tracker` package is a dependency for the official Firebase Extension [_Stream Firestore to BigQuery_](https://github.com/firebase/extensions/tree/master/firestore-bigquery-export), [_schema views script_](https://github.com/firebase/extensions/blob/master/firestore-bigquery-export/guides/GENERATE_SCHEMA_VIEWS.md) & the [_import Firestore documents script_](https://github.com/firebase/extensions/blob/master/firestore-bigquery-export/guides/IMPORT_EXISTING_DOCUMENTS.md).
2
2
 
3
3
  Its main purpose is to initialize & update the BigQuery table & view generated by using the `firestore-bigquery-export` extension.
4
4
 
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.FirestoreBigQueryEventHistoryTracker = void 0;
18
+ exports.FirestoreBigQueryEventHistoryTracker = exports.RawChangelogViewSchema = exports.RawChangelogSchema = void 0;
19
19
  const bigquery = require("@google-cloud/bigquery");
20
20
  const firebase = require("firebase-admin");
21
21
  const traverse = require("traverse");
@@ -79,13 +79,14 @@ class FirestoreBigQueryEventHistoryTracker {
79
79
  }
80
80
  async transformRows(rows) {
81
81
  if (this.config.transformFunction && this.config.transformFunction !== "") {
82
- const response = await node_fetch_1.default(this.config.transformFunction, {
82
+ const response = await (0, node_fetch_1.default)(this.config.transformFunction, {
83
83
  method: "post",
84
84
  body: JSON.stringify({ data: rows }),
85
85
  headers: { "Content-Type": "application/json" },
86
86
  });
87
87
  const responseJson = await response.json();
88
- return responseJson.data;
88
+ // To support callable functions, first check result.data
89
+ return responseJson?.result?.data ?? responseJson.data;
89
90
  }
90
91
  return rows;
91
92
  }
@@ -188,7 +189,7 @@ class FirestoreBigQueryEventHistoryTracker {
188
189
  }
189
190
  // Exceeded number of retries, save in failed collection
190
191
  if (!retry && this.config.backupTableId) {
191
- await handleFailedTransactions_1.default(rows, this.config, e);
192
+ await (0, handleFailedTransactions_1.default)(rows, this.config, e);
192
193
  }
193
194
  // Reinitializing in case the destintation table is modified.
194
195
  this._initialized = false;
@@ -267,7 +268,7 @@ class FirestoreBigQueryEventHistoryTracker {
267
268
  logs.addNewColumn(this.rawChangeLogTableName(), schema_1.documentPathParams.name);
268
269
  }
269
270
  /** Updated table metadata if required */
270
- const shouldUpdate = await checkUpdates_1.tableRequiresUpdate({
271
+ const shouldUpdate = await (0, checkUpdates_1.tableRequiresUpdate)({
271
272
  table,
272
273
  config: this.config,
273
274
  documentIdColExists,
@@ -331,7 +332,7 @@ class FirestoreBigQueryEventHistoryTracker {
331
332
  const pathParamsColExists = columnNames.includes("path_params");
332
333
  const oldDataColExists = columnNames.includes("old_data");
333
334
  /** If new view or opt-in to new query syntax **/
334
- const updateView = checkUpdates_1.viewRequiresUpdate({
335
+ const updateView = (0, checkUpdates_1.viewRequiresUpdate)({
335
336
  metadata,
336
337
  config: this.config,
337
338
  documentIdColExists,
@@ -339,7 +340,7 @@ class FirestoreBigQueryEventHistoryTracker {
339
340
  oldDataColExists,
340
341
  });
341
342
  if (updateView) {
342
- metadata.view = snapshot_1.latestConsistentSnapshotView({
343
+ metadata.view = (0, snapshot_1.latestConsistentSnapshotView)({
343
344
  datasetId: this.config.datasetId,
344
345
  tableName: this.rawChangeLogTableName(),
345
346
  schema,
@@ -362,7 +363,7 @@ class FirestoreBigQueryEventHistoryTracker {
362
363
  if (this.config.wildcardIds) {
363
364
  schema.fields.push(schema_1.documentPathParams);
364
365
  }
365
- const latestSnapshot = snapshot_1.latestConsistentSnapshotView({
366
+ const latestSnapshot = (0, snapshot_1.latestConsistentSnapshotView)({
366
367
  datasetId: this.config.datasetId,
367
368
  tableName: this.rawChangeLogTableName(),
368
369
  schema,
@@ -37,7 +37,10 @@ class Partitioning {
37
37
  /* Check if valid timestamp value from sdk */
38
38
  if (value instanceof firebase.firestore.Timestamp)
39
39
  return true;
40
- /* Check if valid date/time value from console */
40
+ /* Check if valid date/timstemap, expedted result from production */
41
+ if (value && value.toDate && value.toDate())
42
+ return true;
43
+ /* Check if valid date/time value from the console, expected result from testing locally */
41
44
  return Object.prototype.toString.call(value) === "[object Date]";
42
45
  }
43
46
  hasHourAndDatePartitionConfig() {
@@ -196,7 +199,7 @@ class Partitioning {
196
199
  // Field already exists on schema, skip
197
200
  if (this.customFieldExists(fields))
198
201
  return Promise.resolve();
199
- fields.push(schema_1.getNewPartitionField(this.config));
202
+ fields.push((0, schema_1.getNewPartitionField)(this.config));
200
203
  /** log successful addition of partition column */
201
204
  logs.addPartitionFieldColumn(this.table.id, this.config.timePartitioningField);
202
205
  return Promise.resolve();
@@ -136,7 +136,7 @@ exports.RawChangelogSchema = {
136
136
  ],
137
137
  };
138
138
  // Helper function for Partitioned Changelogs field
139
- exports.getNewPartitionField = (config) => {
139
+ const getNewPartitionField = (config) => {
140
140
  const { timePartitioningField, timePartitioningFieldType } = config;
141
141
  return {
142
142
  name: timePartitioningField,
@@ -145,3 +145,4 @@ exports.getNewPartitionField = (config) => {
145
145
  description: "The document TimePartition partition field selected by user",
146
146
  };
147
147
  };
148
+ exports.getNewPartitionField = getNewPartitionField;
@@ -19,7 +19,7 @@ exports.buildLatestSnapshotViewQuery = exports.latestConsistentSnapshotView = vo
19
19
  const sqlFormatter = require("sql-formatter");
20
20
  const schema_1 = require("./schema");
21
21
  const excludeFields = ["document_name", "document_id"];
22
- exports.latestConsistentSnapshotView = ({ datasetId, tableName, schema, bqProjectId, useLegacyQuery = false, }) => ({
22
+ const latestConsistentSnapshotView = ({ datasetId, tableName, schema, bqProjectId, useLegacyQuery = false, }) => ({
23
23
  query: buildLatestSnapshotViewQuery({
24
24
  datasetId,
25
25
  tableName,
@@ -32,6 +32,7 @@ exports.latestConsistentSnapshotView = ({ datasetId, tableName, schema, bqProjec
32
32
  }),
33
33
  useLegacySql: false,
34
34
  });
35
+ exports.latestConsistentSnapshotView = latestConsistentSnapshotView;
35
36
  function buildLatestSnapshotViewQuery({ datasetId, tableName, timestampColumnName, groupByColumns, bqProjectId, useLegacyQuery = true, }) {
36
37
  if (datasetId === "" || tableName === "" || timestampColumnName === "") {
37
38
  throw Error(`Missing some query parameters!`);
@@ -5,7 +5,7 @@ const { ProjectsClient } = require("@google-cloud/resource-manager");
5
5
  /* TODO: searchProjectsAsync sometimes returns {}.
6
6
  * Could be resource intensive, if checked on every records insert.
7
7
  */
8
- exports.validateProject = async (id) => {
8
+ const validateProject = async (id) => {
9
9
  let isValid = false;
10
10
  const client = new ProjectsClient();
11
11
  const projects = client.searchProjectsAsync();
@@ -16,3 +16,4 @@ exports.validateProject = async (id) => {
16
16
  }
17
17
  return isValid;
18
18
  };
19
+ exports.validateProject = validateProject;
package/lib/errors.js CHANGED
@@ -16,5 +16,7 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.changedFieldType = exports.changedFieldMode = void 0;
19
- exports.changedFieldMode = (fieldName, bqMode, schemaMode) => new Error(`Field ${fieldName} has different field mode. BigQuery mode: ${bqMode}; Schema mode: ${schemaMode}`);
20
- exports.changedFieldType = (fieldName, bqType, schemaType) => new Error(`Field: ${fieldName} has changed field type. BigQuery type: ${bqType}; Schema type: ${schemaType}`);
19
+ const changedFieldMode = (fieldName, bqMode, schemaMode) => new Error(`Field ${fieldName} has different field mode. BigQuery mode: ${bqMode}; Schema mode: ${schemaMode}`);
20
+ exports.changedFieldMode = changedFieldMode;
21
+ const changedFieldType = (fieldName, bqType, schemaType) => new Error(`Field: ${fieldName} has changed field type. BigQuery type: ${bqType}; Schema type: ${schemaType}`);
22
+ exports.changedFieldType = changedFieldType;
package/lib/index.js CHANGED
@@ -15,6 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ChangeType = exports.RawChangelogViewSchema = exports.RawChangelogSchema = exports.FirestoreBigQueryEventHistoryTracker = void 0;
18
19
  var bigquery_1 = require("./bigquery");
19
20
  Object.defineProperty(exports, "FirestoreBigQueryEventHistoryTracker", { enumerable: true, get: function () { return bigquery_1.FirestoreBigQueryEventHistoryTracker; } });
20
21
  Object.defineProperty(exports, "RawChangelogSchema", { enumerable: true, get: function () { return bigquery_1.RawChangelogSchema; } });
package/lib/logs.js CHANGED
@@ -17,113 +17,148 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.updatingMetadata = exports.failedToInitializeWait = exports.tableCreationError = exports.invalidClustering = exports.hourAndDatePartitioningWarning = exports.invalidTableReference = exports.invalidProjectIdWarning = exports.cannotPartitionExistingTable = exports.removedClustering = exports.updatedClustering = exports.bigQueryTableInsertErrors = exports.firestoreTimePartitioningParametersWarning = exports.firestoreTimePartitionFieldError = exports.addPartitionFieldColumn = exports.addNewColumn = exports.timestampMissingValue = exports.error = exports.dataTypeInvalid = exports.dataInserting = exports.dataInsertRetried = exports.dataInserted = exports.complete = exports.bigQueryViewValidating = exports.bigQueryViewValidated = exports.bigQueryViewUpToDate = exports.bigQueryViewUpdating = exports.bigQueryViewUpdated = exports.bigQueryViewAlreadyExists = exports.bigQueryViewCreating = exports.bigQueryViewCreated = exports.bigQueryUserDefinedFunctionCreated = exports.bigQueryUserDefinedFunctionCreating = exports.bigQueryTableValidating = exports.bigQueryTableValidated = exports.bigQueryTableUpToDate = exports.bigQueryTableUpdating = exports.bigQueryTableUpdated = exports.bigQueryTableCreating = exports.bigQueryTableCreated = exports.bigQueryTableAlreadyExists = exports.bigQuerySchemaViewCreated = exports.bigQueryLatestSnapshotViewQueryCreated = exports.bigQueryErrorRecordingDocumentChange = exports.bigQueryDatasetExists = exports.bigQueryDatasetCreating = exports.bigQueryDatasetCreated = exports.arrayFieldInvalid = void 0;
19
19
  const firebase_functions_1 = require("firebase-functions");
20
- exports.arrayFieldInvalid = (fieldName) => {
20
+ const arrayFieldInvalid = (fieldName) => {
21
21
  firebase_functions_1.logger.warn(`Array field '${fieldName}' does not contain an array, skipping`);
22
22
  };
23
- exports.bigQueryDatasetCreated = (datasetId) => {
23
+ exports.arrayFieldInvalid = arrayFieldInvalid;
24
+ const bigQueryDatasetCreated = (datasetId) => {
24
25
  firebase_functions_1.logger.log(`Created BigQuery dataset: ${datasetId}`);
25
26
  };
26
- exports.bigQueryDatasetCreating = (datasetId) => {
27
+ exports.bigQueryDatasetCreated = bigQueryDatasetCreated;
28
+ const bigQueryDatasetCreating = (datasetId) => {
27
29
  firebase_functions_1.logger.log(`Creating BigQuery dataset: ${datasetId}`);
28
30
  };
29
- exports.bigQueryDatasetExists = (datasetId) => {
31
+ exports.bigQueryDatasetCreating = bigQueryDatasetCreating;
32
+ const bigQueryDatasetExists = (datasetId) => {
30
33
  firebase_functions_1.logger.log(`BigQuery dataset already exists: ${datasetId}`);
31
34
  };
32
- exports.bigQueryErrorRecordingDocumentChange = (e) => {
35
+ exports.bigQueryDatasetExists = bigQueryDatasetExists;
36
+ const bigQueryErrorRecordingDocumentChange = (e) => {
33
37
  firebase_functions_1.logger.error(`Error recording document changes.`, e);
34
38
  };
35
- exports.bigQueryLatestSnapshotViewQueryCreated = (query) => {
39
+ exports.bigQueryErrorRecordingDocumentChange = bigQueryErrorRecordingDocumentChange;
40
+ const bigQueryLatestSnapshotViewQueryCreated = (query) => {
36
41
  firebase_functions_1.logger.log(`BigQuery latest snapshot view query:\n${query}`);
37
42
  };
38
- exports.bigQuerySchemaViewCreated = (name) => {
43
+ exports.bigQueryLatestSnapshotViewQueryCreated = bigQueryLatestSnapshotViewQueryCreated;
44
+ const bigQuerySchemaViewCreated = (name) => {
39
45
  firebase_functions_1.logger.log(`BigQuery created schema view ${name}\n`);
40
46
  };
41
- exports.bigQueryTableAlreadyExists = (tableName, datasetName) => {
47
+ exports.bigQuerySchemaViewCreated = bigQuerySchemaViewCreated;
48
+ const bigQueryTableAlreadyExists = (tableName, datasetName) => {
42
49
  firebase_functions_1.logger.log(`BigQuery table with name ${tableName} already ` +
43
50
  `exists in dataset ${datasetName}!`);
44
51
  };
45
- exports.bigQueryTableCreated = (tableName) => {
52
+ exports.bigQueryTableAlreadyExists = bigQueryTableAlreadyExists;
53
+ const bigQueryTableCreated = (tableName) => {
46
54
  firebase_functions_1.logger.log(`Created BigQuery table: ${tableName}`);
47
55
  };
48
- exports.bigQueryTableCreating = (tableName) => {
56
+ exports.bigQueryTableCreated = bigQueryTableCreated;
57
+ const bigQueryTableCreating = (tableName) => {
49
58
  firebase_functions_1.logger.log(`Creating BigQuery table: ${tableName}`);
50
59
  };
51
- exports.bigQueryTableUpdated = (tableName) => {
60
+ exports.bigQueryTableCreating = bigQueryTableCreating;
61
+ const bigQueryTableUpdated = (tableName) => {
52
62
  firebase_functions_1.logger.log(`Updated existing BigQuery table: ${tableName}`);
53
63
  };
54
- exports.bigQueryTableUpdating = (tableName) => {
64
+ exports.bigQueryTableUpdated = bigQueryTableUpdated;
65
+ const bigQueryTableUpdating = (tableName) => {
55
66
  firebase_functions_1.logger.log(`Updating existing BigQuery table: ${tableName}`);
56
67
  };
57
- exports.bigQueryTableUpToDate = (tableName) => {
68
+ exports.bigQueryTableUpdating = bigQueryTableUpdating;
69
+ const bigQueryTableUpToDate = (tableName) => {
58
70
  firebase_functions_1.logger.log(`BigQuery table: ${tableName} is up to date`);
59
71
  };
60
- exports.bigQueryTableValidated = (tableName) => {
72
+ exports.bigQueryTableUpToDate = bigQueryTableUpToDate;
73
+ const bigQueryTableValidated = (tableName) => {
61
74
  firebase_functions_1.logger.log(`Validated existing BigQuery table: ${tableName}`);
62
75
  };
63
- exports.bigQueryTableValidating = (tableName) => {
76
+ exports.bigQueryTableValidated = bigQueryTableValidated;
77
+ const bigQueryTableValidating = (tableName) => {
64
78
  firebase_functions_1.logger.log(`Validating existing BigQuery table: ${tableName}`);
65
79
  };
66
- exports.bigQueryUserDefinedFunctionCreating = (functionName) => {
80
+ exports.bigQueryTableValidating = bigQueryTableValidating;
81
+ const bigQueryUserDefinedFunctionCreating = (functionName) => {
67
82
  firebase_functions_1.logger.log(`Creating BigQuery user-defined function ${functionName}`);
68
83
  };
69
- exports.bigQueryUserDefinedFunctionCreated = (functionName) => {
84
+ exports.bigQueryUserDefinedFunctionCreating = bigQueryUserDefinedFunctionCreating;
85
+ const bigQueryUserDefinedFunctionCreated = (functionName) => {
70
86
  firebase_functions_1.logger.log(`Created BigQuery user-defined function ${functionName}`);
71
87
  };
72
- exports.bigQueryViewCreated = (viewName) => {
88
+ exports.bigQueryUserDefinedFunctionCreated = bigQueryUserDefinedFunctionCreated;
89
+ const bigQueryViewCreated = (viewName) => {
73
90
  firebase_functions_1.logger.log(`Created BigQuery view: ${viewName}`);
74
91
  };
75
- exports.bigQueryViewCreating = (viewName, query) => {
92
+ exports.bigQueryViewCreated = bigQueryViewCreated;
93
+ const bigQueryViewCreating = (viewName, query) => {
76
94
  firebase_functions_1.logger.log(`Creating BigQuery view: ${viewName}\nQuery:\n${query}`);
77
95
  };
78
- exports.bigQueryViewAlreadyExists = (viewName, datasetName) => {
96
+ exports.bigQueryViewCreating = bigQueryViewCreating;
97
+ const bigQueryViewAlreadyExists = (viewName, datasetName) => {
79
98
  firebase_functions_1.logger.log(`View with id ${viewName} already exists in dataset ${datasetName}.`);
80
99
  };
81
- exports.bigQueryViewUpdated = (viewName) => {
100
+ exports.bigQueryViewAlreadyExists = bigQueryViewAlreadyExists;
101
+ const bigQueryViewUpdated = (viewName) => {
82
102
  firebase_functions_1.logger.log(`Updated existing BigQuery view: ${viewName}`);
83
103
  };
84
- exports.bigQueryViewUpdating = (viewName) => {
104
+ exports.bigQueryViewUpdated = bigQueryViewUpdated;
105
+ const bigQueryViewUpdating = (viewName) => {
85
106
  firebase_functions_1.logger.log(`Updating existing BigQuery view: ${viewName}`);
86
107
  };
87
- exports.bigQueryViewUpToDate = (viewName) => {
108
+ exports.bigQueryViewUpdating = bigQueryViewUpdating;
109
+ const bigQueryViewUpToDate = (viewName) => {
88
110
  firebase_functions_1.logger.log(`BigQuery view: ${viewName} is up to date`);
89
111
  };
90
- exports.bigQueryViewValidated = (viewName) => {
112
+ exports.bigQueryViewUpToDate = bigQueryViewUpToDate;
113
+ const bigQueryViewValidated = (viewName) => {
91
114
  firebase_functions_1.logger.log(`Validated existing BigQuery view: ${viewName}`);
92
115
  };
93
- exports.bigQueryViewValidating = (viewName) => {
116
+ exports.bigQueryViewValidated = bigQueryViewValidated;
117
+ const bigQueryViewValidating = (viewName) => {
94
118
  firebase_functions_1.logger.log(`Validating existing BigQuery view: ${viewName}`);
95
119
  };
96
- exports.complete = () => {
120
+ exports.bigQueryViewValidating = bigQueryViewValidating;
121
+ const complete = () => {
97
122
  firebase_functions_1.logger.log("Completed mod execution");
98
123
  };
99
- exports.dataInserted = (rowCount) => {
124
+ exports.complete = complete;
125
+ const dataInserted = (rowCount) => {
100
126
  firebase_functions_1.logger.log(`Inserted ${rowCount} row(s) of data into BigQuery`);
101
127
  };
102
- exports.dataInsertRetried = (rowCount) => {
128
+ exports.dataInserted = dataInserted;
129
+ const dataInsertRetried = (rowCount) => {
103
130
  firebase_functions_1.logger.log(`Retried to insert ${rowCount} row(s) of data into BigQuery (ignoring unknown columns)`);
104
131
  };
105
- exports.dataInserting = (rowCount) => {
132
+ exports.dataInsertRetried = dataInsertRetried;
133
+ const dataInserting = (rowCount) => {
106
134
  firebase_functions_1.logger.log(`Inserting ${rowCount} row(s) of data into BigQuery`);
107
135
  };
108
- exports.dataTypeInvalid = (fieldName, fieldType, dataType) => {
136
+ exports.dataInserting = dataInserting;
137
+ const dataTypeInvalid = (fieldName, fieldType, dataType) => {
109
138
  firebase_functions_1.logger.warn(`Field '${fieldName}' has invalid data. Expected: ${fieldType}, received: ${dataType}`);
110
139
  };
111
- exports.error = (err) => {
140
+ exports.dataTypeInvalid = dataTypeInvalid;
141
+ const error = (err) => {
112
142
  firebase_functions_1.logger.error("Error when mirroring data to BigQuery", err);
113
143
  };
114
- exports.timestampMissingValue = (fieldName) => {
144
+ exports.error = error;
145
+ const timestampMissingValue = (fieldName) => {
115
146
  firebase_functions_1.logger.warn(`Missing value for timestamp field: ${fieldName}, using default timestamp instead.`);
116
147
  };
117
- exports.addNewColumn = (table, field) => {
148
+ exports.timestampMissingValue = timestampMissingValue;
149
+ const addNewColumn = (table, field) => {
118
150
  firebase_functions_1.logger.log(`Updated '${table}' table with a '${field}' column`);
119
151
  };
120
- exports.addPartitionFieldColumn = (table, field) => {
152
+ exports.addNewColumn = addNewColumn;
153
+ const addPartitionFieldColumn = (table, field) => {
121
154
  firebase_functions_1.logger.log(`Updated '${table}' table with a partition field '${field}' column`);
122
155
  };
123
- exports.firestoreTimePartitionFieldError = (documentName, fieldName, firestoreFieldName, firestoreFieldData) => {
156
+ exports.addPartitionFieldColumn = addPartitionFieldColumn;
157
+ const firestoreTimePartitionFieldError = (documentName, fieldName, firestoreFieldName, firestoreFieldData) => {
124
158
  firebase_functions_1.logger.warn(`Wrong type of Firestore Field for TimePartitioning. Accepts only strings in BigQuery format (DATE, DATETIME, TIMESTAMP) and Firestore Timestamp. Firestore Document field path: ${documentName}. Field name: ${firestoreFieldName}. Field data: ${firestoreFieldData}. Schema field "${fieldName}" value will be null.`);
125
159
  };
126
- exports.firestoreTimePartitioningParametersWarning = (fieldName, fieldType, firestoreFieldName, dataFirestoreField) => {
160
+ exports.firestoreTimePartitionFieldError = firestoreTimePartitionFieldError;
161
+ const firestoreTimePartitioningParametersWarning = (fieldName, fieldType, firestoreFieldName, dataFirestoreField) => {
127
162
  firebase_functions_1.logger.warn("All TimePartitioning option parameters need to be available to create new custom schema field");
128
163
  !fieldName && firebase_functions_1.logger.warn(`Parameter missing: TIME_PARTITIONING_FIELD`);
129
164
  !fieldType && firebase_functions_1.logger.warn(`Parameter missing: TIME_PARTITIONING_FIELD_TYPE`);
@@ -132,7 +167,8 @@ exports.firestoreTimePartitioningParametersWarning = (fieldName, fieldType, fire
132
167
  !dataFirestoreField &&
133
168
  firebase_functions_1.logger.warn(`No data found in Firestore Document under selected field: "${firestoreFieldName}"`);
134
169
  };
135
- exports.bigQueryTableInsertErrors = (insertErrors) => {
170
+ exports.firestoreTimePartitioningParametersWarning = firestoreTimePartitioningParametersWarning;
171
+ const bigQueryTableInsertErrors = (insertErrors) => {
136
172
  firebase_functions_1.logger.warn(`Error when inserting data to table.`);
137
173
  insertErrors?.forEach((error) => {
138
174
  firebase_functions_1.logger.warn("ROW DATA JSON:");
@@ -140,15 +176,19 @@ exports.bigQueryTableInsertErrors = (insertErrors) => {
140
176
  error.errors?.forEach((error) => firebase_functions_1.logger.warn(`ROW ERROR MESSAGE: ${error.message}`));
141
177
  });
142
178
  };
143
- exports.updatedClustering = (fields) => {
179
+ exports.bigQueryTableInsertErrors = bigQueryTableInsertErrors;
180
+ const updatedClustering = (fields) => {
144
181
  firebase_functions_1.logger.info(`Clustering updated with new settings fields: ${fields}`);
145
182
  };
146
- exports.removedClustering = (tableName) => {
183
+ exports.updatedClustering = updatedClustering;
184
+ const removedClustering = (tableName) => {
147
185
  firebase_functions_1.logger.info(`Clustering removed on ${tableName}`);
148
186
  };
149
- exports.cannotPartitionExistingTable = (table) => {
187
+ exports.removedClustering = removedClustering;
188
+ const cannotPartitionExistingTable = (table) => {
150
189
  firebase_functions_1.logger.warn(`Cannot partition an existing table ${table.dataset.id}_${table.id}`);
151
190
  };
191
+ exports.cannotPartitionExistingTable = cannotPartitionExistingTable;
152
192
  function invalidProjectIdWarning(bqProjectId) {
153
193
  firebase_functions_1.logger.warn(`Invalid project Id ${bqProjectId}, data cannot be synchronized`);
154
194
  }
@@ -165,12 +205,15 @@ function invalidClustering(fields) {
165
205
  firebase_functions_1.logger.warn(`Unable to add clustering, field(s) ${fields} do not exist on the expected table`);
166
206
  }
167
207
  exports.invalidClustering = invalidClustering;
168
- exports.tableCreationError = (table, message) => {
208
+ const tableCreationError = (table, message) => {
169
209
  firebase_functions_1.logger.warn(`Error caught creating table`, message);
170
210
  };
171
- exports.failedToInitializeWait = (message) => {
211
+ exports.tableCreationError = tableCreationError;
212
+ const failedToInitializeWait = (message) => {
172
213
  firebase_functions_1.logger.warn(`Failed while waiting to initialize.`, message);
173
214
  };
174
- exports.updatingMetadata = (tableName, resources) => {
215
+ exports.failedToInitializeWait = failedToInitializeWait;
216
+ const updatingMetadata = (tableName, resources) => {
175
217
  firebase_functions_1.logger.info(`Updated Metadata on ${tableName}, ${JSON.stringify(resources)})`);
176
218
  };
219
+ exports.updatingMetadata = updatingMetadata;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "github.com/firebase/extensions.git",
6
6
  "directory": "firestore-bigquery-export/firestore-bigquery-change-tracker"
7
7
  },
8
- "version": "1.1.22",
8
+ "version": "1.1.24",
9
9
  "description": "Core change-tracker library for Cloud Firestore Collection BigQuery Exports",
10
10
  "main": "./lib/index.js",
11
11
  "scripts": {
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "@google-cloud/bigquery": "^4.7.0",
27
27
  "@google-cloud/resource-manager": "^3.0.0",
28
- "firebase-admin": "^8.0.0",
28
+ "firebase-admin": "^11.4.1",
29
29
  "firebase-functions": "^3.13.2",
30
30
  "generate-schema": "^2.6.0",
31
31
  "inquirer": "^6.4.0",
@@ -35,8 +35,9 @@
35
35
  "traverse": "^0.6.6"
36
36
  },
37
37
  "devDependencies": {
38
+ "@types/node": "14.18.34",
38
39
  "@types/traverse": "^0.6.32",
39
- "typescript": "^3.6.3",
40
+ "typescript": "^4.9.4",
40
41
  "rimraf": "^2.6.3",
41
42
  "nyc": "^14.0.0",
42
43
  "jest": "^24.9.0",