@thi.ng/binary 3.4.68 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![Mastodon Follow](https://img.shields.io/mastodon/follow/109331703950160316?domain=https%3A%2F%2Fmastodon.thi.ng&style=social)](https://mastodon.thi.ng/@toxi)
8
8
 
9
9
  > [!NOTE]
10
- > This is one of 211 standalone projects, maintained as part
10
+ > This is one of 212 standalone projects, maintained as part
11
11
  > of the [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo
12
12
  > and anti-framework.
13
13
  >
@@ -64,7 +64,7 @@ For Node.js REPL:
64
64
  const bin = await import("@thi.ng/binary");
65
65
  ```
66
66
 
67
- Package sizes (brotli'd, pre-treeshake): ESM: 2.20 KB
67
+ Package sizes (brotli'd, pre-treeshake): ESM: 2.53 KB
68
68
 
69
69
  ## Dependencies
70
70
 
package/buffers.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export declare const F64: Float64Array<ArrayBuffer>;
2
+ export declare const F32: Float32Array<ArrayBuffer>;
3
+ export declare const I8: Int8Array<ArrayBuffer>;
4
+ export declare const U8: Uint8Array<ArrayBuffer>;
5
+ export declare const I16: Int16Array<ArrayBuffer>;
6
+ export declare const U16: Uint16Array<ArrayBuffer>;
7
+ export declare const I32: Int32Array<ArrayBuffer>;
8
+ export declare const U32: Uint32Array<ArrayBuffer>;
9
+ export declare const I64: BigInt64Array<ArrayBuffer>;
10
+ export declare const U64: BigUint64Array<ArrayBuffer>;
11
+ //# sourceMappingURL=buffers.d.ts.map
package/buffers.js ADDED
@@ -0,0 +1,22 @@
1
+ const F64 = new Float64Array(1);
2
+ const F32 = new Float32Array(F64.buffer);
3
+ const I8 = new Int8Array(F64.buffer);
4
+ const U8 = new Uint8Array(F64.buffer);
5
+ const I16 = new Int16Array(F64.buffer);
6
+ const U16 = new Uint16Array(F64.buffer);
7
+ const I32 = new Int32Array(F64.buffer);
8
+ const U32 = new Uint32Array(F64.buffer);
9
+ const I64 = new BigInt64Array(F64.buffer);
10
+ const U64 = new BigUint64Array(F64.buffer);
11
+ export {
12
+ F32,
13
+ F64,
14
+ I16,
15
+ I32,
16
+ I64,
17
+ I8,
18
+ U16,
19
+ U32,
20
+ U64,
21
+ U8
22
+ };
package/endianess.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ import type { NumericArray } from "@thi.ng/api";
2
+ /**
3
+ * JS native DataView-like functionality, but tailored for using `Uint8Array` or
4
+ * vanilla JS numeric arrays (assuming the array contains U8 values). Use
5
+ * {@link DATAVIEW} for default implementation.
6
+ *
7
+ * @remarks
8
+ * The default byte ordering used for all accessors is Little Endian, but can be
9
+ * overriden via `isLE` args.
10
+ *
11
+ * **IMPORTANT:** None of the operations perform any bounds checking.
12
+ */
13
+ export interface IDataView {
14
+ getI8(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
15
+ getU8(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
16
+ getI16(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
17
+ getU16(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
18
+ getI32(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
19
+ getU32(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
20
+ getU64(data: ArrayLike<number>, addr: number, isLE?: boolean): bigint;
21
+ getI64(data: ArrayLike<number>, addr: number, isLE?: boolean): bigint;
22
+ getF32(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
23
+ getF64(data: ArrayLike<number>, addr: number, isLE?: boolean): number;
24
+ setI8(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
25
+ setU8(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
26
+ setI16(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
27
+ setU16(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
28
+ setI32(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
29
+ setU32(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
30
+ setI64(data: NumericArray, addr: number, val: bigint, isLE?: boolean): void;
31
+ setU64(data: NumericArray, addr: number, val: bigint, isLE?: boolean): void;
32
+ setF32(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
33
+ setF64(data: NumericArray, addr: number, val: number, isLE?: boolean): void;
34
+ }
35
+ /**
36
+ * Indicator flag if current runtime/platform uses Little Endian byte order.
37
+ */
38
+ export declare const IS_LE: boolean;
39
+ /**
40
+ * {@link IDataView} implementation for Big Endian access.
41
+ *
42
+ * @remarks
43
+ * **IMPORTANT:** None of the operations perform any bounds checking.
44
+ */
45
+ export declare const DATAVIEW: IDataView;
46
+ //# sourceMappingURL=endianess.d.ts.map
package/endianess.js ADDED
@@ -0,0 +1,103 @@
1
+ import { F32, F64, I16, I32, I64, I8, U16, U32, U64, U8 } from "./buffers.js";
2
+ const IS_LE = (U32[0] = 1, U8[0] === 1);
3
+ const DATAVIEW = {
4
+ getI8: (src, i) => (I8[0] = src[i], I8[0]),
5
+ getU8: (src, i) => src[i] & 255,
6
+ getI16: (src, i, isLE) => __get2(src, i, I16, isLE),
7
+ getU16: (src, i, isLE) => __get2(src, i, U16, isLE),
8
+ getI32: (src, i, isLE) => __get4(src, i, I32, isLE),
9
+ getU32: (src, i, isLE) => __get4(src, i, U32, isLE) >>> 0,
10
+ getI64: (src, i, isLE) => __get8(src, i, I64, isLE),
11
+ getU64: (src, i, isLE) => __get8(src, i, U64, isLE),
12
+ getF32: (src, i, isLE) => __get4(src, i, F32, isLE),
13
+ getF64: (src, i, isLE) => __get8(src, i, F64, isLE),
14
+ setI8: (data, addr, x) => {
15
+ I8[0] = x;
16
+ data[addr] = U8[0];
17
+ },
18
+ setU8: (data, addr, x) => {
19
+ data[addr] = x & 255;
20
+ },
21
+ setI16: (data, addr, x, isLE) => {
22
+ I16[0] = x;
23
+ __set2(data, addr, isLE);
24
+ },
25
+ setU16: (data, addr, x, isLE) => {
26
+ U16[0] = x;
27
+ __set2(data, addr, isLE);
28
+ },
29
+ setI32: (data, addr, x, isLE) => {
30
+ I32[0] = x;
31
+ __set4(data, addr, isLE);
32
+ },
33
+ setU32: (data, addr, x, isLE) => {
34
+ U32[0] = x;
35
+ __set4(data, addr, isLE);
36
+ },
37
+ setF32: (data, addr, x, isLE) => {
38
+ F32[0] = x;
39
+ __set4(data, addr, isLE);
40
+ },
41
+ setF64: (data, addr, x, isLE) => {
42
+ F64[0] = x;
43
+ __set8(data, addr, isLE);
44
+ },
45
+ setI64: (data, addr, x, isLE) => {
46
+ I64[0] = x;
47
+ __set8(data, addr, isLE);
48
+ },
49
+ setU64: (data, addr, x, isLE) => {
50
+ U64[0] = x;
51
+ __set8(data, addr, isLE);
52
+ }
53
+ };
54
+ const __get2 = (src, i, view, isLE = true) => isLE !== IS_LE ? (U8[1] = src[i], U8[0] = src[i + 1], view[0]) : (U8[0] = src[i], U8[1] = src[i + 1], view[0]);
55
+ const __get4 = (src, i, view, isLE = true) => isLE !== IS_LE ? (U8[3] = src[i], U8[2] = src[i + 1], U8[1] = src[i + 2], U8[0] = src[i + 3], view[0]) : (U8[0] = src[i], U8[1] = src[i + 1], U8[2] = src[i + 2], U8[3] = src[i + 3], view[0]);
56
+ const __get8 = (src, i, view, isLE = true) => isLE !== IS_LE ? (U8[7] = src[i], U8[6] = src[i + 1], U8[5] = src[i + 2], U8[4] = src[i + 3], U8[3] = src[i + 4], U8[2] = src[i + 5], U8[1] = src[i + 6], U8[0] = src[i + 7], view[0]) : (U8[0] = src[i], U8[1] = src[i + 1], U8[2] = src[i + 2], U8[3] = src[i + 3], U8[4] = src[i + 4], U8[5] = src[i + 5], U8[6] = src[i + 6], U8[7] = src[i + 7], view[0]);
57
+ const __set2 = (data, addr, isLE = true) => {
58
+ if (isLE !== IS_LE) {
59
+ data[addr] = U8[1];
60
+ data[addr + 1] = U8[0];
61
+ } else {
62
+ data[addr] = U8[0];
63
+ data[addr + 1] = U8[1];
64
+ }
65
+ };
66
+ const __set4 = (data, addr, isLE = true) => {
67
+ if (isLE !== IS_LE) {
68
+ data[addr] = U8[3];
69
+ data[addr + 1] = U8[2];
70
+ data[addr + 2] = U8[1];
71
+ data[addr + 3] = U8[0];
72
+ } else {
73
+ data[addr] = U8[0];
74
+ data[addr + 1] = U8[1];
75
+ data[addr + 2] = U8[2];
76
+ data[addr + 3] = U8[3];
77
+ }
78
+ };
79
+ const __set8 = (data, addr, isLE = true) => {
80
+ if (isLE !== IS_LE) {
81
+ data[addr] = U8[7];
82
+ data[addr + 1] = U8[6];
83
+ data[addr + 2] = U8[5];
84
+ data[addr + 3] = U8[4];
85
+ data[addr + 4] = U8[3];
86
+ data[addr + 5] = U8[2];
87
+ data[addr + 6] = U8[1];
88
+ data[addr + 7] = U8[0];
89
+ } else {
90
+ data[addr] = U8[0];
91
+ data[addr + 1] = U8[1];
92
+ data[addr + 2] = U8[2];
93
+ data[addr + 3] = U8[3];
94
+ data[addr + 4] = U8[4];
95
+ data[addr + 5] = U8[5];
96
+ data[addr + 6] = U8[6];
97
+ data[addr + 7] = U8[7];
98
+ }
99
+ };
100
+ export {
101
+ DATAVIEW,
102
+ IS_LE
103
+ };
package/float.d.ts CHANGED
@@ -1,8 +1,4 @@
1
1
  import type { FnN, FnN2 } from "@thi.ng/api";
2
- /**
3
- * This value is true iff the environment is Little Endian.
4
- */
5
- export declare const IS_LE: boolean;
6
2
  export declare const floatToIntBits: FnN;
7
3
  export declare const floatToUintBits: FnN;
8
4
  export declare const intBitsToFloat: FnN;
package/float.js CHANGED
@@ -1,9 +1,5 @@
1
- const F64 = new Float64Array(1);
2
- const F32 = new Float32Array(F64.buffer);
3
- const U8 = new Uint8Array(F64.buffer);
4
- const I32 = new Int32Array(F64.buffer);
5
- const U32 = new Uint32Array(F64.buffer);
6
- const IS_LE = (U32[0] = 1, U8[0] === 1);
1
+ import { IS_LE } from "./endianess.js";
2
+ import { F32, F64, I32, U32 } from "./buffers.js";
7
3
  const floatToIntBits = (x) => (F32[0] = x, I32[0]);
8
4
  const floatToUintBits = (x) => (F32[0] = x, U32[0]);
9
5
  const intBitsToFloat = (x) => (I32[0] = x, F32[0]);
@@ -33,7 +29,6 @@ const u16f32 = (x) => (x &= 65535, (x | (x >> 15) * 4294901760) / (32767 + (x >>
33
29
  const u24f32 = (x) => (x &= 16777215, (x | (x >> 23) * 4278190080) / (8388607 + (x >> 23)));
34
30
  const u32f32 = (x) => (x | 0) / (2147483647 + (x >>> 31));
35
31
  export {
36
- IS_LE,
37
32
  f32u16,
38
33
  f32u24,
39
34
  f32u32,
package/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from "./bytes.js";
4
4
  export * from "./constants.js";
5
5
  export * from "./count.js";
6
6
  export * from "./edit.js";
7
+ export * from "./endianess.js";
7
8
  export * from "./float.js";
8
9
  export * from "./gray.js";
9
10
  export * from "./int.js";
package/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./bytes.js";
4
4
  export * from "./constants.js";
5
5
  export * from "./count.js";
6
6
  export * from "./edit.js";
7
+ export * from "./endianess.js";
7
8
  export * from "./float.js";
8
9
  export * from "./gray.js";
9
10
  export * from "./int.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thi.ng/binary",
3
- "version": "3.4.68",
3
+ "version": "3.6.0",
4
4
  "description": "100+ assorted binary / bitwise operations, conversions, utilities, lookup tables",
5
5
  "type": "module",
6
6
  "module": "./index.js",
@@ -39,7 +39,7 @@
39
39
  "tool:tangle": "../../node_modules/.bin/tangle src/**/*.ts"
40
40
  },
41
41
  "dependencies": {
42
- "@thi.ng/api": "^8.12.10"
42
+ "@thi.ng/api": "^8.12.11"
43
43
  },
44
44
  "devDependencies": {
45
45
  "esbuild": "^0.27.0",
@@ -97,6 +97,9 @@
97
97
  "./edit": {
98
98
  "default": "./edit.js"
99
99
  },
100
+ "./endianess": {
101
+ "default": "./endianess.js"
102
+ },
100
103
  "./float": {
101
104
  "default": "./float.js"
102
105
  },
@@ -133,5 +136,5 @@
133
136
  "transducers-binary"
134
137
  ]
135
138
  },
136
- "gitHead": "824bf9047b5a10f777c5c5b4aeecf0c750a22c75\n"
139
+ "gitHead": "e7a21b9d2a188fa04d4c893d8531c40fbc0f4c06\n"
137
140
  }