url-safe-bitpacking 0.1.15 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/enums/dataTypes.d.ts +4 -9
- package/dist/factory/arrayFactory.d.ts +2 -0
- package/dist/factory/enumArrayFactory.d.ts +1 -1
- package/dist/factory/enumFactory.d.ts +1 -1
- package/dist/factory/enumOptionsFactory.d.ts +2 -0
- package/dist/factory/factory.d.ts +8 -0
- package/dist/factory/optionalFactory.d.ts +2 -0
- package/dist/factory/utils.d.ts +9 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +434 -345
- package/dist/parsers/arrayParser.d.ts +4 -0
- package/dist/parsers/enumOptionsFactory.d.ts +4 -0
- package/dist/parsers/optionalParser.d.ts +4 -0
- package/dist/parsers/parsers.d.ts +16 -12
- package/dist/stateHandling/index.d.ts +1 -0
- package/dist/stateHandling/stateData.d.ts +3 -0
- package/dist/stateHandling/stateDataObject.d.ts +15 -0
- package/dist/typeFactory/stateDataTyping.d.ts +1 -9
- package/dist/types/arrayData.d.ts +10 -0
- package/dist/types/booleanData.d.ts +1 -2
- package/dist/types/dataEntry.d.ts +12 -5
- package/dist/types/enumArrayData.d.ts +2 -3
- package/dist/types/enumData.d.ts +2 -2
- package/dist/types/enumOptionsData.d.ts +8 -0
- package/dist/types/floatData.d.ts +1 -2
- package/dist/types/index.d.ts +7 -5
- package/dist/types/intData.d.ts +1 -2
- package/dist/types/optionalData.d.ts +7 -0
- package/dist/types/stateDataEntry.d.ts +16 -0
- package/dist/types/versionData.d.ts +1 -2
- package/dist/update/arrayUpdate.d.ts +2 -0
- package/dist/update/enumOptionsUpdate.d.ts +2 -0
- package/dist/update/nestedDataMatching.d.ts +2 -0
- package/dist/update/optionalUpdate.d.ts +2 -0
- package/dist/update/updateValues.d.ts +8 -1
- package/package.json +1 -1
- package/dist/objectmap/index.d.ts +0 -4
- package/dist/objectmap/stateDataModel.d.ts +0 -33
- package/dist/objectmap/stateValueHelperMethods.d.ts +0 -13
- package/dist/objectmap/userMethods.d.ts +0 -12
- package/dist/types/arrayDefinitions.d.ts +0 -58
- package/dist/types/semanticMapping.d.ts +0 -6
- package/dist/types/stateValueModel.d.ts +0 -33
package/dist/index.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
// src/enums/dataTypes.ts
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
DataType2[DataType2["VERSION"] = 0] = "VERSION";
|
|
5
|
-
DataType2[DataType2["BOOLEAN"] = 1] = "BOOLEAN";
|
|
6
|
-
DataType2[DataType2["ENUM"] = 2] = "ENUM";
|
|
7
|
-
DataType2[DataType2["INT"] = 3] = "INT";
|
|
8
|
-
DataType2[DataType2["FLOAT"] = 4] = "FLOAT";
|
|
9
|
-
DataType2[DataType2["ENUM_ARRAY"] = 5] = "ENUM_ARRAY";
|
|
10
|
-
})(DataType ||= {});
|
|
2
|
+
var DataTypeValues = ["VERSION", "BOOLEAN", "ENUM", "INT", "FLOAT", "ENUM_ARRAY"];
|
|
3
|
+
var ComplexDataValues = ["OPTIONAL", "ENUM_OPTIONS", "ARRAY"];
|
|
11
4
|
// src/types/floatData.ts
|
|
12
5
|
var SignificandMaxBits = 20;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
// src/types/enumData.ts
|
|
7
|
+
var EnumMaxBits = 8;
|
|
8
|
+
// src/types/intData.ts
|
|
9
|
+
var IntegerMaxBits = 12;
|
|
16
10
|
// src/types/dataEntry.ts
|
|
17
11
|
var PROTECTED_ATTRIBUTE_NAMES = [
|
|
18
12
|
"type",
|
|
@@ -26,14 +20,12 @@ var PROTECTED_ATTRIBUTE_NAMES = [
|
|
|
26
20
|
"precision",
|
|
27
21
|
"significand",
|
|
28
22
|
"minCount",
|
|
29
|
-
"maxCount"
|
|
23
|
+
"maxCount",
|
|
24
|
+
"state",
|
|
25
|
+
"stateBits",
|
|
26
|
+
"descriptor",
|
|
27
|
+
"mapping"
|
|
30
28
|
];
|
|
31
|
-
// src/types/enumData.ts
|
|
32
|
-
var EnumMaxBits = 8;
|
|
33
|
-
// src/types/intData.ts
|
|
34
|
-
var IntegerMaxBits = 12;
|
|
35
|
-
// src/types/versionData.ts
|
|
36
|
-
var VersionRange = [4, 6, 8, 10];
|
|
37
29
|
// src/factory/helperMethod.ts
|
|
38
30
|
var getBitsForIntegerNumber = (number, maxBits) => {
|
|
39
31
|
const bitCount = Math.ceil(Math.log2(number));
|
|
@@ -41,14 +33,7 @@ var getBitsForIntegerNumber = (number, maxBits) => {
|
|
|
41
33
|
throw new Error(`Cannot get ${maxBits} bits for a number with ${bitCount} bits`);
|
|
42
34
|
return bitCount;
|
|
43
35
|
};
|
|
44
|
-
var getMinimumBitsForInteger = (v) => Math.ceil(Math.log2(v));
|
|
45
|
-
var getVersionValueRangeValueForNumber = (v) => {
|
|
46
|
-
const minBits = getMinimumBitsForInteger(v);
|
|
47
|
-
const versionBits = VersionRange.find((x) => x >= minBits);
|
|
48
|
-
if (versionBits === undefined)
|
|
49
|
-
throw new Error(`Cannot find version range for ${v}, max amount of versions allowed is ${2 ** VersionRange[VersionRange.length - 1]}`);
|
|
50
|
-
return versionBits;
|
|
51
|
-
};
|
|
36
|
+
var getMinimumBitsForInteger = (v) => Math.ceil(Math.log2(v + 1));
|
|
52
37
|
|
|
53
38
|
// src/factory/floatFactory.ts
|
|
54
39
|
var create = (value, min = 0, max = 1, precision = 2, name = "", index = -1) => {
|
|
@@ -59,7 +44,7 @@ var create = (value, min = 0, max = 1, precision = 2, name = "", index = -1) =>
|
|
|
59
44
|
const significand = Math.max(1, getBitsForIntegerNumber(delta, SignificandMaxBits));
|
|
60
45
|
return {
|
|
61
46
|
value,
|
|
62
|
-
type:
|
|
47
|
+
type: "FLOAT",
|
|
63
48
|
min: roundedMin / precisionMultiplier,
|
|
64
49
|
max: roundedMax / precisionMultiplier,
|
|
65
50
|
precision,
|
|
@@ -78,45 +63,59 @@ var create2 = (value, min = 0, max = 10, name = "", index = -1) => {
|
|
|
78
63
|
if (Math.abs(max - min) > 2 ** IntegerMaxBits - 1)
|
|
79
64
|
throw new Error("max - min must be less than 1024");
|
|
80
65
|
const bits = getBitsForIntegerNumber(max - min + 1, IntegerMaxBits);
|
|
81
|
-
return { value, type:
|
|
66
|
+
return { value, type: "INT", min, max, bits, name, index };
|
|
82
67
|
};
|
|
83
68
|
|
|
84
69
|
// src/factory/booleanFactory.ts
|
|
85
|
-
var create3 = (value, name = "", index = -1) => ({
|
|
70
|
+
var create3 = (value, name = "", index = -1) => ({
|
|
71
|
+
value,
|
|
72
|
+
type: "BOOLEAN",
|
|
73
|
+
name,
|
|
74
|
+
index
|
|
75
|
+
});
|
|
86
76
|
|
|
87
77
|
// src/factory/versionFactory.ts
|
|
88
78
|
var create4 = (value, bits = 8, name = "", index = -1) => ({
|
|
89
79
|
value,
|
|
90
|
-
type:
|
|
80
|
+
type: "VERSION",
|
|
91
81
|
bits,
|
|
92
82
|
name,
|
|
93
83
|
index
|
|
94
84
|
});
|
|
95
85
|
|
|
86
|
+
// src/factory/utils.ts
|
|
87
|
+
var getOptionsFromEnumOptions = (options) => {
|
|
88
|
+
if (typeof options === "string")
|
|
89
|
+
return { max: options.length - 1, mapping: options.split(",").map(Number) };
|
|
90
|
+
if (typeof options === "number")
|
|
91
|
+
return { max: options, mapping: Array.from({ length: options + 1 }, (_, i) => i) };
|
|
92
|
+
return { max: options.length - 1, mapping: options };
|
|
93
|
+
};
|
|
94
|
+
|
|
96
95
|
// src/factory/enumFactory.ts
|
|
97
|
-
var create5 = (value,
|
|
96
|
+
var create5 = (value, options, name = "", index = -1) => {
|
|
97
|
+
const { max, mapping } = getOptionsFromEnumOptions(options);
|
|
98
98
|
if (!Number.isInteger(max))
|
|
99
|
-
throw new Error(
|
|
99
|
+
throw new Error(`max must be integers, you have given ${max}`);
|
|
100
100
|
if (max < 1)
|
|
101
101
|
throw new Error("max must be at least one");
|
|
102
102
|
if (max > 2 ** EnumMaxBits - 1)
|
|
103
103
|
throw new Error("max - min must be less than 256");
|
|
104
104
|
const bits = getBitsForIntegerNumber(max + 1, EnumMaxBits);
|
|
105
|
-
return { value, type:
|
|
105
|
+
return { value, type: "ENUM", max, bits, name, index, mapping };
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
// src/factory/enumArrayFactory.ts
|
|
109
|
-
var create6 = (value,
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
var create6 = (value, options, minCount = 1, maxCount = 10, name = "", index = -1) => {
|
|
110
|
+
const { max, mapping } = getOptionsFromEnumOptions(options);
|
|
111
|
+
if (!Number.isInteger(max))
|
|
112
|
+
throw new Error(`max must be integers, you have given ${max}`);
|
|
112
113
|
if (!Number.isInteger(minCount) || !Number.isInteger(maxCount))
|
|
113
114
|
throw new Error("minCount and maxCount must be integers");
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (max
|
|
117
|
-
throw new Error(
|
|
118
|
-
if (Math.abs(max - min) > 2 ** IntegerMaxBits - 1)
|
|
119
|
-
throw new Error("range length must be less than 1024");
|
|
115
|
+
if (max < 1)
|
|
116
|
+
throw new Error("must have at least two options");
|
|
117
|
+
if (max > 2 ** IntegerMaxBits - 1)
|
|
118
|
+
throw new Error(`maximum allowed options is 1024, you have given ${max + 1} options`);
|
|
120
119
|
minCount = Math.min(minCount, maxCount);
|
|
121
120
|
maxCount = Math.max(minCount, maxCount);
|
|
122
121
|
if (minCount < 1)
|
|
@@ -128,12 +127,85 @@ var create6 = (value, min = 0, max = 10, minCount = 1, maxCount = 10, name = "",
|
|
|
128
127
|
value.forEach((v, i) => {
|
|
129
128
|
if (!Number.isInteger(v))
|
|
130
129
|
throw new Error(`all entries must be integers, index ${i} (${v}) is not`);
|
|
131
|
-
if (v
|
|
132
|
-
throw new Error(`all entries must be within the range ${
|
|
130
|
+
if (v > max)
|
|
131
|
+
throw new Error(`all entries must be within the range ${0} - ${max}, index ${i} (${v}) is not`);
|
|
133
132
|
});
|
|
134
133
|
if (value.length < minCount || value.length > maxCount)
|
|
135
134
|
throw new Error(`value length must be between minCount and maxCount, ${value.length} is not between ${minCount} and ${maxCount}`);
|
|
136
|
-
return {
|
|
135
|
+
return {
|
|
136
|
+
type: "ENUM_ARRAY",
|
|
137
|
+
minCount,
|
|
138
|
+
maxCount,
|
|
139
|
+
value: JSON.parse(JSON.stringify(value)),
|
|
140
|
+
max,
|
|
141
|
+
name,
|
|
142
|
+
index,
|
|
143
|
+
mapping
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// src/factory/optionalFactory.ts
|
|
148
|
+
var create7 = (descriptor, defaultState = false, name = "", index = -1) => {
|
|
149
|
+
if (descriptor[0] === null && descriptor[1] === null)
|
|
150
|
+
throw new Error("descriptor must have at least one non-null value");
|
|
151
|
+
if (descriptor[0] !== null && descriptor[1] !== null)
|
|
152
|
+
throw new Error("descriptor must have only one non-null value");
|
|
153
|
+
return {
|
|
154
|
+
type: "OPTIONAL",
|
|
155
|
+
state: defaultState,
|
|
156
|
+
descriptor,
|
|
157
|
+
value: JSON.parse(JSON.stringify(defaultState ? descriptor[1] : descriptor[0])),
|
|
158
|
+
name,
|
|
159
|
+
index
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// src/factory/enumOptionsFactory.ts
|
|
164
|
+
var maxEnumOptions = 64;
|
|
165
|
+
var maxEnumOptionsBits = getMinimumBitsForInteger(maxEnumOptions);
|
|
166
|
+
var create8 = (descriptor, defaultState = 0, name = "", index = -1) => {
|
|
167
|
+
if (descriptor.length < 2)
|
|
168
|
+
throw new Error("descriptor must have at least two entries");
|
|
169
|
+
if (descriptor.length - 1 < defaultState)
|
|
170
|
+
throw new Error("defaultState must be less than the length of the descriptor");
|
|
171
|
+
return {
|
|
172
|
+
value: JSON.parse(JSON.stringify(descriptor[defaultState])),
|
|
173
|
+
descriptor,
|
|
174
|
+
name,
|
|
175
|
+
index,
|
|
176
|
+
type: "ENUM_OPTIONS",
|
|
177
|
+
stateBits: getBitsForIntegerNumber(descriptor.length, maxEnumOptionsBits),
|
|
178
|
+
state: defaultState
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// src/factory/arrayFactory.ts
|
|
183
|
+
var maxArrayCount = 64;
|
|
184
|
+
var create9 = (descriptor, defaultState = 0, minCount = 0, maxCount = 10, name = "", index = -1) => {
|
|
185
|
+
if (!Number.isInteger(minCount) || !Number.isInteger(maxCount))
|
|
186
|
+
throw new Error("minCount and maxCount must be integers");
|
|
187
|
+
if (minCount < 0)
|
|
188
|
+
throw new Error("minCount must be at least 0");
|
|
189
|
+
if (maxCount < 0)
|
|
190
|
+
throw new Error("maxCount must be at least 0");
|
|
191
|
+
if (maxCount - minCount < 0)
|
|
192
|
+
throw new Error("maxCount must be greater than or equal to minCount");
|
|
193
|
+
if (maxCount - minCount > maxArrayCount)
|
|
194
|
+
throw new Error(`maxCount (${maxCount}) - minCount (${minCount}) = ${maxCount - minCount} must be less than or equal to maxArrayCount (${maxArrayCount})`);
|
|
195
|
+
if (defaultState < minCount || defaultState > maxCount)
|
|
196
|
+
throw new Error(`defaultState must be between minCount (${minCount}) and maxCount (${maxCount}), given defaultState is ${defaultState}`);
|
|
197
|
+
const stateBits = getMinimumBitsForInteger(maxCount - minCount);
|
|
198
|
+
return {
|
|
199
|
+
value: [...Array(defaultState)].map(() => JSON.parse(JSON.stringify(descriptor))),
|
|
200
|
+
descriptor,
|
|
201
|
+
type: "ARRAY",
|
|
202
|
+
minCount,
|
|
203
|
+
maxCount,
|
|
204
|
+
stateBits,
|
|
205
|
+
state: defaultState,
|
|
206
|
+
name,
|
|
207
|
+
index
|
|
208
|
+
};
|
|
137
209
|
};
|
|
138
210
|
|
|
139
211
|
// src/factory/factory.ts
|
|
@@ -145,6 +217,11 @@ var DataEntryFactory = {
|
|
|
145
217
|
createVersion: create4,
|
|
146
218
|
createEnumArray: create6
|
|
147
219
|
};
|
|
220
|
+
var ComplexDataEntryFactory = {
|
|
221
|
+
createOptional: create7,
|
|
222
|
+
createEnumOptions: create8,
|
|
223
|
+
createArray: create9
|
|
224
|
+
};
|
|
148
225
|
// src/parsers/intParser.ts
|
|
149
226
|
var getBitsCount = (intData2) => intData2.bits;
|
|
150
227
|
var rawValueParser = (stateString, bitCount) => {
|
|
@@ -225,81 +302,124 @@ var rawParser5 = (stateString) => rawValueParser3(stateString);
|
|
|
225
302
|
var rawStringifier5 = (value) => value ? "1" : "0";
|
|
226
303
|
|
|
227
304
|
// src/parsers/enumArrayParser.ts
|
|
228
|
-
var getCountBitsCount = (
|
|
305
|
+
var getCountBitsCount = (enumArrayData2) => getBitsForIntegerNumber(enumArrayData2.maxCount - enumArrayData2.minCount + 1, IntegerMaxBits);
|
|
229
306
|
var getNumberBitsCountForBase = (count, base) => getBitsForEnumArrayCountOfBase(count, base);
|
|
230
|
-
var getEnumArrayBase = (
|
|
231
|
-
var getCount = (
|
|
232
|
-
const countBits = getCountBitsCount(
|
|
307
|
+
var getEnumArrayBase = (enumArrayData2) => enumArrayData2.max + 1;
|
|
308
|
+
var getCount = (enumArrayData2, bitString) => {
|
|
309
|
+
const countBits = getCountBitsCount(enumArrayData2);
|
|
233
310
|
if (countBits === 0)
|
|
234
|
-
return
|
|
235
|
-
return rawValueParser(bitString.slice(0, countBits), countBits) +
|
|
311
|
+
return enumArrayData2.minCount;
|
|
312
|
+
return rawValueParser(bitString.slice(0, countBits), countBits) + enumArrayData2.minCount;
|
|
236
313
|
};
|
|
237
|
-
var getBitsCount6 = (
|
|
238
|
-
const countBits = getCountBitsCount(
|
|
239
|
-
const count = getCount(
|
|
240
|
-
const valuesBitCount = getNumberBitsCountForBase(count, getEnumArrayBase(
|
|
314
|
+
var getBitsCount6 = (enumArrayData2, bitString) => {
|
|
315
|
+
const countBits = getCountBitsCount(enumArrayData2);
|
|
316
|
+
const count = getCount(enumArrayData2, bitString);
|
|
317
|
+
const valuesBitCount = getNumberBitsCountForBase(count, getEnumArrayBase(enumArrayData2));
|
|
241
318
|
return countBits + valuesBitCount;
|
|
242
319
|
};
|
|
243
|
-
var rawParser6 = (bitString,
|
|
244
|
-
const countBits = getCountBitsCount(
|
|
245
|
-
const count = getCount(
|
|
246
|
-
const base = getEnumArrayBase(
|
|
320
|
+
var rawParser6 = (bitString, enumArrayData2) => {
|
|
321
|
+
const countBits = getCountBitsCount(enumArrayData2);
|
|
322
|
+
const count = getCount(enumArrayData2, bitString);
|
|
323
|
+
const base = getEnumArrayBase(enumArrayData2);
|
|
247
324
|
const valuesBitCount = getNumberBitsCountForBase(count, base);
|
|
248
|
-
|
|
249
|
-
return value.map((v) => v + enumArrayData.min);
|
|
325
|
+
return convertBitStringToArbitraryBase(bitString.slice(countBits, countBits + valuesBitCount), base, count);
|
|
250
326
|
};
|
|
251
|
-
var rawStringifier6 = (value,
|
|
252
|
-
const countBits = getCountBitsCount(
|
|
327
|
+
var rawStringifier6 = (value, enumArrayData2) => {
|
|
328
|
+
const countBits = getCountBitsCount(enumArrayData2);
|
|
253
329
|
const count = value.length;
|
|
254
|
-
const base = getEnumArrayBase(
|
|
255
|
-
const countBitstring = countBits ? rawIntStringifier(count -
|
|
256
|
-
const enumArrayBitstring = convertArbitraryBaseToBitString(value
|
|
330
|
+
const base = getEnumArrayBase(enumArrayData2);
|
|
331
|
+
const countBitstring = countBits ? rawIntStringifier(count - enumArrayData2.minCount, countBits) : "";
|
|
332
|
+
const enumArrayBitstring = convertArbitraryBaseToBitString(value, base);
|
|
257
333
|
return countBitstring + enumArrayBitstring;
|
|
258
334
|
};
|
|
259
335
|
|
|
336
|
+
// src/parsers/arrayParser.ts
|
|
337
|
+
var getCount2 = (arrayData2, bitString) => {
|
|
338
|
+
if (arrayData2.stateBits === 0)
|
|
339
|
+
return arrayData2.minCount;
|
|
340
|
+
return rawValueParser(bitString.slice(0, arrayData2.stateBits), arrayData2.stateBits) + arrayData2.minCount;
|
|
341
|
+
};
|
|
342
|
+
var rawParser7 = (bitString, arrayData2) => {
|
|
343
|
+
const state = getCount2(arrayData2, bitString);
|
|
344
|
+
bitString = bitString.slice(arrayData2.stateBits);
|
|
345
|
+
const value = [];
|
|
346
|
+
for (let i = 0;i < state; i++) {
|
|
347
|
+
const [nestedData, remainingBitstring] = nestedDataBitstringParser(bitString, arrayData2.descriptor);
|
|
348
|
+
value.push(nestedData);
|
|
349
|
+
bitString = remainingBitstring;
|
|
350
|
+
}
|
|
351
|
+
return [{ ...arrayData2, value, state }, bitString];
|
|
352
|
+
};
|
|
353
|
+
var rawStateStringifier = (arrayData2) => arrayData2.stateBits ? rawIntStringifier(arrayData2.value.length - arrayData2.minCount, arrayData2.stateBits) : "";
|
|
354
|
+
|
|
355
|
+
// src/parsers/optionalParser.ts
|
|
356
|
+
var getState = (bitString) => Number(bitString.slice(0, 1));
|
|
357
|
+
var rawParser8 = (bitString, optionalData2) => {
|
|
358
|
+
const descriptorIndex = getState(bitString);
|
|
359
|
+
bitString = bitString.slice(1);
|
|
360
|
+
const [value, remainingBitstring] = optionalData2.descriptor[descriptorIndex] ? nestedDataBitstringParser(bitString, optionalData2.descriptor[descriptorIndex]) : [null, bitString];
|
|
361
|
+
const state = Boolean(descriptorIndex);
|
|
362
|
+
return [{ ...optionalData2, value, state }, remainingBitstring];
|
|
363
|
+
};
|
|
364
|
+
var rawStateStringifier2 = (optionalData2) => optionalData2.state ? "1" : "0";
|
|
365
|
+
|
|
366
|
+
// src/parsers/enumOptionsFactory.ts
|
|
367
|
+
var getStateIndex = (enumOptionsData2, bitString) => {
|
|
368
|
+
if (enumOptionsData2.stateBits === 0)
|
|
369
|
+
return 0;
|
|
370
|
+
return rawValueParser(bitString.slice(0, enumOptionsData2.stateBits), enumOptionsData2.stateBits);
|
|
371
|
+
};
|
|
372
|
+
var rawParser9 = (bitString, enumOptionsData2) => {
|
|
373
|
+
const state = getStateIndex(enumOptionsData2, bitString);
|
|
374
|
+
bitString = bitString.slice(enumOptionsData2.stateBits);
|
|
375
|
+
const [value, remainingBitstring] = nestedDataBitstringParser(bitString, enumOptionsData2.descriptor[state]);
|
|
376
|
+
return [{ ...enumOptionsData2, value, state }, remainingBitstring];
|
|
377
|
+
};
|
|
378
|
+
var rawStateStringifier3 = (enumOptionsData2) => rawIntStringifier(enumOptionsData2.state, enumOptionsData2.stateBits);
|
|
379
|
+
|
|
260
380
|
// src/parsers/parsers.ts
|
|
261
381
|
var valueBitsParser = (bitString, mapData) => {
|
|
262
382
|
switch (mapData.type) {
|
|
263
|
-
case
|
|
383
|
+
case "BOOLEAN":
|
|
264
384
|
return rawParser5(bitString);
|
|
265
|
-
case
|
|
385
|
+
case "INT":
|
|
266
386
|
return rawParser(bitString, mapData);
|
|
267
|
-
case
|
|
387
|
+
case "ENUM":
|
|
268
388
|
return rawParser3(bitString, mapData);
|
|
269
|
-
case
|
|
389
|
+
case "FLOAT":
|
|
270
390
|
return rawParser2(bitString, mapData);
|
|
271
|
-
case
|
|
391
|
+
case "VERSION":
|
|
272
392
|
return rawParser4(bitString, mapData);
|
|
273
|
-
case
|
|
393
|
+
case "ENUM_ARRAY":
|
|
274
394
|
return rawParser6(bitString, mapData);
|
|
275
395
|
}
|
|
276
396
|
};
|
|
277
397
|
var dataBitsParser = (rawString, mapData) => {
|
|
278
398
|
switch (mapData.type) {
|
|
279
|
-
case
|
|
399
|
+
case "BOOLEAN":
|
|
280
400
|
return { ...mapData, value: valueBitsParser(rawString, mapData) };
|
|
281
|
-
case
|
|
282
|
-
case
|
|
283
|
-
case
|
|
284
|
-
case
|
|
401
|
+
case "ENUM":
|
|
402
|
+
case "INT":
|
|
403
|
+
case "FLOAT":
|
|
404
|
+
case "VERSION":
|
|
285
405
|
return { ...mapData, value: valueBitsParser(rawString, mapData) };
|
|
286
|
-
case
|
|
406
|
+
case "ENUM_ARRAY":
|
|
287
407
|
return { ...mapData, value: valueBitsParser(rawString, mapData) };
|
|
288
408
|
}
|
|
289
409
|
};
|
|
290
410
|
var getBitsCount7 = (mapData, bitString) => {
|
|
291
411
|
switch (mapData.type) {
|
|
292
|
-
case
|
|
412
|
+
case "BOOLEAN":
|
|
293
413
|
return getBitsCount5();
|
|
294
|
-
case
|
|
414
|
+
case "INT":
|
|
295
415
|
return getBitsCount(mapData);
|
|
296
|
-
case
|
|
416
|
+
case "FLOAT":
|
|
297
417
|
return getBitsCount2(mapData);
|
|
298
|
-
case
|
|
418
|
+
case "VERSION":
|
|
299
419
|
return getBitsCount4(mapData);
|
|
300
|
-
case
|
|
420
|
+
case "ENUM":
|
|
301
421
|
return getBitsCount3(mapData);
|
|
302
|
-
case
|
|
422
|
+
case "ENUM_ARRAY":
|
|
303
423
|
return getBitsCount6(mapData, bitString);
|
|
304
424
|
}
|
|
305
425
|
};
|
|
@@ -307,22 +427,50 @@ var dataEntryBitstringParser = (bitstring, dataEntry2) => [
|
|
|
307
427
|
dataBitsParser(bitstring.slice(0, getBitsCount7(dataEntry2, bitstring)), dataEntry2),
|
|
308
428
|
bitstring.slice(getBitsCount7(dataEntry2, bitstring))
|
|
309
429
|
];
|
|
430
|
+
var nestedDataBitstringParser = (bitstring, descriptor) => {
|
|
431
|
+
const resultingNestedData = descriptor.map((data) => {
|
|
432
|
+
const [resultingData, remainingBitstring] = ComplexDataValues.includes(data.type) ? complexDataEntryBitstringParser(bitstring, data) : dataEntryBitstringParser(bitstring, data);
|
|
433
|
+
bitstring = remainingBitstring;
|
|
434
|
+
return resultingData;
|
|
435
|
+
});
|
|
436
|
+
return [resultingNestedData, bitstring];
|
|
437
|
+
};
|
|
438
|
+
var complexDataEntryBitstringParser = (bitstring, complexDataEntry) => {
|
|
439
|
+
switch (complexDataEntry.type) {
|
|
440
|
+
case "ARRAY":
|
|
441
|
+
return rawParser7(bitstring, complexDataEntry);
|
|
442
|
+
case "OPTIONAL":
|
|
443
|
+
return rawParser8(bitstring, complexDataEntry);
|
|
444
|
+
case "ENUM_OPTIONS":
|
|
445
|
+
return rawParser9(bitstring, complexDataEntry);
|
|
446
|
+
}
|
|
447
|
+
};
|
|
310
448
|
var dataBitsStringifier = (data) => {
|
|
311
449
|
switch (data.type) {
|
|
312
|
-
case
|
|
450
|
+
case "BOOLEAN":
|
|
313
451
|
return rawStringifier5(data.value);
|
|
314
|
-
case
|
|
452
|
+
case "INT":
|
|
315
453
|
return rawStringifier(data.value, data);
|
|
316
|
-
case
|
|
454
|
+
case "FLOAT":
|
|
317
455
|
return rawStringifier2(data.value, data);
|
|
318
|
-
case
|
|
456
|
+
case "VERSION":
|
|
319
457
|
return rawStringifier4(data.value, data);
|
|
320
|
-
case
|
|
458
|
+
case "ENUM":
|
|
321
459
|
return rawStringifier3(data.value, data);
|
|
322
|
-
case
|
|
460
|
+
case "ENUM_ARRAY":
|
|
323
461
|
return rawStringifier6(data.value, data);
|
|
324
462
|
}
|
|
325
463
|
};
|
|
464
|
+
var complexDataStateStringifier = (complexDataEntry) => {
|
|
465
|
+
switch (complexDataEntry.type) {
|
|
466
|
+
case "ARRAY":
|
|
467
|
+
return rawStateStringifier(complexDataEntry);
|
|
468
|
+
case "OPTIONAL":
|
|
469
|
+
return rawStateStringifier2(complexDataEntry);
|
|
470
|
+
case "ENUM_OPTIONS":
|
|
471
|
+
return rawStateStringifier3(complexDataEntry);
|
|
472
|
+
}
|
|
473
|
+
};
|
|
326
474
|
var dataEntryCorrecting = (dataEntry2) => dataBitsParser(dataBitsStringifier(dataEntry2), dataEntry2);
|
|
327
475
|
var base64url = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
328
476
|
var getBitsForEnumArrayCountOfBase = (count, base) => Math.ceil(Math.log2(base) * count);
|
|
@@ -359,34 +507,22 @@ var parseBase64ToBits = (base64) => {
|
|
|
359
507
|
const chunks = numbers.map((n) => n.toString(2).padStart(6, "0"));
|
|
360
508
|
return chunks.join("");
|
|
361
509
|
};
|
|
362
|
-
var dataArrayStringifier = (dataEntryArray) => {
|
|
363
|
-
return dataEntryArray.map(dataBitsStringifier).join("");
|
|
364
|
-
};
|
|
365
510
|
// src/update/floatUpdate.ts
|
|
366
511
|
var updateValue = (original, update) => {
|
|
367
|
-
|
|
368
|
-
return
|
|
369
|
-
...original,
|
|
370
|
-
value
|
|
371
|
-
};
|
|
512
|
+
original.value = Math.max(Math.min(update.value, original.max), original.min);
|
|
513
|
+
return original;
|
|
372
514
|
};
|
|
373
515
|
|
|
374
516
|
// src/update/intUpdate.ts
|
|
375
517
|
var updateValue2 = (original, update) => {
|
|
376
|
-
|
|
377
|
-
return
|
|
378
|
-
...original,
|
|
379
|
-
value
|
|
380
|
-
};
|
|
518
|
+
original.value = Math.max(Math.min(update.value, original.max), original.min);
|
|
519
|
+
return original;
|
|
381
520
|
};
|
|
382
521
|
|
|
383
522
|
// src/update/enumUpdate.ts
|
|
384
523
|
var updateValue3 = (original, update) => {
|
|
385
|
-
|
|
386
|
-
return
|
|
387
|
-
...original,
|
|
388
|
-
value
|
|
389
|
-
};
|
|
524
|
+
original.value = Math.min(original.max, update.value);
|
|
525
|
+
return original;
|
|
390
526
|
};
|
|
391
527
|
|
|
392
528
|
// src/update/versionUpdate.ts
|
|
@@ -399,18 +535,55 @@ var updateValue4 = (original, update) => {
|
|
|
399
535
|
};
|
|
400
536
|
|
|
401
537
|
// src/update/booleanUpdate.ts
|
|
402
|
-
var updateValue5 = (original, update) =>
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
538
|
+
var updateValue5 = (original, update) => {
|
|
539
|
+
original.value = update.value;
|
|
540
|
+
return original;
|
|
541
|
+
};
|
|
406
542
|
|
|
407
543
|
// src/update/enumArrayUpdate.ts
|
|
408
544
|
var updateValue6 = (original, update) => {
|
|
409
|
-
const
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
545
|
+
const count = Math.max(Math.min(update.value.length, original.maxCount), original.minCount);
|
|
546
|
+
original.value = [...new Array(count)].map((_, i) => Math.min(update.value[i] ?? 0, original.max));
|
|
547
|
+
return original;
|
|
548
|
+
};
|
|
549
|
+
|
|
550
|
+
// src/update/nestedDataMatching.ts
|
|
551
|
+
var updateNestedData = (original, descriptor) => {
|
|
552
|
+
const descriptorClone = JSON.parse(JSON.stringify(descriptor));
|
|
553
|
+
if (!original)
|
|
554
|
+
return descriptorClone;
|
|
555
|
+
return descriptorClone.map((d, i) => original[i]?.type === d.type && original[i]?.name === d.name ? DataTypeValues.includes(original[i].type) ? updateValue7(d, original[i]) : updateComplexValue(d, original[i]) : d);
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
// src/update/optionalUpdate.ts
|
|
559
|
+
var updateComplexValue2 = (original, update) => {
|
|
560
|
+
if (update.descriptor[Number(original.state)] !== null && original.value !== null) {
|
|
561
|
+
original.state = update.state;
|
|
562
|
+
original.value.length = 0;
|
|
563
|
+
original.value.push(...updateNestedData(update.value, original.descriptor[Number(update.state)]));
|
|
564
|
+
}
|
|
565
|
+
return original;
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
// src/update/enumOptionsUpdate.ts
|
|
569
|
+
var updateComplexValue3 = (original, update) => {
|
|
570
|
+
if (update.state <= original.descriptor.length - 1) {
|
|
571
|
+
original.value.length = 0;
|
|
572
|
+
original.value.push(...updateNestedData(update.value, original.descriptor[update.state]));
|
|
573
|
+
original.state = update.state;
|
|
574
|
+
}
|
|
575
|
+
return original;
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
// src/update/arrayUpdate.ts
|
|
579
|
+
var updateComplexValue4 = (original, update) => {
|
|
580
|
+
if (update.state >= original.minCount && update.state <= original.maxCount) {
|
|
581
|
+
original.state = update.state;
|
|
582
|
+
original.value.length = 0;
|
|
583
|
+
for (let i = 0;i < original.state; i++)
|
|
584
|
+
original.value.push(updateNestedData(update.value[i], original.descriptor));
|
|
585
|
+
}
|
|
586
|
+
return original;
|
|
414
587
|
};
|
|
415
588
|
|
|
416
589
|
// src/update/updateValues.ts
|
|
@@ -418,281 +591,197 @@ var updateValue7 = (original, update) => {
|
|
|
418
591
|
if (original.type !== update.type)
|
|
419
592
|
throw new Error("Types do not match");
|
|
420
593
|
switch (original.type) {
|
|
421
|
-
case
|
|
594
|
+
case "FLOAT":
|
|
422
595
|
return updateValue(original, update);
|
|
423
|
-
case
|
|
596
|
+
case "INT":
|
|
424
597
|
return updateValue2(original, update);
|
|
425
|
-
case
|
|
598
|
+
case "ENUM":
|
|
426
599
|
return updateValue3(original, update);
|
|
427
|
-
case
|
|
600
|
+
case "BOOLEAN":
|
|
428
601
|
return updateValue5(original, update);
|
|
429
|
-
case
|
|
602
|
+
case "VERSION":
|
|
430
603
|
return updateValue4(original, update);
|
|
431
|
-
case
|
|
604
|
+
case "ENUM_ARRAY":
|
|
432
605
|
return updateValue6(original, update);
|
|
433
606
|
}
|
|
434
607
|
};
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
var
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
608
|
+
var updateComplexValue = (original, update) => {
|
|
609
|
+
if (original.type !== update.type)
|
|
610
|
+
throw new Error("Types do not match");
|
|
611
|
+
switch (original.type) {
|
|
612
|
+
case "OPTIONAL":
|
|
613
|
+
return updateComplexValue2(original, update);
|
|
614
|
+
case "ENUM_OPTIONS":
|
|
615
|
+
return updateComplexValue3(original, update);
|
|
616
|
+
case "ARRAY":
|
|
617
|
+
return updateComplexValue4(original, update);
|
|
618
|
+
}
|
|
619
|
+
};
|
|
620
|
+
// src/stateHandling/stateData.ts
|
|
621
|
+
var getStateData = (state) => {
|
|
622
|
+
const object = {};
|
|
623
|
+
state.forEach((item) => {
|
|
624
|
+
switch (item.type) {
|
|
625
|
+
case "BOOLEAN":
|
|
626
|
+
object[item.name] = item.value;
|
|
627
|
+
break;
|
|
628
|
+
case "INT":
|
|
629
|
+
object[item.name] = item.value;
|
|
630
|
+
break;
|
|
631
|
+
case "ENUM":
|
|
632
|
+
object[item.name] = item.mapping[item.value];
|
|
633
|
+
break;
|
|
634
|
+
case "FLOAT":
|
|
635
|
+
object[item.name] = item.value;
|
|
636
|
+
break;
|
|
637
|
+
case "VERSION":
|
|
638
|
+
object[item.name] = item.value;
|
|
639
|
+
break;
|
|
640
|
+
case "ENUM_ARRAY":
|
|
641
|
+
object[item.name] = item.value.map((v) => item.mapping[v]);
|
|
642
|
+
break;
|
|
643
|
+
case "OPTIONAL":
|
|
644
|
+
object[item.name] = item.value === null ? null : getStateData(item.value);
|
|
645
|
+
break;
|
|
646
|
+
case "ENUM_OPTIONS":
|
|
647
|
+
object[item.name] = {
|
|
648
|
+
...getStateData(item.value),
|
|
649
|
+
state: item.state
|
|
650
|
+
};
|
|
651
|
+
break;
|
|
652
|
+
case "ARRAY":
|
|
653
|
+
object[item.name] = item.value.map(getStateData);
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
});
|
|
657
|
+
return object;
|
|
658
|
+
};
|
|
470
659
|
|
|
471
|
-
// src/
|
|
472
|
-
var
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
var
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
660
|
+
// src/stateHandling/stateDataObject.ts
|
|
661
|
+
var getBitstringForStateDataEntry = (stateDataEntry2) => {
|
|
662
|
+
switch (stateDataEntry2.type) {
|
|
663
|
+
case "BOOLEAN":
|
|
664
|
+
case "INT":
|
|
665
|
+
case "ENUM":
|
|
666
|
+
case "FLOAT":
|
|
667
|
+
case "VERSION":
|
|
668
|
+
case "ENUM_ARRAY":
|
|
669
|
+
return stateDataEntry2.bitstring = stateDataEntry2.bitstring ?? dataBitsStringifier(stateDataEntry2);
|
|
670
|
+
case "OPTIONAL":
|
|
671
|
+
return stateDataEntry2.value === null ? complexDataStateStringifier(stateDataEntry2) : complexDataStateStringifier(stateDataEntry2) + getBitstringForStateNestedData(stateDataEntry2.value);
|
|
672
|
+
case "ENUM_OPTIONS":
|
|
673
|
+
return complexDataStateStringifier(stateDataEntry2) + getBitstringForStateNestedData(stateDataEntry2.value);
|
|
674
|
+
case "ARRAY":
|
|
675
|
+
return complexDataStateStringifier(stateDataEntry2) + stateDataEntry2.value.map((vs) => getBitstringForStateNestedData(vs)).join("");
|
|
676
|
+
}
|
|
677
|
+
};
|
|
678
|
+
var getBitstringForStateNestedData = (nestedData) => nestedData.map(getBitstringForStateDataEntry).join("");
|
|
679
|
+
var setComplexDataEntryValuesAsStateDataEntry = (currenEntry, updateCallback) => {
|
|
680
|
+
switch (currenEntry.type) {
|
|
681
|
+
case "OPTIONAL":
|
|
682
|
+
currenEntry.value = currenEntry.value === null ? null : currenEntry.value.map((v) => getStateDataEntry(v, updateCallback));
|
|
683
|
+
break;
|
|
684
|
+
case "ARRAY":
|
|
685
|
+
currenEntry.value = currenEntry.value.map((vs) => vs.map((v) => getStateDataEntry(v, updateCallback)));
|
|
686
|
+
break;
|
|
687
|
+
case "ENUM_OPTIONS":
|
|
688
|
+
currenEntry.value = currenEntry.value.map((v) => getStateDataEntry(v, updateCallback));
|
|
689
|
+
break;
|
|
498
690
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
};
|
|
502
|
-
var
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
if (eedt.length - 2 < Math.round(eedt[0]))
|
|
520
|
-
throw new Error(`given default value (${eedt[0]}) was larger than the amount of options available, using the largest value (${eedt.length - 2}) instead`);
|
|
521
|
-
if (eedt[0] < 0)
|
|
522
|
-
throw new Error(`given default value (${eedt[0]}) was negative, using first index (0) instead`);
|
|
523
|
-
const [updatedLocalAdditionalData, [__, s]] = internalGetDataEntry(DataEntryFactory.createEnum(Math.max(Math.min(eedt.length - 2, Math.round(eedt[0])), 0), eedt.length - 1, attributeName), prefix, additionalData);
|
|
524
|
-
const [nestedAdditionalData, [_, v]] = getStateDateFromSingleLevelContentTypeArray(eedt[1 + s.value], s.internalName, attributeName)(updatedLocalAdditionalData);
|
|
525
|
-
return [
|
|
526
|
-
nestedAdditionalData,
|
|
527
|
-
[
|
|
528
|
-
attributeName,
|
|
529
|
-
{
|
|
530
|
-
s,
|
|
531
|
-
v
|
|
532
|
-
}
|
|
533
|
-
]
|
|
534
|
-
];
|
|
535
|
-
};
|
|
536
|
-
var getStateFromArrayEntryDataType = (aedt, prefix, attributeName) => (additionalData) => {
|
|
537
|
-
const [min, max] = [aedt[0][0], aedt[0][1]].sort((a, b) => a - b);
|
|
538
|
-
const [updatedAdditionalData, [__, s]] = internalGetDataEntry(DataEntryFactory.createInt(min, min, max, attributeName), prefix, additionalData);
|
|
539
|
-
const v = [];
|
|
540
|
-
let localAdditionalData = updatedAdditionalData;
|
|
541
|
-
for (let i = 0;i < s.value; i++) {
|
|
542
|
-
const [updateAdditionalData, [_, localStateData]] = getStateDateFromSingleLevelContentTypeArray(aedt[1], `${s.internalName}${PREFIX_SEPERATOR_DELIMETER}${i}`, attributeName)(localAdditionalData);
|
|
543
|
-
localAdditionalData = updateAdditionalData;
|
|
544
|
-
v.push(localStateData);
|
|
691
|
+
const newBitString = getBitstringForStateDataEntry(currenEntry);
|
|
692
|
+
currenEntry.bitstring = newBitString;
|
|
693
|
+
};
|
|
694
|
+
var updateStateDataEntry = (currenEntry, newEntry, updateCallback) => {
|
|
695
|
+
if (currenEntry.type !== newEntry.type || currenEntry.name !== newEntry.name)
|
|
696
|
+
throw new Error(`Types (${currenEntry.type} & ${newEntry.type}) or names (${currenEntry.name} & ${newEntry.name}) do not match`);
|
|
697
|
+
if (ComplexDataValues.includes(currenEntry.type)) {
|
|
698
|
+
if (currenEntry.state !== newEntry.state) {
|
|
699
|
+
const currentBitString = currenEntry.bitstring;
|
|
700
|
+
const updatedCurrentEntry = updateComplexValue(currenEntry, newEntry);
|
|
701
|
+
setComplexDataEntryValuesAsStateDataEntry(updatedCurrentEntry, updateCallback);
|
|
702
|
+
if (currentBitString !== updatedCurrentEntry.bitstring)
|
|
703
|
+
updateCallback();
|
|
704
|
+
}
|
|
705
|
+
} else {
|
|
706
|
+
const currentBitString = currenEntry.bitstring;
|
|
707
|
+
const updatedCurrentEntry = updateValue7(currenEntry, newEntry);
|
|
708
|
+
updatedCurrentEntry.bitstring = dataBitsStringifier(updatedCurrentEntry);
|
|
709
|
+
if (currentBitString !== updatedCurrentEntry.bitstring)
|
|
710
|
+
updateCallback();
|
|
545
711
|
}
|
|
546
|
-
return
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
else if (doubleLevelContentTypeIsOptionalEntryDataType(dct))
|
|
561
|
-
return getStateFromOptionalEntryDataType(dct, prefix, attributeName);
|
|
562
|
-
else if (doubleLevelContentTypeIsArrayDefinitionType(dct))
|
|
563
|
-
return getStateFromArrayEntryDataType(dct, prefix, attributeName);
|
|
564
|
-
throw new Error("this is an invalid output value, wonder why?");
|
|
565
|
-
};
|
|
566
|
-
var getStateDateFromSingleLevelContentTypeArray = (slcta, prefix, attributeName) => (additionalData) => {
|
|
567
|
-
const outputDataObject = {};
|
|
568
|
-
let intermediateAdditionalData = additionalData;
|
|
569
|
-
slcta.forEach((slct) => {
|
|
570
|
-
const [localAdditionalData, [localAttributeName, nestedData]] = getStateDataFromSingleLevelContentType(slct, prefix)(intermediateAdditionalData);
|
|
571
|
-
intermediateAdditionalData = localAdditionalData;
|
|
572
|
-
outputDataObject[localAttributeName] = nestedData;
|
|
573
|
-
});
|
|
574
|
-
return [intermediateAdditionalData, [attributeName, outputDataObject]];
|
|
575
|
-
};
|
|
576
|
-
var getStateDataFromNestedContentType = (nct, prefix, attributeName) => {
|
|
577
|
-
if (isDoubleLevelContentType(nct))
|
|
578
|
-
return getStateDataFromDoubleLevelContentType(nct, `${prefix}${PREFIX_SEPERATOR_DELIMETER}${attributeName}`, attributeName);
|
|
579
|
-
return getStateDateFromSingleLevelContentTypeArray(nct, prefix, attributeName);
|
|
580
|
-
};
|
|
581
|
-
var getStateDataFromSingleLevelContentType = (slct, prefix) => {
|
|
582
|
-
if (singleLevelContentTypeIsDataEntry(slct))
|
|
583
|
-
return (additionalData) => internalGetDataEntry(slct, prefix, additionalData);
|
|
584
|
-
else if (singleLevelContentTypeIsNestedContentDataType(slct))
|
|
585
|
-
return getStateDataFromNestedContentType(slct[1], `${prefix}_${slct[0]}`, slct[0]);
|
|
586
|
-
throw new Error("this is an invalid output value, wonder why?");
|
|
587
|
-
};
|
|
588
|
-
var getGenerationMethodForSingleLevelContentTypeArray = (slct) => {
|
|
589
|
-
currentDataEntryIndex = -1;
|
|
590
|
-
return (additionalData) => getStateDateFromSingleLevelContentTypeArray(slct, "", "")(additionalData)[1][1];
|
|
591
|
-
};
|
|
592
|
-
// src/objectmap/userMethods.ts
|
|
593
|
-
var getParsedAdditionalData = (additionalData) => {
|
|
594
|
-
if (typeof additionalData === "string")
|
|
595
|
-
return parseBase64ToBits(additionalData);
|
|
596
|
-
if (additionalData && !Array.isArray(additionalData))
|
|
597
|
-
return getDataEntryArray(additionalData);
|
|
598
|
-
return additionalData;
|
|
599
|
-
};
|
|
600
|
-
var getVersionindex = (additionalData, versionMask, defaultIndex) => {
|
|
601
|
-
if (typeof additionalData === "string")
|
|
602
|
-
return readDataEntry(versionMask, additionalData)[1][1].value;
|
|
603
|
-
if (!additionalData)
|
|
604
|
-
return defaultIndex || 0;
|
|
605
|
-
return additionalData.find((d) => d.name === "version")?.value ?? defaultIndex ?? 0;
|
|
606
|
-
};
|
|
607
|
-
var getParserMethodForVersionDefinition = (vadt, versionBits, defaultVersion) => (state) => {
|
|
608
|
-
const additionalData = getParsedAdditionalData(state);
|
|
609
|
-
const versionIndex = getVersionindex(additionalData, DataEntryFactory.createVersion(0, versionBits, "version"), defaultVersion);
|
|
610
|
-
const versionDefinition = vadt[versionIndex];
|
|
611
|
-
const versionEntry = DataEntryFactory.createVersion(versionIndex, versionBits, "version");
|
|
612
|
-
return getGenerationMethodForSingleLevelContentTypeArray([versionEntry, ...versionDefinition])(additionalData);
|
|
613
|
-
};
|
|
614
|
-
var getUpdaterMethodForVersionDefinition = (parser) => (state, entryToUpdate) => parser([...Array.isArray(entryToUpdate) ? entryToUpdate : [entryToUpdate], ...getDataEntryArray(state)]);
|
|
615
|
-
var getStringifyMethodForVersionDefinition = (parser) => (data) => getBase64String(parser(data));
|
|
616
|
-
var createParserObject = (versionContent, maximumExpectedVersions, defaultVersion, enumSemanticsMapping, attributeSemanticsMapping, exposedVersions) => {
|
|
617
|
-
const versionBitCount = getVersionValueRangeValueForNumber(maximumExpectedVersions);
|
|
618
|
-
const localDefaultVersion = Math.max(0, Math.min(versionContent.length - 1, defaultVersion ?? 0));
|
|
619
|
-
if (versionContent.length > maximumExpectedVersions)
|
|
620
|
-
throw new Error(`Cannot have more than ${maximumExpectedVersions} versions`);
|
|
621
|
-
if (localDefaultVersion !== (defaultVersion ?? 0))
|
|
622
|
-
throw new Error(`Default version must be between 0 and ${versionContent.length - 1}.`);
|
|
623
|
-
const parser = getParserMethodForVersionDefinition(versionContent, versionBitCount, localDefaultVersion);
|
|
624
|
-
const updater = getUpdaterMethodForVersionDefinition(parser);
|
|
625
|
-
const stringify = getStringifyMethodForVersionDefinition(parser);
|
|
626
|
-
return {
|
|
627
|
-
versionBitCount,
|
|
628
|
-
exposedVersions,
|
|
629
|
-
parser,
|
|
630
|
-
updater,
|
|
631
|
-
stringify,
|
|
632
|
-
enumSemanticsMapping,
|
|
633
|
-
attributeSemanticsMapping
|
|
712
|
+
return currenEntry;
|
|
713
|
+
};
|
|
714
|
+
var getStateDataEntry = (entry, updateCallback) => {
|
|
715
|
+
entry.bitstring = getBitstringForStateDataEntry(entry);
|
|
716
|
+
entry.updateValue = (newEntry) => updateStateDataEntry(entry, newEntry, updateCallback);
|
|
717
|
+
return entry;
|
|
718
|
+
};
|
|
719
|
+
var createStateDataObject = (initialState, updateCallback) => {
|
|
720
|
+
const stateObject = {};
|
|
721
|
+
const wrappedUpdateCallback = () => {
|
|
722
|
+
stateObject.bitstring = getBitstringForStateNestedData(stateObject.state);
|
|
723
|
+
stateObject.base64 = parseBitsToBase64(stateObject.bitstring);
|
|
724
|
+
stateObject.data = getStateData(stateObject.state);
|
|
725
|
+
updateCallback(stateObject);
|
|
634
726
|
};
|
|
727
|
+
stateObject.state = initialState.map((item) => getStateDataEntry(item, wrappedUpdateCallback));
|
|
728
|
+
wrappedUpdateCallback();
|
|
729
|
+
return stateObject;
|
|
635
730
|
};
|
|
731
|
+
var getInitialStateFromBase64 = (base64, descriptor) => nestedDataBitstringParser(parseBase64ToBits(base64), descriptor)[0];
|
|
636
732
|
// src/utils/interpolateData.ts
|
|
637
733
|
var interpolateEntryAt = (dataEntry2, t) => {
|
|
638
734
|
const localT = Math.max(Math.min(1, t), 0);
|
|
639
735
|
const cosT = Math.cos(localT * 2 * Math.PI) * 0.5 + 0.5;
|
|
640
736
|
switch (dataEntry2.type) {
|
|
641
|
-
case
|
|
737
|
+
case "BOOLEAN":
|
|
642
738
|
return { ...dataEntry2, value: Boolean(Math.round(localT)) };
|
|
643
|
-
case
|
|
739
|
+
case "VERSION":
|
|
644
740
|
return { ...dataEntry2, value: Math.floor(localT * (dataEntry2.bits ** 2 - 0.001)) };
|
|
645
|
-
case
|
|
741
|
+
case "ENUM":
|
|
646
742
|
return { ...dataEntry2, value: Math.floor(localT * (dataEntry2.max + 0.999)) };
|
|
647
|
-
case
|
|
743
|
+
case "INT":
|
|
648
744
|
return { ...dataEntry2, value: dataEntry2.min + Math.floor(cosT * (dataEntry2.max - dataEntry2.min + 0.999)) };
|
|
649
|
-
case
|
|
745
|
+
case "FLOAT":
|
|
650
746
|
const v = dataEntry2.min + cosT * (dataEntry2.max - dataEntry2.min);
|
|
651
747
|
return dataEntryCorrecting({ ...dataEntry2, value: Math.min(dataEntry2.max, Math.max(v, dataEntry2.min)) });
|
|
652
|
-
case
|
|
748
|
+
case "ENUM_ARRAY":
|
|
653
749
|
return { ...dataEntry2, value: dataEntry2.value.map((v2) => Math.floor(localT * (v2 + 0.999))) };
|
|
654
750
|
}
|
|
655
751
|
};
|
|
656
752
|
// src/utils/relativeValue.ts
|
|
657
753
|
var getRelativeValue = (dataEntry2) => {
|
|
658
754
|
switch (dataEntry2.type) {
|
|
659
|
-
case
|
|
755
|
+
case "BOOLEAN":
|
|
660
756
|
return Number(dataEntry2.value);
|
|
661
|
-
case
|
|
662
|
-
case
|
|
757
|
+
case "INT":
|
|
758
|
+
case "FLOAT":
|
|
663
759
|
return (dataEntry2.value - dataEntry2.min) / (dataEntry2.max - dataEntry2.min);
|
|
664
|
-
case
|
|
760
|
+
case "VERSION":
|
|
665
761
|
return dataEntry2.value / (2 ** dataEntry2.bits - 1);
|
|
666
|
-
case
|
|
762
|
+
case "ENUM":
|
|
667
763
|
return dataEntry2.value / dataEntry2.max;
|
|
668
|
-
case
|
|
764
|
+
case "ENUM_ARRAY":
|
|
669
765
|
return dataEntry2.value.reduce((acc, v) => acc + v, 0) / dataEntry2.value.length;
|
|
670
766
|
}
|
|
671
767
|
};
|
|
672
768
|
export {
|
|
673
769
|
valueBitsParser,
|
|
674
770
|
parseBase64ToBits,
|
|
675
|
-
isSingleLevelContentType,
|
|
676
|
-
isDoubleLevelContentType,
|
|
677
|
-
isDataEntry,
|
|
678
771
|
interpolateEntryAt,
|
|
679
|
-
getStateValue,
|
|
680
772
|
getRelativeValue,
|
|
681
|
-
|
|
773
|
+
getInitialStateFromBase64,
|
|
682
774
|
getBitsCount7 as getBitsCount,
|
|
683
|
-
getBase64String,
|
|
684
|
-
doubleLevelContentTypeIsOptionalEntryDataType,
|
|
685
|
-
doubleLevelContentTypeIsEnumEntryDataType,
|
|
686
|
-
doubleLevelContentTypeIsArrayDefinitionType,
|
|
687
775
|
dataEntryCorrecting,
|
|
688
776
|
dataEntryBitstringParser,
|
|
689
777
|
dataBitsStringifier,
|
|
690
778
|
dataBitsParser,
|
|
691
|
-
|
|
779
|
+
createStateDataObject,
|
|
692
780
|
SignificandMaxBits,
|
|
693
781
|
PROTECTED_ATTRIBUTE_NAMES,
|
|
694
|
-
PREFIX_SEPERATOR_DELIMETER,
|
|
695
782
|
IntegerMaxBits,
|
|
696
|
-
|
|
697
|
-
DataEntryFactory
|
|
783
|
+
DataTypeValues,
|
|
784
|
+
DataEntryFactory,
|
|
785
|
+
ComplexDataValues,
|
|
786
|
+
ComplexDataEntryFactory
|
|
698
787
|
};
|