emberflow 1.0.8

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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/lib/db-structure.d.ts +7 -0
  4. package/lib/db-structure.js +67 -0
  5. package/lib/db-structure.js.map +1 -0
  6. package/lib/index-utils.d.ts +20 -0
  7. package/lib/index-utils.js +324 -0
  8. package/lib/index-utils.js.map +1 -0
  9. package/lib/index.d.ts +23 -0
  10. package/lib/index.js +197 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/init-db-structure.d.ts +17 -0
  13. package/lib/init-db-structure.js +111 -0
  14. package/lib/init-db-structure.js.map +1 -0
  15. package/lib/logics/index.d.ts +2 -0
  16. package/lib/logics/index.js +77 -0
  17. package/lib/logics/index.js.map +1 -0
  18. package/lib/logics/view-logics.d.ts +3 -0
  19. package/lib/logics/view-logics.js +167 -0
  20. package/lib/logics/view-logics.js.map +1 -0
  21. package/lib/sample-custom/business-logics.d.ts +3 -0
  22. package/lib/sample-custom/business-logics.js +67 -0
  23. package/lib/sample-custom/business-logics.js.map +1 -0
  24. package/lib/sample-custom/db-structure.d.ts +29 -0
  25. package/lib/sample-custom/db-structure.js +36 -0
  26. package/lib/sample-custom/db-structure.js.map +1 -0
  27. package/lib/sample-custom/security.d.ts +2 -0
  28. package/lib/sample-custom/security.js +63 -0
  29. package/lib/sample-custom/security.js.map +1 -0
  30. package/lib/sample-custom/validators.d.ts +9 -0
  31. package/lib/sample-custom/validators.js +42 -0
  32. package/lib/sample-custom/validators.js.map +1 -0
  33. package/lib/tests/index-utils.test.d.ts +1 -0
  34. package/lib/tests/index-utils.test.js +600 -0
  35. package/lib/tests/index-utils.test.js.map +1 -0
  36. package/lib/tests/index.test.d.ts +1 -0
  37. package/lib/tests/index.test.js +496 -0
  38. package/lib/tests/index.test.js.map +1 -0
  39. package/lib/tests/init-db-structure.test.d.ts +1 -0
  40. package/lib/tests/init-db-structure.test.js +114 -0
  41. package/lib/tests/init-db-structure.test.js.map +1 -0
  42. package/lib/tests/logics/index.test.d.ts +1 -0
  43. package/lib/tests/logics/index.test.js +127 -0
  44. package/lib/tests/logics/index.test.js.map +1 -0
  45. package/lib/tests/logics/view-logics.test.d.ts +1 -0
  46. package/lib/tests/logics/view-logics.test.js +211 -0
  47. package/lib/tests/logics/view-logics.test.js.map +1 -0
  48. package/lib/tests/utils/misc.test.d.ts +1 -0
  49. package/lib/tests/utils/misc.test.js +31 -0
  50. package/lib/tests/utils/misc.test.js.map +1 -0
  51. package/lib/tests/utils/paths.test.d.ts +1 -0
  52. package/lib/tests/utils/paths.test.js +258 -0
  53. package/lib/tests/utils/paths.test.js.map +1 -0
  54. package/lib/tests/utils/query.test.d.ts +1 -0
  55. package/lib/tests/utils/query.test.js +72 -0
  56. package/lib/tests/utils/query.test.js.map +1 -0
  57. package/lib/tests/utils/sample.test.d.ts +1 -0
  58. package/lib/tests/utils/sample.test.js +52 -0
  59. package/lib/tests/utils/sample.test.js.map +1 -0
  60. package/lib/types.d.ts +78 -0
  61. package/lib/types.js +3 -0
  62. package/lib/types.js.map +1 -0
  63. package/lib/utils/db-structure.d.ts +2 -0
  64. package/lib/utils/db-structure.js +9 -0
  65. package/lib/utils/db-structure.js.map +1 -0
  66. package/lib/utils/misc.d.ts +1 -0
  67. package/lib/utils/misc.js +53 -0
  68. package/lib/utils/misc.js.map +1 -0
  69. package/lib/utils/paths.d.ts +16 -0
  70. package/lib/utils/paths.js +136 -0
  71. package/lib/utils/paths.js.map +1 -0
  72. package/lib/utils/query.d.ts +2 -0
  73. package/lib/utils/query.js +41 -0
  74. package/lib/utils/query.js.map +1 -0
  75. package/lib/utils/sample.d.ts +5 -0
  76. package/lib/utils/sample.js +37 -0
  77. package/lib/utils/sample.js.map +1 -0
  78. package/lib/utils.d.ts +12 -0
  79. package/lib/utils.js +67 -0
  80. package/lib/utils.js.map +1 -0
  81. package/package.json +37 -0
  82. package/src/sample-custom/business-logics.ts +51 -0
  83. package/src/sample-custom/db-structure.ts +33 -0
  84. package/src/sample-custom/security.ts +77 -0
  85. package/src/sample-custom/validators.ts +46 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const logics_1 = require("../../logics");
27
+ const admin = __importStar(require("firebase-admin"));
28
+ const queryutils = __importStar(require("../../utils/query"));
29
+ const pathsutils = __importStar(require("../../utils/paths"));
30
+ const vd1 = {
31
+ srcEntity: "user",
32
+ srcProps: ["name", "avatar"],
33
+ destEntity: "friend",
34
+ };
35
+ const vd2 = {
36
+ srcEntity: "user",
37
+ srcProps: ["name", "avatar"],
38
+ destEntity: "post",
39
+ destProp: "postedBy",
40
+ };
41
+ const testAction = {
42
+ actionType: "update",
43
+ path: "users/1234",
44
+ document: {
45
+ name: "John Doe",
46
+ age: 16,
47
+ },
48
+ status: "processing",
49
+ timeCreated: admin.firestore.Timestamp.now(),
50
+ };
51
+ jest.mock("../../index", () => {
52
+ const originalModule = jest.requireActual("../../index");
53
+ return Object.assign(Object.assign({}, originalModule), { docPaths: {
54
+ user: "users/{userId}",
55
+ friend: "users/{userId}/friends/{friendId}",
56
+ post: "users/{userId}/posts/{postId}",
57
+ }, hydrateDocPath: jest.fn()
58
+ .mockReturnValueOnce(Promise.resolve([
59
+ "users/456/friends/1234",
60
+ "users/789/friends/1234",
61
+ ]))
62
+ .mockReturnValueOnce(Promise.resolve([
63
+ "users/123/posts/987",
64
+ "users/890/posts/987",
65
+ ])) });
66
+ });
67
+ describe("createViewLogicFn", () => {
68
+ it("should create a logic function that processes the given action and view definition", async () => {
69
+ const hydrateDocPathSpy = jest.spyOn(pathsutils, "hydrateDocPath");
70
+ const fetchIdsMock = jest.spyOn(queryutils, "fetchIds");
71
+ fetchIdsMock
72
+ .mockResolvedValueOnce(["456", "789"])
73
+ .mockResolvedValue(["1234"]);
74
+ // Create the logic function using the viewDefinition
75
+ const logicFn = (0, logics_1.createViewLogicFn)(vd1);
76
+ // Call the logic function with the test action
77
+ const result = await logicFn(testAction);
78
+ // Add your expectations here, e.g., result.documents should have the correct properties and values
79
+ expect(result).toBeDefined();
80
+ expect(result.documents).toBeDefined();
81
+ expect(result.documents.length).toEqual(2);
82
+ let document = result.documents[0];
83
+ expect(document).toHaveProperty("action", "merge");
84
+ expect(document).toHaveProperty("dstPath", "users/456/friends/1234");
85
+ expect(document.doc).toEqual({ "name": "John Doe" });
86
+ document = result.documents[1];
87
+ expect(document).toHaveProperty("action", "merge");
88
+ expect(document).toHaveProperty("dstPath", "users/789/friends/1234");
89
+ expect(document.doc).toEqual({ "name": "John Doe" });
90
+ expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/friends/{friendId}");
91
+ expect(hydrateDocPathSpy.mock.calls[0][1]).toEqual({
92
+ "friend": {
93
+ fieldName: "id",
94
+ operator: "==",
95
+ value: "1234",
96
+ },
97
+ });
98
+ fetchIdsMock
99
+ .mockResolvedValueOnce(["123", "890"])
100
+ .mockResolvedValue(["987"]);
101
+ // Create the logic function using the viewDefinition
102
+ const logicFn2 = (0, logics_1.createViewLogicFn)(vd2);
103
+ // Call the logic function with the test action
104
+ const result2 = await logicFn2(testAction);
105
+ // Add your expectations here, e.g., result.documents should have the correct properties and values
106
+ expect(result2).toBeDefined();
107
+ expect(result2.documents).toBeDefined();
108
+ expect(result2.documents.length).toEqual(2);
109
+ document = result2.documents[0];
110
+ expect(document).toHaveProperty("action", "merge");
111
+ expect(document).toHaveProperty("dstPath", "users/123/posts/987");
112
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
113
+ document = result2.documents[1];
114
+ expect(document).toHaveProperty("action", "merge");
115
+ expect(document).toHaveProperty("dstPath", "users/890/posts/987");
116
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
117
+ expect(hydrateDocPathSpy.mock.calls[1][0]).toEqual("users/{userId}/posts/{postId}");
118
+ expect(hydrateDocPathSpy.mock.calls[1][1]).toEqual({
119
+ "post": {
120
+ fieldName: "postedBy.id",
121
+ operator: "==",
122
+ value: "1234",
123
+ },
124
+ });
125
+ });
126
+ });
127
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/tests/logics/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const view_logics_1 = require("../../logics/view-logics");
27
+ const pathsutils = __importStar(require("../../utils/paths"));
28
+ const vd1 = {
29
+ srcEntity: "user",
30
+ srcProps: ["name", "avatar", "age"],
31
+ destEntity: "friend",
32
+ };
33
+ const vd2 = {
34
+ srcEntity: "user",
35
+ srcProps: ["name", "avatar"],
36
+ destEntity: "post",
37
+ destProp: "postedBy",
38
+ };
39
+ const testLogicResultDoc = {
40
+ action: "merge",
41
+ dstPath: "users/1234",
42
+ doc: {
43
+ name: "John Doe",
44
+ },
45
+ instructions: {
46
+ age: "++",
47
+ },
48
+ };
49
+ const testPeerLogicResultDoc = {
50
+ action: "merge",
51
+ dstPath: "users/1234/posts/5678/comments/9876",
52
+ doc: {
53
+ title: "I like it",
54
+ },
55
+ instructions: {
56
+ likes: "++",
57
+ },
58
+ };
59
+ const testLogicResultDocDelete = {
60
+ action: "delete",
61
+ dstPath: "users/1234",
62
+ };
63
+ jest.mock("../../index", () => {
64
+ const originalModule = jest.requireActual("../../index");
65
+ return Object.assign(Object.assign({}, originalModule), { docPaths: {
66
+ user: "users/{userId}",
67
+ friend: "users/{userId}/friends/{friendId}",
68
+ post: "users/{userId}/posts/{postId}",
69
+ comment: "users/{userId}/posts/{postId}/comments/{commentId}",
70
+ }, docPathsRegex: {
71
+ user: /^users\/([^/]+)$/,
72
+ friend: /^users\/([^/]+)\/friends\/([^/]+)$/,
73
+ post: /^users\/([^/]+)\/posts\/([^/]+)$/,
74
+ comment: /^users\/([^/]+)\/posts\/([^/]+)\/comments\/([^/]+)$/,
75
+ } });
76
+ });
77
+ describe("createViewLogicFn", () => {
78
+ it("should create a logic function that processes the given logicResultDoc and view definition", async () => {
79
+ const hydrateDocPathSpy = jest.spyOn(pathsutils, "hydrateDocPath");
80
+ hydrateDocPathSpy.mockReset();
81
+ hydrateDocPathSpy
82
+ .mockReturnValueOnce(Promise.resolve([
83
+ "users/456/friends/1234",
84
+ "users/789/friends/1234",
85
+ ]))
86
+ .mockReturnValueOnce(Promise.resolve([
87
+ "users/1234/posts/987",
88
+ "users/1234/posts/654",
89
+ "users/890/posts/987",
90
+ "users/890/posts/654",
91
+ ]))
92
+ .mockReturnValueOnce(Promise.resolve([
93
+ "users/456/friends/1234",
94
+ "users/789/friends/1234",
95
+ ]));
96
+ // Create the logic function using the viewDefinition
97
+ const logicFn = (0, view_logics_1.createViewLogicFn)(vd1);
98
+ // Call the logic function with the test action
99
+ const result = await logicFn(testLogicResultDoc);
100
+ expect(result).toBeDefined();
101
+ expect(result.documents).toBeDefined();
102
+ expect(result.documents.length).toEqual(2);
103
+ let document = result.documents[0];
104
+ expect(document).toHaveProperty("action", "merge");
105
+ expect(document).toHaveProperty("dstPath", "users/456/friends/1234");
106
+ expect(document.doc).toEqual({ "name": "John Doe" });
107
+ expect(document.instructions).toEqual({ "age": "++" });
108
+ document = result.documents[1];
109
+ expect(document).toHaveProperty("action", "merge");
110
+ expect(document).toHaveProperty("dstPath", "users/789/friends/1234");
111
+ expect(document.doc).toEqual({ "name": "John Doe" });
112
+ expect(document.instructions).toEqual({ "age": "++" });
113
+ expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/friends/1234");
114
+ expect(hydrateDocPathSpy.mock.calls[0][1]).toEqual({});
115
+ // Create the logic function using the viewDefinition
116
+ const logicFn2 = (0, view_logics_1.createViewLogicFn)(vd2);
117
+ // Call the logic function with the test action
118
+ const result2 = await logicFn2(testLogicResultDoc);
119
+ // Add your expectations here, e.g., result.documents should have the correct properties and values
120
+ expect(result2).toBeDefined();
121
+ expect(result2.documents).toBeDefined();
122
+ expect(result2.documents.length).toEqual(4);
123
+ document = result2.documents[0];
124
+ expect(document).toHaveProperty("action", "merge");
125
+ expect(document).toHaveProperty("dstPath", "users/1234/posts/987");
126
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
127
+ document = result2.documents[1];
128
+ expect(document).toHaveProperty("action", "merge");
129
+ expect(document).toHaveProperty("dstPath", "users/1234/posts/654");
130
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
131
+ document = result2.documents[2];
132
+ expect(document).toHaveProperty("action", "merge");
133
+ expect(document).toHaveProperty("dstPath", "users/890/posts/987");
134
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
135
+ document = result2.documents[3];
136
+ expect(document).toHaveProperty("action", "merge");
137
+ expect(document).toHaveProperty("dstPath", "users/890/posts/654");
138
+ expect(document.doc).toEqual({ "postedBy.name": "John Doe" });
139
+ expect(hydrateDocPathSpy.mock.calls[1][0]).toEqual("users/{userId}/posts/{postId}");
140
+ expect(hydrateDocPathSpy.mock.calls[1][1]).toEqual({
141
+ post: {
142
+ fieldName: "postedBy.id",
143
+ operator: "==",
144
+ value: "1234",
145
+ },
146
+ });
147
+ const resultDelete = await logicFn(testLogicResultDocDelete);
148
+ expect(resultDelete).toBeDefined();
149
+ expect(resultDelete.documents).toBeDefined();
150
+ expect(resultDelete.documents.length).toEqual(2);
151
+ document = resultDelete.documents[0];
152
+ expect(document).toHaveProperty("action", "delete");
153
+ expect(document).toHaveProperty("dstPath", "users/456/friends/1234");
154
+ document = resultDelete.documents[1];
155
+ expect(document).toHaveProperty("action", "delete");
156
+ expect(document).toHaveProperty("dstPath", "users/789/friends/1234");
157
+ expect(hydrateDocPathSpy.mock.calls[2][0]).toEqual("users/{userId}/friends/1234");
158
+ expect(hydrateDocPathSpy.mock.calls[2][1]).toEqual({});
159
+ });
160
+ });
161
+ describe("syncPeerViews", () => {
162
+ it("should create a logic function that processes the given logicResultDoc and syncs peer views", async () => {
163
+ const hydrateDocPathSpy = jest.spyOn(pathsutils, "hydrateDocPath");
164
+ hydrateDocPathSpy.mockReset();
165
+ hydrateDocPathSpy
166
+ .mockReturnValueOnce(Promise.resolve([
167
+ "users/456/posts/5678/comments/9876",
168
+ "users/789/posts/5678/comments/9876",
169
+ "users/890/posts/5678/comments/9876",
170
+ ]));
171
+ const findMatchingDocPathRegexSpy = jest.spyOn(pathsutils, "findMatchingDocPathRegex");
172
+ findMatchingDocPathRegexSpy
173
+ .mockReturnValue({ entity: "comment", regex: /^users\/([^/]+)\/posts\/([^/]+)\/comments\/([^/]+)$/ });
174
+ // Call the syncPeerViews function with the test logic result doc
175
+ // users/1234/posts/5678/comments/9876
176
+ const result = await (0, view_logics_1.syncPeerViews)(testPeerLogicResultDoc);
177
+ // Add your expectations here, e.g., result.documents should have the correct properties and values
178
+ expect(result).toBeDefined();
179
+ expect(result.documents).toBeDefined();
180
+ expect(result.documents.length).toEqual(3);
181
+ let document = result.documents[0];
182
+ expect(document).toHaveProperty("action", "merge");
183
+ expect(document).toHaveProperty("dstPath", "users/456/posts/5678/comments/9876");
184
+ expect(document.doc).toEqual({ "title": "I like it" });
185
+ expect(document.instructions).toEqual({ "likes": "++" });
186
+ document = result.documents[1];
187
+ expect(document).toHaveProperty("action", "merge");
188
+ expect(document).toHaveProperty("dstPath", "users/789/posts/5678/comments/9876");
189
+ expect(document.doc).toEqual({ "title": "I like it" });
190
+ expect(document.instructions).toEqual({ "likes": "++" });
191
+ document = result.documents[2];
192
+ expect(document).toHaveProperty("action", "merge");
193
+ expect(document).toHaveProperty("dstPath", "users/890/posts/5678/comments/9876");
194
+ expect(document.doc).toEqual({ "title": "I like it" });
195
+ expect(document.instructions).toEqual({ "likes": "++" });
196
+ expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/posts/5678/comments/{commentId}");
197
+ expect(hydrateDocPathSpy.mock.calls[0][1]).toEqual({
198
+ "user": {
199
+ fieldName: "@id",
200
+ operator: "!=",
201
+ value: "1234",
202
+ },
203
+ "comment": {
204
+ fieldName: "@id",
205
+ operator: "==",
206
+ value: "9876",
207
+ },
208
+ });
209
+ });
210
+ });
211
+ //# sourceMappingURL=view-logics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-logics.test.js","sourceRoot":"","sources":["../../../src/tests/logics/view-logics.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA0E;AAE1E,8DAAgD;AAEhD,MAAM,GAAG,GAAmB;IAC1B,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;IACnC,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,MAAM,GAAG,GAAmB;IAC1B,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC5B,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAGF,MAAM,kBAAkB,GAAmB;IACzC,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,YAAY;IACrB,GAAG,EAAE;QACH,IAAI,EAAE,UAAU;KACjB;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,IAAI;KACV;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAmB;IAC7C,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,qCAAqC;IAC9C,GAAG,EAAE;QACH,KAAK,EAAE,WAAW;KACnB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,IAAI;KACZ;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAmB;IAC/C,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,YAAY;CACtB,CAAC;AAGF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;IAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACzD,uCACK,cAAc,KACjB,QAAQ,EAAE;YACR,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,mCAAmC;YAC3C,IAAI,EAAE,+BAA+B;YACrC,OAAO,EAAE,oDAAoD;SAC9D,EACD,aAAa,EAAE;YACb,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,oCAAoC;YAC5C,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE,qDAAqD;SAC/D,IACD;AACJ,CAAC,CAAC,CAAC;AAGH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACnE,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,iBAAiB;aACd,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,wBAAwB;YACxB,wBAAwB;SACzB,CAAC,CAAC;aACF,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,sBAAsB;YACtB,sBAAsB;YACtB,qBAAqB;YACrB,qBAAqB;SACtB,CAAC,CAAC;aACF,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,wBAAwB;YACxB,wBAAwB;SACzB,CAAC,CAAC,CAAC;QAEN,qDAAqD;QACrD,MAAM,OAAO,GAAG,IAAA,+BAAiB,EAAC,GAAG,CAAC,CAAC;QAEvC,+CAA+C;QAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAErD,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAErD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAClF,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEvD,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAA,+BAAiB,EAAC,GAAG,CAAC,CAAC;QAExC,+CAA+C;QAC/C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAEnD,mGAAmG;QACnG,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5C,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;QAE5D,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;QAE5D,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;QAE5D,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACpF,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE;gBACJ,SAAS,EAAE,aAAa;gBACxB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM;aACd;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE7D,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEjD,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAErE,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAErE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAClF,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACnE,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,iBAAiB;aACd,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,oCAAoC;YACpC,oCAAoC;YACpC,oCAAoC;SACrC,CAAC,CAAC,CAAC;QACN,MAAM,2BAA2B,GAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QACtF,2BAA2B;aACxB,eAAe,CAAC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,qDAAqD,EAAC,CAAC,CAAC;QAEtG,iEAAiE;QACjE,sCAAsC;QACtC,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAa,EAAC,sBAAsB,CAAC,CAAC;QAE3D,mGAAmG;QACnG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QACjF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAEvD,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QACjF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAEvD,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QACjF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QACrG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,EAAE;gBACN,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM;aACd;YACD,SAAS,EAAE;gBACT,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM;aACd;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const misc_1 = require("../../utils/misc");
4
+ const firebase_admin_1 = require("firebase-admin");
5
+ var Timestamp = firebase_admin_1.firestore.Timestamp;
6
+ var GeoPoint = firebase_admin_1.firestore.GeoPoint;
7
+ describe("deepEqual", () => {
8
+ it("should correctly compare Firestore Field types", () => {
9
+ const ts1 = Timestamp.fromDate(new Date(2023, 3, 1));
10
+ const ts2 = Timestamp.fromDate(new Date(2023, 3, 1));
11
+ const ts3 = Timestamp.fromDate(new Date(2023, 3, 2));
12
+ const geo1 = new GeoPoint(37.422, -122.084);
13
+ const geo2 = new GeoPoint(37.422, -122.084);
14
+ const geo3 = new GeoPoint(37.426, -122.081);
15
+ const array1 = [ts1, geo1];
16
+ const array2 = [ts2, geo2];
17
+ const array3 = [ts1, geo3];
18
+ const obj1 = { timestamp: ts1, geoPoint: geo1 };
19
+ const obj2 = { timestamp: ts2, geoPoint: geo2 };
20
+ const obj3 = { timestamp: ts1, geoPoint: geo3 };
21
+ expect((0, misc_1.deepEqual)(ts1, ts2)).toBe(true);
22
+ expect((0, misc_1.deepEqual)(ts1, ts3)).toBe(false);
23
+ expect((0, misc_1.deepEqual)(geo1, geo2)).toBe(true);
24
+ expect((0, misc_1.deepEqual)(geo1, geo3)).toBe(false);
25
+ expect((0, misc_1.deepEqual)(array1, array2)).toBe(true);
26
+ expect((0, misc_1.deepEqual)(array1, array3)).toBe(false);
27
+ expect((0, misc_1.deepEqual)(obj1, obj2)).toBe(true);
28
+ expect((0, misc_1.deepEqual)(obj1, obj3)).toBe(false);
29
+ });
30
+ });
31
+ //# sourceMappingURL=misc.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.test.js","sourceRoot":"","sources":["../../../src/tests/utils/misc.test.ts"],"names":[],"mappings":";;AAAA,2CAA2C;AAC3C,mDAAyC;AACzC,IAAO,SAAS,GAAG,0BAAS,CAAC,SAAS,CAAC;AACvC,IAAO,QAAQ,GAAG,0BAAS,CAAC,QAAQ,CAAC;AAErC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,EAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,EAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,EAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;QAE9C,MAAM,CAAC,IAAA,gBAAS,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAA,gBAAS,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,CAAC,IAAA,gBAAS,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAA,gBAAS,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,CAAC,IAAA,gBAAS,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAA,gBAAS,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,IAAA,gBAAS,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAA,gBAAS,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};