@karmaniverous/entity-manager 0.1.0 → 0.1.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.
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,15 +146,15 @@ 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
|
|
@@ -175,8 +175,8 @@ class EntityManager {
|
|
|
175
175
|
} = _ref3;
|
|
176
176
|
return {
|
|
177
177
|
items: [...shardedQueryResult.items, ...items],
|
|
178
|
-
|
|
179
|
-
...shardedQueryResult.
|
|
178
|
+
pageKeys: {
|
|
179
|
+
...shardedQueryResult.pageKeys,
|
|
180
180
|
...((0, _isUndefined2.default)(pageKey) ? {} : {
|
|
181
181
|
[shardedKey]: pageKey
|
|
182
182
|
})
|
|
@@ -184,7 +184,7 @@ class EntityManager {
|
|
|
184
184
|
};
|
|
185
185
|
}, {
|
|
186
186
|
items: [],
|
|
187
|
-
|
|
187
|
+
pageKeys: {}
|
|
188
188
|
});
|
|
189
189
|
return result;
|
|
190
190
|
}
|
|
@@ -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,22 +142,22 @@ 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
163
|
shardQuery(shardedKey, pageKey).then(({ items, pageKey }) =>
|
|
@@ -171,12 +171,12 @@ export class EntityManager {
|
|
|
171
171
|
const result = shardQueryResults.reduce(
|
|
172
172
|
(shardedQueryResult, { shardedKey, items, pageKey }) => ({
|
|
173
173
|
items: [...shardedQueryResult.items, ...items],
|
|
174
|
-
|
|
175
|
-
...shardedQueryResult.
|
|
174
|
+
pageKeys: {
|
|
175
|
+
...shardedQueryResult.pageKeys,
|
|
176
176
|
...(_.isUndefined(pageKey) ? {} : { [shardedKey]: pageKey }),
|
|
177
177
|
},
|
|
178
178
|
}),
|
|
179
|
-
{ items: [],
|
|
179
|
+
{ items: [], pageKeys: {} }
|
|
180
180
|
);
|
|
181
181
|
|
|
182
182
|
return result;
|