@karmaniverous/entity-manager 6.5.1 → 6.6.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.
@@ -44,29 +44,29 @@ class EntityManager {
44
44
  /**
45
45
  * Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object.
46
46
  *
47
- * @param item - {@link ItemMap | `ItemMap`} object.
48
47
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
48
+ * @param item - {@link ItemMap | `ItemMap`} object.
49
49
  * @param overwrite - Overwrite existing properties (default `false`).
50
50
  *
51
51
  * @returns Shallow clone of `item` with updated properties.
52
52
  *
53
53
  * @throws `Error` if `entityToken` is invalid.
54
54
  */
55
- addKeys(item, entityToken, overwrite = false) {
56
- return addKeys.addKeys(this, item, entityToken, overwrite);
55
+ addKeys(entityToken, item, overwrite = false) {
56
+ return addKeys.addKeys(this, entityToken, item, overwrite);
57
57
  }
58
58
  /**
59
59
  * Strips generated properties, hash key, and range key from an {@link ItemMap | `ItemMap`} object.
60
60
  *
61
- * @param item - {@link ItemMap | `ItemMap`} object.
62
61
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
62
+ * @param item - {@link ItemMap | `ItemMap`} object.
63
63
  *
64
64
  * @returns Shallow clone of `item` without generated properties, hash key or range key.
65
65
  *
66
66
  * @throws `Error` if `entityToken` is invalid.
67
67
  */
68
- removeKeys(item, entityToken) {
69
- return removeKeys.removeKeys(this, item, entityToken);
68
+ removeKeys(entityToken, item) {
69
+ return removeKeys.removeKeys(this, entityToken, item);
70
70
  }
71
71
  /**
72
72
  * Query a database entity across shards in a provider-generic fashion.
@@ -10,27 +10,27 @@ var validateEntityToken = require('./validateEntityToken.js');
10
10
  * Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object.
11
11
  *
12
12
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
13
- * @param item - {@link ItemMap | `ItemMap`} object.
14
13
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
14
+ * @param item - {@link ItemMap | `ItemMap`} object.
15
15
  * @param overwrite - Overwrite existing properties (default `false`).
16
16
  *
17
17
  * @returns Shallow clone of `item` with updated properties.
18
18
  *
19
19
  * @throws `Error` if `entityToken` is invalid.
20
20
  */
21
- function addKeys(entityManager, item, entityToken, overwrite = false) {
21
+ function addKeys(entityManager, entityToken, item, overwrite = false) {
22
22
  try {
23
23
  // Validate params.
24
24
  validateEntityToken.validateEntityToken(entityManager, entityToken);
25
25
  // Update hash key.
26
- let newItem = updateItemHashKey.updateItemHashKey(entityManager, item, entityToken, overwrite);
26
+ let newItem = updateItemHashKey.updateItemHashKey(entityManager, entityToken, item, overwrite);
27
27
  // Update range key.
28
- newItem = updateItemRangeKey.updateItemRangeKey(entityManager, newItem, entityToken, overwrite);
28
+ newItem = updateItemRangeKey.updateItemRangeKey(entityManager, entityToken, newItem, overwrite);
29
29
  // Update generated properties.
30
30
  for (const property in entityManager.config.entities[entityToken]
31
31
  .generated) {
32
32
  if (overwrite || entityTools.isNil(item[property])) {
33
- const encoded = encodeGeneratedProperty.encodeGeneratedProperty(entityManager, newItem, entityToken, property);
33
+ const encoded = encodeGeneratedProperty.encodeGeneratedProperty(entityManager, entityToken, property, newItem);
34
34
  if (encoded)
35
35
  Object.assign(newItem, { [property]: encoded });
36
36
  else
@@ -10,15 +10,15 @@ var validateEntityToken = require('./validateEntityToken.js');
10
10
  * If `element` is the {@link Config.hashKey | `hashKey`} or {@link Config.rangeKey | `rangeKey`}, returns the value as-is.
11
11
  *
12
12
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
13
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
14
13
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
15
14
  * @param element - The {@link Entity | `Entity`} generated property element or ungenerated index component to encode.
15
+ * @param value - Encoded entity element.
16
16
  *
17
17
  * @returns Decoded value.
18
18
  *
19
19
  * @throws `Error` if `entityToken` is invalid.
20
20
  */
21
- function decodeEntityElement(entityManager, value, entityToken, element) {
21
+ function decodeEntityElement(entityManager, entityToken, element, value) {
22
22
  try {
23
23
  validateEntityToken.validateEntityToken(entityManager, entityToken);
24
24
  const { entities, hashKey, rangeKey, transcodes } = entityManager.config;
@@ -28,9 +28,9 @@ function decodeEntityElement(entityManager, value, entityToken, element) {
28
28
  return value;
29
29
  const decoded = transcodes[entities[entityToken].elementTranscodes[element]].decode(value);
30
30
  entityManager.logger.debug('decoded entity element', {
31
- value,
32
31
  entityToken,
33
32
  element,
33
+ value,
34
34
  decoded,
35
35
  });
36
36
  return decoded;
@@ -38,9 +38,9 @@ function decodeEntityElement(entityManager, value, entityToken, element) {
38
38
  catch (error) {
39
39
  if (error instanceof Error)
40
40
  entityManager.logger.error(error.message, {
41
- value,
42
41
  entityToken,
43
42
  element,
43
+ value,
44
44
  });
45
45
  throw error;
46
46
  }
@@ -8,14 +8,14 @@ var validateEntityToken = require('./validateEntityToken.js');
8
8
  * Decode a generated property value. Returns a partial ItemMap.
9
9
  *
10
10
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
11
- * @param encoded - Encoded generated property value.
12
11
  * @param entityToken - `entityManager.config.entities` key.
12
+ * @param encoded - Encoded generated property value.
13
13
  *
14
14
  * @returns Partial {@link ItemMap | `ItemMap`} object with updated properties decoded from `encoded`.
15
15
  *
16
16
  * @throws `Error` if `entityToken` is invalid.
17
17
  */
18
- function decodeGeneratedProperty(entityManager, encoded, entityToken) {
18
+ function decodeGeneratedProperty(entityManager, entityToken, encoded) {
19
19
  try {
20
20
  const { generatedKeyDelimiter, generatedValueDelimiter, hashKey, shardKeyDelimiter, } = entityManager.config;
21
21
  // Validate params.
@@ -37,17 +37,17 @@ function decodeGeneratedProperty(entityManager, encoded, entityToken) {
37
37
  return pair;
38
38
  });
39
39
  // Assign decoded properties.
40
- Object.assign(decoded, radash.objectify(values, ([key]) => key, ([key, value]) => decodeEntityElement.decodeEntityElement(entityManager, value, entityToken, key)));
40
+ Object.assign(decoded, radash.objectify(values, ([key]) => key, ([key, value]) => decodeEntityElement.decodeEntityElement(entityManager, entityToken, key, value)));
41
41
  entityManager.logger.debug('decoded generated property', {
42
- encoded,
43
42
  entityToken,
43
+ encoded,
44
44
  decoded,
45
45
  });
46
46
  return decoded;
47
47
  }
48
48
  catch (error) {
49
49
  if (error instanceof Error)
50
- entityManager.logger.error(error.message, { encoded, entityToken });
50
+ entityManager.logger.error(error.message, { entityToken, encoded });
51
51
  throw error;
52
52
  }
53
53
  }
@@ -18,9 +18,9 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
18
18
  * `item` must be populated with all required index component elements!
19
19
  *
20
20
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
21
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
22
21
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
23
22
  * @param indexToken - {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} key.
23
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
24
24
  * @param omit - Array of index components to omit from the output value.
25
25
  *
26
26
  * @returns Dehydrated index value.
@@ -28,7 +28,7 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
28
28
  * @throws `Error` if `entityToken` is invalid.
29
29
  * @throws `Error` if `indexToken` is invalid.
30
30
  */
31
- function dehydrateIndexItem(entityManager, item, entityToken, indexToken, omit = []) {
31
+ function dehydrateIndexItem(entityManager, entityToken, indexToken, item, omit = []) {
32
32
  try {
33
33
  const { generatedKeyDelimiter } = entityManager.config;
34
34
  // Validate params.
@@ -40,7 +40,7 @@ function dehydrateIndexItem(entityManager, item, entityToken, indexToken, omit =
40
40
  const elements = unwrapIndex.unwrapIndex(entityManager, entityToken, indexToken).filter((element) => !omit.includes(element));
41
41
  // Join index element values.
42
42
  const dehydrated = elements
43
- .map((element) => encodeEntityElement.encodeEntityElement(entityManager, item, entityToken, element))
43
+ .map((element) => encodeEntityElement.encodeEntityElement(entityManager, entityToken, element, item))
44
44
  .join(generatedKeyDelimiter);
45
45
  entityManager.logger.debug('dehydrated index', {
46
46
  item,
@@ -11,8 +11,8 @@ var validateEntityToken = require('./validateEntityToken.js');
11
11
  * Reverses {@link EntityManager.rehydratePageKeyMap | `rehydratePageKeyMap`}.
12
12
  *
13
13
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
14
- * @param pageKeyMap - {@link PageKeyMap | `PageKeyMap`} object to dehydrate.
15
14
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
15
+ * @param pageKeyMap - {@link PageKeyMap | `PageKeyMap`} object to dehydrate.
16
16
  *
17
17
  * @returns Array of dehydrated page keys.
18
18
  *
@@ -24,7 +24,7 @@ var validateEntityToken = require('./validateEntityToken.js');
24
24
  *
25
25
  * An empty returned array indicates all page keys are `undefined`.
26
26
  */
27
- function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
27
+ function dehydratePageKeyMap(entityManager, entityToken, pageKeyMap) {
28
28
  try {
29
29
  // Validate params.
30
30
  validateEntityToken.validateEntityToken(entityManager, entityToken);
@@ -32,8 +32,8 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
32
32
  if (!Object.keys(pageKeyMap).length) {
33
33
  const dehydrated = [];
34
34
  entityManager.logger.debug('dehydrated empty page key map', {
35
- pageKeyMap,
36
35
  entityToken,
36
+ pageKeyMap,
37
37
  dehydrated,
38
38
  });
39
39
  return dehydrated;
@@ -56,13 +56,13 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
56
56
  const item = Object.entries(pageKeyMap[index][hashKey]).reduce((item, [property, value]) => {
57
57
  if (property in entityManager.config.entities[entityToken].generated ||
58
58
  property === entityManager.config.rangeKey)
59
- Object.assign(item, decodeGeneratedProperty.decodeGeneratedProperty(entityManager, value, entityToken));
59
+ Object.assign(item, decodeGeneratedProperty.decodeGeneratedProperty(entityManager, entityToken, value));
60
60
  else
61
61
  Object.assign(item, { [property]: value });
62
62
  return item;
63
63
  }, {});
64
64
  // Dehydrate index from item.
65
- dehydrated.push(dehydrateIndexItem.dehydrateIndexItem(entityManager, item, entityToken, index, [
65
+ dehydrated.push(dehydrateIndexItem.dehydrateIndexItem(entityManager, entityToken, index, item, [
66
66
  entityManager.config.hashKey,
67
67
  ]));
68
68
  }
@@ -71,8 +71,8 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
71
71
  if (dehydrated.every((pageKey) => pageKey === ''))
72
72
  dehydrated = [];
73
73
  entityManager.logger.debug('dehydrated page key map', {
74
- pageKeyMap,
75
74
  entityToken,
75
+ pageKeyMap,
76
76
  indexes,
77
77
  hashKeys,
78
78
  dehydrated,
@@ -10,15 +10,15 @@ var validateEntityToken = require('./validateEntityToken.js');
10
10
  * If `element` is the {@link Config.hashKey | `hashKey`} or {@link Config.rangeKey | `rangeKey`}, returns the value as-is.
11
11
  *
12
12
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
13
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
14
13
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
15
14
  * @param element - The {@link Entity | `Entity`} generated property element or ungenerated index component to encode.
15
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
16
16
  *
17
17
  * @returns Encoded value.
18
18
  *
19
19
  * @throws `Error` if `entityToken` is invalid.
20
20
  */
21
- function encodeEntityElement(entityManager, item, entityToken, element) {
21
+ function encodeEntityElement(entityManager, entityToken, element, item) {
22
22
  try {
23
23
  validateEntityToken.validateEntityToken(entityManager, entityToken);
24
24
  const { entities, hashKey, rangeKey, transcodes } = entityManager.config;
@@ -27,16 +27,16 @@ function encodeEntityElement(entityManager, item, entityToken, element) {
27
27
  return value;
28
28
  const encoded = transcodes[entities[entityToken].elementTranscodes[element]].encode(item[element]) || undefined;
29
29
  entityManager.logger.debug('encoded entity element', {
30
- item,
31
30
  entityToken,
32
31
  element,
32
+ item,
33
33
  encoded,
34
34
  });
35
35
  return encoded;
36
36
  }
37
37
  catch (error) {
38
38
  if (error instanceof Error)
39
- entityManager.logger.error(error.message, { item, entityToken, element });
39
+ entityManager.logger.error(error.message, { entityToken, element, item });
40
40
  throw error;
41
41
  }
42
42
  }
@@ -7,16 +7,16 @@ var validateEntityGeneratedProperty = require('./validateEntityGeneratedProperty
7
7
  * Encode a generated property value. Returns a string or undefined if atomicity requirement not met.
8
8
  *
9
9
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
10
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
11
10
  * @param entityToken - `entityManager.config.entities` key.
12
11
  * @param property - {@link ConfigEntityGenerated | `entityManager.config.entities.<entityToken>.generated`} key.
12
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
13
13
  *
14
14
  * @returns Encoded generated property value.
15
15
  *
16
16
  * @throws `Error` if `entityToken` is invalid.
17
17
  * @throws `Error` if `property` is invalid.
18
18
  */
19
- function encodeGeneratedProperty(entityManager, item, entityToken, property) {
19
+ function encodeGeneratedProperty(entityManager, entityToken, property, item) {
20
20
  try {
21
21
  // Validate params.
22
22
  validateEntityGeneratedProperty.validateEntityGeneratedProperty(entityManager, entityToken, property);
@@ -35,9 +35,9 @@ function encodeGeneratedProperty(entityManager, item, entityToken, property) {
35
35
  ...elementMap.map(([element, value]) => [element, (value ?? '').toString()].join(entityManager.config.generatedValueDelimiter)),
36
36
  ].join(entityManager.config.generatedKeyDelimiter);
37
37
  entityManager.logger.debug('encoded generated property', {
38
- item,
39
38
  entityToken,
40
39
  property,
40
+ item,
41
41
  encoded,
42
42
  });
43
43
  return encoded;
@@ -45,9 +45,9 @@ function encodeGeneratedProperty(entityManager, item, entityToken, property) {
45
45
  catch (error) {
46
46
  if (error instanceof Error)
47
47
  entityManager.logger.error(error.message, {
48
- item,
49
48
  entityToken,
50
49
  property,
50
+ item,
51
51
  });
52
52
  throw error;
53
53
  }
package/dist/cjs/query.js CHANGED
@@ -40,9 +40,9 @@ async function query(entityManager, { entityToken, hashKey, limit, pageKeyMap, p
40
40
  if (!(radash.isInt(pageSize) && pageSize >= 1))
41
41
  throw new Error('pageSize must be a positive integer');
42
42
  // Rehydrate pageKeyMap.
43
- const rehydratedPageKeyMap = rehydratePageKeyMap.rehydratePageKeyMap(entityManager, pageKeyMap
43
+ const rehydratedPageKeyMap = rehydratePageKeyMap.rehydratePageKeyMap(entityManager, entityToken, Object.keys(shardQueryMap), pageKeyMap
44
44
  ? JSON.parse(decompressFromEncodedURIComponent(pageKeyMap))
45
- : undefined, entityToken, Object.keys(shardQueryMap), timestampFrom, timestampTo);
45
+ : undefined, timestampFrom, timestampTo);
46
46
  // Shortcut if pageKeyMap is empty.
47
47
  if (!Object.keys(rehydratedPageKeyMap).length)
48
48
  return {
@@ -90,7 +90,7 @@ async function query(entityManager, { entityToken, hashKey, limit, pageKeyMap, p
90
90
  const result = {
91
91
  count: workingResult.items.length,
92
92
  items: workingResult.items,
93
- pageKeyMap: compressToEncodedURIComponent(JSON.stringify(dehydratePageKeyMap.dehydratePageKeyMap(entityManager, workingResult.pageKeyMap, entityToken))),
93
+ pageKeyMap: compressToEncodedURIComponent(JSON.stringify(dehydratePageKeyMap.dehydratePageKeyMap(entityManager, entityToken, workingResult.pageKeyMap))),
94
94
  };
95
95
  entityManager.logger.debug('queried entityToken across shards', {
96
96
  entityToken,
@@ -14,9 +14,9 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
14
14
  * {@link EntityManager.dehydrateIndexItem | `dehydrateIndexItem`} alphebetically sorts unwrapped index elements during the dehydration process. This method assumes delimited element values are presented in the same order.
15
15
  *
16
16
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
17
- * @param dehydrated - Dehydrated index value.
18
17
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
19
18
  * @param indexToken - {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} key.
19
+ * @param dehydrated - Dehydrated index value.
20
20
  * @param omit - Array of index components omitted from `dehydrated`.
21
21
  *
22
22
  * @returns Partial {@link ItemMap | `ItemMap`} object containing rehydrated index component elements.
@@ -24,7 +24,7 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
24
24
  * @throws `Error` if `entityToken` is invalid.
25
25
  * @throws `Error` if `indexToken` is invalid.
26
26
  */
27
- function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken, omit = []) {
27
+ function rehydrateIndexItem(entityManager, entityToken, indexToken, dehydrated, omit = []) {
28
28
  try {
29
29
  const { generatedKeyDelimiter } = entityManager.config;
30
30
  // Validate params.
@@ -36,11 +36,11 @@ function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken,
36
36
  if (elements.length !== values.length)
37
37
  throw new Error('index rehydration key-value mismatch');
38
38
  // Assign values to elements.
39
- const rehydrated = radash.shake(radash.zipToObject(elements, values.map((value, i) => decodeEntityElement.decodeEntityElement(entityManager, value, entityToken, elements[i]))));
39
+ const rehydrated = radash.shake(radash.zipToObject(elements, values.map((value, i) => decodeEntityElement.decodeEntityElement(entityManager, entityToken, elements[i], value))));
40
40
  entityManager.logger.debug('rehydrated index', {
41
- dehydrated,
42
41
  entityToken,
43
42
  indexToken,
43
+ dehydrated,
44
44
  elements,
45
45
  values,
46
46
  rehydrated,
@@ -50,9 +50,9 @@ function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken,
50
50
  catch (error) {
51
51
  if (error instanceof Error)
52
52
  entityManager.logger.error(error.message, {
53
- dehydrated,
54
53
  entityToken,
55
54
  indexToken,
55
+ dehydrated,
56
56
  });
57
57
  throw error;
58
58
  }
@@ -14,9 +14,9 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
14
14
  * Reverses the {@link EntityManager.dehydratePageKeyMap | `dehydratePageKeyMap`} method.
15
15
  *
16
16
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
17
- * @param dehydrated - Array of dehydrated page keys or undefined if new query.
18
17
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
19
18
  * @param indexTokens - Array of {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} keys used as keys of the original {@link PageKeyMap | `PageKeyMap`}.
19
+ * @param dehydrated - Array of dehydrated page keys or undefined if new query.
20
20
  * @param timestampFrom - Lower timestanp limit used to generate the original {@link PageKeyMap | `PageKeyMap`}. Defaults to `0`.
21
21
  * @param timestampTo - Upper timestamp limit used to generate the original {@link PageKeyMap | `PageKeyMap`}. Defaults to `Date.now()`.
22
22
  *
@@ -27,7 +27,7 @@ var validateEntityIndexToken = require('./validateEntityIndexToken.js');
27
27
  * @throws `Error` if any `indexTokens` are invalid.
28
28
  * @throws `Error` if `dehydrated` has invalid length.
29
29
  */
30
- function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens, timestampFrom = 0, timestampTo = Date.now()) {
30
+ function rehydratePageKeyMap(entityManager, entityToken, indexTokens, dehydrated, timestampFrom = 0, timestampTo = Date.now()) {
31
31
  try {
32
32
  // Validate params.
33
33
  if (!indexTokens.length)
@@ -49,17 +49,17 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
49
49
  return;
50
50
  let item = {
51
51
  [entityManager.config.hashKey]: hashKey,
52
- ...rehydrateIndexItem.rehydrateIndexItem(entityManager, dehydratedIndexPageKeyMaps[i], entityToken, index, [entityManager.config.hashKey]),
52
+ ...rehydrateIndexItem.rehydrateIndexItem(entityManager, entityToken, index, dehydratedIndexPageKeyMaps[i], [entityManager.config.hashKey]),
53
53
  };
54
- item = updateItemRangeKey.updateItemRangeKey(entityManager, item, entityToken);
54
+ item = updateItemRangeKey.updateItemRangeKey(entityManager, entityToken, item);
55
55
  return radash.zipToObject(getIndexComponents.getIndexComponents(entityManager, entityToken, index), (component) => entityManager.config.entities[entityToken].generated[component]
56
- ? encodeGeneratedProperty.encodeGeneratedProperty(entityManager, item, entityToken, component)
56
+ ? encodeGeneratedProperty.encodeGeneratedProperty(entityManager, entityToken, component, item)
57
57
  : item[component]);
58
58
  }));
59
59
  entityManager.logger.debug('rehydrated page key map', {
60
- dehydrated,
61
60
  entityToken,
62
61
  indexTokens,
62
+ dehydrated,
63
63
  rehydrated,
64
64
  });
65
65
  return rehydrated;
@@ -67,9 +67,9 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
67
67
  catch (error) {
68
68
  if (error instanceof Error)
69
69
  entityManager.logger.error(error.message, {
70
- dehydrated,
71
70
  entityToken,
72
71
  indexTokens,
72
+ dehydrated,
73
73
  });
74
74
  throw error;
75
75
  }
@@ -6,14 +6,14 @@ var validateEntityToken = require('./validateEntityToken.js');
6
6
  * Strips generated properties, hash key, and range key from an {@link ItemMap | `ItemMap`} object.
7
7
  *
8
8
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
9
- * @param item - {@link ItemMap | `ItemMap`} object.
10
9
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
10
+ * @param item - {@link ItemMap | `ItemMap`} object.
11
11
  *
12
12
  * @returns Shallow clone of `item` without generated properties, hash key or range key.
13
13
  *
14
14
  * @throws `Error` if `entityToken` is invalid.
15
15
  */
16
- function removeKeys(entityManager, item, entityToken) {
16
+ function removeKeys(entityManager, entityToken, item) {
17
17
  try {
18
18
  // Validate params.
19
19
  validateEntityToken.validateEntityToken(entityManager, entityToken);
@@ -25,15 +25,15 @@ function removeKeys(entityManager, item, entityToken) {
25
25
  for (const property in entityManager.config.entities[entityToken].generated)
26
26
  delete newItem[property];
27
27
  entityManager.logger.debug('stripped entity item generated properties', {
28
- item,
29
28
  entityToken,
29
+ item,
30
30
  newItem,
31
31
  });
32
32
  return newItem;
33
33
  }
34
34
  catch (error) {
35
35
  if (error instanceof Error)
36
- entityManager.logger.error(error.message, { item, entityToken });
36
+ entityManager.logger.error(error.message, { entityToken, item });
37
37
  throw error;
38
38
  }
39
39
  }
@@ -9,15 +9,15 @@ var validateEntityToken = require('./validateEntityToken.js');
9
9
  * Update the hash key on a partial {@link ItemMap | `ItemMap`} object.
10
10
  *
11
11
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
12
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
13
12
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
13
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
14
14
  * @param overwrite - Overwrite existing {@link ConfigKeys.hashKey | `this.config.hashKey`} property value (default `false`).
15
15
  *
16
16
  * @returns Shallow clone of `item` with updated hash key.
17
17
  *
18
18
  * @throws `Error` if `entityToken` is invalid.
19
19
  */
20
- function updateItemHashKey(entityManager, item, entityToken, overwrite = false) {
20
+ function updateItemHashKey(entityManager, entityToken, item, overwrite = false) {
21
21
  try {
22
22
  // Validate params.
23
23
  validateEntityToken.validateEntityToken(entityManager, entityToken);
@@ -61,8 +61,8 @@ function updateItemHashKey(entityManager, item, entityToken, overwrite = false)
61
61
  catch (error) {
62
62
  if (error instanceof Error)
63
63
  entityManager.logger.error(error.message, {
64
- item,
65
64
  entityToken,
65
+ item,
66
66
  overwrite,
67
67
  });
68
68
  throw error;
@@ -7,8 +7,8 @@ var validateEntityToken = require('./validateEntityToken.js');
7
7
  * Update the range key on a partial {@link ItemMap | `ItemMap`} object.
8
8
  *
9
9
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
10
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
11
10
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
11
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
12
12
  * @param overwrite - Overwrite existing {@link ConfigKeys.rangeKey | `this.config.rangeKey`} property value (default `false`).
13
13
  *
14
14
  * @returns Shallow clone of `item` with updated range key.
@@ -16,15 +16,15 @@ var validateEntityToken = require('./validateEntityToken.js');
16
16
  * @throws `Error` if `entityToken` is invalid.
17
17
  * @throws `Error` if `item` {@link ConfigEntity.uniqueProperty | `this.config.entities<entityToken>.uniqueProperty`} property value is missing.
18
18
  */
19
- function updateItemRangeKey(entityManager, item, entityToken, overwrite = false) {
19
+ function updateItemRangeKey(entityManager, entityToken, item, overwrite = false) {
20
20
  try {
21
21
  // Validate params.
22
22
  validateEntityToken.validateEntityToken(entityManager, entityToken);
23
23
  // Return current item if rangeKey exists and overwrite is false.
24
24
  if (item[entityManager.config.rangeKey] && !overwrite) {
25
25
  entityManager.logger.debug('did not overwrite existing entity item range key', {
26
- item,
27
26
  entityToken,
27
+ item,
28
28
  overwrite,
29
29
  });
30
30
  return { ...item };
@@ -51,8 +51,8 @@ function updateItemRangeKey(entityManager, item, entityToken, overwrite = false)
51
51
  catch (error) {
52
52
  if (error instanceof Error)
53
53
  entityManager.logger.error(error.message, {
54
- item,
55
54
  entityToken,
55
+ item,
56
56
  overwrite,
57
57
  });
58
58
  throw error;
package/dist/index.d.ts CHANGED
@@ -81,7 +81,7 @@ interface ShardBump {
81
81
  chars: number;
82
82
  }
83
83
  /**
84
- * Returns a Config entity index components type.
84
+ * Returns a Config entity index component type.
85
85
  *
86
86
  * @typeParam EntityToken - The {@link Entity | `Entity`} token.
87
87
  * @typeParam M - The {@link EntityMap | `EntityMap`}.
@@ -848,26 +848,26 @@ declare class EntityManager<M extends EntityMap, HashKey extends string, RangeKe
848
848
  /**
849
849
  * Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object.
850
850
  *
851
- * @param item - {@link ItemMap | `ItemMap`} object.
852
851
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
852
+ * @param item - {@link ItemMap | `ItemMap`} object.
853
853
  * @param overwrite - Overwrite existing properties (default `false`).
854
854
  *
855
855
  * @returns Shallow clone of `item` with updated properties.
856
856
  *
857
857
  * @throws `Error` if `entityToken` is invalid.
858
858
  */
859
- addKeys<Item extends ItemMap<M, HashKey, RangeKey>[EntityToken], EntityToken extends keyof Exactify<M> & string>(item: Partial<Item>, entityToken: EntityToken, overwrite?: boolean): Partial<Item>;
859
+ addKeys<Item extends ItemMap<M, HashKey, RangeKey>[EntityToken], EntityToken extends keyof Exactify<M> & string>(entityToken: EntityToken, item: Partial<Item>, overwrite?: boolean): Partial<Item>;
860
860
  /**
861
861
  * Strips generated properties, hash key, and range key from an {@link ItemMap | `ItemMap`} object.
862
862
  *
863
- * @param item - {@link ItemMap | `ItemMap`} object.
864
863
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
864
+ * @param item - {@link ItemMap | `ItemMap`} object.
865
865
  *
866
866
  * @returns Shallow clone of `item` without generated properties, hash key or range key.
867
867
  *
868
868
  * @throws `Error` if `entityToken` is invalid.
869
869
  */
870
- removeKeys<Item extends ItemMap<M, HashKey, RangeKey>[EntityToken], EntityToken extends keyof Exactify<M> & string>(item: Partial<Item>, entityToken: EntityToken): Partial<Item>;
870
+ removeKeys<Item extends ItemMap<M, HashKey, RangeKey>[EntityToken], EntityToken extends keyof Exactify<M> & string>(entityToken: EntityToken, item: Partial<Item>): Partial<Item>;
871
871
  /**
872
872
  * Query a database entity across shards in a provider-generic fashion.
873
873
  *
@@ -42,29 +42,29 @@ class EntityManager {
42
42
  /**
43
43
  * Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object.
44
44
  *
45
- * @param item - {@link ItemMap | `ItemMap`} object.
46
45
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
46
+ * @param item - {@link ItemMap | `ItemMap`} object.
47
47
  * @param overwrite - Overwrite existing properties (default `false`).
48
48
  *
49
49
  * @returns Shallow clone of `item` with updated properties.
50
50
  *
51
51
  * @throws `Error` if `entityToken` is invalid.
52
52
  */
53
- addKeys(item, entityToken, overwrite = false) {
54
- return addKeys(this, item, entityToken, overwrite);
53
+ addKeys(entityToken, item, overwrite = false) {
54
+ return addKeys(this, entityToken, item, overwrite);
55
55
  }
56
56
  /**
57
57
  * Strips generated properties, hash key, and range key from an {@link ItemMap | `ItemMap`} object.
58
58
  *
59
- * @param item - {@link ItemMap | `ItemMap`} object.
60
59
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
60
+ * @param item - {@link ItemMap | `ItemMap`} object.
61
61
  *
62
62
  * @returns Shallow clone of `item` without generated properties, hash key or range key.
63
63
  *
64
64
  * @throws `Error` if `entityToken` is invalid.
65
65
  */
66
- removeKeys(item, entityToken) {
67
- return removeKeys(this, item, entityToken);
66
+ removeKeys(entityToken, item) {
67
+ return removeKeys(this, entityToken, item);
68
68
  }
69
69
  /**
70
70
  * Query a database entity across shards in a provider-generic fashion.
@@ -8,27 +8,27 @@ import { validateEntityToken } from './validateEntityToken.js';
8
8
  * Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object.
9
9
  *
10
10
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
11
- * @param item - {@link ItemMap | `ItemMap`} object.
12
11
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
12
+ * @param item - {@link ItemMap | `ItemMap`} object.
13
13
  * @param overwrite - Overwrite existing properties (default `false`).
14
14
  *
15
15
  * @returns Shallow clone of `item` with updated properties.
16
16
  *
17
17
  * @throws `Error` if `entityToken` is invalid.
18
18
  */
19
- function addKeys(entityManager, item, entityToken, overwrite = false) {
19
+ function addKeys(entityManager, entityToken, item, overwrite = false) {
20
20
  try {
21
21
  // Validate params.
22
22
  validateEntityToken(entityManager, entityToken);
23
23
  // Update hash key.
24
- let newItem = updateItemHashKey(entityManager, item, entityToken, overwrite);
24
+ let newItem = updateItemHashKey(entityManager, entityToken, item, overwrite);
25
25
  // Update range key.
26
- newItem = updateItemRangeKey(entityManager, newItem, entityToken, overwrite);
26
+ newItem = updateItemRangeKey(entityManager, entityToken, newItem, overwrite);
27
27
  // Update generated properties.
28
28
  for (const property in entityManager.config.entities[entityToken]
29
29
  .generated) {
30
30
  if (overwrite || isNil(item[property])) {
31
- const encoded = encodeGeneratedProperty(entityManager, newItem, entityToken, property);
31
+ const encoded = encodeGeneratedProperty(entityManager, entityToken, property, newItem);
32
32
  if (encoded)
33
33
  Object.assign(newItem, { [property]: encoded });
34
34
  else
@@ -8,15 +8,15 @@ import { validateEntityToken } from './validateEntityToken.js';
8
8
  * If `element` is the {@link Config.hashKey | `hashKey`} or {@link Config.rangeKey | `rangeKey`}, returns the value as-is.
9
9
  *
10
10
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
11
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
12
11
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
13
12
  * @param element - The {@link Entity | `Entity`} generated property element or ungenerated index component to encode.
13
+ * @param value - Encoded entity element.
14
14
  *
15
15
  * @returns Decoded value.
16
16
  *
17
17
  * @throws `Error` if `entityToken` is invalid.
18
18
  */
19
- function decodeEntityElement(entityManager, value, entityToken, element) {
19
+ function decodeEntityElement(entityManager, entityToken, element, value) {
20
20
  try {
21
21
  validateEntityToken(entityManager, entityToken);
22
22
  const { entities, hashKey, rangeKey, transcodes } = entityManager.config;
@@ -26,9 +26,9 @@ function decodeEntityElement(entityManager, value, entityToken, element) {
26
26
  return value;
27
27
  const decoded = transcodes[entities[entityToken].elementTranscodes[element]].decode(value);
28
28
  entityManager.logger.debug('decoded entity element', {
29
- value,
30
29
  entityToken,
31
30
  element,
31
+ value,
32
32
  decoded,
33
33
  });
34
34
  return decoded;
@@ -36,9 +36,9 @@ function decodeEntityElement(entityManager, value, entityToken, element) {
36
36
  catch (error) {
37
37
  if (error instanceof Error)
38
38
  entityManager.logger.error(error.message, {
39
- value,
40
39
  entityToken,
41
40
  element,
41
+ value,
42
42
  });
43
43
  throw error;
44
44
  }
@@ -6,14 +6,14 @@ import { validateEntityToken } from './validateEntityToken.js';
6
6
  * Decode a generated property value. Returns a partial ItemMap.
7
7
  *
8
8
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
9
- * @param encoded - Encoded generated property value.
10
9
  * @param entityToken - `entityManager.config.entities` key.
10
+ * @param encoded - Encoded generated property value.
11
11
  *
12
12
  * @returns Partial {@link ItemMap | `ItemMap`} object with updated properties decoded from `encoded`.
13
13
  *
14
14
  * @throws `Error` if `entityToken` is invalid.
15
15
  */
16
- function decodeGeneratedProperty(entityManager, encoded, entityToken) {
16
+ function decodeGeneratedProperty(entityManager, entityToken, encoded) {
17
17
  try {
18
18
  const { generatedKeyDelimiter, generatedValueDelimiter, hashKey, shardKeyDelimiter, } = entityManager.config;
19
19
  // Validate params.
@@ -35,17 +35,17 @@ function decodeGeneratedProperty(entityManager, encoded, entityToken) {
35
35
  return pair;
36
36
  });
37
37
  // Assign decoded properties.
38
- Object.assign(decoded, objectify(values, ([key]) => key, ([key, value]) => decodeEntityElement(entityManager, value, entityToken, key)));
38
+ Object.assign(decoded, objectify(values, ([key]) => key, ([key, value]) => decodeEntityElement(entityManager, entityToken, key, value)));
39
39
  entityManager.logger.debug('decoded generated property', {
40
- encoded,
41
40
  entityToken,
41
+ encoded,
42
42
  decoded,
43
43
  });
44
44
  return decoded;
45
45
  }
46
46
  catch (error) {
47
47
  if (error instanceof Error)
48
- entityManager.logger.error(error.message, { encoded, entityToken });
48
+ entityManager.logger.error(error.message, { entityToken, encoded });
49
49
  throw error;
50
50
  }
51
51
  }
@@ -16,9 +16,9 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
16
16
  * `item` must be populated with all required index component elements!
17
17
  *
18
18
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
19
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
20
19
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
21
20
  * @param indexToken - {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} key.
21
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
22
22
  * @param omit - Array of index components to omit from the output value.
23
23
  *
24
24
  * @returns Dehydrated index value.
@@ -26,7 +26,7 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
26
26
  * @throws `Error` if `entityToken` is invalid.
27
27
  * @throws `Error` if `indexToken` is invalid.
28
28
  */
29
- function dehydrateIndexItem(entityManager, item, entityToken, indexToken, omit = []) {
29
+ function dehydrateIndexItem(entityManager, entityToken, indexToken, item, omit = []) {
30
30
  try {
31
31
  const { generatedKeyDelimiter } = entityManager.config;
32
32
  // Validate params.
@@ -38,7 +38,7 @@ function dehydrateIndexItem(entityManager, item, entityToken, indexToken, omit =
38
38
  const elements = unwrapIndex(entityManager, entityToken, indexToken).filter((element) => !omit.includes(element));
39
39
  // Join index element values.
40
40
  const dehydrated = elements
41
- .map((element) => encodeEntityElement(entityManager, item, entityToken, element))
41
+ .map((element) => encodeEntityElement(entityManager, entityToken, element, item))
42
42
  .join(generatedKeyDelimiter);
43
43
  entityManager.logger.debug('dehydrated index', {
44
44
  item,
@@ -9,8 +9,8 @@ import { validateEntityToken } from './validateEntityToken.js';
9
9
  * Reverses {@link EntityManager.rehydratePageKeyMap | `rehydratePageKeyMap`}.
10
10
  *
11
11
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
12
- * @param pageKeyMap - {@link PageKeyMap | `PageKeyMap`} object to dehydrate.
13
12
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
13
+ * @param pageKeyMap - {@link PageKeyMap | `PageKeyMap`} object to dehydrate.
14
14
  *
15
15
  * @returns Array of dehydrated page keys.
16
16
  *
@@ -22,7 +22,7 @@ import { validateEntityToken } from './validateEntityToken.js';
22
22
  *
23
23
  * An empty returned array indicates all page keys are `undefined`.
24
24
  */
25
- function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
25
+ function dehydratePageKeyMap(entityManager, entityToken, pageKeyMap) {
26
26
  try {
27
27
  // Validate params.
28
28
  validateEntityToken(entityManager, entityToken);
@@ -30,8 +30,8 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
30
30
  if (!Object.keys(pageKeyMap).length) {
31
31
  const dehydrated = [];
32
32
  entityManager.logger.debug('dehydrated empty page key map', {
33
- pageKeyMap,
34
33
  entityToken,
34
+ pageKeyMap,
35
35
  dehydrated,
36
36
  });
37
37
  return dehydrated;
@@ -54,13 +54,13 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
54
54
  const item = Object.entries(pageKeyMap[index][hashKey]).reduce((item, [property, value]) => {
55
55
  if (property in entityManager.config.entities[entityToken].generated ||
56
56
  property === entityManager.config.rangeKey)
57
- Object.assign(item, decodeGeneratedProperty(entityManager, value, entityToken));
57
+ Object.assign(item, decodeGeneratedProperty(entityManager, entityToken, value));
58
58
  else
59
59
  Object.assign(item, { [property]: value });
60
60
  return item;
61
61
  }, {});
62
62
  // Dehydrate index from item.
63
- dehydrated.push(dehydrateIndexItem(entityManager, item, entityToken, index, [
63
+ dehydrated.push(dehydrateIndexItem(entityManager, entityToken, index, item, [
64
64
  entityManager.config.hashKey,
65
65
  ]));
66
66
  }
@@ -69,8 +69,8 @@ function dehydratePageKeyMap(entityManager, pageKeyMap, entityToken) {
69
69
  if (dehydrated.every((pageKey) => pageKey === ''))
70
70
  dehydrated = [];
71
71
  entityManager.logger.debug('dehydrated page key map', {
72
- pageKeyMap,
73
72
  entityToken,
73
+ pageKeyMap,
74
74
  indexes,
75
75
  hashKeys,
76
76
  dehydrated,
@@ -8,15 +8,15 @@ import { validateEntityToken } from './validateEntityToken.js';
8
8
  * If `element` is the {@link Config.hashKey | `hashKey`} or {@link Config.rangeKey | `rangeKey`}, returns the value as-is.
9
9
  *
10
10
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
11
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
12
11
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
13
12
  * @param element - The {@link Entity | `Entity`} generated property element or ungenerated index component to encode.
13
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
14
14
  *
15
15
  * @returns Encoded value.
16
16
  *
17
17
  * @throws `Error` if `entityToken` is invalid.
18
18
  */
19
- function encodeEntityElement(entityManager, item, entityToken, element) {
19
+ function encodeEntityElement(entityManager, entityToken, element, item) {
20
20
  try {
21
21
  validateEntityToken(entityManager, entityToken);
22
22
  const { entities, hashKey, rangeKey, transcodes } = entityManager.config;
@@ -25,16 +25,16 @@ function encodeEntityElement(entityManager, item, entityToken, element) {
25
25
  return value;
26
26
  const encoded = transcodes[entities[entityToken].elementTranscodes[element]].encode(item[element]) || undefined;
27
27
  entityManager.logger.debug('encoded entity element', {
28
- item,
29
28
  entityToken,
30
29
  element,
30
+ item,
31
31
  encoded,
32
32
  });
33
33
  return encoded;
34
34
  }
35
35
  catch (error) {
36
36
  if (error instanceof Error)
37
- entityManager.logger.error(error.message, { item, entityToken, element });
37
+ entityManager.logger.error(error.message, { entityToken, element, item });
38
38
  throw error;
39
39
  }
40
40
  }
@@ -5,16 +5,16 @@ import { validateEntityGeneratedProperty } from './validateEntityGeneratedProper
5
5
  * Encode a generated property value. Returns a string or undefined if atomicity requirement not met.
6
6
  *
7
7
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
8
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
9
8
  * @param entityToken - `entityManager.config.entities` key.
10
9
  * @param property - {@link ConfigEntityGenerated | `entityManager.config.entities.<entityToken>.generated`} key.
10
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
11
11
  *
12
12
  * @returns Encoded generated property value.
13
13
  *
14
14
  * @throws `Error` if `entityToken` is invalid.
15
15
  * @throws `Error` if `property` is invalid.
16
16
  */
17
- function encodeGeneratedProperty(entityManager, item, entityToken, property) {
17
+ function encodeGeneratedProperty(entityManager, entityToken, property, item) {
18
18
  try {
19
19
  // Validate params.
20
20
  validateEntityGeneratedProperty(entityManager, entityToken, property);
@@ -33,9 +33,9 @@ function encodeGeneratedProperty(entityManager, item, entityToken, property) {
33
33
  ...elementMap.map(([element, value]) => [element, (value ?? '').toString()].join(entityManager.config.generatedValueDelimiter)),
34
34
  ].join(entityManager.config.generatedKeyDelimiter);
35
35
  entityManager.logger.debug('encoded generated property', {
36
- item,
37
36
  entityToken,
38
37
  property,
38
+ item,
39
39
  encoded,
40
40
  });
41
41
  return encoded;
@@ -43,9 +43,9 @@ function encodeGeneratedProperty(entityManager, item, entityToken, property) {
43
43
  catch (error) {
44
44
  if (error instanceof Error)
45
45
  entityManager.logger.error(error.message, {
46
- item,
47
46
  entityToken,
48
47
  property,
48
+ item,
49
49
  });
50
50
  throw error;
51
51
  }
package/dist/mjs/query.js CHANGED
@@ -38,9 +38,9 @@ async function query(entityManager, { entityToken, hashKey, limit, pageKeyMap, p
38
38
  if (!(isInt(pageSize) && pageSize >= 1))
39
39
  throw new Error('pageSize must be a positive integer');
40
40
  // Rehydrate pageKeyMap.
41
- const rehydratedPageKeyMap = rehydratePageKeyMap(entityManager, pageKeyMap
41
+ const rehydratedPageKeyMap = rehydratePageKeyMap(entityManager, entityToken, Object.keys(shardQueryMap), pageKeyMap
42
42
  ? JSON.parse(decompressFromEncodedURIComponent(pageKeyMap))
43
- : undefined, entityToken, Object.keys(shardQueryMap), timestampFrom, timestampTo);
43
+ : undefined, timestampFrom, timestampTo);
44
44
  // Shortcut if pageKeyMap is empty.
45
45
  if (!Object.keys(rehydratedPageKeyMap).length)
46
46
  return {
@@ -88,7 +88,7 @@ async function query(entityManager, { entityToken, hashKey, limit, pageKeyMap, p
88
88
  const result = {
89
89
  count: workingResult.items.length,
90
90
  items: workingResult.items,
91
- pageKeyMap: compressToEncodedURIComponent(JSON.stringify(dehydratePageKeyMap(entityManager, workingResult.pageKeyMap, entityToken))),
91
+ pageKeyMap: compressToEncodedURIComponent(JSON.stringify(dehydratePageKeyMap(entityManager, entityToken, workingResult.pageKeyMap))),
92
92
  };
93
93
  entityManager.logger.debug('queried entityToken across shards', {
94
94
  entityToken,
@@ -12,9 +12,9 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
12
12
  * {@link EntityManager.dehydrateIndexItem | `dehydrateIndexItem`} alphebetically sorts unwrapped index elements during the dehydration process. This method assumes delimited element values are presented in the same order.
13
13
  *
14
14
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
15
- * @param dehydrated - Dehydrated index value.
16
15
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
17
16
  * @param indexToken - {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} key.
17
+ * @param dehydrated - Dehydrated index value.
18
18
  * @param omit - Array of index components omitted from `dehydrated`.
19
19
  *
20
20
  * @returns Partial {@link ItemMap | `ItemMap`} object containing rehydrated index component elements.
@@ -22,7 +22,7 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
22
22
  * @throws `Error` if `entityToken` is invalid.
23
23
  * @throws `Error` if `indexToken` is invalid.
24
24
  */
25
- function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken, omit = []) {
25
+ function rehydrateIndexItem(entityManager, entityToken, indexToken, dehydrated, omit = []) {
26
26
  try {
27
27
  const { generatedKeyDelimiter } = entityManager.config;
28
28
  // Validate params.
@@ -34,11 +34,11 @@ function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken,
34
34
  if (elements.length !== values.length)
35
35
  throw new Error('index rehydration key-value mismatch');
36
36
  // Assign values to elements.
37
- const rehydrated = shake(zipToObject(elements, values.map((value, i) => decodeEntityElement(entityManager, value, entityToken, elements[i]))));
37
+ const rehydrated = shake(zipToObject(elements, values.map((value, i) => decodeEntityElement(entityManager, entityToken, elements[i], value))));
38
38
  entityManager.logger.debug('rehydrated index', {
39
- dehydrated,
40
39
  entityToken,
41
40
  indexToken,
41
+ dehydrated,
42
42
  elements,
43
43
  values,
44
44
  rehydrated,
@@ -48,9 +48,9 @@ function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken,
48
48
  catch (error) {
49
49
  if (error instanceof Error)
50
50
  entityManager.logger.error(error.message, {
51
- dehydrated,
52
51
  entityToken,
53
52
  indexToken,
53
+ dehydrated,
54
54
  });
55
55
  throw error;
56
56
  }
@@ -12,9 +12,9 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
12
12
  * Reverses the {@link EntityManager.dehydratePageKeyMap | `dehydratePageKeyMap`} method.
13
13
  *
14
14
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
15
- * @param dehydrated - Array of dehydrated page keys or undefined if new query.
16
15
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
17
16
  * @param indexTokens - Array of {@link ConfigEntity.indexes | `entityManager.config.entities.<entityToken>.indexes`} keys used as keys of the original {@link PageKeyMap | `PageKeyMap`}.
17
+ * @param dehydrated - Array of dehydrated page keys or undefined if new query.
18
18
  * @param timestampFrom - Lower timestanp limit used to generate the original {@link PageKeyMap | `PageKeyMap`}. Defaults to `0`.
19
19
  * @param timestampTo - Upper timestamp limit used to generate the original {@link PageKeyMap | `PageKeyMap`}. Defaults to `Date.now()`.
20
20
  *
@@ -25,7 +25,7 @@ import { validateEntityIndexToken } from './validateEntityIndexToken.js';
25
25
  * @throws `Error` if any `indexTokens` are invalid.
26
26
  * @throws `Error` if `dehydrated` has invalid length.
27
27
  */
28
- function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens, timestampFrom = 0, timestampTo = Date.now()) {
28
+ function rehydratePageKeyMap(entityManager, entityToken, indexTokens, dehydrated, timestampFrom = 0, timestampTo = Date.now()) {
29
29
  try {
30
30
  // Validate params.
31
31
  if (!indexTokens.length)
@@ -47,17 +47,17 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
47
47
  return;
48
48
  let item = {
49
49
  [entityManager.config.hashKey]: hashKey,
50
- ...rehydrateIndexItem(entityManager, dehydratedIndexPageKeyMaps[i], entityToken, index, [entityManager.config.hashKey]),
50
+ ...rehydrateIndexItem(entityManager, entityToken, index, dehydratedIndexPageKeyMaps[i], [entityManager.config.hashKey]),
51
51
  };
52
- item = updateItemRangeKey(entityManager, item, entityToken);
52
+ item = updateItemRangeKey(entityManager, entityToken, item);
53
53
  return zipToObject(getIndexComponents(entityManager, entityToken, index), (component) => entityManager.config.entities[entityToken].generated[component]
54
- ? encodeGeneratedProperty(entityManager, item, entityToken, component)
54
+ ? encodeGeneratedProperty(entityManager, entityToken, component, item)
55
55
  : item[component]);
56
56
  }));
57
57
  entityManager.logger.debug('rehydrated page key map', {
58
- dehydrated,
59
58
  entityToken,
60
59
  indexTokens,
60
+ dehydrated,
61
61
  rehydrated,
62
62
  });
63
63
  return rehydrated;
@@ -65,9 +65,9 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
65
65
  catch (error) {
66
66
  if (error instanceof Error)
67
67
  entityManager.logger.error(error.message, {
68
- dehydrated,
69
68
  entityToken,
70
69
  indexTokens,
70
+ dehydrated,
71
71
  });
72
72
  throw error;
73
73
  }
@@ -4,14 +4,14 @@ import { validateEntityToken } from './validateEntityToken.js';
4
4
  * Strips generated properties, hash key, and range key from an {@link ItemMap | `ItemMap`} object.
5
5
  *
6
6
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
7
- * @param item - {@link ItemMap | `ItemMap`} object.
8
7
  * @param entityToken - {@link ConfigKeys.entities | `entityManager.config.entities`} key.
8
+ * @param item - {@link ItemMap | `ItemMap`} object.
9
9
  *
10
10
  * @returns Shallow clone of `item` without generated properties, hash key or range key.
11
11
  *
12
12
  * @throws `Error` if `entityToken` is invalid.
13
13
  */
14
- function removeKeys(entityManager, item, entityToken) {
14
+ function removeKeys(entityManager, entityToken, item) {
15
15
  try {
16
16
  // Validate params.
17
17
  validateEntityToken(entityManager, entityToken);
@@ -23,15 +23,15 @@ function removeKeys(entityManager, item, entityToken) {
23
23
  for (const property in entityManager.config.entities[entityToken].generated)
24
24
  delete newItem[property];
25
25
  entityManager.logger.debug('stripped entity item generated properties', {
26
- item,
27
26
  entityToken,
27
+ item,
28
28
  newItem,
29
29
  });
30
30
  return newItem;
31
31
  }
32
32
  catch (error) {
33
33
  if (error instanceof Error)
34
- entityManager.logger.error(error.message, { item, entityToken });
34
+ entityManager.logger.error(error.message, { entityToken, item });
35
35
  throw error;
36
36
  }
37
37
  }
@@ -7,15 +7,15 @@ import { validateEntityToken } from './validateEntityToken.js';
7
7
  * Update the hash key on a partial {@link ItemMap | `ItemMap`} object.
8
8
  *
9
9
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
10
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
11
10
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
11
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
12
12
  * @param overwrite - Overwrite existing {@link ConfigKeys.hashKey | `this.config.hashKey`} property value (default `false`).
13
13
  *
14
14
  * @returns Shallow clone of `item` with updated hash key.
15
15
  *
16
16
  * @throws `Error` if `entityToken` is invalid.
17
17
  */
18
- function updateItemHashKey(entityManager, item, entityToken, overwrite = false) {
18
+ function updateItemHashKey(entityManager, entityToken, item, overwrite = false) {
19
19
  try {
20
20
  // Validate params.
21
21
  validateEntityToken(entityManager, entityToken);
@@ -59,8 +59,8 @@ function updateItemHashKey(entityManager, item, entityToken, overwrite = false)
59
59
  catch (error) {
60
60
  if (error instanceof Error)
61
61
  entityManager.logger.error(error.message, {
62
- item,
63
62
  entityToken,
63
+ item,
64
64
  overwrite,
65
65
  });
66
66
  throw error;
@@ -5,8 +5,8 @@ import { validateEntityToken } from './validateEntityToken.js';
5
5
  * Update the range key on a partial {@link ItemMap | `ItemMap`} object.
6
6
  *
7
7
  * @param entityManager - {@link EntityManager | `EntityManager`} instance.
8
- * @param item - Partial {@link ItemMap | `ItemMap`} object.
9
8
  * @param entityToken - {@link ConfigKeys.entities | `this.config.entities`} key.
9
+ * @param item - Partial {@link ItemMap | `ItemMap`} object.
10
10
  * @param overwrite - Overwrite existing {@link ConfigKeys.rangeKey | `this.config.rangeKey`} property value (default `false`).
11
11
  *
12
12
  * @returns Shallow clone of `item` with updated range key.
@@ -14,15 +14,15 @@ import { validateEntityToken } from './validateEntityToken.js';
14
14
  * @throws `Error` if `entityToken` is invalid.
15
15
  * @throws `Error` if `item` {@link ConfigEntity.uniqueProperty | `this.config.entities<entityToken>.uniqueProperty`} property value is missing.
16
16
  */
17
- function updateItemRangeKey(entityManager, item, entityToken, overwrite = false) {
17
+ function updateItemRangeKey(entityManager, entityToken, item, overwrite = false) {
18
18
  try {
19
19
  // Validate params.
20
20
  validateEntityToken(entityManager, entityToken);
21
21
  // Return current item if rangeKey exists and overwrite is false.
22
22
  if (item[entityManager.config.rangeKey] && !overwrite) {
23
23
  entityManager.logger.debug('did not overwrite existing entity item range key', {
24
- item,
25
24
  entityToken,
25
+ item,
26
26
  overwrite,
27
27
  });
28
28
  return { ...item };
@@ -49,8 +49,8 @@ function updateItemRangeKey(entityManager, item, entityToken, overwrite = false)
49
49
  catch (error) {
50
50
  if (error instanceof Error)
51
51
  entityManager.logger.error(error.message, {
52
- item,
53
52
  entityToken,
53
+ item,
54
54
  overwrite,
55
55
  });
56
56
  throw error;
package/package.json CHANGED
@@ -132,5 +132,5 @@
132
132
  },
133
133
  "type": "module",
134
134
  "types": "dist/index.d.ts",
135
- "version": "6.5.1"
135
+ "version": "6.6.0"
136
136
  }