emberflow 1.5.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +340 -4
  2. package/firestore.indexes.json +35 -0
  3. package/lib/bin/merge-indexes.d.ts +13 -0
  4. package/lib/bin/merge-indexes.js +141 -0
  5. package/lib/bin/merge-indexes.js.map +1 -0
  6. package/lib/index-utils.d.ts +18 -7
  7. package/lib/index-utils.js +70 -75
  8. package/lib/index-utils.js.map +1 -1
  9. package/lib/index.d.ts +22 -6
  10. package/lib/index.js +43 -34
  11. package/lib/index.js.map +1 -1
  12. package/lib/logics/view-logics.d.ts +0 -2
  13. package/lib/logics/view-logics.js +1 -19
  14. package/lib/logics/view-logics.js.map +1 -1
  15. package/lib/sample-custom/cleanup-configs.d.ts +2 -0
  16. package/lib/sample-custom/cleanup-configs.js +17 -0
  17. package/lib/sample-custom/cleanup-configs.js.map +1 -0
  18. package/lib/sample-custom/index.js +14 -1
  19. package/lib/sample-custom/index.js.map +1 -1
  20. package/lib/sample-custom/one-time-patches.d.ts +2 -0
  21. package/lib/sample-custom/one-time-patches.js +14 -0
  22. package/lib/sample-custom/one-time-patches.js.map +1 -0
  23. package/lib/tests/bin/merge-indexes.test.d.ts +1 -0
  24. package/lib/tests/bin/merge-indexes.test.js +153 -0
  25. package/lib/tests/bin/merge-indexes.test.js.map +1 -0
  26. package/lib/tests/index-utils.test.js +345 -85
  27. package/lib/tests/index-utils.test.js.map +1 -1
  28. package/lib/tests/index.test.js +33 -5
  29. package/lib/tests/index.test.js.map +1 -1
  30. package/lib/tests/logics/patch-logics.test.js +50 -5
  31. package/lib/tests/logics/patch-logics.test.js.map +1 -1
  32. package/lib/tests/logics/view-logics.test.js +22 -4
  33. package/lib/tests/logics/view-logics.test.js.map +1 -1
  34. package/lib/tests/utils/cleanup.test.d.ts +1 -0
  35. package/lib/tests/utils/cleanup.test.js +243 -0
  36. package/lib/tests/utils/cleanup.test.js.map +1 -0
  37. package/lib/tests/utils/distribution.test.js +256 -1
  38. package/lib/tests/utils/distribution.test.js.map +1 -1
  39. package/lib/tests/utils/firestore-indexes.test.d.ts +1 -0
  40. package/lib/tests/utils/firestore-indexes.test.js +125 -0
  41. package/lib/tests/utils/firestore-indexes.test.js.map +1 -0
  42. package/lib/tests/utils/forms.test.js +10 -86
  43. package/lib/tests/utils/forms.test.js.map +1 -1
  44. package/lib/tests/utils/misc.test.js +96 -2
  45. package/lib/tests/utils/misc.test.js.map +1 -1
  46. package/lib/tests/utils/paths.test.js +20 -2
  47. package/lib/tests/utils/paths.test.js.map +1 -1
  48. package/lib/tests/utils/pubsub.test.js +10 -31
  49. package/lib/tests/utils/pubsub.test.js.map +1 -1
  50. package/lib/types.d.ts +51 -2
  51. package/lib/utils/cleanup.d.ts +5 -0
  52. package/lib/utils/cleanup.js +99 -0
  53. package/lib/utils/cleanup.js.map +1 -0
  54. package/lib/utils/distribution.d.ts +17 -3
  55. package/lib/utils/distribution.js +61 -23
  56. package/lib/utils/distribution.js.map +1 -1
  57. package/lib/utils/firestore-indexes.d.ts +36 -0
  58. package/lib/utils/firestore-indexes.js +80 -0
  59. package/lib/utils/firestore-indexes.js.map +1 -0
  60. package/lib/utils/forms.d.ts +0 -2
  61. package/lib/utils/forms.js +1 -35
  62. package/lib/utils/forms.js.map +1 -1
  63. package/lib/utils/misc.d.ts +1 -0
  64. package/lib/utils/misc.js +32 -1
  65. package/lib/utils/misc.js.map +1 -1
  66. package/lib/utils/pubsub.d.ts +0 -2
  67. package/lib/utils/pubsub.js +1 -16
  68. package/lib/utils/pubsub.js.map +1 -1
  69. package/package.json +6 -2
  70. package/src/sample-custom/cleanup-configs.ts +15 -0
  71. package/src/sample-custom/index.ts +15 -11
  72. package/src/sample-custom/one-time-patches.ts +13 -0
@@ -0,0 +1,36 @@
1
+ export type FirestoreIndexOrder = "ASCENDING" | "DESCENDING";
2
+ export type FirestoreIndexArrayConfig = "CONTAINS";
3
+ export type FirestoreIndexQueryScope = "COLLECTION" | "COLLECTION_GROUP" | "COLLECTION_RECURSIVE";
4
+ /** A single field entry within a composite index (matches firestore.indexes.json). */
5
+ export interface FirestoreIndexField {
6
+ fieldPath: string;
7
+ order?: FirestoreIndexOrder;
8
+ arrayConfig?: FirestoreIndexArrayConfig;
9
+ }
10
+ /** A composite index definition (matches firestore.indexes.json "indexes" entries). */
11
+ export interface FirestoreCompositeIndex {
12
+ collectionGroup: string;
13
+ /** Defaults to "COLLECTION" when omitted, mirroring Firestore. */
14
+ queryScope?: FirestoreIndexQueryScope;
15
+ fields: FirestoreIndexField[];
16
+ }
17
+ /** A single scope/order entry for a single-field override. */
18
+ export interface FirestoreFieldOverrideIndex {
19
+ queryScope: FirestoreIndexQueryScope;
20
+ order?: FirestoreIndexOrder;
21
+ arrayConfig?: FirestoreIndexArrayConfig;
22
+ }
23
+ /** A single-field index override (matches firestore.indexes.json "fieldOverrides" entries). */
24
+ export interface FirestoreFieldOverride {
25
+ collectionGroup: string;
26
+ fieldPath: string;
27
+ indexes: FirestoreFieldOverrideIndex[];
28
+ }
29
+ /** Firestore index configuration, shaped exactly like a firestore.indexes.json file. */
30
+ export interface FirestoreIndexes {
31
+ indexes?: FirestoreCompositeIndex[];
32
+ fieldOverrides?: FirestoreFieldOverride[];
33
+ }
34
+ export declare function compositeIndexSignature(index: FirestoreCompositeIndex): string;
35
+ export declare function fieldOverrideIndexSignature(index: FirestoreFieldOverrideIndex): string;
36
+ export declare function mergeFirestoreIndexes(target: FirestoreIndexes, fragment: FirestoreIndexes): Required<FirestoreIndexes>;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeFirestoreIndexes = exports.fieldOverrideIndexSignature = exports.compositeIndexSignature = void 0;
4
+ // Stable signature for a composite index, used to de-duplicate composite indexes
5
+ // when merging. Two composite indexes with the same collection group, query scope
6
+ // and (ordered) field list are considered identical.
7
+ function compositeIndexSignature(index) {
8
+ var _a, _b;
9
+ const scope = (_a = index.queryScope) !== null && _a !== void 0 ? _a : "COLLECTION";
10
+ const fields = ((_b = index.fields) !== null && _b !== void 0 ? _b : [])
11
+ .map((field) => { var _a, _b; return `${field.fieldPath}:${(_a = field.order) !== null && _a !== void 0 ? _a : ""}:${(_b = field.arrayConfig) !== null && _b !== void 0 ? _b : ""}`; })
12
+ .join(",");
13
+ return `${index.collectionGroup}|${scope}|${fields}`;
14
+ }
15
+ exports.compositeIndexSignature = compositeIndexSignature;
16
+ // Stable signature for a single scope/order row of a field override, used to union
17
+ // the scope rows of two overrides that target the same (collectionGroup, fieldPath).
18
+ function fieldOverrideIndexSignature(index) {
19
+ var _a, _b;
20
+ return `${index.queryScope}|${(_a = index.order) !== null && _a !== void 0 ? _a : ""}|${(_b = index.arrayConfig) !== null && _b !== void 0 ? _b : ""}`;
21
+ }
22
+ exports.fieldOverrideIndexSignature = fieldOverrideIndexSignature;
23
+ function fieldOverrideKey(override) {
24
+ return `${override.collectionGroup}|${override.fieldPath}`;
25
+ }
26
+ // Merge Emberflow's index fragment into a target firestore.indexes.json object.
27
+ //
28
+ // - Composite `indexes` are unioned and de-duplicated by compositeIndexSignature.
29
+ // - `fieldOverrides` are keyed by `(collectionGroup, fieldPath)`. A field override
30
+ // *replaces* Firestore's whole single-field index config for that field, so two
31
+ // overrides for the same field must never coexist. Instead, their scope/order rows
32
+ // are unioned into a single entry (de-duplicated by fieldOverrideIndexSignature),
33
+ // preserving both sides' scopes.
34
+ //
35
+ // The `target` entries are kept first and in order; fragment-only entries are appended.
36
+ // The inputs are never mutated.
37
+ function mergeFirestoreIndexes(target, fragment) {
38
+ var _a, _b, _c, _d, _e, _f;
39
+ const mergedIndexes = [];
40
+ const seenIndexSignatures = new Set();
41
+ for (const index of [...((_a = target.indexes) !== null && _a !== void 0 ? _a : []), ...((_b = fragment.indexes) !== null && _b !== void 0 ? _b : [])]) {
42
+ const signature = compositeIndexSignature(index);
43
+ if (seenIndexSignatures.has(signature)) {
44
+ continue;
45
+ }
46
+ seenIndexSignatures.add(signature);
47
+ mergedIndexes.push(index);
48
+ }
49
+ const mergedOverrides = [];
50
+ const overridesByKey = new Map();
51
+ for (const override of [...((_c = target.fieldOverrides) !== null && _c !== void 0 ? _c : []), ...((_d = fragment.fieldOverrides) !== null && _d !== void 0 ? _d : [])]) {
52
+ const key = fieldOverrideKey(override);
53
+ const existing = overridesByKey.get(key);
54
+ if (!existing) {
55
+ const copy = {
56
+ collectionGroup: override.collectionGroup,
57
+ fieldPath: override.fieldPath,
58
+ indexes: [...((_e = override.indexes) !== null && _e !== void 0 ? _e : [])],
59
+ };
60
+ overridesByKey.set(key, copy);
61
+ mergedOverrides.push(copy);
62
+ continue;
63
+ }
64
+ const seenScopes = new Set(existing.indexes.map(fieldOverrideIndexSignature));
65
+ for (const scopeRow of (_f = override.indexes) !== null && _f !== void 0 ? _f : []) {
66
+ const scopeSignature = fieldOverrideIndexSignature(scopeRow);
67
+ if (seenScopes.has(scopeSignature)) {
68
+ continue;
69
+ }
70
+ seenScopes.add(scopeSignature);
71
+ existing.indexes.push(scopeRow);
72
+ }
73
+ }
74
+ return {
75
+ indexes: mergedIndexes,
76
+ fieldOverrides: mergedOverrides,
77
+ };
78
+ }
79
+ exports.mergeFirestoreIndexes = mergeFirestoreIndexes;
80
+ //# sourceMappingURL=firestore-indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore-indexes.js","sourceRoot":"","sources":["../../src/utils/firestore-indexes.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import { FormData } from "emberflow-admin-client/lib/types";
2
2
  import { CloudEvent } from "firebase-functions/lib/v2/core";
3
3
  import type { MessagePublishedData } from "firebase-functions/v2/pubsub";
4
- import type { ScheduledEvent } from "firebase-functions/v2/scheduler";
5
4
  export declare function queueSubmitForm(formData: FormData): Promise<string>;
6
5
  export declare function onMessageSubmitFormQueue(event: CloudEvent<MessagePublishedData>): Promise<"Processed form data" | undefined>;
7
- export declare function cleanActionsAndForms(_event: ScheduledEvent): Promise<void>;
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cleanActionsAndForms = exports.onMessageSubmitFormQueue = exports.queueSubmitForm = void 0;
3
+ exports.onMessageSubmitFormQueue = exports.queueSubmitForm = void 0;
4
4
  const index_1 = require("../index");
5
5
  const lib_1 = require("emberflow-admin-client/lib");
6
6
  const pubsub_1 = require("./pubsub");
7
- const misc_1 = require("./misc");
8
7
  async function queueSubmitForm(formData) {
9
8
  try {
10
9
  return await index_1.SUBMIT_FORM_TOPIC.publishMessage({ json: formData });
@@ -39,37 +38,4 @@ async function onMessageSubmitFormQueue(event) {
39
38
  return "Processed form data";
40
39
  }
41
40
  exports.onMessageSubmitFormQueue = onMessageSubmitFormQueue;
42
- async function cleanActionsAndForms(_event) {
43
- console.info("Running cleanActionsAndForms");
44
- const query = index_1.db.collection("@actions")
45
- .where("timeCreated", "<", new Date(Date.now() - 1000 * 60 * 60 * 24 * 7));
46
- await (0, misc_1.deleteCollection)(query, async (snapshot) => {
47
- const forms = {};
48
- for (const doc of snapshot.docs) {
49
- const logicResultsQuery = index_1.db.collection(`${doc.ref.path}/logicResults`);
50
- await (0, misc_1.deleteCollection)(logicResultsQuery, async (logicResultSnapshot) => {
51
- for (const logicResultDoc of logicResultSnapshot.docs) {
52
- const documentsQuery = index_1.db.collection(`${logicResultDoc.ref.path}/documents`);
53
- await (0, misc_1.deleteCollection)(documentsQuery);
54
- }
55
- });
56
- const data = doc.data();
57
- if (data.eventContext) {
58
- const { formId, uid } = data.eventContext;
59
- forms[`forms/${uid}/${formId}`] = null;
60
- }
61
- }
62
- const rtdbBatchSize = 100;
63
- const formKeys = Object.keys(forms);
64
- for (let i = 0; i < formKeys.length; i += rtdbBatchSize) {
65
- const batch = {};
66
- formKeys.slice(i, i + rtdbBatchSize).forEach((key) => {
67
- batch[key] = forms[key];
68
- });
69
- await index_1.rtdb.ref().update(batch);
70
- }
71
- });
72
- console.info("Cleaned actions and forms");
73
- }
74
- exports.cleanActionsAndForms = cleanActionsAndForms;
75
41
  //# sourceMappingURL=forms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/utils/forms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/utils/forms.ts"],"names":[],"mappings":";;;AACA,oCAAmE;AAGnE,oDAAsD;AACtD,qCAAqC;AAE9B,KAAK,UAAU,eAAe,CAAC,QAAkB;IACtD,IAAI;QACF,OAAO,MAAM,yBAAiB,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;KACjE;IAAC,OAAO,KAAc,EAAE;QACvB,IAAI,KAAK,YAAY,KAAK,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SACpE;aAAM;YACL,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAC9D;QACD,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAXD,0CAWC;AAEM,KAAK,UAAU,wBAAwB,CAAC,KAAuC;IACpF,IAAI,MAAM,oBAAW,CAAC,WAAW,CAAC,8BAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE;QACnE,OAAO;KACR;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAgB,CAAC;IAEnD,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC/B,QAAQ,GAAG,MAAM,IAAA,gBAAU,EAAC,QAAQ,EAAE;QACpC,GAAG,EAAE,YAAY;QACjB,UAAU;QACV,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,oBAAW,CAAC,iBAAiB,CAAC,8BAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAnBD,4DAmBC"}
@@ -15,6 +15,7 @@ export declare class LimitedSet<T> {
15
15
  get queue(): T[];
16
16
  }
17
17
  export declare function deleteCollection(query: Query, callback?: (snapshot: firestore.QuerySnapshot) => void): Promise<void>;
18
+ export declare function deleteCollectionRecursive(query: Query, callback?: (snapshot: firestore.QuerySnapshot) => void): Promise<void>;
18
19
  export declare const reviveDateAndTimestamp: (json: {
19
20
  [key: string]: any;
20
21
  }) => {
package/lib/utils/misc.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.logObjectSize = exports.logMemoryUsage = exports.trimStrings = exports.reviveDateAndTimestamp = exports.deleteCollection = exports.LimitedSet = exports.sleep = exports.computeHashCode = exports.deepEqual = void 0;
6
+ exports.logObjectSize = exports.logMemoryUsage = exports.trimStrings = exports.reviveDateAndTimestamp = exports.deleteCollectionRecursive = exports.deleteCollection = exports.LimitedSet = exports.sleep = exports.computeHashCode = exports.deepEqual = void 0;
7
7
  const firebase_admin_1 = require("firebase-admin");
8
8
  var Timestamp = firebase_admin_1.firestore.Timestamp;
9
9
  var GeoPoint = firebase_admin_1.firestore.GeoPoint;
@@ -145,6 +145,37 @@ async function deleteQueryBatch(query, resolve, callback) {
145
145
  deleteQueryBatch(query, resolve, callback);
146
146
  });
147
147
  }
148
+ async function deleteCollectionRecursive(query, callback) {
149
+ // Note: no keys-only .select() here so that field data (e.g. eventContext)
150
+ // stays available for callbacks that need it.
151
+ query = query.limit(100);
152
+ return new Promise((resolve, reject) => {
153
+ deleteQueryBatchRecursive(query, resolve, callback).catch(reject);
154
+ });
155
+ }
156
+ exports.deleteCollectionRecursive = deleteCollectionRecursive;
157
+ async function deleteQueryBatchRecursive(query, resolve, callback) {
158
+ const snapshot = await query.get();
159
+ if (snapshot.size === 0) {
160
+ resolve();
161
+ return;
162
+ }
163
+ const batch = batch_1.BatchUtil.getInstance();
164
+ for (const doc of snapshot.docs) {
165
+ const subcollections = await doc.ref.listCollections();
166
+ for (const subcollection of subcollections) {
167
+ await deleteCollectionRecursive(subcollection);
168
+ }
169
+ await batch.deleteDoc(doc.ref);
170
+ }
171
+ await batch.commit();
172
+ if (callback) {
173
+ await callback(snapshot);
174
+ }
175
+ process.nextTick(() => {
176
+ deleteQueryBatchRecursive(query, resolve, callback);
177
+ });
178
+ }
148
179
  const reviveDateAndTimestamp = (json) => {
149
180
  const stack = [json];
150
181
  while (stack.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/utils/misc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/utils/misc.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- import type { ScheduledEvent } from "firebase-functions/v2/scheduler";
2
1
  declare function trackProcessedIds(topicName: string, id: string): Promise<void>;
3
2
  declare function isProcessed(topicName: string, id: string): Promise<boolean>;
4
3
  export declare const pubsubUtils: {
5
4
  trackProcessedIds: typeof trackProcessedIds;
6
5
  isProcessed: typeof isProcessed;
7
6
  };
8
- export declare function cleanPubSubProcessedIds(_event: ScheduledEvent): Promise<void>;
9
7
  export {};
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cleanPubSubProcessedIds = exports.pubsubUtils = void 0;
3
+ exports.pubsubUtils = void 0;
4
4
  const index_1 = require("../index");
5
- const misc_1 = require("./misc");
6
5
  async function trackProcessedIds(topicName, id) {
7
6
  const docRef = index_1.db.doc(`@topics/${topicName}/processedIds/${id}`);
8
7
  await docRef.set({ timestamp: new Date() });
@@ -16,18 +15,4 @@ exports.pubsubUtils = {
16
15
  trackProcessedIds,
17
16
  isProcessed,
18
17
  };
19
- async function cleanPubSubProcessedIds(_event) {
20
- console.info("Running cleanPubSubProcessedIds");
21
- let i = 0;
22
- for (const pubSubTopic of index_1.pubSubTopics) {
23
- const query = index_1.db
24
- .collection(`@topics/${pubSubTopic}/processedIds`)
25
- .where("timestamp", "<", new Date(Date.now() - 1000 * 60 * 60 * 24 * 7));
26
- await (0, misc_1.deleteCollection)(query, (snapshot) => {
27
- i += snapshot.size;
28
- });
29
- }
30
- console.info(`Cleaned ${i} topics of processedIds`);
31
- }
32
- exports.cleanPubSubProcessedIds = cleanPubSubProcessedIds;
33
18
  //# sourceMappingURL=pubsub.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/utils/pubsub.ts"],"names":[],"mappings":";;;AAAA,oCAA0C;AAC1C,iCAAwC;AAGxC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,EAAU;IAC5D,MAAM,MAAM,GAAG,UAAE,CAAC,GAAG,CAAC,WAAW,SAAS,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,EAAU;IACtD,MAAM,MAAM,GAAG,UAAE,CAAC,GAAG,CAAC,WAAW,SAAS,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAEY,QAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,WAAW;CACZ,CAAC;AAEK,KAAK,UAAU,uBAAuB,CAAC,MAAsB;IAClE,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,WAAW,IAAI,oBAAY,EAAE;QACtC,MAAM,KAAK,GAAG,UAAE;aACb,UAAU,CAAC,WAAW,WAAW,eAAe,CAAC;aACjD,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,IAAA,uBAAgB,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YACzC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;AACtD,CAAC;AAbD,0DAaC"}
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/utils/pubsub.ts"],"names":[],"mappings":";;;AAAA,oCAA4B;AAE5B,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,EAAU;IAC5D,MAAM,MAAM,GAAG,UAAE,CAAC,GAAG,CAAC,WAAW,SAAS,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,EAAU;IACtD,MAAM,MAAM,GAAG,UAAE,CAAC,GAAG,CAAC,WAAW,SAAS,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAEY,QAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,WAAW;CACZ,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "emberflow",
3
- "version": "1.5.1",
3
+ "version": "2.0.1",
4
4
  "description": "A Firebase Cloud Functions library for handling document changes in a structured way",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.js",
7
+ "bin": {
8
+ "emberflow-indexes": "lib/bin/merge-indexes.js"
9
+ },
7
10
  "files": [
8
11
  "lib/",
9
- "src/sample-custom"
12
+ "src/sample-custom",
13
+ "firestore.indexes.json"
10
14
  ],
11
15
  "scripts": {
12
16
  "prepublishOnly": "tsc"
@@ -0,0 +1,15 @@
1
+ import {CleanupConfig} from "../types";
2
+
3
+ export const cleanupConfigs: CleanupConfig[] = [
4
+ {
5
+ // Purge stale askJaris documents that never got a topic assigned.
6
+ // "attribute missing" is modeled as an indexed boolean flag (hasTopic).
7
+ collectionPath: "askJaris",
8
+ isCollectionGroup: true,
9
+ timestampField: "createdAt",
10
+ olderThan: {value: 1, unit: "months"},
11
+ conditions: [
12
+ {fieldName: "hasTopic", operator: "==", value: false},
13
+ ],
14
+ },
15
+ ];
@@ -1,24 +1,28 @@
1
1
  import * as admin from "firebase-admin";
2
- import { initializeEmberFlow } from "../index";
3
- import { projectConfig } from "./project-config";
4
- import { dbStructure, Entity } from "./db-structure";
5
- import { securityConfigs } from "./security";
6
- import { validatorConfigs } from "./validators";
7
- import { logics } from "./business-logics";
8
- import { patchLogicConfigs } from "./patch-logics";
2
+ import {initializeEmberFlow} from "../index";
3
+ import {projectConfig} from "./project-config";
4
+ import {dbStructure, Entity} from "./db-structure";
5
+ import {securityConfigs} from "./security";
6
+ import {validatorConfigs} from "./validators";
7
+ import {logics} from "./business-logics";
8
+ import {patchLogicConfigs} from "./patch-logics";
9
+ import {backFillPatchConfigs} from "./one-time-patches";
10
+ import {cleanupConfigs} from "./cleanup-configs";
9
11
 
10
12
  admin.initializeApp();
11
13
 
12
- const { functionsConfig } = initializeEmberFlow(
14
+ const {functionsConfig} = initializeEmberFlow({
13
15
  projectConfig,
14
16
  admin,
15
17
  dbStructure,
16
18
  Entity,
17
19
  securityConfigs,
18
20
  validatorConfigs,
19
- logics,
20
- patchLogicConfigs
21
- );
21
+ logicConfigs: logics,
22
+ patchLogicConfigs,
23
+ cleanupConfigs,
24
+ backFillPatchConfigs,
25
+ });
22
26
 
23
27
  // Export the generated functions
24
28
  Object.entries(functionsConfig).forEach(([key, value]) => {
@@ -0,0 +1,13 @@
1
+ import {BackFillPatchConfig} from "../types";
2
+
3
+ const sampleOneTimePatch: BackFillPatchConfig = {
4
+ name: "sample-one-time-patch",
5
+ patchFn: async (collectionPath, docs) => {
6
+ console.log(`Executing sample one-time patch on collection ${collectionPath} (${docs.length} docs)...`);
7
+ // Add your custom bulk back-fill logic here, e.g. bulk-update docs via a single db.batch().
8
+ },
9
+ };
10
+
11
+ export const backFillPatchConfigs: BackFillPatchConfig[] = [
12
+ sampleOneTimePatch,
13
+ ];