@karmaniverous/entity-manager 6.1.0-5 → 6.1.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/dist/cjs/{src/EntityManager.js → EntityManager.js} +4 -4
- package/dist/cjs/{src/EntityManagerClient.js → EntityManagerClient.js} +6 -6
- package/dist/cjs/{src/ParsedConfig.js → ParsedConfig.js} +52 -52
- package/dist/cjs/{src/addKeys.js → addKeys.js} +2 -2
- package/dist/cjs/{src/decodeGeneratedProperty.js → decodeGeneratedProperty.js} +2 -2
- package/dist/cjs/{src/encodeGeneratedProperty.js → encodeGeneratedProperty.js} +2 -2
- package/dist/cjs/{src/getHashKeySpace.js → getHashKeySpace.js} +2 -2
- package/dist/cjs/{src/query.js → query.js} +7 -9
- package/dist/cjs/{src/rehydrateIndexItem.js → rehydrateIndexItem.js} +2 -3
- package/dist/cjs/{src/rehydratePageKeyMap.js → rehydratePageKeyMap.js} +4 -5
- package/dist/cjs/{src/unwrapIndex.js → unwrapIndex.js} +2 -2
- package/dist/cjs/{src/updateItemHashKey.js → updateItemHashKey.js} +5 -5
- package/dist/cjs/{src/updateItemRangeKey.js → updateItemRangeKey.js} +2 -2
- package/dist/mjs/{src/EntityManager.js → EntityManager.js} +1 -1
- package/dist/mjs/{src/EntityManagerClient.js → EntityManagerClient.js} +2 -2
- package/dist/mjs/{src/ParsedConfig.js → ParsedConfig.js} +3 -3
- package/dist/mjs/{src/addKeys.js → addKeys.js} +1 -1
- package/dist/mjs/{src/decodeGeneratedProperty.js → decodeGeneratedProperty.js} +1 -1
- package/dist/mjs/{src/encodeGeneratedProperty.js → encodeGeneratedProperty.js} +1 -1
- package/dist/mjs/{src/getHashKeySpace.js → getHashKeySpace.js} +1 -1
- package/dist/mjs/{src/query.js → query.js} +3 -5
- package/dist/mjs/{src/rehydrateIndexItem.js → rehydrateIndexItem.js} +1 -2
- package/dist/mjs/{src/rehydratePageKeyMap.js → rehydratePageKeyMap.js} +1 -2
- package/dist/mjs/{src/unwrapIndex.js → unwrapIndex.js} +1 -1
- package/dist/mjs/{src/updateItemHashKey.js → updateItemHashKey.js} +2 -2
- package/dist/mjs/{src/updateItemRangeKey.js → updateItemRangeKey.js} +1 -1
- package/package.json +6 -6
- package/dist/cjs/_virtual/_commonjsHelpers.js +0 -7
- package/dist/cjs/_virtual/index.js +0 -9
- package/dist/cjs/_virtual/lz-string.js +0 -9
- package/dist/cjs/_virtual/lz-string2.js +0 -5
- package/dist/cjs/node_modules/@karmaniverous/entity-tools/dist/mjs/Nil.js +0 -14
- package/dist/cjs/node_modules/@karmaniverous/entity-tools/dist/mjs/defaultTranscodes.js +0 -94
- package/dist/cjs/node_modules/@karmaniverous/entity-tools/dist/mjs/sort.js +0 -52
- package/dist/cjs/node_modules/lz-string/libs/lz-string.js +0 -520
- package/dist/cjs/node_modules/radash/dist/esm/array.js +0 -90
- package/dist/cjs/node_modules/radash/dist/esm/async.js +0 -62
- package/dist/cjs/node_modules/radash/dist/esm/object.js +0 -25
- package/dist/cjs/node_modules/radash/dist/esm/typed.js +0 -35
- package/dist/cjs/node_modules/string-hash/index.js +0 -28
- package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -39
- package/dist/cjs/node_modules/zod/lib/index.js +0 -4342
- package/dist/mjs/_virtual/_commonjsHelpers.js +0 -5
- package/dist/mjs/_virtual/index.js +0 -7
- package/dist/mjs/_virtual/lz-string.js +0 -7
- package/dist/mjs/_virtual/lz-string2.js +0 -3
- package/dist/mjs/node_modules/@karmaniverous/entity-tools/dist/mjs/Nil.js +0 -12
- package/dist/mjs/node_modules/@karmaniverous/entity-tools/dist/mjs/defaultTranscodes.js +0 -92
- package/dist/mjs/node_modules/@karmaniverous/entity-tools/dist/mjs/sort.js +0 -50
- package/dist/mjs/node_modules/lz-string/libs/lz-string.js +0 -518
- package/dist/mjs/node_modules/radash/dist/esm/array.js +0 -80
- package/dist/mjs/node_modules/radash/dist/esm/async.js +0 -58
- package/dist/mjs/node_modules/radash/dist/esm/object.js +0 -22
- package/dist/mjs/node_modules/radash/dist/esm/typed.js +0 -28
- package/dist/mjs/node_modules/string-hash/index.js +0 -26
- package/dist/mjs/node_modules/tslib/tslib.es6.js +0 -36
- package/dist/mjs/node_modules/zod/lib/index.js +0 -4233
- /package/dist/cjs/{src/conditionalize.js → conditionalize.js} +0 -0
- /package/dist/cjs/{src/decodeEntityElement.js → decodeEntityElement.js} +0 -0
- /package/dist/cjs/{src/dehydrateIndexItem.js → dehydrateIndexItem.js} +0 -0
- /package/dist/cjs/{src/dehydratePageKeyMap.js → dehydratePageKeyMap.js} +0 -0
- /package/dist/cjs/{src/encodeEntityElement.js → encodeEntityElement.js} +0 -0
- /package/dist/cjs/{src/getShardBump.js → getShardBump.js} +0 -0
- /package/dist/cjs/{src/index.js → index.js} +0 -0
- /package/dist/cjs/{src/removeKeys.js → removeKeys.js} +0 -0
- /package/dist/cjs/{src/validateEntityGeneratedProperty.js → validateEntityGeneratedProperty.js} +0 -0
- /package/dist/cjs/{src/validateEntityIndexToken.js → validateEntityIndexToken.js} +0 -0
- /package/dist/cjs/{src/validateEntityToken.js → validateEntityToken.js} +0 -0
- /package/dist/mjs/{src/conditionalize.js → conditionalize.js} +0 -0
- /package/dist/mjs/{src/decodeEntityElement.js → decodeEntityElement.js} +0 -0
- /package/dist/mjs/{src/dehydrateIndexItem.js → dehydrateIndexItem.js} +0 -0
- /package/dist/mjs/{src/dehydratePageKeyMap.js → dehydratePageKeyMap.js} +0 -0
- /package/dist/mjs/{src/encodeEntityElement.js → encodeEntityElement.js} +0 -0
- /package/dist/mjs/{src/getShardBump.js → getShardBump.js} +0 -0
- /package/dist/mjs/{src/index.js → index.js} +0 -0
- /package/dist/mjs/{src/removeKeys.js → removeKeys.js} +0 -0
- /package/dist/mjs/{src/validateEntityGeneratedProperty.js → validateEntityGeneratedProperty.js} +0 -0
- /package/dist/mjs/{src/validateEntityIndexToken.js → validateEntityIndexToken.js} +0 -0
- /package/dist/mjs/{src/validateEntityToken.js → validateEntityToken.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var tslib = require('tslib');
|
|
4
4
|
var addKeys = require('./addKeys.js');
|
|
5
5
|
var ParsedConfig = require('./ParsedConfig.js');
|
|
6
6
|
var query = require('./query.js');
|
|
@@ -21,7 +21,7 @@ class EntityManager {
|
|
|
21
21
|
*/
|
|
22
22
|
constructor(config) {
|
|
23
23
|
_EntityManager_config.set(this, void 0);
|
|
24
|
-
|
|
24
|
+
tslib.__classPrivateFieldSet(this, _EntityManager_config, ParsedConfig.configSchema.parse(config), "f");
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Get the current EntityManager {@link Config | `Config`} object.
|
|
@@ -29,7 +29,7 @@ class EntityManager {
|
|
|
29
29
|
* @returns Current {@link Config | `Config`} object.
|
|
30
30
|
*/
|
|
31
31
|
get config() {
|
|
32
|
-
return
|
|
32
|
+
return tslib.__classPrivateFieldGet(this, _EntityManager_config, "f");
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Set the current EntityManager {@link Config | `Config`} object.
|
|
@@ -37,7 +37,7 @@ class EntityManager {
|
|
|
37
37
|
* @param value - {@link Config | `Config`} object.
|
|
38
38
|
*/
|
|
39
39
|
set config(value) {
|
|
40
|
-
|
|
40
|
+
tslib.__classPrivateFieldSet(this, _EntityManager_config, ParsedConfig.configSchema.parse(value), "f");
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Update generated properties, hash key, and range key on an {@link ItemMap | `ItemMap`} object. Mutates `item`.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
var radash = require('radash');
|
|
4
5
|
var conditionalize = require('./conditionalize.js');
|
|
5
|
-
var typed = require('../node_modules/radash/dist/esm/typed.js');
|
|
6
6
|
|
|
7
7
|
var _EntityManagerClient_options;
|
|
8
8
|
/**
|
|
@@ -13,11 +13,11 @@ var _EntityManagerClient_options;
|
|
|
13
13
|
class EntityManagerClient {
|
|
14
14
|
constructor({ batchSize = 25, delayIncrement = 100, maxRetries = 5, throttle = 10, logger = console, logInternals = false, ...childOptions }) {
|
|
15
15
|
_EntityManagerClient_options.set(this, void 0);
|
|
16
|
-
if (!
|
|
16
|
+
if (!radash.isFunction(logger.debug))
|
|
17
17
|
throw new Error('logger must support debug method');
|
|
18
|
-
if (!
|
|
18
|
+
if (!radash.isFunction(logger.error))
|
|
19
19
|
throw new Error('logger must support error method');
|
|
20
|
-
|
|
20
|
+
tslib.__classPrivateFieldSet(this, _EntityManagerClient_options, {
|
|
21
21
|
batchSize,
|
|
22
22
|
delayIncrement,
|
|
23
23
|
maxRetries,
|
|
@@ -34,7 +34,7 @@ class EntityManagerClient {
|
|
|
34
34
|
* Returns the options used to create the EntityManagerClient instance.
|
|
35
35
|
*/
|
|
36
36
|
get options() {
|
|
37
|
-
return
|
|
37
|
+
return tslib.__classPrivateFieldGet(this, _EntityManagerClient_options, "f");
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
_EntityManagerClient_options = new WeakMap();
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
|
+
var radash = require('radash');
|
|
5
|
+
var zod = require('zod');
|
|
6
6
|
|
|
7
7
|
const defaultShardBump = { timestamp: 0, charBits: 1, chars: 0 };
|
|
8
8
|
const validateArrayUnique = (arr, ctx, identity = (item) => item, path = []) => {
|
|
9
|
-
const counts =
|
|
9
|
+
const counts = radash.counting(arr, identity);
|
|
10
10
|
for (const [element, count] of Object.entries(counts)) {
|
|
11
11
|
if (count > 1)
|
|
12
12
|
ctx.addIssue({
|
|
13
|
-
code:
|
|
13
|
+
code: zod.z.ZodIssueCode.custom,
|
|
14
14
|
message: `duplicate array element '${element}'`,
|
|
15
15
|
path,
|
|
16
16
|
});
|
|
@@ -19,56 +19,56 @@ const validateArrayUnique = (arr, ctx, identity = (item) => item, path = []) =>
|
|
|
19
19
|
const validateKeyExclusive = (key, label, ref, ctx) => {
|
|
20
20
|
if (ref.includes(key))
|
|
21
21
|
ctx.addIssue({
|
|
22
|
-
code:
|
|
22
|
+
code: zod.z.ZodIssueCode.custom,
|
|
23
23
|
message: `${label} '${key}' is not exclusive`,
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
-
const configSchema =
|
|
26
|
+
const configSchema = zod.z
|
|
27
27
|
.object({
|
|
28
|
-
entities:
|
|
29
|
-
.record(
|
|
28
|
+
entities: zod.z
|
|
29
|
+
.record(zod.z
|
|
30
30
|
.object({
|
|
31
|
-
defaultLimit:
|
|
31
|
+
defaultLimit: zod.z
|
|
32
32
|
.number()
|
|
33
33
|
.int()
|
|
34
34
|
.positive()
|
|
35
35
|
.safe()
|
|
36
36
|
.optional()
|
|
37
37
|
.default(10),
|
|
38
|
-
defaultPageSize:
|
|
38
|
+
defaultPageSize: zod.z
|
|
39
39
|
.number()
|
|
40
40
|
.int()
|
|
41
41
|
.positive()
|
|
42
42
|
.safe()
|
|
43
43
|
.optional()
|
|
44
44
|
.default(10),
|
|
45
|
-
generated:
|
|
46
|
-
.record(
|
|
45
|
+
generated: zod.z
|
|
46
|
+
.record(zod.z
|
|
47
47
|
.object({
|
|
48
|
-
atomic:
|
|
49
|
-
elements:
|
|
50
|
-
.array(
|
|
48
|
+
atomic: zod.z.boolean().optional().default(false),
|
|
49
|
+
elements: zod.z
|
|
50
|
+
.array(zod.z.string().min(1))
|
|
51
51
|
.nonempty()
|
|
52
52
|
.superRefine(validateArrayUnique),
|
|
53
|
-
sharded:
|
|
53
|
+
sharded: zod.z.boolean().optional().default(false),
|
|
54
54
|
})
|
|
55
55
|
.optional())
|
|
56
56
|
.optional()
|
|
57
57
|
.default({}),
|
|
58
|
-
elementTranscodes:
|
|
59
|
-
indexes:
|
|
60
|
-
.record(
|
|
61
|
-
.array(
|
|
58
|
+
elementTranscodes: zod.z.record(zod.z.string()).optional().default({}),
|
|
59
|
+
indexes: zod.z
|
|
60
|
+
.record(zod.z
|
|
61
|
+
.array(zod.z.string().min(1))
|
|
62
62
|
.nonempty()
|
|
63
63
|
.superRefine(validateArrayUnique))
|
|
64
64
|
.optional()
|
|
65
65
|
.default({}),
|
|
66
|
-
shardBumps:
|
|
67
|
-
.array(
|
|
66
|
+
shardBumps: zod.z
|
|
67
|
+
.array(zod.z
|
|
68
68
|
.object({
|
|
69
|
-
timestamp:
|
|
70
|
-
charBits:
|
|
71
|
-
chars:
|
|
69
|
+
timestamp: zod.z.number().nonnegative().safe(),
|
|
70
|
+
charBits: zod.z.number().int().min(1).max(5),
|
|
71
|
+
chars: zod.z.number().int().min(0).max(40),
|
|
72
72
|
})
|
|
73
73
|
.strict())
|
|
74
74
|
.optional()
|
|
@@ -81,7 +81,7 @@ const configSchema = index.default
|
|
|
81
81
|
})
|
|
82
82
|
.transform((val) => {
|
|
83
83
|
// sort shardBumps by timestamp.
|
|
84
|
-
let sorted =
|
|
84
|
+
let sorted = radash.sort(val, ({ timestamp }) => timestamp);
|
|
85
85
|
// prepend defaultShardBump if missing zero-timestamp bump.
|
|
86
86
|
if (sorted[0].timestamp !== 0) {
|
|
87
87
|
sorted = [defaultShardBump, ...sorted];
|
|
@@ -94,14 +94,14 @@ const configSchema = index.default
|
|
|
94
94
|
for (let i = 1; i < val.length; i++)
|
|
95
95
|
if (val[i].chars <= val[i - 1].chars)
|
|
96
96
|
ctx.addIssue({
|
|
97
|
-
code:
|
|
97
|
+
code: zod.z.ZodIssueCode.custom,
|
|
98
98
|
message: `shardBump chars do not monotonically increase at timestamp ${val[i].timestamp.toString()}`,
|
|
99
99
|
path: [i],
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
102
|
}),
|
|
103
|
-
timestampProperty:
|
|
104
|
-
uniqueProperty:
|
|
103
|
+
timestampProperty: zod.z.string().min(1),
|
|
104
|
+
uniqueProperty: zod.z.string().min(1),
|
|
105
105
|
})
|
|
106
106
|
.strict()
|
|
107
107
|
.superRefine((data, ctx) => {
|
|
@@ -113,60 +113,60 @@ const configSchema = index.default
|
|
|
113
113
|
}))
|
|
114
114
|
.optional()
|
|
115
115
|
.default({}),
|
|
116
|
-
generatedKeyDelimiter:
|
|
117
|
-
generatedValueDelimiter:
|
|
118
|
-
shardKeyDelimiter:
|
|
119
|
-
hashKey:
|
|
120
|
-
rangeKey:
|
|
121
|
-
throttle:
|
|
122
|
-
transcodes:
|
|
123
|
-
.record(
|
|
116
|
+
generatedKeyDelimiter: zod.z.string().regex(/\W+/).optional().default('|'),
|
|
117
|
+
generatedValueDelimiter: zod.z.string().regex(/\W+/).optional().default('#'),
|
|
118
|
+
shardKeyDelimiter: zod.z.string().regex(/\W+/).optional().default('!'),
|
|
119
|
+
hashKey: zod.z.string().optional().default('hashKey'),
|
|
120
|
+
rangeKey: zod.z.string().optional().default('rangeKey'),
|
|
121
|
+
throttle: zod.z.number().int().positive().safe().optional().default(10),
|
|
122
|
+
transcodes: zod.z
|
|
123
|
+
.record(zod.z
|
|
124
124
|
.object({
|
|
125
|
-
encode:
|
|
126
|
-
decode:
|
|
125
|
+
encode: zod.z.function().args(zod.z.any()).returns(zod.z.string()),
|
|
126
|
+
decode: zod.z.function().args(zod.z.string()).returns(zod.z.any()),
|
|
127
127
|
})
|
|
128
128
|
.strict())
|
|
129
129
|
.optional()
|
|
130
|
-
.default(
|
|
130
|
+
.default(entityTools.defaultTranscodes),
|
|
131
131
|
})
|
|
132
132
|
.strict()
|
|
133
133
|
.superRefine((data, ctx) => {
|
|
134
134
|
// validate no generated key delimiter collision
|
|
135
135
|
if (data.generatedKeyDelimiter.includes(data.generatedValueDelimiter))
|
|
136
136
|
ctx.addIssue({
|
|
137
|
-
code:
|
|
137
|
+
code: zod.z.ZodIssueCode.custom,
|
|
138
138
|
message: 'generatedKeyDelimiter contains generatedValueDelimiter',
|
|
139
139
|
path: ['generatedKeyDelimiter'],
|
|
140
140
|
});
|
|
141
141
|
if (data.generatedKeyDelimiter.includes(data.shardKeyDelimiter))
|
|
142
142
|
ctx.addIssue({
|
|
143
|
-
code:
|
|
143
|
+
code: zod.z.ZodIssueCode.custom,
|
|
144
144
|
message: 'generatedKeyDelimiter contains shardKeyDelimiter',
|
|
145
145
|
path: ['generatedKeyDelimiter'],
|
|
146
146
|
});
|
|
147
147
|
// validate no generated value delimiter collision
|
|
148
148
|
if (data.generatedValueDelimiter.includes(data.generatedKeyDelimiter))
|
|
149
149
|
ctx.addIssue({
|
|
150
|
-
code:
|
|
150
|
+
code: zod.z.ZodIssueCode.custom,
|
|
151
151
|
message: 'generatedValueDelimiter contains generatedKeyDelimiter',
|
|
152
152
|
path: ['generatedValueDelimiter'],
|
|
153
153
|
});
|
|
154
154
|
if (data.generatedValueDelimiter.includes(data.shardKeyDelimiter))
|
|
155
155
|
ctx.addIssue({
|
|
156
|
-
code:
|
|
156
|
+
code: zod.z.ZodIssueCode.custom,
|
|
157
157
|
message: 'generatedValueDelimiter contains shardKeyDelimiter',
|
|
158
158
|
path: ['generatedValueDelimiter'],
|
|
159
159
|
});
|
|
160
160
|
// validate no shard key delimiter collision
|
|
161
161
|
if (data.shardKeyDelimiter.includes(data.generatedKeyDelimiter))
|
|
162
162
|
ctx.addIssue({
|
|
163
|
-
code:
|
|
163
|
+
code: zod.z.ZodIssueCode.custom,
|
|
164
164
|
message: 'shardKeyDelimiter contains generatedKeyDelimiter',
|
|
165
165
|
path: ['shardKeyDelimiter'],
|
|
166
166
|
});
|
|
167
167
|
if (data.shardKeyDelimiter.includes(data.generatedValueDelimiter))
|
|
168
168
|
ctx.addIssue({
|
|
169
|
-
code:
|
|
169
|
+
code: zod.z.ZodIssueCode.custom,
|
|
170
170
|
message: 'shardKeyDelimiter contains generatedValueDelimiter',
|
|
171
171
|
path: ['shardKeyDelimiter'],
|
|
172
172
|
});
|
|
@@ -187,7 +187,7 @@ const configSchema = index.default
|
|
|
187
187
|
for (const [element, generatedElementType] of Object.entries(entity.elementTranscodes))
|
|
188
188
|
if (!transcodes.includes(generatedElementType))
|
|
189
189
|
ctx.addIssue({
|
|
190
|
-
code:
|
|
190
|
+
code: zod.z.ZodIssueCode.invalid_enum_value,
|
|
191
191
|
options: transcodes,
|
|
192
192
|
path: ['entities', entityToken, 'elementTranscodes', element],
|
|
193
193
|
received: generatedElementType,
|
|
@@ -198,7 +198,7 @@ const configSchema = index.default
|
|
|
198
198
|
for (const element of generated?.elements ?? [])
|
|
199
199
|
if (!typedElements.includes(element))
|
|
200
200
|
ctx.addIssue({
|
|
201
|
-
code:
|
|
201
|
+
code: zod.z.ZodIssueCode.invalid_enum_value,
|
|
202
202
|
options: typedElements,
|
|
203
203
|
path: [
|
|
204
204
|
'entities',
|
|
@@ -211,12 +211,12 @@ const configSchema = index.default
|
|
|
211
211
|
});
|
|
212
212
|
// validate all ungenerated entity index components have a corresponding entity element type.
|
|
213
213
|
const generatedProperties = Object.keys(entity.generated);
|
|
214
|
-
for (const [indexKey, index
|
|
215
|
-
for (const component of index
|
|
214
|
+
for (const [indexKey, index] of Object.entries(entity.indexes))
|
|
215
|
+
for (const component of index)
|
|
216
216
|
if (![data.hashKey, data.rangeKey, ...generatedProperties].includes(component) &&
|
|
217
217
|
!typedElements.includes(component))
|
|
218
218
|
ctx.addIssue({
|
|
219
|
-
code:
|
|
219
|
+
code: zod.z.ZodIssueCode.invalid_enum_value,
|
|
220
220
|
options: typedElements,
|
|
221
221
|
path: ['entities', entityToken, 'indexes', indexKey],
|
|
222
222
|
received: component,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
4
|
var encodeGeneratedProperty = require('./encodeGeneratedProperty.js');
|
|
5
5
|
var updateItemHashKey = require('./updateItemHashKey.js');
|
|
6
6
|
var updateItemRangeKey = require('./updateItemRangeKey.js');
|
|
@@ -29,7 +29,7 @@ function addKeys(entityManager, item, entityToken, overwrite = false) {
|
|
|
29
29
|
// Update generated properties.
|
|
30
30
|
for (const property in entityManager.config.entities[entityToken]
|
|
31
31
|
.generated) {
|
|
32
|
-
if (overwrite ||
|
|
32
|
+
if (overwrite || entityTools.isNil(item[property])) {
|
|
33
33
|
const encoded = encodeGeneratedProperty.encodeGeneratedProperty(entityManager, item, entityToken, property);
|
|
34
34
|
if (encoded)
|
|
35
35
|
Object.assign(item, { [property]: encoded });
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var radash = require('radash');
|
|
3
4
|
var decodeEntityElement = require('./decodeEntityElement.js');
|
|
4
5
|
var validateEntityToken = require('./validateEntityToken.js');
|
|
5
|
-
var array = require('../node_modules/radash/dist/esm/array.js');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Decode a generated property value. Returns a partial ItemMap.
|
|
@@ -37,7 +37,7 @@ function decodeGeneratedProperty(entityManager, encoded, entityToken) {
|
|
|
37
37
|
return pair;
|
|
38
38
|
});
|
|
39
39
|
// Assign decoded properties.
|
|
40
|
-
Object.assign(decoded,
|
|
40
|
+
Object.assign(decoded, radash.objectify(values, ([key]) => key, ([key, value]) => decodeEntityElement.decodeEntityElement(entityManager, value, entityToken, key)));
|
|
41
41
|
return decoded;
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
4
|
var validateEntityGeneratedProperty = require('./validateEntityGeneratedProperty.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -27,7 +27,7 @@ function encodeGeneratedProperty(entityManager, item, entityToken, property) {
|
|
|
27
27
|
item[element],
|
|
28
28
|
]);
|
|
29
29
|
// Validate atomicity requirement.
|
|
30
|
-
if (atomic && elementMap.some(([, value]) =>
|
|
30
|
+
if (atomic && elementMap.some(([, value]) => entityTools.isNil(value)))
|
|
31
31
|
return;
|
|
32
32
|
// Encode property value.
|
|
33
33
|
const encoded = [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var radash = require('radash');
|
|
3
4
|
var validateEntityToken = require('./validateEntityToken.js');
|
|
4
|
-
var array = require('../node_modules/radash/dist/esm/array.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Return an array of {@link ConfigKeys.hashKey | `entityManager.config.hashKey`} property values covering the shard space bounded by `timestampFrom` & `timestampTo`.
|
|
@@ -27,7 +27,7 @@ function getHashKeySpace(entityManager, entityToken, timestampFrom = 0, timestam
|
|
|
27
27
|
.flatMap(({ charBits, chars }) => {
|
|
28
28
|
const radix = 2 ** charBits;
|
|
29
29
|
return chars
|
|
30
|
-
? [...
|
|
30
|
+
? [...radash.range(0, radix ** chars - 1)].map((char) => char.toString(radix).padStart(chars, '0'))
|
|
31
31
|
: '';
|
|
32
32
|
})
|
|
33
33
|
.map((shardKey) => `${entityToken}${entityManager.config.shardKeyDelimiter}${shardKey}`);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var lzString = require('
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
|
+
var lzString = require('lz-string');
|
|
5
|
+
var radash = require('radash');
|
|
5
6
|
var dehydratePageKeyMap = require('./dehydratePageKeyMap.js');
|
|
6
7
|
var rehydratePageKeyMap = require('./rehydratePageKeyMap.js');
|
|
7
8
|
var validateEntityGeneratedProperty = require('./validateEntityGeneratedProperty.js');
|
|
8
|
-
var typed = require('../node_modules/radash/dist/esm/typed.js');
|
|
9
|
-
var async = require('../node_modules/radash/dist/esm/async.js');
|
|
10
|
-
var array = require('../node_modules/radash/dist/esm/array.js');
|
|
11
9
|
|
|
12
10
|
const { compressToEncodedURIComponent, decompressFromEncodedURIComponent } = lzString;
|
|
13
11
|
/**
|
|
@@ -37,9 +35,9 @@ async function query(entityManager, { entityToken, hashKey, item, limit, pageKey
|
|
|
37
35
|
pageSize ?? (pageSize = defaultPageSize);
|
|
38
36
|
// Validate params.
|
|
39
37
|
validateEntityGeneratedProperty.validateEntityGeneratedProperty(entityManager, entityToken, hashKey, true);
|
|
40
|
-
if (!(limit === Infinity || (
|
|
38
|
+
if (!(limit === Infinity || (radash.isInt(limit) && limit >= 1)))
|
|
41
39
|
throw new Error('limit must be a positive integer or Infinity.');
|
|
42
|
-
if (!(
|
|
40
|
+
if (!(radash.isInt(pageSize) && pageSize >= 1))
|
|
43
41
|
throw new Error('pageSize must be a positive integer');
|
|
44
42
|
// Rehydrate pageKeyMap.
|
|
45
43
|
const rehydratedPageKeyMap = rehydratePageKeyMap.rehydratePageKeyMap(entityManager, pageKeyMap
|
|
@@ -63,7 +61,7 @@ async function query(entityManager, { entityToken, hashKey, item, limit, pageKey
|
|
|
63
61
|
// iteration in order to keep shardsQueried * pageSize > (limit - items.length) but only just.
|
|
64
62
|
// TODO: Test for invalid characters (path delimiters) in index keys & shard key values.
|
|
65
63
|
// Query every shard on every index in pageKeyMap.
|
|
66
|
-
const shardQueryResults = await
|
|
64
|
+
const shardQueryResults = await radash.parallel(throttle, Object.entries(rehydratedPageKeyMap).flatMap(([index, indexPageKeys]) => Object.entries(indexPageKeys).map(([hashKey, pageKey]) => [
|
|
67
65
|
index,
|
|
68
66
|
hashKey,
|
|
69
67
|
pageKey,
|
|
@@ -87,7 +85,7 @@ async function query(entityManager, { entityToken, hashKey, item, limit, pageKey
|
|
|
87
85
|
Object.values(workingResult.pageKeyMap).some((indexPageKeys) => Object.values(indexPageKeys).some((pageKey) => pageKey !== undefined)) &&
|
|
88
86
|
workingResult.items.length < limit);
|
|
89
87
|
// Dedupe & sort working result.
|
|
90
|
-
workingResult.items =
|
|
88
|
+
workingResult.items = entityTools.sort(radash.unique(workingResult.items, (item) => item[entityManager.config.entities[entityToken]
|
|
91
89
|
.uniqueProperty].toString()), sortOrder);
|
|
92
90
|
const result = {
|
|
93
91
|
count: workingResult.items.length,
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var radash = require('radash');
|
|
3
4
|
var decodeEntityElement = require('./decodeEntityElement.js');
|
|
4
5
|
var unwrapIndex = require('./unwrapIndex.js');
|
|
5
6
|
var validateEntityIndexToken = require('./validateEntityIndexToken.js');
|
|
6
|
-
var object = require('../node_modules/radash/dist/esm/object.js');
|
|
7
|
-
var array = require('../node_modules/radash/dist/esm/array.js');
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* Convert a delimited string into a partial {@link ItemMap | `ItemMap`} object representing the ungenerated component elements of a Config entity index.
|
|
@@ -37,7 +36,7 @@ function rehydrateIndexItem(entityManager, dehydrated, entityToken, indexToken,
|
|
|
37
36
|
if (elements.length !== values.length)
|
|
38
37
|
throw new Error('index rehydration key-value mismatch');
|
|
39
38
|
// Assign values to elements.
|
|
40
|
-
const rehydrated =
|
|
39
|
+
const rehydrated = radash.shake(radash.zipToObject(elements, values.map((value, i) => decodeEntityElement.decodeEntityElement(entityManager, value, entityToken, elements[i]))));
|
|
41
40
|
return rehydrated;
|
|
42
41
|
}
|
|
43
42
|
catch (error) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var radash = require('radash');
|
|
3
4
|
var encodeGeneratedProperty = require('./encodeGeneratedProperty.js');
|
|
4
5
|
var getHashKeySpace = require('./getHashKeySpace.js');
|
|
5
6
|
var rehydrateIndexItem = require('./rehydrateIndexItem.js');
|
|
6
7
|
var updateItemRangeKey = require('./updateItemRangeKey.js');
|
|
7
8
|
var validateEntityIndexToken = require('./validateEntityIndexToken.js');
|
|
8
|
-
var array = require('../node_modules/radash/dist/esm/array.js');
|
|
9
|
-
var object = require('../node_modules/radash/dist/esm/object.js');
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* Rehydrate an array of dehydrated page keys into a {@link PageKeyMap | `PageKeyMap`} object.
|
|
@@ -39,12 +38,12 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
|
|
|
39
38
|
// Get hash key space.
|
|
40
39
|
const hashKeySpace = getHashKeySpace.getHashKeySpace(entityManager, entityToken, timestampFrom, timestampTo);
|
|
41
40
|
// Default dehydrated.
|
|
42
|
-
dehydrated ?? (dehydrated = [...
|
|
41
|
+
dehydrated ?? (dehydrated = [...radash.range(1, hashKeySpace.length * indexTokens.length, '')]);
|
|
43
42
|
// Validate dehydrated length
|
|
44
43
|
if (dehydrated.length !== hashKeySpace.length * indexTokens.length)
|
|
45
44
|
throw new Error('dehydrated length mismatch');
|
|
46
45
|
// Rehydrate pageKeys.
|
|
47
|
-
const rehydrated =
|
|
46
|
+
const rehydrated = radash.mapValues(radash.zipToObject(indexTokens, radash.cluster(dehydrated, hashKeySpace.length)), (dehydratedIndexPageKeyMaps, index) => radash.zipToObject(hashKeySpace, (hashKey, i) => {
|
|
48
47
|
if (!dehydratedIndexPageKeyMaps[i])
|
|
49
48
|
return;
|
|
50
49
|
const item = {
|
|
@@ -52,7 +51,7 @@ function rehydratePageKeyMap(entityManager, dehydrated, entityToken, indexTokens
|
|
|
52
51
|
...rehydrateIndexItem.rehydrateIndexItem(entityManager, dehydratedIndexPageKeyMaps[i], entityToken, index, [entityManager.config.hashKey]),
|
|
53
52
|
};
|
|
54
53
|
updateItemRangeKey.updateItemRangeKey(entityManager, item, entityToken);
|
|
55
|
-
return
|
|
54
|
+
return radash.zipToObject(entityManager.config.entities[entityToken].indexes[index], (component) => entityManager.config.entities[entityToken].generated[component]
|
|
56
55
|
? encodeGeneratedProperty.encodeGeneratedProperty(entityManager, item, entityToken, component)
|
|
57
56
|
: item[component]);
|
|
58
57
|
}));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var radash = require('radash');
|
|
3
4
|
var validateEntityIndexToken = require('./validateEntityIndexToken.js');
|
|
4
|
-
var object = require('../node_modules/radash/dist/esm/object.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Unwraps an {@link ConfigEntity.indexes | Entity index} into deduped, sorted, ungenerated index component elements.
|
|
@@ -20,7 +20,7 @@ function unwrapIndex(entityManager, entityToken, indexToken) {
|
|
|
20
20
|
// Validate params.
|
|
21
21
|
validateEntityIndexToken.validateEntityIndexToken(entityManager, entityToken, indexToken);
|
|
22
22
|
const generated = entityManager.config.entities[entityToken].generated;
|
|
23
|
-
const generatedKeys = Object.keys(
|
|
23
|
+
const generatedKeys = Object.keys(radash.shake(generated));
|
|
24
24
|
return entityManager.config.entities[entityToken].indexes[indexToken]
|
|
25
25
|
.map((component) => component === entityManager.config.hashKey
|
|
26
26
|
? entityManager.config.hashKey
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
|
+
var stringHash = require('string-hash');
|
|
5
5
|
var getShardBump = require('./getShardBump.js');
|
|
6
6
|
var validateEntityToken = require('./validateEntityToken.js');
|
|
7
7
|
|
|
@@ -27,7 +27,7 @@ function updateItemHashKey(entityManager, item, entityToken, overwrite = false)
|
|
|
27
27
|
}
|
|
28
28
|
// Get item timestamp property & validate.
|
|
29
29
|
const timestamp = item[entityManager.config.entities[entityToken].timestampProperty];
|
|
30
|
-
if (
|
|
30
|
+
if (entityTools.isNil(timestamp))
|
|
31
31
|
throw new Error(`missing item timestamp property`);
|
|
32
32
|
// Find first entity sharding bump before timestamp.
|
|
33
33
|
const { charBits, chars } = getShardBump.getShardBump(entityManager, entityToken, timestamp);
|
|
@@ -38,9 +38,9 @@ function updateItemHashKey(entityManager, item, entityToken, overwrite = false)
|
|
|
38
38
|
// Get item unique property & validate.
|
|
39
39
|
const uniqueId = item[entityManager.config.entities[entityToken]
|
|
40
40
|
.uniqueProperty];
|
|
41
|
-
if (
|
|
41
|
+
if (entityTools.isNil(uniqueId))
|
|
42
42
|
throw new Error(`missing item unique property`);
|
|
43
|
-
hashKey += (
|
|
43
|
+
hashKey += (stringHash(uniqueId.toString()) % (chars * radix))
|
|
44
44
|
.toString(radix)
|
|
45
45
|
.padStart(chars, '0');
|
|
46
46
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var entityTools = require('@karmaniverous/entity-tools');
|
|
4
4
|
var validateEntityToken = require('./validateEntityToken.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -26,7 +26,7 @@ function updateItemRangeKey(entityManager, item, entityToken, overwrite = false)
|
|
|
26
26
|
}
|
|
27
27
|
// Get item unique property & validate.
|
|
28
28
|
const uniqueProperty = item[entityManager.config.entities[entityToken].uniqueProperty];
|
|
29
|
-
if (
|
|
29
|
+
if (entityTools.isNil(uniqueProperty))
|
|
30
30
|
throw new Error(`missing item unique property`);
|
|
31
31
|
// Update range key.
|
|
32
32
|
Object.assign(item, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __classPrivateFieldSet, __classPrivateFieldGet } from '
|
|
1
|
+
import { __classPrivateFieldSet, __classPrivateFieldGet } from 'tslib';
|
|
2
2
|
import { addKeys } from './addKeys.js';
|
|
3
3
|
import { configSchema } from './ParsedConfig.js';
|
|
4
4
|
import { query } from './query.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { __classPrivateFieldSet, __classPrivateFieldGet } from '
|
|
1
|
+
import { __classPrivateFieldSet, __classPrivateFieldGet } from 'tslib';
|
|
2
|
+
import { isFunction } from 'radash';
|
|
2
3
|
import { conditionalize } from './conditionalize.js';
|
|
3
|
-
import { isFunction } from '../node_modules/radash/dist/esm/typed.js';
|
|
4
4
|
|
|
5
5
|
var _EntityManagerClient_options;
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defaultTranscodes } from '
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { defaultTranscodes } from '@karmaniverous/entity-tools';
|
|
2
|
+
import { sort, counting } from 'radash';
|
|
3
|
+
import { z } from 'zod';
|
|
4
4
|
|
|
5
5
|
const defaultShardBump = { timestamp: 0, charBits: 1, chars: 0 };
|
|
6
6
|
const validateArrayUnique = (arr, ctx, identity = (item) => item, path = []) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isNil } from '
|
|
1
|
+
import { isNil } from '@karmaniverous/entity-tools';
|
|
2
2
|
import { encodeGeneratedProperty } from './encodeGeneratedProperty.js';
|
|
3
3
|
import { updateItemHashKey } from './updateItemHashKey.js';
|
|
4
4
|
import { updateItemRangeKey } from './updateItemRangeKey.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { objectify } from 'radash';
|
|
1
2
|
import { decodeEntityElement } from './decodeEntityElement.js';
|
|
2
3
|
import { validateEntityToken } from './validateEntityToken.js';
|
|
3
|
-
import { objectify } from '../node_modules/radash/dist/esm/array.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Decode a generated property value. Returns a partial ItemMap.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { range } from 'radash';
|
|
1
2
|
import { validateEntityToken } from './validateEntityToken.js';
|
|
2
|
-
import { range } from '../node_modules/radash/dist/esm/array.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Return an array of {@link ConfigKeys.hashKey | `entityManager.config.hashKey`} property values covering the shard space bounded by `timestampFrom` & `timestampTo`.
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { sort } from '
|
|
2
|
-
import lzString from '
|
|
1
|
+
import { sort } from '@karmaniverous/entity-tools';
|
|
2
|
+
import lzString from 'lz-string';
|
|
3
|
+
import { isInt, parallel, unique } from 'radash';
|
|
3
4
|
import { dehydratePageKeyMap } from './dehydratePageKeyMap.js';
|
|
4
5
|
import { rehydratePageKeyMap } from './rehydratePageKeyMap.js';
|
|
5
6
|
import { validateEntityGeneratedProperty } from './validateEntityGeneratedProperty.js';
|
|
6
|
-
import { isInt } from '../node_modules/radash/dist/esm/typed.js';
|
|
7
|
-
import { parallel } from '../node_modules/radash/dist/esm/async.js';
|
|
8
|
-
import { unique } from '../node_modules/radash/dist/esm/array.js';
|
|
9
7
|
|
|
10
8
|
const { compressToEncodedURIComponent, decompressFromEncodedURIComponent } = lzString;
|
|
11
9
|
/**
|