@nnilky/structo 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/datatypes/containers/array.d.ts +1 -1
- package/dist/datatypes/containers/array.js +9 -12
- package/dist/datatypes/containers/array.test.js +2 -2
- package/dist/datatypes/containers/exhuastiveArray.d.ts +1 -1
- package/dist/datatypes/containers/exhuastiveArray.js +7 -7
- package/dist/datatypes/containers/exhuastiveArray.test.js +2 -2
- package/dist/datatypes/containers/fastObject.d.ts +1 -1
- package/dist/datatypes/containers/fastObject.test.js +2 -2
- package/dist/datatypes/containers/list.d.ts +1 -1
- package/dist/datatypes/containers/list.js +7 -7
- package/dist/datatypes/containers/list.test.js +2 -2
- package/dist/datatypes/containers/object.d.ts +1 -1
- package/dist/datatypes/containers/object.js +9 -8
- package/dist/datatypes/containers/object.test.js +2 -2
- package/dist/datatypes/containers/taggedUnion.d.ts +1 -1
- package/dist/datatypes/containers/taggedUnion.test.js +2 -2
- package/dist/datatypes/index.d.ts +13 -13
- package/dist/datatypes/index.js +13 -13
- package/dist/datatypes/numbers/bigints.d.ts +1 -1
- package/dist/datatypes/numbers/bigints.js +2 -2
- package/dist/datatypes/numbers/bigints.test.js +2 -2
- package/dist/datatypes/numbers/floats.d.ts +1 -1
- package/dist/datatypes/numbers/floats.js +12 -9
- package/dist/datatypes/numbers/floats.test.js +2 -2
- package/dist/datatypes/numbers/sints.d.ts +1 -1
- package/dist/datatypes/numbers/sints.js +13 -10
- package/dist/datatypes/numbers/sints.test.js +2 -2
- package/dist/datatypes/numbers/uints.d.ts +1 -1
- package/dist/datatypes/numbers/uints.js +13 -10
- package/dist/datatypes/numbers/uints.test.js +2 -2
- package/dist/datatypes/values/bytes.d.ts +2 -2
- package/dist/datatypes/values/bytes.js +6 -6
- package/dist/datatypes/values/bytes.test.js +4 -4
- package/dist/datatypes/values/sizedbytes.d.ts +2 -2
- package/dist/datatypes/values/sizedbytes.js +3 -4
- package/dist/datatypes/values/sizedbytes.test.js +3 -3
- package/dist/datatypes/values/string.d.ts +1 -1
- package/dist/datatypes/values/string.js +2 -3
- package/dist/datatypes/values/string.test.js +2 -2
- package/dist/index.d.ts +6 -6
- package/dist/index.js +5 -5
- package/dist/read.d.ts +2 -3
- package/dist/read.js +10 -12
- package/dist/transforms/encode.d.ts +1 -1
- package/dist/transforms/enum.d.ts +1 -1
- package/dist/transforms/enum.js +1 -1
- package/dist/transforms/enum.test.js +2 -2
- package/dist/transforms/index.d.ts +11 -11
- package/dist/transforms/index.js +11 -11
- package/dist/transforms/literal.d.ts +1 -1
- package/dist/transforms/literal.js +1 -1
- package/dist/transforms/literal.test.js +2 -2
- package/dist/transforms/modify.d.ts +1 -1
- package/dist/transforms/modify.test.js +2 -2
- package/dist/transforms/offset.d.ts +1 -1
- package/dist/transforms/offset.test.js +2 -2
- package/dist/transforms/pipe.d.ts +1 -1
- package/dist/transforms/toAscii.d.ts +1 -1
- package/dist/transforms/toAscii.js +3 -3
- package/dist/transforms/toAscii.test.js +2 -2
- package/dist/transforms/toBase64.d.ts +1 -1
- package/dist/transforms/toBase64.js +3 -3
- package/dist/transforms/toBase64.test.js +2 -2
- package/dist/transforms/toBytes.d.ts +1 -1
- package/dist/transforms/toBytes.js +3 -3
- package/dist/transforms/toBytes.test.js +2 -2
- package/dist/transforms/toHex.d.ts +3 -3
- package/dist/transforms/toHex.js +5 -5
- package/dist/transforms/toHex.test.js +2 -2
- package/dist/transforms/toTypedArray.d.ts +11 -6
- package/dist/transforms/toTypedArray.js +11 -6
- package/dist/transforms/toTypedArray.test.js +20 -11
- package/dist/types.d.ts +11 -9
- package/dist/utilities/index.d.ts +3 -3
- package/dist/utilities/index.js +3 -3
- package/dist/utilities/lazy.d.ts +1 -1
- package/dist/utilities/lazy.test.js +2 -2
- package/dist/utilities/reference.d.ts +1 -1
- package/dist/utilities/reference.test.js +2 -2
- package/dist/utilities/remember.d.ts +2 -2
- package/dist/utilities/remember.js +3 -3
- package/dist/utilities/remember.test.js +2 -2
- package/dist/utils.test.d.ts +2 -2
- package/dist/utils.test.js +2 -4
- package/dist/write.d.ts +2 -2
- package/dist/write.js +47 -34
- package/package.json +7 -2
- package/dist/datatypes/containers/sizedbytes.d.ts +0 -2
- package/dist/datatypes/containers/sizedbytes.js +0 -17
- package/dist/datatypes/containers/sizedbytes.test.d.ts +0 -1
- package/dist/datatypes/containers/sizedbytes.test.js +0 -27
- package/dist/datatypes/containers/string.d.ts +0 -2
- package/dist/datatypes/containers/string.js +0 -24
- package/dist/datatypes/containers/string.test.d.ts +0 -1
- package/dist/datatypes/containers/string.test.js +0 -24
- package/dist/datatypes/transforms/encode.d.ts +0 -2
- package/dist/datatypes/transforms/encode.js +0 -7
- package/dist/datatypes/transforms/fixedOffset.d.ts +0 -2
- package/dist/datatypes/transforms/fixedOffset.js +0 -18
- package/dist/datatypes/transforms/modify.d.ts +0 -2
- package/dist/datatypes/transforms/modify.js +0 -7
- package/dist/datatypes/transforms/noAdvance.d.ts +0 -16
- package/dist/datatypes/transforms/noAdvance.js +0 -30
- package/dist/datatypes/transforms/pipe.d.ts +0 -11
- package/dist/datatypes/transforms/pipe.js +0 -16
- package/dist/datatypes/utilities/remember.d.ts +0 -15
- package/dist/datatypes/utilities/remember.js +0 -36
- package/dist/datatypes/utilities/remember.test.d.ts +0 -1
- package/dist/datatypes/utilities/remember.test.js +0 -44
- package/dist/datatypes/utils.test.d.ts +0 -8
- package/dist/datatypes/utils.test.js +0 -37
- package/dist/datatypes/values/byteliteral.d.ts +0 -2
- package/dist/datatypes/values/byteliteral.js +0 -20
- package/dist/datatypes/values/json.d.ts +0 -10
- package/dist/datatypes/values/json.js +0 -21
- package/dist/transforms/fixedOffset.d.ts +0 -2
- package/dist/transforms/fixedOffset.js +0 -18
- package/dist/transforms/noAdvance.d.ts +0 -16
- package/dist/transforms/noAdvance.js +0 -30
- package/dist/transforms/noAdvance.test.d.ts +0 -1
- package/dist/transforms/noAdvance.test.js +0 -17
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as st from "../../index.js";
|
|
2
2
|
/**
|
|
3
3
|
* Fixed length bytes
|
|
4
4
|
*
|
|
@@ -6,4 +6,4 @@ import type { Serializer } from "../../types";
|
|
|
6
6
|
* st.bytes(4)
|
|
7
7
|
* ```
|
|
8
8
|
*/
|
|
9
|
-
export declare function bytes(size: number): Serializer<
|
|
9
|
+
export declare function bytes(size: number): st.Serializer<Uint8Array>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as st from "../../index.js";
|
|
1
2
|
/**
|
|
2
3
|
* Fixed length bytes
|
|
3
4
|
*
|
|
@@ -9,17 +10,16 @@ export function bytes(size) {
|
|
|
9
10
|
return {
|
|
10
11
|
size,
|
|
11
12
|
write: (ctx, value) => {
|
|
12
|
-
|
|
13
|
-
if (bytes.length !== size)
|
|
13
|
+
if (value.length !== size)
|
|
14
14
|
throw new Error("Invalid Length");
|
|
15
|
-
ctx.
|
|
16
|
-
|
|
15
|
+
ctx.reserve(size);
|
|
16
|
+
ctx.bytes.set(value, ctx.offset);
|
|
17
17
|
ctx.offset += size;
|
|
18
18
|
},
|
|
19
19
|
read: (ctx) => {
|
|
20
|
-
const
|
|
20
|
+
const arr = ctx.bytes.subarray(ctx.offset, ctx.offset + size);
|
|
21
21
|
ctx.offset += size;
|
|
22
|
-
return slice;
|
|
22
|
+
return arr.slice();
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
25
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { bytes, encodeFailTest, encodeTest } from "../../utils.test";
|
|
3
|
-
import * as st from "../../index";
|
|
2
|
+
import { bytes, encodeFailTest, encodeTest } from "../../utils.test.js";
|
|
3
|
+
import * as st from "../../index.js";
|
|
4
4
|
describe("st.bytes", () => {
|
|
5
5
|
const buffer = st.bytes(2);
|
|
6
6
|
it("encode correctly", () => {
|
|
@@ -16,7 +16,7 @@ describe("st.bytes", () => {
|
|
|
16
16
|
const data = new Uint8Array(size);
|
|
17
17
|
data.set([3, 4], 1000);
|
|
18
18
|
data.set([3, 4], 2000);
|
|
19
|
-
encodeTest(spec, data
|
|
19
|
+
encodeTest(spec, data);
|
|
20
20
|
});
|
|
21
21
|
it("large data writes work", () => {
|
|
22
22
|
const size = 1024 * 1024 * 8; // 8MB
|
|
@@ -30,7 +30,7 @@ describe("st.bytes", () => {
|
|
|
30
30
|
data.set([3, 4], 2000);
|
|
31
31
|
encodeTest(spec, {
|
|
32
32
|
before: 1,
|
|
33
|
-
data
|
|
33
|
+
data,
|
|
34
34
|
after: 2,
|
|
35
35
|
});
|
|
36
36
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { Serializer } from "../../types";
|
|
2
|
-
export declare function sizedBytes(length: Serializer<number>): Serializer<
|
|
1
|
+
import type { Serializer } from "../../types.js";
|
|
2
|
+
export declare function sizedBytes(length: Serializer<number>): Serializer<Uint8Array>;
|
|
@@ -2,14 +2,13 @@ export function sizedBytes(length) {
|
|
|
2
2
|
return {
|
|
3
3
|
write: (ctx, value) => {
|
|
4
4
|
length.write(ctx, value.byteLength);
|
|
5
|
-
|
|
6
|
-
ctx.
|
|
7
|
-
new Uint8Array(ctx.view.buffer).set(bytes, ctx.offset);
|
|
5
|
+
ctx.reserve(value.byteLength);
|
|
6
|
+
ctx.bytes.set(value, ctx.offset);
|
|
8
7
|
ctx.offset += value.byteLength;
|
|
9
8
|
},
|
|
10
9
|
read: (ctx) => {
|
|
11
10
|
const size = length.read(ctx);
|
|
12
|
-
const slice = ctx.
|
|
11
|
+
const slice = ctx.bytes.subarray(ctx.offset, ctx.offset + size);
|
|
13
12
|
ctx.offset += size;
|
|
14
13
|
return slice;
|
|
15
14
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { bytes, encodeFailTest, encodeTest } from "../../utils.test";
|
|
3
|
-
import * as st from "../../index";
|
|
2
|
+
import { bytes, encodeFailTest, encodeTest } from "../../utils.test.js";
|
|
3
|
+
import * as st from "../../index.js";
|
|
4
4
|
describe("st.sizedBytes", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
const buffer = st.sizedBytes(st.u8());
|
|
@@ -16,7 +16,7 @@ describe("st.sizedBytes", () => {
|
|
|
16
16
|
const data = new Uint8Array(size);
|
|
17
17
|
data.set([3, 4], 1000);
|
|
18
18
|
data.set([3, 4], 2000);
|
|
19
|
-
encodeTest(spec, data
|
|
19
|
+
encodeTest(spec, data);
|
|
20
20
|
});
|
|
21
21
|
it("errors on invalid length", () => {
|
|
22
22
|
encodeFailTest(st.sizedBytes(st.u8()), //
|
|
@@ -20,10 +20,9 @@ export function string(length) {
|
|
|
20
20
|
throw new Error("Expected String");
|
|
21
21
|
const bytes = encoder.encode(value);
|
|
22
22
|
const size = bytes.byteLength;
|
|
23
|
-
ctx.
|
|
23
|
+
ctx.reserve(size + lengthSize);
|
|
24
24
|
length.write(ctx, size);
|
|
25
|
-
|
|
26
|
-
arr.set(bytes);
|
|
25
|
+
ctx.bytes.set(bytes, ctx.offset);
|
|
27
26
|
ctx.offset += size;
|
|
28
27
|
},
|
|
29
28
|
read: (ctx) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeFailTest, encodeTest } from "../../utils.test";
|
|
3
|
-
import * as st from "../../index";
|
|
2
|
+
import { encodeFailTest, encodeTest } from "../../utils.test.js";
|
|
3
|
+
import * as st from "../../index.js";
|
|
4
4
|
describe("st.string", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.string(st.u8()), "foo");
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type { InferOutput as Infer, InferInput, InferOutput, ReaderContext, WriterContext, Serializer, } from "./types";
|
|
2
|
-
export { read
|
|
3
|
-
export { write,
|
|
4
|
-
export * from "./datatypes/index";
|
|
5
|
-
export * from "./transforms/index";
|
|
6
|
-
export * from "./utilities/index";
|
|
1
|
+
export type { InferOutput as Infer, InferInput, InferOutput, ReaderContext, WriterContext, Serializer, } from "./types.js";
|
|
2
|
+
export { read } from "./read.js";
|
|
3
|
+
export { write, writeInto } from "./write.js";
|
|
4
|
+
export * from "./datatypes/index.js";
|
|
5
|
+
export * from "./transforms/index.js";
|
|
6
|
+
export * from "./utilities/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { read
|
|
2
|
-
export { write,
|
|
3
|
-
export * from "./datatypes/index";
|
|
4
|
-
export * from "./transforms/index";
|
|
5
|
-
export * from "./utilities/index";
|
|
1
|
+
export { read } from "./read.js";
|
|
2
|
+
export { write, writeInto } from "./write.js";
|
|
3
|
+
export * from "./datatypes/index.js";
|
|
4
|
+
export * from "./transforms/index.js";
|
|
5
|
+
export * from "./utilities/index.js";
|
package/dist/read.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import type { Serializer
|
|
2
|
-
export declare function read<TIn, TOut>(serializer: Serializer<TIn, TOut>, buffer: ArrayBuffer): TOut;
|
|
3
|
-
export declare function createReaderContext(buffer: ArrayBuffer): ReaderContext;
|
|
1
|
+
import type { Serializer } from "./types.js";
|
|
2
|
+
export declare function read<TIn, TOut>(serializer: Serializer<TIn, TOut>, buffer: ArrayBuffer | SharedArrayBuffer, offset?: number): TOut;
|
package/dist/read.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
export function read(serializer, buffer) {
|
|
2
|
-
const ctx =
|
|
1
|
+
export function read(serializer, buffer, offset) {
|
|
2
|
+
const ctx = {
|
|
3
|
+
buffer: buffer,
|
|
4
|
+
view: new DataView(buffer),
|
|
5
|
+
bytes: new Uint8Array(buffer),
|
|
6
|
+
path: [],
|
|
7
|
+
offset: offset ?? 0,
|
|
8
|
+
};
|
|
3
9
|
try {
|
|
4
10
|
return serializer.read(ctx);
|
|
5
11
|
}
|
|
6
12
|
catch (e) {
|
|
7
|
-
const path = ctx.
|
|
8
|
-
throw new Error(`Deserialization error at serializer${path}`, { cause: e });
|
|
13
|
+
const path = ctx.path.join("") ?? "root";
|
|
14
|
+
throw new Error(`Deserialization error at serializer${path}\n${e}`, { cause: e });
|
|
9
15
|
}
|
|
10
16
|
}
|
|
11
|
-
export function createReaderContext(buffer) {
|
|
12
|
-
return {
|
|
13
|
-
stack: [],
|
|
14
|
-
offset: 0,
|
|
15
|
-
buffer,
|
|
16
|
-
view: new DataView(buffer),
|
|
17
|
-
};
|
|
18
|
-
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function enum_<const T>(values: T[]): import("./pipe").Transform<T, any>;
|
|
1
|
+
export declare function enum_<const T>(values: T[]): import("./pipe.ts").Transform<T, any>;
|
|
2
2
|
export { enum_ as enum };
|
package/dist/transforms/enum.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "node:test";
|
|
2
|
-
import * as st from "../index";
|
|
3
|
-
import { encodeTest, encodeFailTest } from "../utils.test";
|
|
2
|
+
import * as st from "../index.js";
|
|
3
|
+
import { encodeTest, encodeFailTest } from "../utils.test.js";
|
|
4
4
|
describe("st.enum", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.u8(), st.enum([0, 1, 2])), //
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { type Transform as Pipeline, pipe } from "./pipe";
|
|
2
|
-
export { encode } from "./encode";
|
|
3
|
-
export { modify } from "./modify";
|
|
4
|
-
export { literal } from "./literal";
|
|
5
|
-
export { enum } from "./enum";
|
|
6
|
-
export { offset } from "./offset";
|
|
7
|
-
export { toAscii } from "./toAscii";
|
|
8
|
-
export { toBytes } from "./toBytes";
|
|
9
|
-
export { toHex } from "./toHex";
|
|
10
|
-
export { toBase64 } from "./toBase64";
|
|
11
|
-
export { toTypedArray } from "./toTypedArray";
|
|
1
|
+
export { type Transform as Pipeline, pipe } from "./pipe.js";
|
|
2
|
+
export { encode } from "./encode.js";
|
|
3
|
+
export { modify } from "./modify.js";
|
|
4
|
+
export { literal } from "./literal.js";
|
|
5
|
+
export { enum } from "./enum.js";
|
|
6
|
+
export { offset } from "./offset.js";
|
|
7
|
+
export { toAscii } from "./toAscii.js";
|
|
8
|
+
export { toBytes } from "./toBytes.js";
|
|
9
|
+
export { toHex } from "./toHex.js";
|
|
10
|
+
export { toBase64 } from "./toBase64.js";
|
|
11
|
+
export { toTypedArray } from "./toTypedArray.js";
|
package/dist/transforms/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { pipe } from "./pipe";
|
|
2
|
-
export { encode } from "./encode";
|
|
3
|
-
export { modify } from "./modify";
|
|
4
|
-
export { literal } from "./literal";
|
|
5
|
-
export { enum } from "./enum";
|
|
6
|
-
export { offset } from "./offset";
|
|
7
|
-
export { toAscii } from "./toAscii";
|
|
8
|
-
export { toBytes } from "./toBytes";
|
|
9
|
-
export { toHex } from "./toHex";
|
|
10
|
-
export { toBase64 } from "./toBase64";
|
|
11
|
-
export { toTypedArray } from "./toTypedArray";
|
|
1
|
+
export { pipe } from "./pipe.js";
|
|
2
|
+
export { encode } from "./encode.js";
|
|
3
|
+
export { modify } from "./modify.js";
|
|
4
|
+
export { literal } from "./literal.js";
|
|
5
|
+
export { enum } from "./enum.js";
|
|
6
|
+
export { offset } from "./offset.js";
|
|
7
|
+
export { toAscii } from "./toAscii.js";
|
|
8
|
+
export { toBytes } from "./toBytes.js";
|
|
9
|
+
export { toHex } from "./toHex.js";
|
|
10
|
+
export { toBase64 } from "./toBase64.js";
|
|
11
|
+
export { toTypedArray } from "./toTypedArray.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function literal<const T>(value: T): import("./pipe").Transform<T, any>;
|
|
1
|
+
export declare function literal<const T>(value: T): import("./pipe.ts").Transform<T, any>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "node:test";
|
|
2
|
-
import * as st from "../index";
|
|
3
|
-
import { encodeTest, encodeFailTest } from "../utils.test";
|
|
2
|
+
import * as st from "../index.js";
|
|
3
|
+
import { encodeTest, encodeFailTest } from "../utils.test.js";
|
|
4
4
|
describe("st.literal", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.u8(), st.literal(0)), //
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "bun:test";
|
|
2
|
-
import { encodeFailTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeFailTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.modify", () => {
|
|
5
5
|
it("encodes correctly", () => {
|
|
6
6
|
const data = st.write(st.u32(), 10);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { Serializer } from "../types";
|
|
1
|
+
import type { Serializer } from "../types.js";
|
|
2
2
|
export declare function offset<TIn, TOut>(behaviour: "relative" | "absolute", offset: Serializer<number> | number): (type: Serializer<TIn, TOut>) => Serializer<TIn, TOut>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.offset(relative)", () => {
|
|
5
5
|
it("encodes correctly with fixed offset", () => {
|
|
6
6
|
const spec = st.object({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Serializer } from "../types";
|
|
1
|
+
import type { Serializer } from "../types.js";
|
|
2
2
|
export type Transform<T = any, TNext = T> = (type: Serializer<TNext>) => Serializer<T>;
|
|
3
3
|
export declare function pipe<TStart, T1>(type: Serializer<TStart>, p1: Transform<T1, TStart>): Serializer<T1>;
|
|
4
4
|
export declare function pipe<TStart, T1, T2>(type: Serializer<TStart>, p1: Transform<T1, TStart>, p2: Transform<T2, T1>): Serializer<T2>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function toAscii(): import("./pipe").Transform<string,
|
|
1
|
+
export declare function toAscii(): import("./pipe.ts").Transform<string, Uint8Array<ArrayBufferLike>>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { encode } from "./encode";
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
2
|
export function toAscii() {
|
|
3
3
|
return encode({
|
|
4
|
-
encode: (v) => new Uint8Array(Array.from(v).map((char) => validateAscii(char.charCodeAt(0))))
|
|
5
|
-
decode: (v) => Array.from(
|
|
4
|
+
encode: (v) => new Uint8Array(Array.from(v).map((char) => validateAscii(char.charCodeAt(0)))),
|
|
5
|
+
decode: (v) => Array.from(v)
|
|
6
6
|
.map((v) => String.fromCharCode(v))
|
|
7
7
|
.join(""),
|
|
8
8
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.toAscii", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.bytes(5), st.toAscii()), //
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function toBase64(): import("./pipe").Transform<string,
|
|
1
|
+
export declare function toBase64(): import("./pipe.ts").Transform<string, Uint8Array<ArrayBufferLike>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { encode } from "./encode";
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
2
|
export function toBase64() {
|
|
3
3
|
return encode({
|
|
4
|
-
encode: (v) => Uint8Array.fromBase64(v)
|
|
5
|
-
decode: (v) =>
|
|
4
|
+
encode: (v) => Uint8Array.fromBase64(v),
|
|
5
|
+
decode: (v) => v.toBase64(),
|
|
6
6
|
});
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.toBase64", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.bytes(1), st.toBase64()), //
|
|
@@ -10,4 +10,4 @@
|
|
|
10
10
|
*
|
|
11
11
|
* `ArrayBuffer([0, 255, c])` => `[0, 255, ArrayBuffer([0, 255, 0])]`
|
|
12
12
|
*/
|
|
13
|
-
export declare function toBytes(): import("./pipe").Transform<number[],
|
|
13
|
+
export declare function toBytes(): import("./pipe.ts").Transform<number[], Uint8Array<ArrayBufferLike>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { encode } from "./encode";
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
2
|
/**
|
|
3
3
|
* Converts an ArrayBuffer to the byte digits
|
|
4
4
|
*
|
|
@@ -13,8 +13,8 @@ import { encode } from "./encode";
|
|
|
13
13
|
*/
|
|
14
14
|
export function toBytes() {
|
|
15
15
|
return encode({
|
|
16
|
-
encode: (v) => new Uint8Array(v.map(validateByte))
|
|
17
|
-
decode: (v) => Array.from(
|
|
16
|
+
encode: (v) => new Uint8Array(v.map(validateByte)),
|
|
17
|
+
decode: (v) => Array.from(v),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
const validateByte = (v) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.toBytes", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.bytes(3), st.toBytes()), //
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Converts an
|
|
2
|
+
* Converts an Uint8Array to uppercase hex
|
|
3
3
|
*
|
|
4
4
|
* ```ts
|
|
5
5
|
* st.pipe(
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
* )
|
|
9
9
|
* ```
|
|
10
10
|
*
|
|
11
|
-
* `
|
|
11
|
+
* `Uint8Array([0, 255, 0])` => `00FF00`
|
|
12
12
|
*/
|
|
13
|
-
export declare function toHex(): import("./pipe").Transform<string,
|
|
13
|
+
export declare function toHex(): import("./pipe.ts").Transform<string, Uint8Array<ArrayBufferLike>>;
|
package/dist/transforms/toHex.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { encode } from "./encode";
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
2
|
/**
|
|
3
|
-
* Converts an
|
|
3
|
+
* Converts an Uint8Array to uppercase hex
|
|
4
4
|
*
|
|
5
5
|
* ```ts
|
|
6
6
|
* st.pipe(
|
|
@@ -9,11 +9,11 @@ import { encode } from "./encode";
|
|
|
9
9
|
* )
|
|
10
10
|
* ```
|
|
11
11
|
*
|
|
12
|
-
* `
|
|
12
|
+
* `Uint8Array([0, 255, 0])` => `00FF00`
|
|
13
13
|
*/
|
|
14
14
|
export function toHex() {
|
|
15
15
|
return encode({
|
|
16
|
-
encode: (v) => Uint8Array.fromHex(v)
|
|
17
|
-
decode: (v) =>
|
|
16
|
+
encode: (v) => Uint8Array.fromHex(v),
|
|
17
|
+
decode: (v) => v.toHex().toUpperCase(),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
2
|
+
import { encodeTest, encodeSnapshotTest, encodeFailTest } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
4
|
describe("st.toHex", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.bytes(3), st.toHex()), //
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
type
|
|
2
|
-
buffer: ArrayBuffer;
|
|
1
|
+
type TypedArrayLike = {
|
|
2
|
+
buffer: ArrayBuffer | SharedArrayBuffer;
|
|
3
|
+
byteOffset: number;
|
|
4
|
+
byteLength: number;
|
|
5
|
+
BYTES_PER_ELEMENT: number;
|
|
3
6
|
};
|
|
4
|
-
type
|
|
7
|
+
type TypedArray<T extends TypedArrayLike> = {
|
|
8
|
+
BYTES_PER_ELEMENT: number;
|
|
9
|
+
} & (new (array: ArrayBuffer | SharedArrayBuffer, offset?: number, length?: number) => T);
|
|
5
10
|
/**
|
|
6
|
-
* Converts
|
|
11
|
+
* Converts a `Uint8Array` into the provided `TypedArray`, etc Float64Arrayt
|
|
7
12
|
*
|
|
8
13
|
* ```
|
|
9
14
|
* st.pipe(
|
|
10
15
|
* st.bytes(16),
|
|
11
|
-
* toTypedArray(
|
|
16
|
+
* toTypedArray(Float32Array),
|
|
12
17
|
* )
|
|
13
18
|
* ```
|
|
14
19
|
*/
|
|
15
|
-
export declare function toTypedArray<T extends
|
|
20
|
+
export declare function toTypedArray<T extends TypedArrayLike>(Array: TypedArray<T>): import("./pipe.ts").Transform<T, Uint8Array<ArrayBufferLike>>;
|
|
16
21
|
export {};
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { encode } from "./encode";
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
2
|
/**
|
|
3
|
-
* Converts
|
|
3
|
+
* Converts a `Uint8Array` into the provided `TypedArray`, etc Float64Arrayt
|
|
4
4
|
*
|
|
5
5
|
* ```
|
|
6
6
|
* st.pipe(
|
|
7
7
|
* st.bytes(16),
|
|
8
|
-
* toTypedArray(
|
|
8
|
+
* toTypedArray(Float32Array),
|
|
9
9
|
* )
|
|
10
10
|
* ```
|
|
11
11
|
*/
|
|
12
|
-
export function toTypedArray(
|
|
12
|
+
export function toTypedArray(Array) {
|
|
13
13
|
return encode({
|
|
14
|
-
encode: (
|
|
15
|
-
decode: (
|
|
14
|
+
encode: (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength / Uint8Array.BYTES_PER_ELEMENT),
|
|
15
|
+
decode: (bytes) => {
|
|
16
|
+
if (bytes.byteLength % Array.BYTES_PER_ELEMENT !== 0) {
|
|
17
|
+
throw new Error(`Provided a ${bytes.byteLength} buffer to a TypedArray that uses ${bytes.BYTES_PER_ELEMENT} bytes per element`);
|
|
18
|
+
}
|
|
19
|
+
return new Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / Array.BYTES_PER_ELEMENT);
|
|
20
|
+
},
|
|
16
21
|
});
|
|
17
22
|
}
|
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
import { describe, it } from "bun:test";
|
|
2
|
-
import { encodeTest, encodeSnapshotTest, expectError } from "../utils.test";
|
|
3
|
-
import * as st from "../index";
|
|
4
|
-
describe("st.
|
|
2
|
+
import { encodeTest, encodeSnapshotTest, expectError } from "../utils.test.js";
|
|
3
|
+
import * as st from "../index.js";
|
|
4
|
+
describe("st.toTypedArray", () => {
|
|
5
5
|
it("encode correctly", () => {
|
|
6
6
|
encodeTest(st.pipe(st.bytes(6), //
|
|
7
7
|
st.toTypedArray(Uint8Array)), new Uint8Array([1, 2, 3, 4, 5, 6]));
|
|
8
8
|
});
|
|
9
9
|
it("encode different types correctly", () => {
|
|
10
|
-
encodeTest(st.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
st.
|
|
10
|
+
encodeTest(st.object({
|
|
11
|
+
padding: st.u64(),
|
|
12
|
+
data: st.pipe(st.bytes(3), //
|
|
13
|
+
st.toTypedArray(Uint8Array)),
|
|
14
|
+
}), { padding: 0, data: new Uint8Array([1, 2, 3]) });
|
|
15
|
+
encodeTest(st.object({
|
|
16
|
+
padding: st.u64(),
|
|
17
|
+
data: st.pipe(st.bytes(5 * 2), //
|
|
18
|
+
st.toTypedArray(Uint16Array)),
|
|
19
|
+
}), { padding: 0, data: new Uint16Array([1, 2, 3, 63, 74]) });
|
|
20
|
+
encodeTest(st.object({
|
|
21
|
+
padding: st.u64(),
|
|
22
|
+
data: st.pipe(st.bytes(3 * 8), //
|
|
23
|
+
st.toTypedArray(Float64Array)),
|
|
24
|
+
}), { padding: 0, data: new Float64Array([Math.random(), Math.random(), Math.random()]) });
|
|
16
25
|
});
|
|
17
|
-
it("errors
|
|
26
|
+
it("errors when non-standard size", () => {
|
|
18
27
|
expectError(() => {
|
|
19
28
|
st.write(st.pipe(st.bytes(3), //
|
|
20
|
-
st.toTypedArray(Uint16Array)), new Uint16Array([1]));
|
|
29
|
+
st.toTypedArray(Uint16Array)), new Uint16Array([1, 2]));
|
|
21
30
|
});
|
|
22
31
|
});
|
|
23
32
|
it("snapshot tests", () => {
|
package/dist/types.d.ts
CHANGED
|
@@ -4,18 +4,20 @@ export type Serializer<TIn, TOut = TIn> = {
|
|
|
4
4
|
read: (ctx: ReaderContext) => TOut;
|
|
5
5
|
};
|
|
6
6
|
export type SerializationContext = WriterContext | ReaderContext;
|
|
7
|
-
export interface WriterContext {
|
|
8
|
-
stack: string[];
|
|
9
|
-
buffer: ArrayBuffer;
|
|
10
|
-
view: DataView;
|
|
7
|
+
export interface WriterContext<TBuffer extends ArrayBuffer | SharedArrayBuffer = ArrayBuffer | SharedArrayBuffer> {
|
|
11
8
|
offset: number;
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
export interface ReaderContext {
|
|
15
|
-
stack: string[];
|
|
16
|
-
buffer: ArrayBuffer;
|
|
9
|
+
buffer: TBuffer;
|
|
17
10
|
view: DataView;
|
|
11
|
+
bytes: Uint8Array;
|
|
12
|
+
path: string[];
|
|
13
|
+
reserve: (length: number) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface ReaderContext<TBuffer extends ArrayBuffer | SharedArrayBuffer = ArrayBuffer | SharedArrayBuffer> {
|
|
18
16
|
offset: number;
|
|
17
|
+
buffer: TBuffer;
|
|
18
|
+
view: DataView;
|
|
19
|
+
bytes: Uint8Array;
|
|
20
|
+
path: string[];
|
|
19
21
|
}
|
|
20
22
|
export type InferInput<T> = T extends Serializer<infer V> ? V : never;
|
|
21
23
|
export type InferOutput<T> = T extends Serializer<any, infer V> ? V : never;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { lazy } from "./lazy";
|
|
2
|
-
export { createReference } from "./reference";
|
|
3
|
-
export { createRememberedValue } from "./remember";
|
|
1
|
+
export { lazy } from "./lazy.js";
|
|
2
|
+
export { createReference } from "./reference.js";
|
|
3
|
+
export { createRememberedValue } from "./remember.js";
|