@karmaniverous/entity-manager 0.1.0 → 0.1.2-0
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
|
@@ -221,7 +221,7 @@ This change can be accomplished with no breaking changes to existing implementat
|
|
|
221
221
|
* [new exports.EntityManager(options)](#new_module_entity-manager.EntityManager_new)
|
|
222
222
|
* [.addKeys(entityToken, item, [overwrite])](#module_entity-manager.EntityManager+addKeys) ⇒ <code>object</code>
|
|
223
223
|
* [.getKeySpace(entityToken, keyToken, item, timestamp)](#module_entity-manager.EntityManager+getKeySpace) ⇒ <code>Array.<string></code>
|
|
224
|
-
* [.query(entityToken, keyToken, item, shardQuery, [
|
|
224
|
+
* [.query(entityToken, keyToken, item, shardQuery, [pageKeys])](#module_entity-manager.EntityManager+query) ⇒ <code>Promise.<ShardedQueryResult></code>
|
|
225
225
|
* _inner_
|
|
226
226
|
* [~ShardQueryResult](#module_entity-manager..ShardQueryResult) : <code>object</code>
|
|
227
227
|
* [~ShardQueryFunction](#module_entity-manager..ShardQueryFunction) ⇒ <code>Promise.<ShardQueryResult></code>
|
|
@@ -238,7 +238,7 @@ Manage DynamoDb entities.
|
|
|
238
238
|
* [new exports.EntityManager(options)](#new_module_entity-manager.EntityManager_new)
|
|
239
239
|
* [.addKeys(entityToken, item, [overwrite])](#module_entity-manager.EntityManager+addKeys) ⇒ <code>object</code>
|
|
240
240
|
* [.getKeySpace(entityToken, keyToken, item, timestamp)](#module_entity-manager.EntityManager+getKeySpace) ⇒ <code>Array.<string></code>
|
|
241
|
-
* [.query(entityToken, keyToken, item, shardQuery, [
|
|
241
|
+
* [.query(entityToken, keyToken, item, shardQuery, [pageKeys])](#module_entity-manager.EntityManager+query) ⇒ <code>Promise.<ShardedQueryResult></code>
|
|
242
242
|
|
|
243
243
|
<a name="new_module_entity-manager.EntityManager_new"></a>
|
|
244
244
|
|
|
@@ -301,7 +301,7 @@ Return an array of sharded keys valid for a given entity token & timestamp.
|
|
|
301
301
|
|
|
302
302
|
<a name="module_entity-manager.EntityManager+query"></a>
|
|
303
303
|
|
|
304
|
-
#### entityManager.query(entityToken, keyToken, item, shardQuery, [
|
|
304
|
+
#### entityManager.query(entityToken, keyToken, item, shardQuery, [pageKeys]) ⇒ <code>Promise.<ShardedQueryResult></code>
|
|
305
305
|
Query an entity across shards.
|
|
306
306
|
|
|
307
307
|
**Kind**: instance method of [<code>EntityManager</code>](#module_entity-manager.EntityManager)
|
|
@@ -313,7 +313,7 @@ Query an entity across shards.
|
|
|
313
313
|
| keyToken | <code>string</code> | Key token. |
|
|
314
314
|
| item | <code>object</code> | Entity item sufficiently populated to generate property keyToken. |
|
|
315
315
|
| shardQuery | <code>ShardQueryFunction</code> | Sharded query function. |
|
|
316
|
-
| [
|
|
316
|
+
| [pageKeys] | <code>object</code> | Map of shard page keys. |
|
|
317
317
|
|
|
318
318
|
<a name="module_entity-manager..ShardQueryResult"></a>
|
|
319
319
|
|
|
@@ -348,7 +348,7 @@ Shard query function
|
|
|
348
348
|
| Name | Type | Description |
|
|
349
349
|
| --- | --- | --- |
|
|
350
350
|
| items | <code>Array.<any></code> | Query result array. |
|
|
351
|
-
|
|
|
351
|
+
| pageKeys | <code>object</code> | Shard page keys. |
|
|
352
352
|
|
|
353
353
|
|
|
354
354
|
---
|
|
@@ -136,7 +136,7 @@ class EntityManager {
|
|
|
136
136
|
/**
|
|
137
137
|
* @typedef {object} ShardedQueryResult
|
|
138
138
|
* @property {any[]} items - Query result array.
|
|
139
|
-
* @property {object}
|
|
139
|
+
* @property {object} pageKeys - Shard page keys.
|
|
140
140
|
*/
|
|
141
141
|
|
|
142
142
|
/**
|
|
@@ -146,25 +146,31 @@ class EntityManager {
|
|
|
146
146
|
* @param {string} keyToken - Key token.
|
|
147
147
|
* @param {object} item - Entity item sufficiently populated to generate property keyToken.
|
|
148
148
|
* @param {ShardQueryFunction} shardQuery - Sharded query function.
|
|
149
|
-
* @param {object} [
|
|
149
|
+
* @param {object} [pageKeys] - Map of shard page keys.
|
|
150
150
|
* @returns {Promise<ShardedQueryResult>} Sharded query result.
|
|
151
151
|
*/
|
|
152
|
-
async query(entityToken, keyToken, item, shardQuery,
|
|
153
|
-
// Generate default
|
|
154
|
-
|
|
152
|
+
async query(entityToken, keyToken, item, shardQuery, pageKeys) {
|
|
153
|
+
// Generate default pageKeys if not provided
|
|
154
|
+
pageKeys ??= (0, _fromPairs2.default)(this.getKeySpace(entityToken, keyToken, item).map(shardedKey => [shardedKey, undefined]));
|
|
155
155
|
|
|
156
|
-
// Query every shard in
|
|
157
|
-
const shardQueryResults = await Promise.all((0, _map2.default)(
|
|
156
|
+
// Query every shard in pageKeys.
|
|
157
|
+
const shardQueryResults = await Promise.all((0, _map2.default)(pageKeys, (pageKey, shardedKey) => new Promise(resolve => shardQuery(shardedKey, pageKey).then(_ref2 => {
|
|
158
158
|
let {
|
|
159
159
|
items,
|
|
160
160
|
pageKey
|
|
161
161
|
} = _ref2;
|
|
162
|
+
console.log('shardQueryResult', {
|
|
163
|
+
shardedKey,
|
|
164
|
+
items,
|
|
165
|
+
pageKey
|
|
166
|
+
});
|
|
162
167
|
return resolve({
|
|
163
168
|
shardedKey,
|
|
164
169
|
items,
|
|
165
170
|
pageKey
|
|
166
171
|
});
|
|
167
172
|
}))));
|
|
173
|
+
console.log('shardQueryResults', shardQueryResults);
|
|
168
174
|
|
|
169
175
|
// Reduce shardQueryResults into a single result.
|
|
170
176
|
const result = shardQueryResults.reduce((shardedQueryResult, _ref3) => {
|
|
@@ -175,8 +181,8 @@ class EntityManager {
|
|
|
175
181
|
} = _ref3;
|
|
176
182
|
return {
|
|
177
183
|
items: [...shardedQueryResult.items, ...items],
|
|
178
|
-
|
|
179
|
-
...shardedQueryResult.
|
|
184
|
+
pageKeys: {
|
|
185
|
+
...shardedQueryResult.pageKeys,
|
|
180
186
|
...((0, _isUndefined2.default)(pageKey) ? {} : {
|
|
181
187
|
[shardedKey]: pageKey
|
|
182
188
|
})
|
|
@@ -184,7 +190,7 @@ class EntityManager {
|
|
|
184
190
|
};
|
|
185
191
|
}, {
|
|
186
192
|
items: [],
|
|
187
|
-
|
|
193
|
+
pageKeys: {}
|
|
188
194
|
});
|
|
189
195
|
return result;
|
|
190
196
|
}
|
|
@@ -132,7 +132,7 @@ export class EntityManager {
|
|
|
132
132
|
/**
|
|
133
133
|
* @typedef {object} ShardedQueryResult
|
|
134
134
|
* @property {any[]} items - Query result array.
|
|
135
|
-
* @property {object}
|
|
135
|
+
* @property {object} pageKeys - Shard page keys.
|
|
136
136
|
*/
|
|
137
137
|
|
|
138
138
|
/**
|
|
@@ -142,41 +142,44 @@ export class EntityManager {
|
|
|
142
142
|
* @param {string} keyToken - Key token.
|
|
143
143
|
* @param {object} item - Entity item sufficiently populated to generate property keyToken.
|
|
144
144
|
* @param {ShardQueryFunction} shardQuery - Sharded query function.
|
|
145
|
-
* @param {object} [
|
|
145
|
+
* @param {object} [pageKeys] - Map of shard page keys.
|
|
146
146
|
* @returns {Promise<ShardedQueryResult>} Sharded query result.
|
|
147
147
|
*/
|
|
148
|
-
async query(entityToken, keyToken, item, shardQuery,
|
|
149
|
-
// Generate default
|
|
150
|
-
|
|
148
|
+
async query(entityToken, keyToken, item, shardQuery, pageKeys) {
|
|
149
|
+
// Generate default pageKeys if not provided
|
|
150
|
+
pageKeys ??= _.fromPairs(
|
|
151
151
|
this.getKeySpace(entityToken, keyToken, item).map((shardedKey) => [
|
|
152
152
|
shardedKey,
|
|
153
153
|
undefined,
|
|
154
154
|
])
|
|
155
155
|
);
|
|
156
156
|
|
|
157
|
-
// Query every shard in
|
|
157
|
+
// Query every shard in pageKeys.
|
|
158
158
|
const shardQueryResults = await Promise.all(
|
|
159
159
|
_.map(
|
|
160
|
-
|
|
160
|
+
pageKeys,
|
|
161
161
|
(pageKey, shardedKey) =>
|
|
162
162
|
new Promise((resolve) =>
|
|
163
|
-
shardQuery(shardedKey, pageKey).then(({ items, pageKey }) =>
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
shardQuery(shardedKey, pageKey).then(({ items, pageKey }) => {
|
|
164
|
+
console.log('shardQueryResult', { shardedKey, items, pageKey });
|
|
165
|
+
return resolve({ shardedKey, items, pageKey });
|
|
166
|
+
})
|
|
166
167
|
)
|
|
167
168
|
)
|
|
168
169
|
);
|
|
169
170
|
|
|
171
|
+
console.log('shardQueryResults', shardQueryResults);
|
|
172
|
+
|
|
170
173
|
// Reduce shardQueryResults into a single result.
|
|
171
174
|
const result = shardQueryResults.reduce(
|
|
172
175
|
(shardedQueryResult, { shardedKey, items, pageKey }) => ({
|
|
173
176
|
items: [...shardedQueryResult.items, ...items],
|
|
174
|
-
|
|
175
|
-
...shardedQueryResult.
|
|
177
|
+
pageKeys: {
|
|
178
|
+
...shardedQueryResult.pageKeys,
|
|
176
179
|
...(_.isUndefined(pageKey) ? {} : { [shardedKey]: pageKey }),
|
|
177
180
|
},
|
|
178
181
|
}),
|
|
179
|
-
{ items: [],
|
|
182
|
+
{ items: [], pageKeys: {} }
|
|
180
183
|
);
|
|
181
184
|
|
|
182
185
|
return result;
|