url-safe-bitpacking 0.1.1 → 0.1.2

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/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export * from './enums';
2
- export * from './factory';
3
- export * from './objectmap';
4
- export * from './parsers';
5
- export * from './types';
6
- export * from './update';
7
- export * from './utils';
1
+ export { ObjectGenerationOutputStatus, DataType } from './enums';
2
+ export { DataRangeDescriptionFactory, DataDescriptionFactory, DataEntryFactory } from './factory';
3
+ export { getDefaultObject, updateDataEntry } from './objectmap';
4
+ export { valueBitsParser, dataBitsParser, getBitsCount, dataBitsArrayParser, dataBitsStringifier, dataEntryCorrecting, parseBitsToBase64, parseBase64ToBits, dataArrayStringifier, } from './parsers';
5
+ export { SingleLevelContentType, NestedContentDataType, NestedContentType, DoubleLevelContentType, NonEmptyValidEntryArrayType, OptionalEntryDataType, EnumEntryDataType, VersionArrayDefinitionType, PrecisionRangeType, SignificandMaxBits, FloatData, IntegerMaxBits, IntData, VersionRangeType, VersionData, GlobalVersion, BooleanData, DataRangeDescription, BooleanDiscriptionType, IntDiscriptionType, EnumDiscriptionType, FloatDiscriptionType, VersionDiscriptionType, DataDescription, BooleanDescriptionWithValueType, IntDescriptionWithValueType, EnumDescriptionWithValueType, FloatDescriptionWithValueType, VersionDescriptionWithValueType, DataEntry, DataEntryArray, SemanticlyNestedDataEntry, SemanticlyNestedDataDescription, ObjectGeneratorMethod, DefinitionGenerationObject, DefinitionNestedArray, DefinitionNestedGenerationObject, DefinitionSubObject, DefinitionArrayObject, VersionDefinitionObject, VersionEnumSemantics, ParserForVersion, VersionParsers, } from './types';
6
+ export {} from './update';
7
+ export { interpolateEntryAt, getRelativeValue } from './utils';
package/dist/index.js CHANGED
@@ -310,18 +310,6 @@ var dataArrayStringifier = (dataEntryArray) => {
310
310
 
311
311
  // src/objectmap/versionReading.ts
312
312
  var parameterOffset = 100;
313
- var getVariableStrings = (definitionArrayObject) => {
314
- const keys = [];
315
- definitionArrayObject.forEach((value) => {
316
- if (Array.isArray(value)) {
317
- if (value.length === 2)
318
- keys.push(...getVariableStrings(value[1]));
319
- if (value.length === 3)
320
- keys.push(value[1].name);
321
- }
322
- });
323
- return keys;
324
- };
325
313
  var nestedDataEntryArrayToObject = (definitionArrayObject, startIndex) => {
326
314
  const baseIndex = startIndex * parameterOffset;
327
315
  return Object.fromEntries(definitionArrayObject.map((value, i) => {
@@ -334,60 +322,6 @@ var nestedDataEntryArrayToObject = (definitionArrayObject, startIndex) => {
334
322
  return [value.name, { ...value, index: baseIndex + i }];
335
323
  }));
336
324
  };
337
- var definitionArrayObjectParser = (bitString, v, orderIndex) => {
338
- const [key, values] = v;
339
- const [nestedSemanticObject, objectGenerationStatus, localEndIndex] = parsingDefinitionArrayObject(bitString, values, orderIndex);
340
- return [[key, nestedSemanticObject], objectGenerationStatus, localEndIndex];
341
- };
342
- var methodParser = (bitString, v, orderIndex) => {
343
- const [key, keyDataDescription, methodGenerator] = v;
344
- const [keyDataEntry, status, bitWidth] = dataEntryParser(bitString, keyDataDescription, orderIndex);
345
- const [result, localStatus, localEndIndex] = definitionArrayObjectParser(bitString, [key, methodGenerator(keyDataEntry)], orderIndex);
346
- return [result, localStatus !== ObjectGenerationOutputStatus.PARSED ? localStatus : status, localEndIndex];
347
- };
348
- var dataEntryParser = (bitString, v, baseOrderIndex) => {
349
- const bitWidth = getBitsCount6(v);
350
- const value = dataBitsParser(bitString.slice(0, bitWidth), v);
351
- return [{ ...value, index: baseOrderIndex }, ObjectGenerationOutputStatus.PARSED, bitWidth];
352
- };
353
- var parsingDefinitionArrayObject = (bitString, definitionArrayObject, orderIndex) => {
354
- const baseOrderIndex = orderIndex * parameterOffset;
355
- let startIndex = 0;
356
- let objectGenerationStatus = ObjectGenerationOutputStatus.PARSED;
357
- return [
358
- Object.fromEntries(definitionArrayObject.map((value, i) => {
359
- if (Array.isArray(value)) {
360
- if (value.length === 2) {
361
- const [[key, nestedSemanticObject], status, localEndIndex] = definitionArrayObjectParser(bitString.slice(startIndex), value, baseOrderIndex + i);
362
- startIndex += localEndIndex;
363
- ObjectGenerationOutputStatus.PARSED;
364
- return [key, nestedSemanticObject];
365
- } else {
366
- const [[key, nestedSemanticObject], status, localEndIndex] = methodParser(bitString.slice(startIndex), value, baseOrderIndex + i);
367
- startIndex += localEndIndex;
368
- ObjectGenerationOutputStatus.PARSED;
369
- return [key, nestedSemanticObject];
370
- }
371
- } else {
372
- const [dataEntry, status, localEndIndex] = dataEntryParser(bitString.slice(startIndex), value, baseOrderIndex + i);
373
- startIndex += localEndIndex;
374
- ObjectGenerationOutputStatus.PARSED;
375
- return [dataEntry.name, dataEntry];
376
- }
377
- })),
378
- objectGenerationStatus,
379
- startIndex
380
- ];
381
- };
382
- var readingVersion = (bitstring) => dataBitsArrayParser(bitstring, [DataDescriptionFactory.createVersion(8)])[0];
383
- var parseUrlMethod = (url, parserVersions) => {
384
- const bitString = parseBase64ToBits(url);
385
- const version = readingVersion(bitString);
386
- const versionParser = parserVersions[version.value];
387
- if (!versionParser)
388
- throw new Error(`No parser for version ${version.value}`);
389
- return parsingDefinitionArrayObject(bitString, versionParser.objectGeneratorParameters, 0)[0];
390
- };
391
325
  var parseDownNestedDataDescription = (nestedDataDescription) => {
392
326
  const dataDescriptions = [];
393
327
  Object.values(nestedDataDescription).forEach((value) => {
@@ -398,28 +332,6 @@ var parseDownNestedDataDescription = (nestedDataDescription) => {
398
332
  });
399
333
  return dataDescriptions.sort();
400
334
  };
401
- var getURLForData = (data) => {
402
- const dataEntryArray = parseDownNestedDataDescription(data);
403
- const bitstring = dataArrayStringifier(dataEntryArray);
404
- return parseBitsToBase64(bitstring);
405
- };
406
- var getTestStringValues = (data) => {
407
- const dataEntryArray = parseDownNestedDataDescription(data);
408
- const bitstring = dataArrayStringifier(dataEntryArray);
409
- const url = parseBitsToBase64(bitstring);
410
- const dataValueStrings = dataEntryArray.map((dataEntry) => dataBitsStringifier(dataEntry));
411
- const singleString = dataValueStrings.join("");
412
- const base64bitStringArray = singleString.match(/.{1,6}/g)?.map((c) => c.padEnd(6, "0")) ?? [];
413
- const base64valueArray = url.split("").map((c) => c.padStart(6, "_"));
414
- const raw = JSON.stringify(parseDownNestedDataDescription(data), undefined, 1);
415
- return {
416
- bitsString: dataValueStrings.join("-"),
417
- base64BitString: base64bitStringArray.join("-"),
418
- base64SplitString: base64valueArray.join("-"),
419
- base64String: url,
420
- raw
421
- };
422
- };
423
335
  // src/update/floatUpdate.ts
424
336
  var updateValue = (original, update) => {
425
337
  const value = Math.max(Math.min(update.value, original.max), original.min);
@@ -565,18 +477,10 @@ var getRelativeValue = (dataEntry2) => {
565
477
  };
566
478
  export {
567
479
  valueBitsParser,
568
- updateValue6 as updateValue,
569
- updateDataEntryObject,
570
480
  updateDataEntry,
571
- parseUrlMethod,
572
- parseDownNestedDataDescription,
573
481
  parseBitsToBase64,
574
482
  parseBase64ToBits,
575
- nestedDataEntryArrayToObject,
576
483
  interpolateEntryAt,
577
- getVariableStrings,
578
- getURLForData,
579
- getTestStringValues,
580
484
  getRelativeValue,
581
485
  getDefaultObject,
582
486
  getBitsCount6 as getBitsCount,
@@ -588,7 +492,6 @@ export {
588
492
  SignificandMaxBits,
589
493
  ObjectGenerationOutputStatus,
590
494
  IntegerMaxBits,
591
- EnumMaxBits,
592
495
  DataType,
593
496
  DataRangeDescriptionFactory,
594
497
  DataEntryFactory,
package/package.json CHANGED
@@ -8,12 +8,12 @@
8
8
  "dist/*.d.ts"
9
9
  ],
10
10
  "type": "module",
11
- "version": "0.1.1",
11
+ "version": "0.1.2",
12
12
  "author": "Jonas Ward",
13
13
  "description": "Library for creating web safe base64 objects with custom bith widths and dynamic values.",
14
14
  "scripts": {
15
15
  "build": "bun build --target=node ./src/index.ts --outfile=dist/index.js && bun run build:declaration",
16
- "build:declaration": "tsc --emitDeclarationOnly --project tsconfig.types.json",
16
+ "build:declaration": "tsc --emitDeclarationOnly --isolatedDeclarations --project tsconfig.types.json",
17
17
  "postbuild": "rimraf tsconfig.types.tsbuildinfo"
18
18
  },
19
19
  "devDependencies": {
package/dist/bundle.js DELETED
@@ -1,577 +0,0 @@
1
- // src/enums/dataTypes.ts
2
- var DataType;
3
- (function(DataType2) {
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
- })(DataType || (DataType = {}));
10
- // src/enums/objectGenerationTypes.ts
11
- var ObjectGenerationOutputStatus;
12
- (function(ObjectGenerationOutputStatus2) {
13
- ObjectGenerationOutputStatus2[ObjectGenerationOutputStatus2["DEFAULT"] = 0] = "DEFAULT";
14
- ObjectGenerationOutputStatus2[ObjectGenerationOutputStatus2["FROM_TYPE"] = 1] = "FROM_TYPE";
15
- ObjectGenerationOutputStatus2[ObjectGenerationOutputStatus2["PARSED"] = 2] = "PARSED";
16
- ObjectGenerationOutputStatus2[ObjectGenerationOutputStatus2["ERROR_PARSING"] = 3] = "ERROR_PARSING";
17
- })(ObjectGenerationOutputStatus || (ObjectGenerationOutputStatus = {}));
18
- // src/factory/intFactory.ts
19
- var getBitsForIntegerNumber = (number) => Math.ceil(Math.log2(number));
20
- var create = (min, max) => {
21
- if (!Number.isInteger(min) || !Number.isInteger(max))
22
- throw new Error("min and max must be integers");
23
- if (max - min < 1)
24
- throw new Error("max must be at least one");
25
- if (Math.abs(max - min) > 1023)
26
- throw new Error("max - min must be less than 1024");
27
- const bits = getBitsForIntegerNumber(max - min + 1);
28
- return { type: DataType.INT, min, max, bits };
29
- };
30
-
31
- // src/factory/floatFactory.ts
32
- var create2 = (min, max, precision) => {
33
- const precisionMultiplier = 10 ** precision;
34
- const roundedMin = Math.floor(min * precisionMultiplier);
35
- const roundedMax = Math.ceil(max * precisionMultiplier);
36
- const delta = roundedMax - roundedMin;
37
- const significand = Math.max(1, getBitsForIntegerNumber(delta));
38
- return {
39
- type: DataType.FLOAT,
40
- min: roundedMin / precisionMultiplier,
41
- max: roundedMax / precisionMultiplier,
42
- precision,
43
- significand
44
- };
45
- };
46
-
47
- // src/factory/booleanFactory.ts
48
- var create3 = () => ({ type: DataType.BOOLEAN });
49
-
50
- // src/factory/versionFactory.ts
51
- var create4 = (bits) => ({
52
- type: DataType.VERSION,
53
- bits
54
- });
55
-
56
- // src/factory/enumFactory.ts
57
- var create5 = (max) => {
58
- if (!Number.isInteger(max))
59
- throw new Error("min and max must be integers");
60
- if (max < 1)
61
- throw new Error("max must be at least one");
62
- if (max > 1023)
63
- throw new Error("max - min must be less than 1024");
64
- const bits = getBitsForIntegerNumber(max + 1);
65
- return { type: DataType.ENUM, max, bits };
66
- };
67
-
68
- // src/factory/factory.ts
69
- class DataRangeDescriptionFactory {
70
- static createFloat = create2;
71
- static createInt = create;
72
- static createEnum = create5;
73
- static createBoolean = create3;
74
- static createVersion = create4;
75
- }
76
-
77
- class DataDescriptionFactory {
78
- static createFloat = (min = 0, max = 1, precision = 2, name = "", index = 0) => ({
79
- ...create2(min, max, precision),
80
- name,
81
- index
82
- });
83
- static createInt = (min = 0, max = 10, name = "", index = 0) => ({
84
- ...create(min, max),
85
- name,
86
- index
87
- });
88
- static createEnum = (max = 10, name = "", index = 0) => ({
89
- ...create5(max),
90
- name,
91
- index
92
- });
93
- static createBoolean = (name = "", index = 0) => ({
94
- ...create3(),
95
- name,
96
- index
97
- });
98
- static createVersion = (bits = 8, name = "", index = 0) => ({
99
- ...create4(bits),
100
- name,
101
- index
102
- });
103
- }
104
-
105
- class DataEntryFactory {
106
- static createFloat = (value, min = 0, max = 1, precision = 2, name = "", index = 0) => ({
107
- ...create2(min, max, precision),
108
- value,
109
- name,
110
- index
111
- });
112
- static createInt = (value, min = 0, max = 10, name = "", index = 0) => ({
113
- ...create(min, max),
114
- value,
115
- name,
116
- index
117
- });
118
- static createEnum = (value, max = 10, name = "", index = 0) => ({
119
- ...create5(max),
120
- value,
121
- name,
122
- index
123
- });
124
- static createBoolean = (value, name = "", index = 0) => ({
125
- ...create3(),
126
- value,
127
- name,
128
- index
129
- });
130
- static createVersion = (value, bits = 8, name = "", index = 0) => ({
131
- ...create4(bits),
132
- value,
133
- name,
134
- index
135
- });
136
- }
137
- // src/parsers/intParser.ts
138
- var getBitsCount = (intData) => intData.bits;
139
- var rawValueParser = (stateString, bitCount) => {
140
- if (stateString.length < bitCount)
141
- throw new Error(`To few bits for this int bit string (${stateString.length} instead of ${bitCount})`);
142
- if (stateString.length > bitCount)
143
- throw new Error(`To many bits for this int bit string (${stateString.length} instead of ${bitCount})`);
144
- const parsed = parseInt(stateString, 2);
145
- if (isNaN(parsed))
146
- throw new Error("Invalid int state string");
147
- return parsed;
148
- };
149
- var rawParser = (stateString, intData) => {
150
- const v = rawValueParser(stateString, intData.bits) + intData.min;
151
- if (v > intData.max)
152
- throw new Error("Value exceeds max");
153
- return v;
154
- };
155
- var rawIntStringifier = (value, bitCount) => {
156
- if (Number.isInteger(value) === false)
157
- throw new Error("Value is not an integer");
158
- return value.toString(2).padStart(bitCount, "0");
159
- };
160
- var rawStringifier = (value, intData) => {
161
- if (value < intData.min)
162
- throw new Error("Value is below min");
163
- if (value > intData.max)
164
- throw new Error("Value exceeds max");
165
- return rawIntStringifier(value - intData.min, intData.bits);
166
- };
167
-
168
- // src/parsers/floatParser.ts
169
- var getBitsCount2 = (floatData) => floatData.significand;
170
- var rawValueParser2 = (stateString, significandBits, precision) => {
171
- if (stateString.length < significandBits)
172
- throw new Error(`To few bits for this float bit string (${stateString.length} instead of ${significandBits})`);
173
- if (stateString.length > significandBits)
174
- throw new Error(`To many bits for this float bit string (${stateString.length} instead of ${significandBits})`);
175
- const significand = rawValueParser(stateString, significandBits);
176
- return significand * 10 ** -precision;
177
- };
178
- var rawParser2 = (stateString, floatData) => {
179
- const v = floatData.min + rawValueParser2(stateString, floatData.significand, floatData.precision);
180
- if (v > floatData.max)
181
- throw new Error("Float value exceeds max");
182
- return v;
183
- };
184
- var rawStringifier2 = (value, floatData) => rawIntStringifier(Math.round((value - floatData.min) * 10 ** floatData.precision), floatData.significand);
185
-
186
- // src/parsers/enumParser.ts
187
- var getBitsCount3 = (versionData) => versionData.bits;
188
- var rawParser3 = (rawString, versionData) => rawValueParser(rawString, versionData.bits);
189
- var rawStringifier3 = (value, versionData) => {
190
- if (value > versionData.max)
191
- throw new Error("Version exceeds max");
192
- return rawIntStringifier(value, versionData.bits);
193
- };
194
-
195
- // src/parsers/versionParser.ts
196
- var getBitsCount4 = (versionData) => versionData.bits;
197
- var rawParser4 = (rawString, versionData) => rawValueParser(rawString, versionData.bits);
198
- var rawStringifier4 = (value, versionData) => {
199
- if (value > 2 ** versionData.bits - 1)
200
- throw new Error("Version exceeds max");
201
- return rawIntStringifier(value, versionData.bits);
202
- };
203
-
204
- // src/parsers/booleanParser.ts
205
- var getBitsCount5 = () => 1;
206
- var rawValueParser3 = (stateString) => {
207
- if (stateString === "1")
208
- return true;
209
- if (stateString === "0")
210
- return false;
211
- throw new Error("Invalid boolean bit string");
212
- };
213
- var rawParser5 = (stateString) => rawValueParser3(stateString);
214
- var rawStringifier5 = (value) => value ? "1" : "0";
215
-
216
- // src/parsers/parsers.ts
217
- var valueBitsParser = (bitString, mapData) => {
218
- switch (mapData.type) {
219
- case DataType.BOOLEAN:
220
- return rawParser5(bitString);
221
- case DataType.INT:
222
- return rawParser(bitString, mapData);
223
- case DataType.ENUM:
224
- return rawParser3(bitString, mapData);
225
- case DataType.FLOAT:
226
- return rawParser2(bitString, mapData);
227
- case DataType.VERSION:
228
- return rawParser4(bitString, mapData);
229
- }
230
- };
231
- var dataBitsParser = (rawString, mapData) => {
232
- switch (mapData.type) {
233
- case DataType.BOOLEAN:
234
- return { ...mapData, value: valueBitsParser(rawString, mapData) };
235
- case DataType.ENUM:
236
- case DataType.INT:
237
- case DataType.FLOAT:
238
- case DataType.VERSION:
239
- return { ...mapData, value: valueBitsParser(rawString, mapData) };
240
- }
241
- };
242
- var getBitsCount6 = (mapData) => {
243
- switch (mapData.type) {
244
- case DataType.BOOLEAN:
245
- return getBitsCount5();
246
- case DataType.INT:
247
- return getBitsCount(mapData);
248
- case DataType.FLOAT:
249
- return getBitsCount2(mapData);
250
- case DataType.VERSION:
251
- return getBitsCount4(mapData);
252
- case DataType.ENUM:
253
- return getBitsCount3(mapData);
254
- }
255
- };
256
- var dataBitsArrayParser = (bitString, mapDataArray) => {
257
- const bitCounts = mapDataArray.map((mapData) => getBitsCount6(mapData));
258
- const bitStartEndMap = [];
259
- bitCounts.forEach((bitCount, index) => {
260
- const start = index === 0 ? 0 : bitStartEndMap[index - 1][1];
261
- bitStartEndMap.push([start, start + bitCount]);
262
- });
263
- return mapDataArray.map((mapData, i) => dataBitsParser(bitString.slice(bitStartEndMap[i][0], bitStartEndMap[i][1]), mapData));
264
- };
265
- var dataBitsStringifier = (data) => {
266
- switch (data.type) {
267
- case DataType.BOOLEAN:
268
- return rawStringifier5(data.value);
269
- case DataType.INT:
270
- return rawStringifier(data.value, data);
271
- case DataType.FLOAT:
272
- return rawStringifier2(data.value, data);
273
- case DataType.VERSION:
274
- return rawStringifier4(data.value, data);
275
- case DataType.ENUM:
276
- return rawStringifier3(data.value, data);
277
- }
278
- };
279
- var dataEntryCorrecting = (dataEntry) => dataBitsParser(dataBitsStringifier(dataEntry), dataEntry);
280
- var base64url = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
281
- var parseBitsToBase64 = (bits) => {
282
- const chunks = bits.match(/.{1,6}/g);
283
- const numbers = chunks?.map((c) => Number.parseInt(c.padEnd(6, "0"), 2)) ?? [];
284
- return numbers.map((n) => base64url.charAt(n)).join("");
285
- };
286
- var parseBase64ToBits = (base64) => {
287
- const numbers = base64.split("").map((c) => base64url.indexOf(c));
288
- const chunks = numbers.map((n) => n.toString(2).padStart(6, "0"));
289
- return chunks.join("");
290
- };
291
- var dataArrayStringifier = (dataEntryArray) => {
292
- return dataEntryArray.map(dataBitsStringifier).join("");
293
- };
294
-
295
- // src/objectmap/versionReading.ts
296
- var parameterOffset = 100;
297
- var getVariableStrings = (definitionArrayObject) => {
298
- const keys = [];
299
- definitionArrayObject.forEach((value) => {
300
- if (Array.isArray(value)) {
301
- if (value.length === 2)
302
- keys.push(...getVariableStrings(value[1]));
303
- if (value.length === 3)
304
- keys.push(value[1].name);
305
- }
306
- });
307
- return keys;
308
- };
309
- var nestedDataEntryArrayToObject = (definitionArrayObject, startIndex) => {
310
- const baseIndex = startIndex * parameterOffset;
311
- return Object.fromEntries(definitionArrayObject.map((value, i) => {
312
- if (Array.isArray(value)) {
313
- if (value.length === 2)
314
- return [value[0], nestedDataEntryArrayToObject(value[1], baseIndex + i)];
315
- else
316
- return [value[0], nestedDataEntryArrayToObject(value[2](value[1]), baseIndex + i)];
317
- }
318
- return [value.name, { ...value, index: baseIndex + i }];
319
- }));
320
- };
321
- var definitionArrayObjectParser = (bitString, v, orderIndex) => {
322
- const [key, values] = v;
323
- const [nestedSemanticObject, objectGenerationStatus, localEndIndex] = parsingDefinitionArrayObject(bitString, values, orderIndex);
324
- return [[key, nestedSemanticObject], objectGenerationStatus, localEndIndex];
325
- };
326
- var methodParser = (bitString, v, orderIndex) => {
327
- const [key, keyDataDescription, methodGenerator] = v;
328
- const [keyDataEntry, status, bitWidth] = dataEntryParser(bitString, keyDataDescription, orderIndex);
329
- const [result, localStatus, localEndIndex] = definitionArrayObjectParser(bitString, [key, methodGenerator(keyDataEntry)], orderIndex);
330
- return [result, localStatus !== ObjectGenerationOutputStatus.PARSED ? localStatus : status, localEndIndex];
331
- };
332
- var dataEntryParser = (bitString, v, baseOrderIndex) => {
333
- const bitWidth = getBitsCount6(v);
334
- const value = dataBitsParser(bitString.slice(0, bitWidth), v);
335
- return [{ ...value, index: baseOrderIndex }, ObjectGenerationOutputStatus.PARSED, bitWidth];
336
- };
337
- var parsingDefinitionArrayObject = (bitString, definitionArrayObject, orderIndex) => {
338
- const baseOrderIndex = orderIndex * parameterOffset;
339
- let startIndex = 0;
340
- let objectGenerationStatus = ObjectGenerationOutputStatus.PARSED;
341
- return [
342
- Object.fromEntries(definitionArrayObject.map((value, i) => {
343
- if (Array.isArray(value)) {
344
- if (value.length === 2) {
345
- const [[key, nestedSemanticObject], status, localEndIndex] = definitionArrayObjectParser(bitString.slice(startIndex), value, baseOrderIndex + i);
346
- startIndex += localEndIndex;
347
- ObjectGenerationOutputStatus.PARSED;
348
- return [key, nestedSemanticObject];
349
- } else {
350
- const [[key, nestedSemanticObject], status, localEndIndex] = methodParser(bitString.slice(startIndex), value, baseOrderIndex + i);
351
- startIndex += localEndIndex;
352
- ObjectGenerationOutputStatus.PARSED;
353
- return [key, nestedSemanticObject];
354
- }
355
- } else {
356
- const [dataEntry, status, localEndIndex] = dataEntryParser(bitString.slice(startIndex), value, baseOrderIndex + i);
357
- startIndex += localEndIndex;
358
- ObjectGenerationOutputStatus.PARSED;
359
- return [dataEntry.name, dataEntry];
360
- }
361
- })),
362
- objectGenerationStatus,
363
- startIndex
364
- ];
365
- };
366
- var readingVersion = (bitstring) => dataBitsArrayParser(bitstring, [DataDescriptionFactory.createVersion(8)])[0];
367
- var parseUrlMethod = (url, parserVersions) => {
368
- const bitString = parseBase64ToBits(url);
369
- const version = readingVersion(bitString);
370
- const versionParser = parserVersions[version.value];
371
- if (!versionParser)
372
- throw new Error(`No parser for version ${version.value}`);
373
- return parsingDefinitionArrayObject(bitString, versionParser.objectGeneratorParameters, 0)[0];
374
- };
375
- var parseDownNestedDataDescription = (nestedDataDescription) => {
376
- const dataDescriptions = [];
377
- Object.values(nestedDataDescription).forEach((value) => {
378
- if (value.hasOwnProperty("type"))
379
- dataDescriptions.push(value);
380
- else
381
- dataDescriptions.push(...parseDownNestedDataDescription(value));
382
- });
383
- return dataDescriptions.sort();
384
- };
385
- var getURLForData = (data) => {
386
- const dataEntryArray = parseDownNestedDataDescription(data);
387
- const bitstring = dataArrayStringifier(dataEntryArray);
388
- return parseBitsToBase64(bitstring);
389
- };
390
- var getTestStringValues = (data) => {
391
- const dataEntryArray = parseDownNestedDataDescription(data);
392
- const bitstring = dataArrayStringifier(dataEntryArray);
393
- const url = parseBitsToBase64(bitstring);
394
- const dataValueStrings = dataEntryArray.map((dataEntry) => dataBitsStringifier(dataEntry));
395
- const singleString = dataValueStrings.join("");
396
- const base64bitStringArray = singleString.match(/.{1,6}/g)?.map((c) => c.padEnd(6, "0")) ?? [];
397
- const base64valueArray = url.split("").map((c) => c.padStart(6, "_"));
398
- const raw = JSON.stringify(parseDownNestedDataDescription(data), undefined, 1);
399
- return {
400
- bitsString: dataValueStrings.join("-"),
401
- base64BitString: base64bitStringArray.join("-"),
402
- base64SplitString: base64valueArray.join("-"),
403
- base64String: url,
404
- raw
405
- };
406
- };
407
- // src/update/floatUpdate.ts
408
- var updateValue = (original, update) => {
409
- const value = Math.max(Math.min(update.value, original.max), original.min);
410
- return {
411
- ...original,
412
- value
413
- };
414
- };
415
-
416
- // src/update/intUpdate.ts
417
- var updateValue2 = (original, update) => {
418
- const value = Math.max(Math.min(update.value, original.max), original.min);
419
- return {
420
- ...original,
421
- value
422
- };
423
- };
424
-
425
- // src/update/enumUpdate.ts
426
- var updateValue3 = (original, update) => {
427
- const value = Math.min(original.max, update.value);
428
- return {
429
- ...original,
430
- value
431
- };
432
- };
433
-
434
- // src/update/versionUpdate.ts
435
- var updateValue4 = (original, update) => {
436
- const value = Math.min(original.bits ** 2 - 1, update.value);
437
- return {
438
- ...original,
439
- value
440
- };
441
- };
442
-
443
- // src/update/booleanUpdate.ts
444
- var updateValue5 = (original, update) => ({
445
- ...original,
446
- value: update.value
447
- });
448
-
449
- // src/update/updateValues.ts
450
- var updateValue6 = (original, update) => {
451
- if (original.type !== update.type)
452
- throw new Error("Types do not match");
453
- switch (original.type) {
454
- case DataType.FLOAT:
455
- return updateValue(original, update);
456
- case DataType.INT:
457
- return updateValue2(original, update);
458
- case DataType.ENUM:
459
- return updateValue3(original, update);
460
- case DataType.VERSION:
461
- return updateValue4(original, update);
462
- case DataType.BOOLEAN:
463
- return updateValue5(original, update);
464
- }
465
- };
466
-
467
- // src/objectmap/versionUpdate.ts
468
- var dataEntryUpdating = (dataEntry, dataEntryArray) => {
469
- const existingDataEntry = dataEntryArray.find((d) => d.name === dataEntry.name);
470
- if (!existingDataEntry)
471
- return [dataEntry.name, dataEntry];
472
- return [dataEntry.name, updateValue6(dataEntry, existingDataEntry)];
473
- };
474
- var nestedDataEntryArrayUpdating = (definitionNestedArrray, dataEntryArray) => {
475
- const [keyString, nestedDefinitionArray] = definitionNestedArrray;
476
- return [keyString, updateDataEntryObject(nestedDefinitionArray, dataEntryArray)];
477
- };
478
- var generationObjectUpdating = (definitionArrayObject, dataEntryArray) => {
479
- const [keyString, keyDataEntry, methodGenerator] = definitionArrayObject;
480
- const foundKeyDataEntry = dataEntryArray.find((d) => d.name === keyDataEntry.name);
481
- const newKeyData = foundKeyDataEntry ? updateValue6(keyDataEntry, foundKeyDataEntry) : keyDataEntry;
482
- return [keyString, updateDataEntryObject(methodGenerator(newKeyData), dataEntryArray)];
483
- };
484
- var updateDataEntryObject = (definitionArrayObject, dataArray) => {
485
- const newNestedObject = {};
486
- definitionArrayObject.forEach((value) => {
487
- if (Array.isArray(value)) {
488
- if (value.length === 2) {
489
- const [keyString, nestedDataEntry] = nestedDataEntryArrayUpdating(value, dataArray);
490
- newNestedObject[keyString] = nestedDataEntry;
491
- } else {
492
- const [keyString, nestedDataEntry] = generationObjectUpdating(value, dataArray);
493
- newNestedObject[keyString] = nestedDataEntry;
494
- }
495
- } else {
496
- const [key, dataEntry] = dataEntryUpdating(value, dataArray);
497
- newNestedObject[key] = dataEntry;
498
- }
499
- });
500
- return newNestedObject;
501
- };
502
- var getDefaultObject = (versionObjects, versionindex) => {
503
- const versionParser = versionObjects[versionindex];
504
- if (!versionParser)
505
- throw new Error(`No parser for version ${versionindex} index`);
506
- return nestedDataEntryArrayToObject(versionParser.objectGeneratorParameters, 0);
507
- };
508
- var updateDataEntry = (data, newDataEntry, versionObjects) => {
509
- const version = data.version;
510
- const versionParser = versionObjects[version.value];
511
- if (!versionParser)
512
- throw new Error(`No parser for version ${version.value}`);
513
- const correctedDataEntry = dataEntryCorrecting(newDataEntry);
514
- const dataEntryArray = parseDownNestedDataDescription(data);
515
- const virginDataEntryArray = [correctedDataEntry, ...dataEntryArray];
516
- return updateDataEntryObject(versionParser.objectGeneratorParameters, virginDataEntryArray);
517
- };
518
- // src/utils/interpolateData.ts
519
- var interpolateEntryAt = (dataEntry2, t) => {
520
- const localT = Math.max(Math.min(1, t), 0);
521
- const cosT = Math.cos(localT * 2 * Math.PI) * 0.5 + 0.5;
522
- switch (dataEntry2.type) {
523
- case DataType.BOOLEAN:
524
- return { ...dataEntry2, value: Boolean(Math.round(localT)) };
525
- case DataType.VERSION:
526
- return { ...dataEntry2, value: Math.floor(localT * (dataEntry2.bits ** 2 - 0.001)) };
527
- case DataType.ENUM:
528
- return { ...dataEntry2, value: Math.floor(localT * (dataEntry2.max + 0.999)) };
529
- case DataType.INT:
530
- return { ...dataEntry2, value: dataEntry2.min + Math.floor(cosT * (dataEntry2.max - dataEntry2.min + 0.999)) };
531
- case DataType.FLOAT:
532
- const v = dataEntry2.min + cosT * (dataEntry2.max - dataEntry2.min);
533
- return dataEntryCorrecting({ ...dataEntry2, value: Math.min(dataEntry2.max, Math.max(v, dataEntry2.min)) });
534
- }
535
- };
536
- // src/utils/relativeValue.ts
537
- var getRelativeValue = (dataEntry2) => {
538
- switch (dataEntry2.type) {
539
- case DataType.BOOLEAN:
540
- return Number(dataEntry2.value);
541
- case DataType.INT:
542
- case DataType.FLOAT:
543
- return (dataEntry2.value - dataEntry2.min) / (dataEntry2.max - dataEntry2.min);
544
- case DataType.VERSION:
545
- return dataEntry2.value / (2 ** dataEntry2.bits - 1);
546
- case DataType.ENUM:
547
- return dataEntry2.value / dataEntry2.max;
548
- }
549
- };
550
- export {
551
- valueBitsParser,
552
- updateValue6 as updateValue,
553
- updateDataEntryObject,
554
- updateDataEntry,
555
- parseUrlMethod,
556
- parseDownNestedDataDescription,
557
- parseBitsToBase64,
558
- parseBase64ToBits,
559
- nestedDataEntryArrayToObject,
560
- interpolateEntryAt,
561
- getVariableStrings,
562
- getURLForData,
563
- getTestStringValues,
564
- getRelativeValue,
565
- getDefaultObject,
566
- getBitsCount6 as getBitsCount,
567
- dataEntryCorrecting,
568
- dataBitsStringifier,
569
- dataBitsParser,
570
- dataBitsArrayParser,
571
- dataArrayStringifier,
572
- ObjectGenerationOutputStatus,
573
- DataType,
574
- DataRangeDescriptionFactory,
575
- DataEntryFactory,
576
- DataDescriptionFactory
577
- };