bireader 1.0.25 → 1.0.27

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.
Files changed (36) hide show
  1. package/lib/{esm/types/src/writer.d.ts → cjs/index.d.ts} +3380 -9
  2. package/lib/cjs/index.d.ts.map +1 -0
  3. package/lib/cjs/index.js +10466 -5
  4. package/lib/cjs/index.js.map +1 -1
  5. package/lib/{cjs/types/src/writer.d.ts → esm/index.d.ts} +3380 -9
  6. package/lib/esm/index.d.ts.map +1 -0
  7. package/lib/esm/index.js.map +1 -1
  8. package/lib/esm/index.mjs +10427 -2
  9. package/package.json +7 -4
  10. package/src/index.ts +11344 -0
  11. package/lib/cjs/src/common.js +0 -1400
  12. package/lib/cjs/src/common.js.map +0 -1
  13. package/lib/cjs/src/reader.js +0 -4411
  14. package/lib/cjs/src/reader.js.map +0 -1
  15. package/lib/cjs/src/writer.js +0 -4672
  16. package/lib/cjs/src/writer.js.map +0 -1
  17. package/lib/cjs/types/index.d.ts +0 -3
  18. package/lib/cjs/types/index.d.ts.map +0 -1
  19. package/lib/cjs/types/src/common.d.ts +0 -56
  20. package/lib/cjs/types/src/common.d.ts.map +0 -1
  21. package/lib/cjs/types/src/reader.d.ts +0 -3321
  22. package/lib/cjs/types/src/reader.d.ts.map +0 -1
  23. package/lib/cjs/types/src/writer.d.ts.map +0 -1
  24. package/lib/esm/src/common.js +0 -1363
  25. package/lib/esm/src/common.js.map +0 -1
  26. package/lib/esm/src/reader.js +0 -4407
  27. package/lib/esm/src/reader.js.map +0 -1
  28. package/lib/esm/src/writer.js +0 -4668
  29. package/lib/esm/src/writer.js.map +0 -1
  30. package/lib/esm/types/index.d.ts +0 -3
  31. package/lib/esm/types/index.d.ts.map +0 -1
  32. package/lib/esm/types/src/common.d.ts +0 -56
  33. package/lib/esm/types/src/common.d.ts.map +0 -1
  34. package/lib/esm/types/src/reader.d.ts +0 -3321
  35. package/lib/esm/types/src/reader.d.ts.map +0 -1
  36. package/lib/esm/types/src/writer.d.ts.map +0 -1
@@ -1,1400 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wstring = exports.rstring = exports.rdfloat = exports.wdfloat = exports.wint64 = exports.rint64 = exports.wfloat = exports.rfloat = exports.rint32 = exports.wint32 = exports.whalffloat = exports.rhalffloat = exports.rint16 = exports.wint16 = exports.rbyte = exports.wbyte = exports.rbit = exports.wbit = exports.ADD = exports.RSHIFT = exports.LSHIFT = exports.NOT = exports.XOR = exports.OR = exports.AND = exports.hexDump = exports.addData = exports.remove = exports.goto = exports.skip = exports.checkSize = exports.extendarray = exports.arraybuffcheck = exports.buffcheck = void 0;
4
- function buffcheck(obj) {
5
- return (typeof Buffer !== 'undefined' && obj instanceof Buffer);
6
- }
7
- exports.buffcheck = buffcheck;
8
- function arraybuffcheck(_this, obj) {
9
- return obj instanceof Uint8Array || _this.isBuffer(obj);
10
- }
11
- exports.arraybuffcheck = arraybuffcheck;
12
- function extendarray(_this, to_padd) {
13
- if ((typeof Buffer !== 'undefined' && _this.data instanceof Buffer)) {
14
- var paddbuffer = Buffer.alloc(to_padd);
15
- _this.data = Buffer.concat([_this.data, paddbuffer]);
16
- }
17
- else {
18
- const addArray = new Array(to_padd);
19
- _this.data = new Uint8Array([..._this.data, ...addArray]);
20
- }
21
- }
22
- exports.extendarray = extendarray;
23
- function checkSize(_this, write_bytes, write_bit, offset) {
24
- const bits = (write_bit || 0) + _this.bitoffset;
25
- var new_off = (offset || _this.offset);
26
- var writesize = write_bytes || 0;
27
- if (bits != 0) {
28
- //add bits
29
- writesize += Math.ceil(bits / 8);
30
- }
31
- //if biger extend
32
- const needed_size = new_off + writesize;
33
- if (needed_size > _this.size) {
34
- const dif = needed_size - _this.size;
35
- if (_this.strict == false) {
36
- _this.extendArray(dif);
37
- }
38
- else {
39
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m hexdump:\n" + _this.hexdump() : "";
40
- throw new Error(`\x1b[33m[Strict mode]\x1b[0m: Reached end of data: writing to ` + needed_size + " at " + _this.offset + " of " + _this.size);
41
- }
42
- }
43
- //start read location
44
- return new_off;
45
- }
46
- exports.checkSize = checkSize;
47
- function skip(_this, bytes, bits) {
48
- const new_size = (((bytes || 0) + _this.offset) + Math.ceil((_this.bitoffset + (bits || 0)) / 8));
49
- _this.check_size(bytes || 0, bits || 0);
50
- if (new_size > _this.size) {
51
- if (_this.strict == false) {
52
- _this.extendArray(new_size - _this.size);
53
- }
54
- else {
55
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m hexdump:\n" + _this.hexdump() : "";
56
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: Seek of range of data: seek " + new_size + " of " + _this.size);
57
- }
58
- }
59
- _this.bitoffset += (bits || 0) % 8;
60
- _this.offset += (bytes || 0);
61
- }
62
- exports.skip = skip;
63
- function goto(_this, byte, bit) {
64
- const new_size = (byte + Math.ceil((bit || 0) / 8));
65
- if (new_size > _this.size) {
66
- if (_this.strict == false) {
67
- _this.extendArray(new_size - _this.size);
68
- }
69
- else {
70
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m hexdump:\n" + _this.hexdump() : "";
71
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: Goto utside of range of data: goto " + new_size + " of " + _this.size);
72
- }
73
- }
74
- _this.offset = byte;
75
- _this.bitoffset = (bit || 0) % 8;
76
- }
77
- exports.goto = goto;
78
- function remove(_this, startOffset, endOffset, consume, remove, fillValue) {
79
- const new_start = Math.abs(startOffset || 0);
80
- const new_offset = (endOffset || _this.offset);
81
- if (new_offset > _this.size) {
82
- if (_this.strict == false) {
83
- _this.extendArray(new_offset - _this.size);
84
- }
85
- else {
86
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
87
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + endOffset + " of " + _this.size);
88
- }
89
- }
90
- if (_this.strict == true && remove == true) {
91
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
92
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: Can not remove data in strict mode: endOffset" + endOffset + " of " + _this.size);
93
- }
94
- const data_removed = _this.data.slice(new_start, new_offset);
95
- if (remove) {
96
- const part1 = _this.data.subarray(0, new_start);
97
- const part2 = _this.data.subarray(new_offset, _this.size);
98
- if (_this.isBuffer(_this.data)) {
99
- _this.data = Buffer.concat([part1, part2]);
100
- }
101
- else {
102
- _this.data = new Uint8Array([...part1, ...part2]);
103
- }
104
- _this.size = _this.data.length;
105
- }
106
- if (fillValue != undefined && remove == false) {
107
- const part1 = _this.data.subarray(0, new_start);
108
- const part2 = _this.data.subarray(new_offset, _this.size);
109
- const replacement = new Array(data_removed.length).fill(fillValue & 0xff);
110
- if (_this.isBuffer(_this.data)) {
111
- const buff_placement = Buffer.from(replacement);
112
- _this.data = Buffer.concat([part1, buff_placement, part2]);
113
- }
114
- else {
115
- _this.data = new Uint8Array([...part1, ...replacement, ...part2]);
116
- }
117
- _this.size = _this.data.length;
118
- }
119
- if (consume == true) {
120
- if (remove != true) {
121
- _this.offset = new_offset;
122
- _this.bitoffset = 0;
123
- }
124
- else {
125
- _this.offset = new_start;
126
- _this.bitoffset = 0;
127
- }
128
- }
129
- return data_removed;
130
- }
131
- exports.remove = remove;
132
- function addData(_this, data, consume, offset, repalce) {
133
- if (_this.strict == true) {
134
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
135
- throw new Error(`\x1b[33m[Strict mode]\x1b[0m: Can not insert data in strict mode. Use unrestrict() to enable.`);
136
- }
137
- if (typeof Buffer !== 'undefined' && data instanceof Buffer && !(_this.data instanceof Buffer)) {
138
- throw new Error("Data insert must be a Buffer");
139
- }
140
- if (data instanceof Uint8Array && !(_this.data instanceof Uint8Array)) {
141
- throw new Error("Data insert must be a Uint8Array");
142
- }
143
- var needed_size = offset || _this.offset;
144
- if (repalce) {
145
- needed_size = offset || _this.offset + data.length;
146
- }
147
- if (needed_size > _this.size) {
148
- if (_this.strict == false) {
149
- _this.extendArray(needed_size - _this.size);
150
- }
151
- else {
152
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
153
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + needed_size + " of " + _this.size);
154
- }
155
- _this.size = _this.data.length;
156
- }
157
- if (repalce) {
158
- if (_this.isBuffer(_this.data)) {
159
- const part1 = _this.data.subarray(0, needed_size - data.length);
160
- const part2 = _this.data.subarray(needed_size, _this.size);
161
- _this.data = Buffer.concat([part1, data, part2]);
162
- _this.size = _this.data.length;
163
- }
164
- else {
165
- const part1 = _this.data.subarray(0, needed_size - data.length);
166
- const part2 = _this.data.subarray(needed_size, _this.size);
167
- _this.data = new Uint8Array([...part1, ...data, ...part2]);
168
- _this.size = _this.data.length;
169
- }
170
- }
171
- else {
172
- if (_this.isBuffer(_this.data)) {
173
- const part1 = _this.data.subarray(0, needed_size);
174
- const part2 = _this.data.subarray(needed_size, _this.size);
175
- _this.data = Buffer.concat([part1, data, part2]);
176
- _this.size = _this.data.length;
177
- }
178
- else {
179
- const part1 = _this.data.subarray(0, needed_size);
180
- const part2 = _this.data.subarray(needed_size, _this.size);
181
- _this.data = new Uint8Array([...part1, ...data, ...part2]);
182
- _this.size = _this.data.length;
183
- }
184
- }
185
- if (consume) {
186
- _this.offset = needed_size;
187
- _this.bitoffset = 0;
188
- }
189
- }
190
- exports.addData = addData;
191
- function hexDump(_this, options) {
192
- var length = options && options.length;
193
- var startByte = options && options.startByte;
194
- var supressUnicode = options && options.supressUnicode || false;
195
- if ((startByte || 0) > _this.size) {
196
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
197
- throw new Error("Hexdump start is outside of data size: " + startByte + " of " + _this.size);
198
- }
199
- const start = startByte || _this.offset;
200
- const end = Math.min(start + (length || 192), _this.size);
201
- if (start + (length || 0) > _this.size) {
202
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
203
- throw new Error("Hexdump amount is outside of data size: " + (start + (length || 0)) + " of " + end);
204
- }
205
- function hex_check(byte, bits) {
206
- var value = 0;
207
- for (var i = 0; i < bits;) {
208
- var remaining = bits - i;
209
- var bitOffset = 0;
210
- var currentByte = byte;
211
- var read = Math.min(remaining, 8 - bitOffset);
212
- var mask, readBits;
213
- mask = ~(0xFF << read);
214
- readBits = (currentByte >> (8 - read - bitOffset)) & mask;
215
- value <<= read;
216
- value |= readBits;
217
- i += read;
218
- }
219
- value = value >>> 0;
220
- return value;
221
- }
222
- const rows = [];
223
- var header = " 0 1 2 3 4 5 6 7 8 9 A B C D E F ";
224
- var ending = "0123456789ABCDEF";
225
- var addr = "";
226
- for (let i = start; i < end; i += 16) {
227
- addr = i.toString(16).padStart(5, '0');
228
- var row = _this.data?.slice(i, i + 16) || [];
229
- var hex = Array.from(row, (byte) => byte.toString(16).padStart(2, '0')).join(' ');
230
- rows.push(`${addr} ${hex.padEnd(47)} `);
231
- }
232
- let result = '';
233
- let make_wide = false;
234
- let i = start;
235
- while (i < end) {
236
- const byte = _this.data[i];
237
- if (byte < 32 || byte == 127) {
238
- result += '.';
239
- }
240
- else if (byte < 127) {
241
- // Valid UTF-8 start byte or single-byte character
242
- // Convert the byte to a character and add it to the result
243
- result += String.fromCharCode(byte);
244
- }
245
- else if (supressUnicode) {
246
- result += '.';
247
- }
248
- else if (hex_check(byte, 1) == 0) {
249
- //Byte 1
250
- result += String.fromCharCode(byte);
251
- }
252
- else if (hex_check(byte, 3) == 6) {
253
- //Byte 2
254
- if (i + 1 <= end) {
255
- //check second byte
256
- const byte2 = _this.data[i + 1];
257
- if (hex_check(byte2, 2) == 2) {
258
- const charCode = ((byte & 0x1f) << 6) | (byte2 & 0x3f);
259
- i++;
260
- make_wide = true;
261
- const read = " " + String.fromCharCode(charCode);
262
- result += read;
263
- }
264
- else {
265
- result += ".";
266
- }
267
- }
268
- else {
269
- result += ".";
270
- }
271
- }
272
- else if (hex_check(byte, 4) == 14) {
273
- //Byte 3
274
- if (i + 1 <= end) {
275
- //check second byte
276
- const byte2 = _this.data[i + 1];
277
- if (hex_check(byte2, 2) == 2) {
278
- if (i + 2 <= end) {
279
- //check third byte
280
- const byte3 = _this.data[i + 2];
281
- if (hex_check(byte3, 2) == 2) {
282
- const charCode = ((byte & 0x0f) << 12) |
283
- ((byte2 & 0x3f) << 6) |
284
- (byte3 & 0x3f);
285
- i += 2;
286
- make_wide = true;
287
- const read = " " + String.fromCharCode(charCode);
288
- result += read;
289
- }
290
- else {
291
- i++;
292
- result += " .";
293
- }
294
- }
295
- else {
296
- i++;
297
- result += " .";
298
- }
299
- }
300
- else {
301
- result += ".";
302
- }
303
- }
304
- else {
305
- result += ".";
306
- }
307
- }
308
- else if (hex_check(byte, 5) == 28) {
309
- //Byte 4
310
- if (i + 1 <= end) {
311
- //check second byte
312
- const byte2 = _this.data[i + 1];
313
- if (hex_check(byte2, 2) == 2) {
314
- if (i + 2 <= end) {
315
- //check third byte
316
- const byte3 = _this.data[i + 2];
317
- if (hex_check(byte3, 2) == 2) {
318
- if (i + 3 <= end) {
319
- //check fourth byte
320
- const byte4 = _this.data[i + 2];
321
- if (hex_check(byte4, 2) == 2) {
322
- const charCode = (((byte4 & 0xFF) << 24) | ((byte3 & 0xFF) << 16) | ((byte2 & 0xFF) << 8) | (byte & 0xFF));
323
- i += 3;
324
- make_wide = true;
325
- const read = " " + String.fromCharCode(charCode);
326
- result += read;
327
- }
328
- else {
329
- i += 2;
330
- result += " .";
331
- }
332
- }
333
- else {
334
- i += 2;
335
- result += " .";
336
- }
337
- }
338
- else {
339
- i++;
340
- result += " .";
341
- }
342
- }
343
- else {
344
- i++;
345
- result += " .";
346
- }
347
- }
348
- else {
349
- result += ".";
350
- }
351
- }
352
- else {
353
- result += ".";
354
- }
355
- }
356
- else {
357
- // Invalid UTF-8 byte, add a period to the result
358
- result += '.';
359
- }
360
- i++;
361
- }
362
- const chunks = result.match(new RegExp(`.{1,${16}}`, 'g'));
363
- chunks?.forEach((self, i) => {
364
- rows[i] = rows[i] + (make_wide ? "|" + self + "|" : self);
365
- });
366
- header = "".padStart(addr.length) + header + (make_wide ? "" : ending);
367
- rows.unshift(header);
368
- if (make_wide) {
369
- rows.push("*Removed character byte header on unicode detection");
370
- }
371
- console.log(rows.join("\n"));
372
- }
373
- exports.hexDump = hexDump;
374
- function AND(_this, and_key, start, end, consume) {
375
- const input = _this.data;
376
- if ((end || 0) > _this.size) {
377
- if (_this.strict == false) {
378
- _this.extendArray((end || 0) - _this.size);
379
- }
380
- else {
381
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
382
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
383
- }
384
- }
385
- if (typeof and_key == "number") {
386
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
387
- input[i] = input[i] & (and_key & 0xff);
388
- if (consume) {
389
- _this.offset = i;
390
- _this.bitoffset = 0;
391
- }
392
- }
393
- }
394
- else {
395
- if (_this.isBufferOrUint8Array(and_key)) {
396
- let number = -1;
397
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
398
- if (number != and_key.length - 1) {
399
- number = number + 1;
400
- }
401
- else {
402
- number = 0;
403
- }
404
- input[i] = input[i] & and_key[number];
405
- if (consume) {
406
- _this.offset = i;
407
- _this.bitoffset = 0;
408
- }
409
- }
410
- }
411
- else {
412
- throw new Error("AND key must be a byte value, string, Uint8Array or Buffer");
413
- }
414
- }
415
- }
416
- exports.AND = AND;
417
- function OR(_this, or_key, start, end, consume) {
418
- const input = _this.data;
419
- if ((end || 0) > _this.size) {
420
- if (_this.strict == false) {
421
- _this.extendArray((end || 0) - _this.size);
422
- }
423
- else {
424
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
425
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
426
- }
427
- }
428
- if (typeof or_key == "number") {
429
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
430
- input[i] = input[i] | (or_key & 0xff);
431
- if (consume) {
432
- _this.offset = i;
433
- _this.bitoffset = 0;
434
- }
435
- }
436
- }
437
- else {
438
- if (_this.isBufferOrUint8Array(or_key)) {
439
- let number = -1;
440
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
441
- if (number != or_key.length - 1) {
442
- number = number + 1;
443
- }
444
- else {
445
- number = 0;
446
- }
447
- input[i] = input[i] | or_key[number];
448
- if (consume) {
449
- _this.offset = i;
450
- _this.bitoffset = 0;
451
- }
452
- }
453
- }
454
- else {
455
- throw new Error("OR key must be a byte value, string, Uint8Array or Buffer");
456
- }
457
- }
458
- }
459
- exports.OR = OR;
460
- function XOR(_this, xor_key, start, end, consume) {
461
- const input = _this.data;
462
- if ((end || 0) > _this.size) {
463
- if (_this.strict == false) {
464
- _this.extendArray((end || 0) - _this.size);
465
- }
466
- else {
467
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
468
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
469
- }
470
- }
471
- if (typeof xor_key == "number") {
472
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
473
- input[i] = input[i] ^ (xor_key & 0xff);
474
- if (consume) {
475
- _this.offset = i;
476
- _this.bitoffset = 0;
477
- }
478
- }
479
- }
480
- else {
481
- if (_this.isBufferOrUint8Array(xor_key)) {
482
- let number = -1;
483
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
484
- if (number != xor_key.length - 1) {
485
- number = number + 1;
486
- }
487
- else {
488
- number = 0;
489
- }
490
- input[i] = input[i] ^ xor_key[number];
491
- if (consume) {
492
- _this.offset = i;
493
- _this.bitoffset = 0;
494
- }
495
- }
496
- }
497
- else {
498
- throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
499
- }
500
- }
501
- }
502
- exports.XOR = XOR;
503
- function NOT(_this, start, end, consume) {
504
- if ((end || 0) > _this.size) {
505
- if (_this.strict == false) {
506
- _this.extendArray((end || 0) - _this.size);
507
- }
508
- else {
509
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
510
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
511
- }
512
- }
513
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
514
- _this.data[i] = ~_this.data[i];
515
- if (consume) {
516
- _this.offset = i;
517
- _this.bitoffset = 0;
518
- }
519
- }
520
- }
521
- exports.NOT = NOT;
522
- function LSHIFT(_this, shift_key, start, end, consume) {
523
- const input = _this.data;
524
- if ((end || 0) > _this.size) {
525
- if (_this.strict == false) {
526
- _this.extendArray((end || 0) - _this.size);
527
- }
528
- else {
529
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
530
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
531
- }
532
- }
533
- if (typeof shift_key == "number") {
534
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
535
- input[i] = input[i] << shift_key;
536
- if (consume) {
537
- _this.offset = i;
538
- _this.bitoffset = 0;
539
- }
540
- }
541
- }
542
- else {
543
- if (_this.isBufferOrUint8Array(shift_key)) {
544
- let number = -1;
545
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
546
- if (number != shift_key.length - 1) {
547
- number = number + 1;
548
- }
549
- else {
550
- number = 0;
551
- }
552
- input[i] = input[i] << shift_key[number];
553
- if (consume) {
554
- _this.offset = i;
555
- _this.bitoffset = 0;
556
- }
557
- }
558
- }
559
- else {
560
- throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
561
- }
562
- }
563
- }
564
- exports.LSHIFT = LSHIFT;
565
- function RSHIFT(_this, shift_key, start, end, consume) {
566
- const input = _this.data;
567
- if ((end || 0) > _this.size) {
568
- if (_this.strict == false) {
569
- _this.extendArray((end || 0) - _this.size);
570
- }
571
- else {
572
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
573
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
574
- }
575
- }
576
- if (typeof shift_key == "number") {
577
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
578
- input[i] = input[i] >> shift_key;
579
- if (consume) {
580
- _this.offset = i;
581
- _this.bitoffset = 0;
582
- }
583
- }
584
- }
585
- else {
586
- if (_this.isBufferOrUint8Array(shift_key)) {
587
- let number = -1;
588
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
589
- if (number != shift_key.length - 1) {
590
- number = number + 1;
591
- }
592
- else {
593
- number = 0;
594
- }
595
- input[i] = input[i] >> shift_key[number];
596
- if (consume) {
597
- _this.offset = i;
598
- _this.bitoffset = 0;
599
- }
600
- }
601
- }
602
- else {
603
- throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
604
- }
605
- }
606
- }
607
- exports.RSHIFT = RSHIFT;
608
- function ADD(_this, add_key, start, end, consume) {
609
- const input = _this.data;
610
- if ((end || 0) > _this.size) {
611
- if (_this.strict == false) {
612
- _this.extendArray((end || 0) - _this.size);
613
- }
614
- else {
615
- _this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
616
- throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
617
- }
618
- }
619
- if (typeof add_key == "number") {
620
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
621
- input[i] = input[i] + add_key;
622
- if (consume) {
623
- _this.offset = i;
624
- _this.bitoffset = 0;
625
- }
626
- }
627
- }
628
- else {
629
- if (_this.isBufferOrUint8Array(add_key)) {
630
- let number = -1;
631
- for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
632
- if (number != add_key.length - 1) {
633
- number = number + 1;
634
- }
635
- else {
636
- number = 0;
637
- }
638
- input[i] = input[i] + add_key[number];
639
- if (consume) {
640
- _this.offset = i;
641
- _this.bitoffset = 0;
642
- }
643
- }
644
- }
645
- else {
646
- throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
647
- }
648
- }
649
- }
650
- exports.ADD = ADD;
651
- function wbit(_this, value, bits, unsigned, endian) {
652
- if (value == undefined) {
653
- throw new Error('Must supply value.');
654
- }
655
- if (bits == undefined) {
656
- throw new Error("Enter number of bits to write");
657
- }
658
- if (bits <= 0 || bits > 32) {
659
- throw new Error('Bit length must be between 1 and 32.');
660
- }
661
- if (unsigned == true) {
662
- if (value < 0 || value > Math.pow(2, bits)) {
663
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
664
- throw new Error(`Value is out of range for the specified ${bits}bit length.` + " min: " + 0 + " max: " + Math.pow(2, bits) + " value: " + value);
665
- }
666
- }
667
- else {
668
- const maxValue = Math.pow(2, bits - 1) - 1;
669
- const minValue = -maxValue - 1;
670
- if (value < minValue || value > maxValue) {
671
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
672
- throw new Error(`Value is out of range for the specified ${bits}bit length.` + " min: " + minValue + " max: " + maxValue + " value: " + value);
673
- }
674
- }
675
- if (unsigned == true) {
676
- const maxValue = Math.pow(2, bits) - 1;
677
- value = value & maxValue;
678
- }
679
- const size_needed = ((((bits - 1) + _this.bitoffset) / 8) + _this.offset);
680
- if (size_needed > _this.size) {
681
- //add size
682
- _this.extendArray(size_needed - _this.size);
683
- }
684
- var off_in_bits = (_this.offset * 8) + _this.bitoffset;
685
- for (var i = 0; i < bits;) {
686
- var remaining = bits - i;
687
- var bitOffset = off_in_bits & 7;
688
- var byteOffset = off_in_bits >> 3;
689
- var written = Math.min(remaining, 8 - bitOffset);
690
- var mask, writeBits, destMask;
691
- if ((endian != undefined ? endian : _this.endian) == "big") {
692
- mask = ~(~0 << written);
693
- writeBits = (value >> (bits - i - written)) & mask;
694
- var destShift = 8 - bitOffset - written;
695
- destMask = ~(mask << destShift);
696
- _this.data[byteOffset] = (_this.data[byteOffset] & destMask) | (writeBits << destShift);
697
- }
698
- else {
699
- mask = ~(0xFF << written);
700
- writeBits = value & mask;
701
- value >>= written;
702
- destMask = ~(mask << bitOffset);
703
- _this.data[byteOffset] = (_this.data[byteOffset] & destMask) | (writeBits << bitOffset);
704
- }
705
- off_in_bits += written;
706
- i += written;
707
- }
708
- _this.offset = _this.offset + Math.floor(((bits) + _this.bitoffset) / 8); //end byte
709
- _this.bitoffset = ((bits) + _this.bitoffset) % 8;
710
- }
711
- exports.wbit = wbit;
712
- function rbit(_this, bits, unsigned, endian) {
713
- if (bits == undefined || typeof bits != "number") {
714
- throw new Error("Enter number of bits to read");
715
- }
716
- if (bits <= 0 || bits > 32) {
717
- throw new Error('Bit length must be between 1 and 32.');
718
- }
719
- const size_needed = ((((bits - 1) + _this.bitoffset) / 8) + _this.offset);
720
- if (bits <= 0 || size_needed > _this.size) {
721
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
722
- throw new Error("Invalid number of bits to read: " + size_needed + " of " + _this.size);
723
- }
724
- var off_in_bits = (_this.offset * 8) + _this.bitoffset;
725
- var value = 0;
726
- for (var i = 0; i < bits;) {
727
- var remaining = bits - i;
728
- var bitOffset = off_in_bits & 7;
729
- var currentByte = _this.data[off_in_bits >> 3];
730
- var read = Math.min(remaining, 8 - bitOffset);
731
- var mask, readBits;
732
- if ((endian != undefined ? endian : _this.endian) == "big") {
733
- mask = ~(0xFF << read);
734
- readBits = (currentByte >> (8 - read - bitOffset)) & mask;
735
- value <<= read;
736
- value |= readBits;
737
- }
738
- else {
739
- mask = ~(0xFF << read);
740
- readBits = (currentByte >> bitOffset) & mask;
741
- value |= readBits << i;
742
- }
743
- off_in_bits += read;
744
- i += read;
745
- }
746
- _this.offset = _this.offset + Math.floor(((bits) + _this.bitoffset) / 8); //end byte
747
- _this.bitoffset = ((bits) + _this.bitoffset) % 8;
748
- if (unsigned == true || bits <= 7) {
749
- return value >>> 0;
750
- }
751
- if (bits !== 32 && value & (1 << (bits - 1))) {
752
- value |= -1 ^ ((1 << bits) - 1);
753
- }
754
- return value;
755
- }
756
- exports.rbit = rbit;
757
- function wbyte(_this, value, unsigned) {
758
- _this.check_size(1, 0);
759
- if (unsigned == true) {
760
- if (value < 0 || value > 255) {
761
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
762
- throw new Error('Value is out of range for the specified 8bit length.' + " min: " + 0 + " max: " + 255 + " value: " + value);
763
- }
764
- }
765
- else {
766
- const maxValue = Math.pow(2, 8 - 1) - 1;
767
- const minValue = -maxValue - 1;
768
- if (value < minValue || value > maxValue) {
769
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
770
- throw new Error('Value is out of range for the specified 8bit length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
771
- }
772
- }
773
- _this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? value : value & 0xFF;
774
- _this.offset += 1;
775
- _this.bitoffset = 0;
776
- }
777
- exports.wbyte = wbyte;
778
- function rbyte(_this, unsigned) {
779
- _this.check_size(1);
780
- var read = _this.data[_this.offset];
781
- _this.offset += 1;
782
- _this.bitoffset = 0;
783
- if (unsigned == true) {
784
- return read & 0xFF;
785
- }
786
- else {
787
- return read > 127 ? read - 256 : read;
788
- }
789
- }
790
- exports.rbyte = rbyte;
791
- function wint16(_this, value, unsigned, endian) {
792
- _this.check_size(2, 0);
793
- if (unsigned == true) {
794
- if (value < 0 || value > 65535) {
795
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
796
- throw new Error('Value is out of range for the specified 16bit length.' + " min: " + 0 + " max: " + 65535 + " value: " + value);
797
- }
798
- }
799
- else {
800
- const maxValue = Math.pow(2, 16 - 1) - 1;
801
- const minValue = -maxValue - 1;
802
- if (value < minValue || value > maxValue) {
803
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
804
- throw new Error('Value is out of range for the specified 16bit length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
805
- }
806
- }
807
- if ((endian != undefined ? endian : _this.endian) == "little") {
808
- _this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? value : value & 0xff;
809
- _this.data[_this.offset + 1] = (unsigned == undefined || unsigned == false) ? (value >> 8) : (value >> 8) & 0xff;
810
- }
811
- else {
812
- _this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? (value >> 8) : (value >> 8) & 0xff;
813
- _this.data[_this.offset + 1] = (unsigned == undefined || unsigned == false) ? value : value & 0xff;
814
- }
815
- _this.offset += 2;
816
- _this.bitoffset = 0;
817
- }
818
- exports.wint16 = wint16;
819
- function rint16(_this, unsigned, endian) {
820
- _this.check_size(2);
821
- var read;
822
- if ((endian != undefined ? endian : _this.endian) == "little") {
823
- read = (_this.data[_this.offset + 1] << 8) | _this.data[_this.offset];
824
- }
825
- else {
826
- read = (_this.data[_this.offset] << 8) | _this.data[_this.offset + 1];
827
- }
828
- _this.offset += 2;
829
- _this.bitoffset = 0;
830
- if (unsigned == undefined || unsigned == false) {
831
- return read & 0x8000 ? -(0x10000 - read) : read;
832
- }
833
- else {
834
- return read & 0xFFFF;
835
- }
836
- }
837
- exports.rint16 = rint16;
838
- function rhalffloat(_this, endian) {
839
- var uint16Value = _this.readInt16(true, (endian != undefined ? endian : _this.endian));
840
- const sign = (uint16Value & 0x8000) >> 15;
841
- const exponent = (uint16Value & 0x7C00) >> 10;
842
- const fraction = uint16Value & 0x03FF;
843
- let floatValue;
844
- if (exponent === 0) {
845
- if (fraction === 0) {
846
- floatValue = (sign === 0) ? 0 : -0; // +/-0
847
- }
848
- else {
849
- // Denormalized number
850
- floatValue = (sign === 0 ? 1 : -1) * Math.pow(2, -14) * (fraction / 0x0400);
851
- }
852
- }
853
- else if (exponent === 0x1F) {
854
- if (fraction === 0) {
855
- floatValue = (sign === 0) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
856
- }
857
- else {
858
- floatValue = Number.NaN;
859
- }
860
- }
861
- else {
862
- // Normalized number
863
- floatValue = (sign === 0 ? 1 : -1) * Math.pow(2, exponent - 15) * (1 + fraction / 0x0400);
864
- }
865
- return floatValue;
866
- }
867
- exports.rhalffloat = rhalffloat;
868
- function whalffloat(_this, value, endian) {
869
- _this.check_size(2, 0);
870
- const maxValue = 65504;
871
- const minValue = 5.96e-08;
872
- if (value < minValue || value > maxValue) {
873
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
874
- throw new Error('Value is out of range for the specified half float length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
875
- }
876
- const signMask = 0x8000;
877
- const exponentMask = 0x7C00;
878
- const fractionMask = 0x03FF;
879
- // Determine sign, exponent, and fraction bits
880
- let signBit = (value & signMask) >> 15;
881
- let exponentBits = (value & exponentMask) >> 10;
882
- let fractionBits = value & fractionMask;
883
- // Special cases for NaN and Infinity
884
- if (exponentBits === 0x1F) {
885
- // NaN or Infinity, copy exponent and fraction
886
- exponentBits = 0xFF;
887
- }
888
- else if (exponentBits === 0x00) {
889
- // Denormalized numbers, exponent is 0, adjust exponent bits
890
- exponentBits = 0x00;
891
- fractionBits = 0x00; // Clear fraction for denormals
892
- }
893
- else {
894
- // Normalized number, subtract exponent bias
895
- exponentBits -= 15;
896
- }
897
- // Combine sign, exponent, and fraction bits into half float format
898
- let halfFloatBits = (signBit << 15) | (exponentBits << 10) | fractionBits;
899
- // Write bytes based on endianness
900
- if ((endian = undefined ? endian : _this.endian) == "little") {
901
- _this.data[_this.offset] = halfFloatBits & 0xFF;
902
- _this.data[_this.offset + 1] = (halfFloatBits >> 8) & 0xFF;
903
- }
904
- else {
905
- _this.data[_this.offset] = (halfFloatBits >> 8) & 0xFF;
906
- _this.data[_this.offset + 1] = halfFloatBits & 0xFF;
907
- }
908
- _this.offset += 2;
909
- _this.bitoffset = 0;
910
- }
911
- exports.whalffloat = whalffloat;
912
- function wint32(_this, value, unsigned, endian) {
913
- _this.check_size(4, 0);
914
- if (unsigned == true) {
915
- if (value < 0 || value > 4294967295) {
916
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
917
- throw new Error('Value is out of range for the specified 32bit length.' + " min: " + 0 + " max: " + 4294967295 + " value: " + value);
918
- }
919
- }
920
- else {
921
- const maxValue = Math.pow(2, 32 - 1) - 1;
922
- const minValue = -maxValue - 1;
923
- if (value < minValue || value > maxValue) {
924
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
925
- throw new Error('Value is out of range for the specified 32bit length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
926
- }
927
- }
928
- if ((endian = undefined ? endian : _this.endian) == "little") {
929
- _this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? value : value & 0xFF;
930
- _this.data[_this.offset + 1] = (unsigned == undefined || unsigned == false) ? (value >> 8) : (value >> 8) & 0xFF;
931
- _this.data[_this.offset + 2] = (unsigned == undefined || unsigned == false) ? (value >> 16) : (value >> 16) & 0xFF;
932
- _this.data[_this.offset + 3] = (unsigned == undefined || unsigned == false) ? (value >> 24) : (value >> 24) & 0xFF;
933
- }
934
- else {
935
- _this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? (value >> 24) : (value >> 24) & 0xFF;
936
- _this.data[_this.offset + 1] = (unsigned == undefined || unsigned == false) ? (value >> 16) : (value >> 16) & 0xFF;
937
- _this.data[_this.offset + 2] = (unsigned == undefined || unsigned == false) ? (value >> 8) : (value >> 8) & 0xFF;
938
- _this.data[_this.offset + 3] = (unsigned == undefined || unsigned == false) ? value : value & 0xFF;
939
- }
940
- _this.offset += 4;
941
- _this.bitoffset = 0;
942
- }
943
- exports.wint32 = wint32;
944
- function rint32(_this, unsigned, endian) {
945
- _this.check_size(4);
946
- var read;
947
- if ((endian != undefined ? endian : _this.endian) == "little") {
948
- read = ((_this.data[_this.offset + 3] << 24) | (_this.data[_this.offset + 2] << 16) | (_this.data[_this.offset + 1] << 8) | _this.data[_this.offset]);
949
- }
950
- else {
951
- read = (_this.data[_this.offset] << 24) | (_this.data[_this.offset + 1] << 16) | (_this.data[_this.offset + 2] << 8) | _this.data[_this.offset + 3];
952
- }
953
- _this.offset += 4;
954
- _this.bitoffset = 0;
955
- if (unsigned == undefined || unsigned == false) {
956
- return read;
957
- }
958
- else {
959
- return read >>> 0;
960
- }
961
- }
962
- exports.rint32 = rint32;
963
- function rfloat(_this, endian) {
964
- var uint32Value = _this.readInt32(true, (endian == undefined ? _this.endian : endian));
965
- // Check if the value is negative (i.e., the most significant bit is set)
966
- const isNegative = (uint32Value & 0x80000000) !== 0 ? 1 : 0;
967
- // Extract the exponent and fraction parts
968
- const exponent = (uint32Value >> 23) & 0xFF;
969
- const fraction = uint32Value & 0x7FFFFF;
970
- // Calculate the float value
971
- let floatValue;
972
- if (exponent === 0) {
973
- // Denormalized number (exponent is 0)
974
- floatValue = Math.pow(-1, isNegative) * Math.pow(2, -126) * (fraction / Math.pow(2, 23));
975
- }
976
- else if (exponent === 0xFF) {
977
- // Infinity or NaN (exponent is 255)
978
- floatValue = fraction === 0 ? (isNegative ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY) : Number.NaN;
979
- }
980
- else {
981
- // Normalized number
982
- floatValue = Math.pow(-1, isNegative) * Math.pow(2, exponent - 127) * (1 + fraction / Math.pow(2, 23));
983
- }
984
- return floatValue;
985
- }
986
- exports.rfloat = rfloat;
987
- function wfloat(_this, value, endian) {
988
- _this.check_size(4, 0);
989
- const maxValue = 3.402823466e+38;
990
- const minValue = 1.175494351e-38;
991
- if (value < minValue || value > maxValue) {
992
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
993
- throw new Error('Value is out of range for the specified float length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
994
- }
995
- let intValue = Float32Array.from([value])[0]; // Convert float to 32-bit integer representation
996
- let shift = 0;
997
- for (let i = 0; i < 4; i++) {
998
- if ((endian = undefined ? endian : _this.endian) == "little") {
999
- _this.data[_this.offset + i] = (intValue >> shift) & 0xFF;
1000
- }
1001
- else {
1002
- _this.data[_this.offset + (3 - i)] = (intValue >> shift) & 0xFF;
1003
- }
1004
- shift += 8;
1005
- }
1006
- _this.offset += 4;
1007
- _this.bitoffset = 0;
1008
- }
1009
- exports.wfloat = wfloat;
1010
- function rint64(_this, unsigned, endian) {
1011
- _this.check_size(8);
1012
- // Convert the byte array to a BigInt
1013
- let value = BigInt(0);
1014
- if ((endian == undefined ? _this.endian : endian) == "little") {
1015
- for (let i = 0; i < 8; i++) {
1016
- value = value | BigInt(_this.data[_this.offset]) << BigInt(8 * i);
1017
- _this.offset += 1;
1018
- }
1019
- if (unsigned == undefined || unsigned == false) {
1020
- if (value & (BigInt(1) << BigInt(63))) {
1021
- value -= BigInt(1) << BigInt(64);
1022
- }
1023
- }
1024
- }
1025
- else {
1026
- for (let i = 0; i < 8; i++) {
1027
- value = (value << BigInt(8)) | BigInt(_this.data[_this.offset]);
1028
- _this.offset += 1;
1029
- }
1030
- if (unsigned == undefined || unsigned == false) {
1031
- if (value & (BigInt(1) << BigInt(63))) {
1032
- value -= BigInt(1) << BigInt(64);
1033
- }
1034
- }
1035
- }
1036
- _this.offset += 8;
1037
- _this.bitoffset = 0;
1038
- return value;
1039
- }
1040
- exports.rint64 = rint64;
1041
- function wint64(_this, value, unsigned, endian) {
1042
- _this.check_size(8, 0);
1043
- if (unsigned == true) {
1044
- if (value < 0 || value > Math.pow(2, 64) - 1) {
1045
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1046
- throw new Error('Value is out of range for the specified 64bit length.' + " min: " + 0 + " max: " + (Math.pow(2, 64) - 1) + " value: " + value);
1047
- }
1048
- }
1049
- else {
1050
- const maxValue = Math.pow(2, 63) - 1;
1051
- const minValue = -Math.pow(2, 63);
1052
- if (value < minValue || value > maxValue) {
1053
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1054
- throw new Error('Value is out of range for the specified 64bit length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
1055
- }
1056
- }
1057
- // Convert the BigInt to a 64-bit signed integer
1058
- const bigIntArray = new BigInt64Array(1);
1059
- bigIntArray[0] = BigInt(value);
1060
- // Use two 32-bit views to write the Int64
1061
- const int32Array = new Int32Array(bigIntArray.buffer);
1062
- for (let i = 0; i < 2; i++) {
1063
- if ((endian = undefined ? endian : _this.endian) == "little") {
1064
- if (unsigned == undefined || unsigned == false) {
1065
- _this.data[_this.offset + i * 4 + 0] = int32Array[i];
1066
- _this.data[_this.offset + i * 4 + 1] = (int32Array[i] >> 8);
1067
- _this.data[_this.offset + i * 4 + 2] = (int32Array[i] >> 16);
1068
- _this.data[_this.offset + i * 4 + 3] = (int32Array[i] >> 24);
1069
- }
1070
- else {
1071
- _this.data[_this.offset + i * 4 + 0] = int32Array[i] & 0xFF;
1072
- _this.data[_this.offset + i * 4 + 1] = (int32Array[i] >> 8) & 0xFF;
1073
- _this.data[_this.offset + i * 4 + 2] = (int32Array[i] >> 16) & 0xFF;
1074
- _this.data[_this.offset + i * 4 + 3] = (int32Array[i] >> 24) & 0xFF;
1075
- }
1076
- }
1077
- else {
1078
- if (unsigned == undefined || unsigned == false) {
1079
- _this.data[_this.offset + (1 - i) * 4 + 0] = int32Array[i];
1080
- _this.data[_this.offset + (1 - i) * 4 + 1] = (int32Array[i] >> 8);
1081
- _this.data[_this.offset + (1 - i) * 4 + 2] = (int32Array[i] >> 16);
1082
- _this.data[_this.offset + (1 - i) * 4 + 3] = (int32Array[i] >> 24);
1083
- }
1084
- else {
1085
- _this.data[_this.offset + (1 - i) * 4 + 0] = int32Array[i] & 0xFF;
1086
- _this.data[_this.offset + (1 - i) * 4 + 1] = (int32Array[i] >> 8) & 0xFF;
1087
- _this.data[_this.offset + (1 - i) * 4 + 2] = (int32Array[i] >> 16) & 0xFF;
1088
- _this.data[_this.offset + (1 - i) * 4 + 3] = (int32Array[i] >> 24) & 0xFF;
1089
- }
1090
- }
1091
- }
1092
- _this.offset += 8;
1093
- _this.bitoffset = 0;
1094
- }
1095
- exports.wint64 = wint64;
1096
- function wdfloat(_this, value, endian) {
1097
- _this.check_size(8, 0);
1098
- const maxValue = 1.7976931348623158e308;
1099
- const minValue = 2.2250738585072014e-308;
1100
- if (value < minValue || value > maxValue) {
1101
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1102
- throw new Error('Value is out of range for the specified 64bit length.' + " min: " + minValue + " max: " + maxValue + " value: " + value);
1103
- }
1104
- const intArray = new Int32Array(2);
1105
- const floatArray = new Float64Array(intArray.buffer);
1106
- floatArray[0] = value;
1107
- const bytes = new Uint8Array(intArray.buffer);
1108
- for (let i = 0; i < 8; i++) {
1109
- if ((endian = undefined ? endian : _this.endian) == "little") {
1110
- _this.data[_this.offset + i] = bytes[i];
1111
- }
1112
- else {
1113
- _this.data[_this.offset + (7 - i)] = bytes[i];
1114
- }
1115
- }
1116
- _this.offset += 8;
1117
- _this.bitoffset = 0;
1118
- }
1119
- exports.wdfloat = wdfloat;
1120
- function rdfloat(_this, endian) {
1121
- var uint64Value = _this.readInt64(true, (endian == undefined ? _this.endian : endian));
1122
- const sign = (uint64Value & 0x8000000000000000n) >> 63n;
1123
- const exponent = Number((uint64Value & 0x7ff0000000000000n) >> 52n) - 1023;
1124
- const fraction = Number(uint64Value & 0x000fffffffffffffn) / Math.pow(2, 52);
1125
- var floatValue;
1126
- if (exponent == -1023) {
1127
- if (fraction == 0) {
1128
- floatValue = (sign == 0n) ? 0 : -0; // +/-0
1129
- }
1130
- else {
1131
- // Denormalized number
1132
- floatValue = (sign == 0n ? 1 : -1) * Math.pow(2, -1022) * fraction;
1133
- }
1134
- }
1135
- else if (exponent == 1024) {
1136
- if (fraction == 0) {
1137
- floatValue = (sign == 0n) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
1138
- }
1139
- else {
1140
- floatValue = Number.NaN;
1141
- }
1142
- }
1143
- else {
1144
- // Normalized number
1145
- floatValue = (sign == 0n ? 1 : -1) * Math.pow(2, exponent) * (1 + fraction);
1146
- }
1147
- return floatValue;
1148
- }
1149
- exports.rdfloat = rdfloat;
1150
- function rstring(_this, options) {
1151
- var length = options && options.length;
1152
- var stringType = options && options.stringType || 'utf-8';
1153
- var terminateValue = options && options.terminateValue;
1154
- var lengthReadSize = options && options.lengthReadSize || 1;
1155
- var stripNull = options && options.stripNull || true;
1156
- var encoding = options && options.encoding || 'utf-8';
1157
- var endian = options && options.endian || _this.endian;
1158
- var terminate = terminateValue;
1159
- if (length != undefined) {
1160
- _this.check_size(length);
1161
- }
1162
- if (typeof terminateValue == "number") {
1163
- terminate = terminateValue & 0xFF;
1164
- }
1165
- else {
1166
- if (terminateValue != undefined) {
1167
- throw new Error("terminateValue must be a number");
1168
- }
1169
- }
1170
- if (stringType == 'utf-8' || stringType == 'utf-16') {
1171
- if (encoding == undefined) {
1172
- if (stringType == 'utf-8') {
1173
- encoding = 'utf-8';
1174
- }
1175
- if (stringType == 'utf-16') {
1176
- encoding = 'utf-16';
1177
- }
1178
- }
1179
- // Read the string as UTF-8 encoded untill 0 or terminateValue
1180
- const encodedBytes = [];
1181
- if (length == undefined && terminateValue == undefined) {
1182
- terminate = 0;
1183
- }
1184
- var read_length = 0;
1185
- if (length != undefined) {
1186
- read_length = length;
1187
- }
1188
- else {
1189
- read_length = _this.data.length - _this.offset;
1190
- }
1191
- for (let i = 0; i < read_length; i++) {
1192
- if (stringType === 'utf-8') {
1193
- var read = _this.readUByte();
1194
- if (read == terminate) {
1195
- break;
1196
- }
1197
- else {
1198
- if (!(stripNull == true && read == 0)) {
1199
- encodedBytes.push(read);
1200
- }
1201
- }
1202
- }
1203
- else {
1204
- var read = _this.readInt16(true, endian);
1205
- var read1 = read & 0xFF;
1206
- var read2 = (read >> 8) & 0xFF;
1207
- if (read == terminate) {
1208
- break;
1209
- }
1210
- else {
1211
- if (!(stripNull == true && read == 0)) {
1212
- encodedBytes.push(read1);
1213
- encodedBytes.push(read2);
1214
- }
1215
- }
1216
- }
1217
- }
1218
- return new TextDecoder(encoding).decode(new Uint8Array(encodedBytes));
1219
- }
1220
- else if (stringType == 'pascal' || stringType == 'wide-pascal') {
1221
- if (encoding == undefined) {
1222
- if (stringType == 'pascal') {
1223
- encoding = 'utf-8';
1224
- }
1225
- if (stringType == 'wide-pascal') {
1226
- encoding = 'utf-16';
1227
- }
1228
- }
1229
- var maxBytes;
1230
- if (lengthReadSize == 1) {
1231
- maxBytes = _this.readUByte();
1232
- }
1233
- else if (lengthReadSize == 2) {
1234
- maxBytes = _this.readInt16(true, endian);
1235
- }
1236
- else if (lengthReadSize == 4) {
1237
- maxBytes = _this.readInt32(true, endian);
1238
- }
1239
- else {
1240
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1241
- throw new Error("Invalid length read size: " + lengthReadSize);
1242
- }
1243
- // Read the string as Pascal or Delphi encoded
1244
- const encodedBytes = [];
1245
- for (let i = 0; i < maxBytes; i++) {
1246
- if (stringType == 'wide-pascal') {
1247
- const read = _this.readInt16(true, endian);
1248
- if (!(stripNull == true && read == 0)) {
1249
- encodedBytes.push(read);
1250
- }
1251
- }
1252
- else {
1253
- const read = _this.readUByte();
1254
- if (!(stripNull == true && read == 0)) {
1255
- encodedBytes.push(read);
1256
- }
1257
- }
1258
- }
1259
- var str_return;
1260
- if (stringType == 'wide-pascal') {
1261
- str_return = new TextDecoder(encoding).decode(new Uint16Array(encodedBytes));
1262
- }
1263
- else {
1264
- str_return = new TextDecoder(encoding).decode(new Uint8Array(encodedBytes));
1265
- }
1266
- return str_return;
1267
- }
1268
- else {
1269
- throw new Error('Unsupported string type: ' + stringType);
1270
- }
1271
- }
1272
- exports.rstring = rstring;
1273
- function wstring(_this, string, options) {
1274
- var length = options && options.length;
1275
- var stringType = options && options.stringType || 'utf-8';
1276
- var terminateValue = options && options.terminateValue;
1277
- var lengthWriteSize = options && options.lengthWriteSize || 1;
1278
- var encoding = options && options.encoding || 'utf-8';
1279
- var endian = options && options.endian || _this.endian;
1280
- if (stringType === 'utf-8' || stringType === 'utf-16') {
1281
- // Encode the string in the specified encoding
1282
- if (encoding == undefined) {
1283
- if (stringType == 'utf-8') {
1284
- encoding = 'utf-8';
1285
- }
1286
- if (stringType == 'utf-16') {
1287
- encoding = 'utf-16';
1288
- }
1289
- }
1290
- const encoder = new TextEncoder();
1291
- const encodedString = encoder.encode(string);
1292
- if (length == undefined && terminateValue == undefined) {
1293
- terminateValue = 0;
1294
- }
1295
- var totalLength = (length || encodedString.length) + (terminateValue != undefined ? 1 : 0);
1296
- if (stringType == 'utf-16') {
1297
- totalLength = (length || (encodedString.length * 2)) + (terminateValue != undefined ? 2 : 0);
1298
- }
1299
- _this.check_size(totalLength, 0);
1300
- // Write the string bytes to the Uint8Array
1301
- for (let i = 0; i < encodedString.length; i++) {
1302
- if (stringType === 'utf-16') {
1303
- const charCode = encodedString[i];
1304
- if (endian == "little") {
1305
- _this.data[_this.offset + i * 2] = charCode & 0xFF;
1306
- _this.data[_this.offset + i * 2 + 1] = (charCode >> 8) & 0xFF;
1307
- }
1308
- else {
1309
- _this.data[_this.offset + i * 2 + 1] = charCode & 0xFF;
1310
- _this.data[_this.offset + i * 2] = (charCode >> 8) & 0xFF;
1311
- }
1312
- }
1313
- else {
1314
- _this.data[_this.offset + i] = encodedString[i];
1315
- }
1316
- }
1317
- if (terminateValue != undefined) {
1318
- if (stringType === 'utf-16') {
1319
- _this.data[_this.offset + totalLength - 1] = terminateValue & 0xFF;
1320
- _this.data[_this.offset + totalLength] = (terminateValue >> 8) & 0xFF;
1321
- }
1322
- else {
1323
- _this.data[_this.offset + totalLength] = terminateValue;
1324
- }
1325
- }
1326
- _this.offset += totalLength;
1327
- _this.bitoffset = 0;
1328
- }
1329
- else if (stringType == 'pascal' || stringType == 'wide-pascal') {
1330
- if (encoding == undefined) {
1331
- if (stringType == 'pascal') {
1332
- encoding = 'utf-8';
1333
- }
1334
- if (stringType == 'wide-pascal') {
1335
- encoding = 'utf-16';
1336
- }
1337
- }
1338
- const encoder = new TextEncoder();
1339
- // Calculate the length of the string based on the specified max length
1340
- var maxLength;
1341
- // Encode the string in the specified encoding
1342
- if (lengthWriteSize == 1) {
1343
- maxLength = 255;
1344
- }
1345
- else if (lengthWriteSize == 2) {
1346
- maxLength = 65535;
1347
- }
1348
- else if (lengthWriteSize == 4) {
1349
- maxLength = 4294967295;
1350
- }
1351
- else {
1352
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1353
- throw new Error("Invalid length write size: " + lengthWriteSize);
1354
- }
1355
- if (string.length > maxLength || (length || 0) > maxLength) {
1356
- _this.errorDump ? "[Error], hexdump:\n" + _this.hexdump() : "";
1357
- throw new Error("String outsize of max write length: " + maxLength);
1358
- }
1359
- var maxBytes = Math.min(string.length, maxLength);
1360
- const encodedString = encoder.encode(string.substring(0, maxBytes));
1361
- var totalLength = (length || encodedString.length) + lengthWriteSize;
1362
- if (stringType == 'wide-pascal') {
1363
- totalLength = (length || (encodedString.length * 2)) + lengthWriteSize;
1364
- }
1365
- _this.check_size(totalLength, 0);
1366
- if (lengthWriteSize == 1) {
1367
- _this.writeUByte(maxBytes);
1368
- }
1369
- else if (lengthWriteSize == 2) {
1370
- _this.writeUInt16(maxBytes, endian);
1371
- }
1372
- else if (lengthWriteSize == 4) {
1373
- _this.writeUInt32(maxBytes, endian);
1374
- }
1375
- // Write the string bytes to the Uint8Array
1376
- for (let i = 0; i < encodedString.length; i++) {
1377
- if (stringType == 'wide-pascal') {
1378
- const charCode = encodedString[i];
1379
- if (endian == "little") {
1380
- _this.data[_this.offset + i * 2] = charCode & 0xFF;
1381
- _this.data[_this.offset + i * 2 + 1] = (charCode >> 8) & 0xFF;
1382
- }
1383
- else {
1384
- _this.data[_this.offset + i * 2 + 1] = charCode & 0xFF;
1385
- _this.data[_this.offset + i * 2] = (charCode >> 8) & 0xFF;
1386
- }
1387
- }
1388
- else {
1389
- _this.data[_this.offset + i] = encodedString[i];
1390
- }
1391
- }
1392
- _this.offset += totalLength;
1393
- _this.bitoffset = 0;
1394
- }
1395
- else {
1396
- throw new Error('Unsupported string type: ' + stringType);
1397
- }
1398
- }
1399
- exports.wstring = wstring;
1400
- //# sourceMappingURL=common.js.map