emberflow 1.3.68 → 1.3.70
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/lib/index-utils.js +6 -1
- package/lib/index-utils.js.map +1 -1
- package/lib/index.d.ts +0 -3
- package/lib/index.js +8 -10
- package/lib/index.js.map +1 -1
- package/lib/tests/utils/distribution.test.js +101 -197
- package/lib/tests/utils/distribution.test.js.map +1 -1
- package/lib/tests/utils/functions.test.js +144 -0
- package/lib/tests/utils/functions.test.js.map +1 -0
- package/lib/utils/distribution.d.ts +2 -2
- package/lib/utils/distribution.js +43 -87
- package/lib/utils/distribution.js.map +1 -1
- package/lib/utils/functions.d.ts +4 -0
- package/lib/utils/functions.js +70 -0
- package/lib/utils/functions.js.map +1 -0
- package/package.json +1 -1
- package/lib/logics/index.d.ts +0 -2
- package/lib/logics/index.js +0 -77
- package/lib/logics/index.js.map +0 -1
- package/lib/logics/logics.d.ts +0 -2
- package/lib/logics/logics.js +0 -20
- package/lib/logics/logics.js.map +0 -1
- package/lib/tests/logics/index.test.js +0 -127
- package/lib/tests/logics/index.test.js.map +0 -1
- package/lib/tests/utils/sample.test.d.ts +0 -1
- package/lib/tests/utils/sample.test.js +0 -52
- package/lib/tests/utils/sample.test.js.map +0 -1
- package/lib/utils/sample.d.ts +0 -5
- package/lib/utils/sample.js +0 -37
- package/lib/utils/sample.js.map +0 -1
- package/lib/utils.d.ts +0 -12
- package/lib/utils.js +0 -67
- package/lib/utils.js.map +0 -1
- /package/lib/tests/{logics/index.test.d.ts → utils/functions.test.d.ts} +0 -0
package/lib/logics/index.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
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
|
-
exports.createViewLogicFn = void 0;
|
|
27
|
-
const index_1 = require("../index");
|
|
28
|
-
const admin = __importStar(require("firebase-admin"));
|
|
29
|
-
const paths_1 = require("../utils/paths");
|
|
30
|
-
function createViewLogicFn(viewDefinition) {
|
|
31
|
-
return async (action) => {
|
|
32
|
-
const { srcProps, destEntity, destProp } = viewDefinition;
|
|
33
|
-
const { document, path, actionType } = action;
|
|
34
|
-
console.log(`Executing ViewLogic on document at ${path}...`);
|
|
35
|
-
const docId = path.split("/").slice(-1)[0];
|
|
36
|
-
const destDocPath = index_1.docPaths[destEntity];
|
|
37
|
-
const destPaths = await (0, paths_1.hydrateDocPath)(destDocPath, {
|
|
38
|
-
[destEntity]: {
|
|
39
|
-
fieldName: destProp ? `${destProp}.id` : "id",
|
|
40
|
-
operator: "==",
|
|
41
|
-
value: docId,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
let documents;
|
|
45
|
-
if (actionType === "delete") {
|
|
46
|
-
documents = destPaths.map((destPath) => {
|
|
47
|
-
return {
|
|
48
|
-
action: "delete",
|
|
49
|
-
dstPath: path,
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
const viewDoc = {};
|
|
55
|
-
for (const srcProp of srcProps) {
|
|
56
|
-
if (document[srcProp]) {
|
|
57
|
-
viewDoc[`${destProp ? `${destProp}.` : ""}${srcProp}`] = document[srcProp];
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
documents = destPaths.map((destPath) => {
|
|
61
|
-
return {
|
|
62
|
-
action: "merge",
|
|
63
|
-
dstPath: destPath,
|
|
64
|
-
doc: viewDoc,
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
name: `${destEntity}#${destProp} ViewLogic`,
|
|
70
|
-
status: "finished",
|
|
71
|
-
timeFinished: admin.firestore.Timestamp.now(),
|
|
72
|
-
documents,
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
exports.createViewLogicFn = createViewLogicFn;
|
|
77
|
-
//# sourceMappingURL=index.js.map
|
package/lib/logics/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oCAAkC;AAClC,sDAAwC;AACxC,0CAA8C;AAE9C,SAAgB,iBAAiB,CAAC,cAA8B;IAC9D,OAAO,KAAK,EAAE,MAAc,EAAE,EAAE;QAC9B,MAAM,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAC,GAAG,cAAc,CAAC;QACxD,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,MAAM,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,KAAK,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,MAAM,WAAW,GAAG,gBAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAc,EACpC,WAAW,EACX;YACE,CAAC,UAAU,CAAC,EAAE;gBACZ,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC7C,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,KAAK;aACb;SACF,CACF,CAAC;QAEF,IAAI,SAA2B,CAAC;QAChC,IAAI,UAAU,KAAK,QAAQ,EAAE;YAC3B,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrC,OAAO;oBACL,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;oBACrB,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;iBAC5E;aACF;YACD,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrC,OAAO;oBACL,MAAM,EAAE,OAA4B;oBACpC,OAAO,EAAE,QAAQ;oBACjB,GAAG,EAAE,OAAO;iBACb,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;QAED,OAAO;YACL,IAAI,EAAE,GAAG,UAAU,IAAI,QAAQ,YAAY;YAC3C,MAAM,EAAE,UAAU;YAClB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7C,SAAS;SACV,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAlDD,8CAkDC"}
|
package/lib/logics/logics.d.ts
DELETED
package/lib/logics/logics.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.forDistributionLogicConfig = void 0;
|
|
4
|
-
const db_structure_1 = require("../db-structure");
|
|
5
|
-
exports.forDistributionLogicConfig = {
|
|
6
|
-
name: "ForDistribution Logic",
|
|
7
|
-
actionTypes: ["create"],
|
|
8
|
-
modifiedFields: "all",
|
|
9
|
-
entities: [db_structure_1.InternalEntity.ForDistribution],
|
|
10
|
-
logicFn: async (action) => {
|
|
11
|
-
const { modifiedFields } = action;
|
|
12
|
-
const documents = modifiedFields.logicResultDocs;
|
|
13
|
-
return {
|
|
14
|
-
name: "For Distribution Logic Result",
|
|
15
|
-
status: "finished",
|
|
16
|
-
documents,
|
|
17
|
-
};
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=logics.js.map
|
package/lib/logics/logics.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logics.js","sourceRoot":"","sources":["../../src/logics/logics.ts"],"names":[],"mappings":";;;AAKA,kDAA+C;AAElC,QAAA,0BAA0B,GAAgB;IACrD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,CAAC,QAAQ,CAAC;IACvB,cAAc,EAAE,KAAK;IACrB,QAAQ,EAAE,CAAC,6BAAc,CAAC,eAAe,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;QAChC,MAAM,EAAC,cAAc,EAAC,GAAG,MAAM,CAAC;QAChC,MAAM,SAAS,GAAqB,cAAc,CAAC,eAAe,CAAC;QACnE,OAAO;YACL,IAAI,EAAE,+BAA+B;YACrC,MAAM,EAAE,UAAU;YAClB,SAAS;SACV,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1,127 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/tests/logics/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
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 admin = __importStar(require("firebase-admin"));
|
|
27
|
-
const sample_1 = require("../../utils/sample");
|
|
28
|
-
describe("Your test suite", () => {
|
|
29
|
-
let createNowTimestampMock;
|
|
30
|
-
let firestoreMock;
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
// Mock the createNowTimestamp function
|
|
33
|
-
createNowTimestampMock = jest.spyOn(sample_1._mockable, "createNowTimestamp");
|
|
34
|
-
createNowTimestampMock.mockReturnValue({ seconds: 1234567890, nanoseconds: 0 });
|
|
35
|
-
// Mock admin.firestore
|
|
36
|
-
firestoreMock = jest.spyOn(admin, "firestore");
|
|
37
|
-
firestoreMock.mockReturnValue({});
|
|
38
|
-
});
|
|
39
|
-
afterEach(() => {
|
|
40
|
-
// Reset the mocks after each test
|
|
41
|
-
jest.resetAllMocks();
|
|
42
|
-
});
|
|
43
|
-
it("Your test case", () => {
|
|
44
|
-
// Redirect console.info to a jest function to capture its output
|
|
45
|
-
console.info = jest.fn();
|
|
46
|
-
(0, sample_1.sampleFunction)();
|
|
47
|
-
expect(console.info).toHaveBeenCalledWith(true, { seconds: 1234567890, nanoseconds: 0 });
|
|
48
|
-
expect(createNowTimestampMock).toHaveBeenCalledTimes(1);
|
|
49
|
-
expect(firestoreMock).toHaveBeenCalledTimes(1);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=sample.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sample.test.js","sourceRoot":"","sources":["../../../src/tests/utils/sample.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AACxC,+CAA6D;AAE7D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,sBAAwC,CAAC;IAC7C,IAAI,aAA+B,CAAC;IAEpC,UAAU,CAAC,GAAG,EAAE;QACd,uCAAuC;QACvC,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAS,EAAE,oBAAoB,CAAC,CAAC;QACrE,sBAAsB,CAAC,eAAe,CAAC,EAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;QAE9E,uBAAuB;QACvB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,aAAa,CAAC,eAAe,CAAC,EAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,kCAAkC;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,iEAAiE;QACjE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,IAAA,uBAAc,GAAE,CAAC;QAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;QACvF,MAAM,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/utils/sample.d.ts
DELETED
package/lib/utils/sample.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
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
|
-
exports.sampleFunction = exports._mockable = void 0;
|
|
27
|
-
const admin = __importStar(require("firebase-admin"));
|
|
28
|
-
exports._mockable = {
|
|
29
|
-
createNowTimestamp: () => admin.firestore.Timestamp.now(),
|
|
30
|
-
};
|
|
31
|
-
function sampleFunction() {
|
|
32
|
-
const firestore = admin.firestore();
|
|
33
|
-
const now = exports._mockable.createNowTimestamp();
|
|
34
|
-
console.info(firestore != null, now);
|
|
35
|
-
}
|
|
36
|
-
exports.sampleFunction = sampleFunction;
|
|
37
|
-
//# sourceMappingURL=sample.js.map
|
package/lib/utils/sample.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sample.js","sourceRoot":"","sources":["../../src/utils/sample.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AAE3B,QAAA,SAAS,GAAG;IACvB,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE;CAC1D,CAAC;AAEF,SAAgB,cAAc;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,iBAAS,CAAC,kBAAkB,EAAE,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAJD,wCAIC"}
|
package/lib/utils.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
declare function findMatchingDocPathRegex(docPath: string, docPathsRegex: Record<string, RegExp>): {
|
|
2
|
-
entity: string;
|
|
3
|
-
regex: RegExp;
|
|
4
|
-
} | {
|
|
5
|
-
entity: null;
|
|
6
|
-
regex: null;
|
|
7
|
-
};
|
|
8
|
-
declare function filterSubDocPathsByEntity(entity: string, docPaths: Record<string, string>): string[];
|
|
9
|
-
declare function expandAndGroupDocPaths(startingDocPath: string, idsFetcher: (collectionPath: string) => Promise<string[]>): Promise<{
|
|
10
|
-
[key: string]: string[];
|
|
11
|
-
}>;
|
|
12
|
-
export { expandAndGroupDocPaths, filterSubDocPathsByEntity, findMatchingDocPathRegex };
|
package/lib/utils.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findMatchingDocPathRegex = exports.filterSubDocPathsByEntity = exports.expandAndGroupDocPaths = void 0;
|
|
4
|
-
const index_1 = require("./index");
|
|
5
|
-
function findMatchingDocPathRegex(docPath, docPathsRegex) {
|
|
6
|
-
for (const key in docPathsRegex) {
|
|
7
|
-
if (docPathsRegex[key].test(docPath)) {
|
|
8
|
-
return { entity: key, regex: docPathsRegex[key] };
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return { entity: null, regex: null };
|
|
12
|
-
}
|
|
13
|
-
exports.findMatchingDocPathRegex = findMatchingDocPathRegex;
|
|
14
|
-
function filterSubDocPathsByEntity(entity, docPaths) {
|
|
15
|
-
const path = docPaths[entity];
|
|
16
|
-
const paths = Object.values(docPaths);
|
|
17
|
-
return paths.filter((p) => p.startsWith(path));
|
|
18
|
-
}
|
|
19
|
-
exports.filterSubDocPathsByEntity = filterSubDocPathsByEntity;
|
|
20
|
-
async function expandAndGroupDocPaths(startingDocPath, idsFetcher) {
|
|
21
|
-
const groupedPaths = {};
|
|
22
|
-
const { entity } = findMatchingDocPathRegex(startingDocPath, index_1.docPathsRegex);
|
|
23
|
-
if (!entity) {
|
|
24
|
-
return groupedPaths;
|
|
25
|
-
}
|
|
26
|
-
const entityDocPath = index_1.docPaths[entity];
|
|
27
|
-
const subDocPaths = filterSubDocPathsByEntity(entity, index_1.docPaths);
|
|
28
|
-
const values = Object.values(subDocPaths).map((p) => p.replace(entityDocPath, startingDocPath));
|
|
29
|
-
const sortedValues = values.sort();
|
|
30
|
-
const newPathMap = new Map();
|
|
31
|
-
const expandedPaths = [];
|
|
32
|
-
while (sortedValues.length > 0) {
|
|
33
|
-
const path = sortedValues.shift();
|
|
34
|
-
if (!path) {
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
let skipPath = false;
|
|
38
|
-
for (const key of [...newPathMap.keys()].sort()) {
|
|
39
|
-
if (path.startsWith(key)) {
|
|
40
|
-
skipPath = true;
|
|
41
|
-
const values = newPathMap.get(key);
|
|
42
|
-
const newPaths = (values || []).map((value) => path.replace(key, value));
|
|
43
|
-
sortedValues.push(...newPaths);
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (skipPath)
|
|
48
|
-
continue;
|
|
49
|
-
if (/{\w+Id}$/.test(path)) {
|
|
50
|
-
const idIndex = path.lastIndexOf("/");
|
|
51
|
-
const collectionPath = path.substring(0, idIndex);
|
|
52
|
-
const ids = await idsFetcher(collectionPath);
|
|
53
|
-
const newPaths = ids.map((id) => path.replace(/{\w+Id}$/, id.toString()));
|
|
54
|
-
newPathMap.set(path, newPaths);
|
|
55
|
-
sortedValues.push(...newPaths);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
expandedPaths.push(path);
|
|
59
|
-
}
|
|
60
|
-
// Group expandedPaths based on docPaths keys and values
|
|
61
|
-
for (const [key, regex] of Object.entries(index_1.docPathsRegex)) {
|
|
62
|
-
groupedPaths[key] = expandedPaths.filter((path) => path.match(regex));
|
|
63
|
-
}
|
|
64
|
-
return groupedPaths;
|
|
65
|
-
}
|
|
66
|
-
exports.expandAndGroupDocPaths = expandAndGroupDocPaths;
|
|
67
|
-
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|