emberflow 2.0.8 → 2.0.10
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 +8 -0
- package/firestore.indexes.json +10 -1
- package/lib/index-utils.d.ts +27 -3
- package/lib/index-utils.js +99 -10
- package/lib/index-utils.js.map +1 -1
- package/lib/tests/index-utils.test.js +114 -12
- package/lib/tests/index-utils.test.js.map +1 -1
- package/lib/tests/utils/distribution.test.js +63 -46
- package/lib/tests/utils/distribution.test.js.map +1 -1
- package/lib/tests/utils/paths.test.js +27 -38
- package/lib/tests/utils/paths.test.js.map +1 -1
- package/lib/types.d.ts +4 -4
- package/lib/utils/distribution.d.ts +3 -3
- package/lib/utils/distribution.js +27 -15
- package/lib/utils/distribution.js.map +1 -1
- package/lib/utils/paths.d.ts +22 -1
- package/lib/utils/paths.js +29 -23
- package/lib/utils/paths.js.map +1 -1
- package/package.json +1 -1
package/lib/utils/paths.d.ts
CHANGED
|
@@ -22,7 +22,28 @@ export declare function expandAndGroupDocPathsByEntity(startingDocPath: string,
|
|
|
22
22
|
[key: string]: string[];
|
|
23
23
|
}>;
|
|
24
24
|
declare function doesPathExists(path: string): Promise<boolean>;
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Expands a templated path (containing `{entity}` placeholders) into all of its concrete
|
|
27
|
+
* collection/document paths by fetching the matching IDs for each placeholder.
|
|
28
|
+
*
|
|
29
|
+
* NOTE: This is intentionally a pure path-expansion utility and does NOT verify that the
|
|
30
|
+
* hydrated paths actually exist in Firestore. The previous per-path `doesPathExists` check
|
|
31
|
+
* was removed on purpose because:
|
|
32
|
+
* - It cost one Firestore read per hydrated path.
|
|
33
|
+
* - Firestore is path-based and (sub)collections are virtual: a hydrated collection path
|
|
34
|
+
* (e.g. "topics/<id>/statistics/hourly/sales") can legitimately hold documents even when
|
|
35
|
+
* an intermediate ancestor document does not exist, so the old check could wrongly skip
|
|
36
|
+
* valid paths.
|
|
37
|
+
* - Existence is a caller concern: callers that need it should check themselves
|
|
38
|
+
* (downstream consumers such as `patchGroupDocs` already tolerate empty collections).
|
|
39
|
+
* Please do not re-add an existence check here.
|
|
40
|
+
* @param {string} path The templated path to hydrate.
|
|
41
|
+
* @param {EntityCondition} entityCondition Query conditions keyed by entity, used when fetching IDs for each placeholder.
|
|
42
|
+
* @param {HydrationState} [state] Optional saved state to resume a previously paused hydration.
|
|
43
|
+
* @param {number} [limit] Maximum number of hydrated paths to return before pausing.
|
|
44
|
+
* @return {Promise<HydrationResult>} The hydrated document paths and, if the limit was reached, the state to resume from.
|
|
45
|
+
*/
|
|
46
|
+
export declare function hydratePath(path: string, entityCondition: EntityCondition, state?: HydrationState, limit?: number): Promise<HydrationResult>;
|
|
26
47
|
export declare function parseEntity(docPath: string): {
|
|
27
48
|
entityId: string;
|
|
28
49
|
entity: string | undefined;
|
package/lib/utils/paths.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.addAncestorIds = exports.getParentPath = exports.getDestPropAndDestPropId = exports.parseEntity = exports.
|
|
26
|
+
exports.addAncestorIds = exports.getParentPath = exports.getDestPropAndDestPropId = exports.parseEntity = exports.hydratePath = exports.expandAndGroupDocPathsByEntity = exports.filterSubDocPathsByEntity = exports.findMatchingDocPathRegex = exports._mockable = void 0;
|
|
27
27
|
const query_1 = require("./query");
|
|
28
28
|
const index_1 = require("../index");
|
|
29
29
|
const paths = __importStar(require("./paths"));
|
|
@@ -111,10 +111,31 @@ async function doesPathExists(path) {
|
|
|
111
111
|
const doc = await index_1.db.doc(path).get();
|
|
112
112
|
return doc.exists;
|
|
113
113
|
}
|
|
114
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Expands a templated path (containing `{entity}` placeholders) into all of its concrete
|
|
116
|
+
* collection/document paths by fetching the matching IDs for each placeholder.
|
|
117
|
+
*
|
|
118
|
+
* NOTE: This is intentionally a pure path-expansion utility and does NOT verify that the
|
|
119
|
+
* hydrated paths actually exist in Firestore. The previous per-path `doesPathExists` check
|
|
120
|
+
* was removed on purpose because:
|
|
121
|
+
* - It cost one Firestore read per hydrated path.
|
|
122
|
+
* - Firestore is path-based and (sub)collections are virtual: a hydrated collection path
|
|
123
|
+
* (e.g. "topics/<id>/statistics/hourly/sales") can legitimately hold documents even when
|
|
124
|
+
* an intermediate ancestor document does not exist, so the old check could wrongly skip
|
|
125
|
+
* valid paths.
|
|
126
|
+
* - Existence is a caller concern: callers that need it should check themselves
|
|
127
|
+
* (downstream consumers such as `patchGroupDocs` already tolerate empty collections).
|
|
128
|
+
* Please do not re-add an existence check here.
|
|
129
|
+
* @param {string} path The templated path to hydrate.
|
|
130
|
+
* @param {EntityCondition} entityCondition Query conditions keyed by entity, used when fetching IDs for each placeholder.
|
|
131
|
+
* @param {HydrationState} [state] Optional saved state to resume a previously paused hydration.
|
|
132
|
+
* @param {number} [limit] Maximum number of hydrated paths to return before pausing.
|
|
133
|
+
* @return {Promise<HydrationResult>} The hydrated document paths and, if the limit was reached, the state to resume from.
|
|
134
|
+
*/
|
|
135
|
+
async function hydratePath(path, entityCondition, state, limit = 500) {
|
|
115
136
|
const documentPaths = (state === null || state === void 0 ? void 0 : state.hydratedPaths) || [];
|
|
116
137
|
// Create a queue to keep track of the remaining path segments to process
|
|
117
|
-
const queue = (state === null || state === void 0 ? void 0 : state.queue) || [[
|
|
138
|
+
const queue = (state === null || state === void 0 ? void 0 : state.queue) || [[path.split("/"), (state === null || state === void 0 ? void 0 : state.idx) || 0]];
|
|
118
139
|
// Process the queue until all path segments have been processed
|
|
119
140
|
while (queue.length > 0) {
|
|
120
141
|
const [segments, idx] = queue.shift();
|
|
@@ -127,29 +148,14 @@ async function hydrateDocPath(destDocPath, entityCondition, state, limit = 500)
|
|
|
127
148
|
}
|
|
128
149
|
}
|
|
129
150
|
if (braceIdx === -1) {
|
|
130
|
-
// We've reached the end of the path, so add it to the document paths
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
// This means that the path contains hard coded ids, so we need to check if that pat exists in the database.
|
|
134
|
-
// `doesPathExists` uses `db.doc`, which requires a document path (even number of components). When the hydrated
|
|
135
|
-
// path points to a (sub)collection (odd number of components) — e.g. a group-patch collection path such as
|
|
136
|
-
// "topics/<id>/statistics/hourly/sales" — check the parent document's existence instead.
|
|
137
|
-
const nonEmptySegments = path.split("/").filter((s) => s.length > 0);
|
|
138
|
-
const pathToCheck = nonEmptySegments.length % 2 === 0 ?
|
|
139
|
-
path :
|
|
140
|
-
nonEmptySegments.slice(0, -1).join("/");
|
|
141
|
-
if (pathToCheck.split("/").filter((s) => s.length > 0).length >= 2 &&
|
|
142
|
-
!await exports._mockable.doesPathExists(pathToCheck)) {
|
|
143
|
-
console.error(`Document ${pathToCheck} does not exist. Skipping...`);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
documentPaths.push(path);
|
|
151
|
+
// We've reached the end of the path, so add it to the document paths.
|
|
152
|
+
const hydratedPath = segments.join("/");
|
|
153
|
+
documentPaths.push(hydratedPath);
|
|
148
154
|
if (documentPaths.length >= limit) {
|
|
149
155
|
return {
|
|
150
156
|
documentPaths,
|
|
151
157
|
hydrationState: queue.length > 0 ? {
|
|
152
|
-
pathSegments:
|
|
158
|
+
pathSegments: path.split("/"),
|
|
153
159
|
idx,
|
|
154
160
|
queue,
|
|
155
161
|
hydratedPaths: [], // Don't pass the already returned paths
|
|
@@ -178,7 +184,7 @@ async function hydrateDocPath(destDocPath, entityCondition, state, limit = 500)
|
|
|
178
184
|
}
|
|
179
185
|
return { documentPaths };
|
|
180
186
|
}
|
|
181
|
-
exports.
|
|
187
|
+
exports.hydratePath = hydratePath;
|
|
182
188
|
function parseEntity(docPath) {
|
|
183
189
|
const { basePath } = getDestPropAndDestPropId(docPath);
|
|
184
190
|
const parts = basePath.split("/");
|
package/lib/utils/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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"}
|