1n-destructure 0.0.1-alpha.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 ADDED
@@ -0,0 +1,2 @@
1
+ # destructure
2
+ A library for serialisation and deserialisation of structured data.
@@ -0,0 +1,3 @@
1
+ import { type Data, type Schema } from "../schema/schema.ts";
2
+ export declare const decode: <T extends Schema>(schema: T, buffer: Uint8Array<ArrayBuffer>, offset?: number) => Data<T>;
3
+ //# sourceMappingURL=decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/decoder/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAC;AAa7B,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EACrC,QAAQ,CAAC,EACT,QAAQ,UAAU,CAAC,WAAW,CAAC,EAC/B,eAAU,KACT,IAAI,CAAC,CAAC,CAuGR,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { schema as _schema, SchemaType, } from "../schema/schema.js";
2
+ const dvMethodMap = {
3
+ u8: DataView.prototype.getUint8,
4
+ u16: DataView.prototype.getUint16,
5
+ u32: DataView.prototype.getUint32,
6
+ i8: DataView.prototype.getInt8,
7
+ i16: DataView.prototype.getInt16,
8
+ i32: DataView.prototype.getInt32,
9
+ f32: DataView.prototype.getFloat32,
10
+ f64: DataView.prototype.getFloat64,
11
+ };
12
+ export const decode = (schema, buffer, offset = 0) => {
13
+ const bytes = {
14
+ array: buffer,
15
+ view: new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength),
16
+ };
17
+ const view = bytes.view;
18
+ const state = {
19
+ stack: [_schema(schema)],
20
+ stackData: new WeakMap(),
21
+ processingQueue: [],
22
+ offset: offset,
23
+ result: null,
24
+ };
25
+ const handleQueue = (value) => {
26
+ const processingQueue = state.processingQueue;
27
+ if (!processingQueue.length)
28
+ return value;
29
+ const entry = processingQueue.shift();
30
+ if (entry[0] === "object")
31
+ entry[1][entry[2]] = value;
32
+ else if (entry[0] === "array")
33
+ entry[1].push(value);
34
+ return value;
35
+ };
36
+ do {
37
+ const current = state.stack.shift();
38
+ if (!current)
39
+ continue;
40
+ let _value = null;
41
+ switch (current.type) {
42
+ case SchemaType.Null: {
43
+ handleQueue((_value = null));
44
+ break;
45
+ }
46
+ case SchemaType.Simple: {
47
+ if (current.base === "char") {
48
+ const codepoint = buffer[state.offset++];
49
+ if (!codepoint)
50
+ throw new Error("Unexpected element value.");
51
+ handleQueue((_value = String.fromCharCode(codepoint)));
52
+ }
53
+ else {
54
+ handleQueue((_value = dvMethodMap[current.base].call(view, state.offset, true)));
55
+ state.offset += current.byteLength;
56
+ }
57
+ break;
58
+ }
59
+ case SchemaType.Object: {
60
+ const value = {};
61
+ handleQueue((_value = value));
62
+ state.stack.unshift(...current.entries.map((entry) => entry[1]));
63
+ state.processingQueue.unshift(...current.entries.map((entry) => ["object", value, entry[0]]));
64
+ break;
65
+ }
66
+ case SchemaType.Tuple: {
67
+ const value = [];
68
+ const procEntry = ["array", handleQueue((_value = value))];
69
+ state.stack.unshift(...current.entries);
70
+ state.processingQueue.unshift(...new Array(current.entries.length).fill(procEntry));
71
+ break;
72
+ }
73
+ case SchemaType.Array: {
74
+ const value = [];
75
+ const procEntry = ["array", handleQueue((_value = value))];
76
+ const count = current.count === -1 ? view.getUint32(state.offset, true) : current.count;
77
+ state.offset += +(current.count === -1) * 4;
78
+ state.stack.unshift(...new Array(count).fill(current.schema));
79
+ state.processingQueue.unshift(...new Array(count).fill(procEntry));
80
+ break;
81
+ }
82
+ case SchemaType.Optional: {
83
+ const hasData = !!buffer[state.offset++];
84
+ !hasData && handleQueue((_value = undefined));
85
+ hasData && state.stack.unshift(current.schema);
86
+ break;
87
+ }
88
+ case SchemaType.Custom: {
89
+ const { value, nextOffset } = current.handler.decode(bytes, state.offset);
90
+ state.offset = nextOffset;
91
+ handleQueue((_value = value));
92
+ break;
93
+ }
94
+ default: {
95
+ throw new TypeError("Unknown schema type.");
96
+ }
97
+ }
98
+ state.result === null && (state.result = _value);
99
+ } while (state.stack.length);
100
+ return state.result;
101
+ };
102
+ //# sourceMappingURL=decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/decoder/decoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CompiledSchema, type Data, type Schema } from "../schema/schema.ts";
2
+ export declare const encode: <T extends Schema>(schema: T | CompiledSchema<T>, data: Data<T>) => Uint8Array<ArrayBuffer>;
3
+ //# sourceMappingURL=encoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/encoder/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,MAAM,EAGZ,MAAM,qBAAqB,CAAC;AAc7B,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EACrC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAC7B,MAAM,IAAI,CAAC,CAAC,CAAC,KACZ,UAAU,CAAC,WAAW,CA+ExB,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { SchemaType, schema as _schema, } from "../schema/schema.js";
2
+ import { createGrowingBuffer, getStringCodePoints } from "../utils/utils.js";
3
+ const dvMethodMap = {
4
+ u8: DataView.prototype.setUint8,
5
+ u16: DataView.prototype.setUint16,
6
+ u32: DataView.prototype.setUint32,
7
+ i8: DataView.prototype.setInt8,
8
+ i16: DataView.prototype.setInt16,
9
+ i32: DataView.prototype.setInt32,
10
+ f32: DataView.prototype.setFloat32,
11
+ f64: DataView.prototype.setFloat64,
12
+ };
13
+ export const encode = (schema, data) => {
14
+ const buffer = createGrowingBuffer();
15
+ const stack = [[_schema(schema), data, {}]];
16
+ while (stack.length) {
17
+ const [schema, payload, data] = stack.pop();
18
+ switch (schema.type) {
19
+ case SchemaType.Null: {
20
+ break;
21
+ }
22
+ case SchemaType.Simple: {
23
+ if (schema.base === "char") {
24
+ const codepoints = getStringCodePoints(payload);
25
+ if (codepoints.length === 1)
26
+ buffer.writeOne(codepoints[0]);
27
+ else
28
+ throw new Error("char data must be a string with one codepoint.");
29
+ break;
30
+ }
31
+ const method = dvMethodMap[schema.base];
32
+ buffer.ensureCapacity(schema.byteLength);
33
+ method.call(buffer.view, buffer.offset, payload, true);
34
+ buffer.offset += schema.byteLength;
35
+ break;
36
+ }
37
+ case SchemaType.Object: {
38
+ if (typeof payload !== "object")
39
+ throw new TypeError("data must be an object.");
40
+ stack.push(...schema.entries
41
+ .map(([key, schema]) => [schema, payload[key], {}])
42
+ .reverse());
43
+ break;
44
+ }
45
+ case SchemaType.Tuple: {
46
+ if (!Array.isArray(payload))
47
+ throw new TypeError("data must be an array.");
48
+ stack.push(...schema.entries.map((schema, i) => [schema, payload[i], {}]).reverse());
49
+ break;
50
+ }
51
+ case SchemaType.Array: {
52
+ if (!Array.isArray(payload))
53
+ throw new TypeError("data must be an array.");
54
+ if (schema.count !== -1 && schema.count !== payload.length) {
55
+ throw new Error("Element count mismatch between schema and data.");
56
+ }
57
+ if (schema.count === -1) {
58
+ if (payload.length > 2 ** 32 - 1)
59
+ throw new RangeError("Too many elements in input.");
60
+ buffer.ensureCapacity(4);
61
+ buffer.view.setUint32(buffer.offset, payload.length, true);
62
+ buffer.offset += 4;
63
+ }
64
+ stack.push(...payload.map((payload) => [schema.schema, payload, {}]).reverse());
65
+ break;
66
+ }
67
+ case SchemaType.Optional: {
68
+ const isSupplied = payload !== undefined;
69
+ buffer.ensureCapacity(1);
70
+ buffer.buffer[buffer.offset++] = +isSupplied;
71
+ isSupplied && stack.push([schema.schema, payload, {}]);
72
+ break;
73
+ }
74
+ case SchemaType.Custom: {
75
+ if ("encodeInto" in schema.handler)
76
+ schema.handler.encodeInto(buffer, payload);
77
+ else {
78
+ const data = schema.handler.encode(payload);
79
+ buffer.write(data);
80
+ }
81
+ break;
82
+ }
83
+ default: {
84
+ throw new TypeError("Unknown schema type.");
85
+ }
86
+ }
87
+ }
88
+ return buffer.finalise();
89
+ };
90
+ //# sourceMappingURL=encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/encoder/encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CompiledSchema, CustomSchemaHandler, OptionalSchema, Schema } from "./types.ts";
2
+ type CSchema<T extends Schema = Schema> = CompiledSchema<T>;
3
+ declare const SchemaType: {
4
+ readonly Null: -1;
5
+ readonly Simple: 0;
6
+ readonly Object: 1;
7
+ readonly Tuple: 2;
8
+ readonly Array: 3;
9
+ readonly Optional: 4;
10
+ readonly Custom: 5;
11
+ };
12
+ declare const optionalSchemaKey: unique symbol;
13
+ declare const schemaSourceKey: unique symbol;
14
+ declare const isCustomSchema: (value: unknown) => value is CustomSchemaHandler;
15
+ declare const schema: <T extends Schema>(value: T | CSchema<T>) => CSchema<T>;
16
+ declare const source: <T extends Schema>(value: CSchema<T>) => T;
17
+ declare const array: <T extends Schema>(value: T, count?: number) => T[];
18
+ declare const optional: <T extends Schema>(value: T) => OptionalSchema<T>;
19
+ declare const custom: <T>(handler: CustomSchemaHandler<T>) => CustomSchemaHandler<T>;
20
+ declare const string: CustomSchemaHandler<string>;
21
+ export type * from "./types.ts";
22
+ export { array, custom, isCustomSchema, optional, schema, SchemaType, source, string };
23
+ export type { optionalSchemaKey, schemaSourceKey };
24
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE9F,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;AAE5D,QAAA,MAAM,UAAU;;;;;;;;CAQN,CAAC;AAEX,QAAA,MAAM,iBAAiB,eAA2B,CAAC;AACnD,QAAA,MAAM,eAAe,eAAyB,CAAC;AAO/C,QAAA,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,mBAEjD,CAAC;AAEF,QAAA,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAyB,CAAC;AAC7F,QAAA,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAG,CAA2B,CAAC;AAwElF,QAAA,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,CAAC,EAAE,QAAO,MAAW,KAAG,CAAC,EAahE,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,CAAC,KAAG,cAAc,CAAC,CAAC,CAW9D,CAAC;AAEF,QAAA,MAAM,MAAM,GAAI,CAAC,EAAE,SAAS,mBAAmB,CAAC,CAAC,CAAC,KAAG,mBAAmB,CAAC,CAAC,CAgBzE,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAgCtC,CAAC;AAIH,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACvF,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,165 @@
1
+ import { coder, destructureSimpleSchema, PRIMITIVE_TYPES_ARRAY, sortObjectEntries, textDecoder, textEncoder, } from "../utils/utils.js";
2
+ const SchemaType = {
3
+ Null: -1,
4
+ Simple: 0,
5
+ Object: 1,
6
+ Tuple: 2,
7
+ Array: 3,
8
+ Optional: 4,
9
+ Custom: 5,
10
+ };
11
+ const optionalSchemaKey = Symbol("optionalSchema");
12
+ const schemaSourceKey = Symbol("schemaSource");
13
+ const schemaMap = new Map();
14
+ const schemaSet = new Set();
15
+ schemaMap.set(null, Object.freeze({ type: SchemaType.Null, [schemaSourceKey]: null }));
16
+ const isCompiledSchema = (value) => schemaSet.has(value);
17
+ const isCustomSchema = (value) => {
18
+ return schemaMap.get(value)?.type === SchemaType.Custom;
19
+ };
20
+ const schema = (value) => compileSchema(value);
21
+ const source = (value) => value[schemaSourceKey];
22
+ const compileSchema = (value) => {
23
+ if (schemaMap.has(value))
24
+ return schemaMap.get(value);
25
+ if (isCompiledSchema(value))
26
+ return value;
27
+ if (isCustomSchema(value))
28
+ return schemaMap.get(value);
29
+ let compiled;
30
+ if (value === null)
31
+ compiled = schemaMap.get(null);
32
+ else if (typeof value === "string") {
33
+ const ds = destructureSimpleSchema(value);
34
+ compiled = ds.isArray
35
+ ? {
36
+ type: SchemaType.Array,
37
+ [schemaSourceKey]: value,
38
+ schema: {
39
+ type: SchemaType.Simple,
40
+ [schemaSourceKey]: ds.base,
41
+ base: ds.base,
42
+ byteLength: ds.byteLength,
43
+ },
44
+ count: ds.arrayLength,
45
+ }
46
+ : {
47
+ type: SchemaType.Simple,
48
+ [schemaSourceKey]: value,
49
+ base: ds.base,
50
+ byteLength: ds.byteLength,
51
+ };
52
+ }
53
+ else if (typeof value === "object") {
54
+ compiled = Array.isArray(value)
55
+ ? { type: SchemaType.Tuple, [schemaSourceKey]: value, entries: [] }
56
+ : { type: SchemaType.Object, [schemaSourceKey]: value, entries: [] };
57
+ const stack = Array.isArray(value)
58
+ ? value.map((s) => [compiled, null, s]).reverse()
59
+ : sortObjectEntries(Object.entries(value))
60
+ .map((s) => [compiled, s[0], s[1]])
61
+ .reverse();
62
+ while (stack.length) {
63
+ const [parent, key, value] = stack.pop();
64
+ let compiled;
65
+ if (isCompiledSchema(value))
66
+ compiled = value;
67
+ else if (schemaMap.has(value))
68
+ compiled = schemaMap.get(value);
69
+ else if (typeof value === "string")
70
+ compiled = compileSchema(value);
71
+ else if (value === null)
72
+ compiled = compileSchema(value);
73
+ else if (isCustomSchema(value))
74
+ compiled = compileSchema(value);
75
+ else if (Array.isArray(value)) {
76
+ compiled = { type: SchemaType.Tuple, [schemaSourceKey]: value, entries: [] };
77
+ stack.push(...value.map((s) => [compiled, null, s]).reverse());
78
+ }
79
+ else if (typeof value === "object") {
80
+ compiled = { type: SchemaType.Object, [schemaSourceKey]: value, entries: [] };
81
+ stack.push(...sortObjectEntries(Object.entries(value))
82
+ .map((s) => [compiled, s[0], s[1]])
83
+ .reverse());
84
+ }
85
+ else
86
+ throw new Error("Invalid schema.");
87
+ if (parent.type === SchemaType.Object)
88
+ key && parent.entries.push([key, compiled]);
89
+ else if (parent.type === SchemaType.Tuple)
90
+ parent.entries.push(compiled);
91
+ }
92
+ }
93
+ else
94
+ throw new Error("Invalid schema.");
95
+ Object.freeze(compiled);
96
+ schemaMap.set(value, compiled);
97
+ schemaSet.add(compiled);
98
+ return compiled;
99
+ };
100
+ const array = (value, count = -1) => {
101
+ const compiled = {
102
+ type: SchemaType.Array,
103
+ [schemaSourceKey]: value,
104
+ schema: compileSchema(value),
105
+ count,
106
+ };
107
+ const placeholderSchema = [];
108
+ Object.freeze(compiled);
109
+ schemaMap.set(placeholderSchema, compiled);
110
+ schemaSet.add(compiled);
111
+ return placeholderSchema;
112
+ };
113
+ const optional = (value) => {
114
+ const placeholderSchema = { [optionalSchemaKey]: true, schema: value };
115
+ const compiled = Object.freeze({
116
+ type: SchemaType.Optional,
117
+ [schemaSourceKey]: value,
118
+ schema: compileSchema(value),
119
+ });
120
+ schemaMap.set(placeholderSchema, compiled);
121
+ schemaSet.add(compiled);
122
+ return placeholderSchema;
123
+ };
124
+ const custom = (handler) => {
125
+ if (!(typeof handler?.encode === "function" &&
126
+ typeof handler?.decode === "function" &&
127
+ typeof handler?.size === "function" &&
128
+ ("encodeInto" in handler ? typeof handler.encodeInto === "function" : true)))
129
+ throw new Error("Invalid custom schema handler.");
130
+ schemaMap.set(handler, Object.freeze({ type: SchemaType.Custom, [schemaSourceKey]: handler, handler }));
131
+ return handler;
132
+ };
133
+ const string = custom({
134
+ encode: (value) => {
135
+ const encoded = textEncoder.encode(value);
136
+ if (encoded.length > 2 ** 32 - 1)
137
+ throw new RangeError("Input length exceeds limit.");
138
+ const result = new Uint8Array(encoded.length + 4);
139
+ result.set(encoded, 4);
140
+ result.set(coder.encodeNumber(encoded.length), 0);
141
+ return result;
142
+ },
143
+ decode: (bytes, offset) => {
144
+ const dataLength = bytes.view.getUint32(offset, true);
145
+ const dataOffset = offset + 4;
146
+ return {
147
+ value: textDecoder.decode(bytes.array.subarray(dataOffset, dataOffset + dataLength)),
148
+ nextOffset: offset + 4 + dataLength,
149
+ };
150
+ },
151
+ encodeInto: (buffer, value) => {
152
+ const encoded = textEncoder.encode(value);
153
+ if (encoded.length > 2 ** 32 - 1)
154
+ throw new RangeError("Input length exceeds limit.");
155
+ buffer.ensureCapacity(encoded.length + 4);
156
+ buffer.view.setUint32(buffer.offset, encoded.length, true);
157
+ buffer.buffer.set(encoded, (buffer.offset += 4));
158
+ buffer.offset += encoded.length;
159
+ return null;
160
+ },
161
+ size: () => ({ value: 4, isVariable: true }),
162
+ });
163
+ PRIMITIVE_TYPES_ARRAY.map(schema); // Precompile schemas
164
+ export { array, custom, isCustomSchema, optional, schema, SchemaType, source, string };
165
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type { GrowingBuffer } from "../utils/utils.ts";
2
+ import type { SchemaType as _SchemaTypeMap, optionalSchemaKey, schemaSourceKey } from "./schema.ts";
3
+ type KeysWithOptionalSchemas<T extends ObjectSchema> = {
4
+ [K in keyof T]: T[K] extends OptionalSchema<Schema> ? K : never;
5
+ }[keyof T];
6
+ export type PrimitiveType = "char" | `u${8 | 16 | 32}` | `i${8 | 16 | 32}` | `f${32 | 64}`;
7
+ export type PrimitiveTypeMap = {
8
+ char: string;
9
+ u8: number;
10
+ u16: number;
11
+ u32: number;
12
+ i8: number;
13
+ i16: number;
14
+ i32: number;
15
+ f32: number;
16
+ f64: number;
17
+ };
18
+ export type SchemaTypeMap = typeof _SchemaTypeMap;
19
+ export type SchemaType = SchemaTypeMap[keyof SchemaTypeMap];
20
+ type CompiledNullSchema<T extends Schema> = Readonly<{
21
+ type: SchemaTypeMap["Null"];
22
+ [schemaSourceKey]: T;
23
+ }>;
24
+ type CompiledSimpleSchema<T extends Schema> = Readonly<{
25
+ type: SchemaTypeMap["Simple"];
26
+ [schemaSourceKey]: T;
27
+ base: PrimitiveType;
28
+ byteLength: number;
29
+ }>;
30
+ type CompiledObjectSchema<T extends Schema> = Readonly<{
31
+ type: SchemaTypeMap["Object"];
32
+ [schemaSourceKey]: T;
33
+ entries: [string, CompiledSchema][];
34
+ }>;
35
+ type CompiledTupleSchema<T extends Schema> = Readonly<{
36
+ type: SchemaTypeMap["Tuple"];
37
+ [schemaSourceKey]: T;
38
+ entries: CompiledSchema[];
39
+ }>;
40
+ type CompiledArraySchema<T extends Schema> = Readonly<{
41
+ type: SchemaTypeMap["Array"];
42
+ [schemaSourceKey]: T;
43
+ schema: CompiledSchema;
44
+ count: number;
45
+ }>;
46
+ type CompiledOptionalSchema<T extends Schema> = Readonly<{
47
+ type: SchemaTypeMap["Optional"];
48
+ [schemaSourceKey]: T;
49
+ schema: CompiledSchema;
50
+ }>;
51
+ type CompiledCustomSchema<T extends Schema> = Readonly<{
52
+ type: SchemaTypeMap["Custom"];
53
+ [schemaSourceKey]: T;
54
+ handler: CustomSchemaHandler;
55
+ }>;
56
+ export type CompiledSchema<T extends Schema = Schema> = CompiledNullSchema<T> | CompiledSimpleSchema<T> | CompiledObjectSchema<T> | CompiledTupleSchema<T> | CompiledArraySchema<T> | CompiledOptionalSchema<T> | CompiledCustomSchema<T>;
57
+ export type StructDecodeResult<T> = {
58
+ value: T;
59
+ nextOffset: number;
60
+ };
61
+ export type SizeOfResult = {
62
+ value: number;
63
+ isVariable: boolean;
64
+ };
65
+ export interface CustomSchemaHandler<T = any> {
66
+ encode: (value: T) => Uint8Array<ArrayBuffer>;
67
+ encodeInto?: (buffer: GrowingBuffer, value: T) => null;
68
+ decode: (bytes: {
69
+ array: Uint8Array<ArrayBuffer>;
70
+ view: DataView<ArrayBuffer>;
71
+ }, offset: number) => StructDecodeResult<T>;
72
+ size: () => SizeOfResult;
73
+ }
74
+ export type SimpleSchema = `${PrimitiveType}${`[${number | ""}]` | ""}`;
75
+ export type ObjectSchema = Readonly<{
76
+ [x: string]: Schema;
77
+ }>;
78
+ export type TupleSchema = Schema[];
79
+ export type OptionalSchema<T extends Schema> = Readonly<{
80
+ [optionalSchemaKey]: true;
81
+ schema: T;
82
+ }>;
83
+ export type NullSchema = null;
84
+ export type Schema = NullSchema | SimpleSchema | ObjectSchema | TupleSchema | CustomSchemaHandler | {
85
+ [schemaSourceKey]: Schema;
86
+ };
87
+ type DecodePrimitive<T extends SimpleSchema> = T extends PrimitiveType ? PrimitiveTypeMap[T] : T extends `${infer PT extends PrimitiveType}[${number | ""}]` ? PrimitiveTypeMap[PT][] : never;
88
+ type DecodeTuple<T extends Schema[], Collector extends unknown[] = []> = any[] extends T ? T extends (infer ST extends Schema)[] ? Data<ST>[] : never : T extends [infer Schm extends Schema, ...infer Rest extends Schema[]] ? DecodeTuple<Rest, [...Collector, Data<Schm>]> : Collector;
89
+ type DecodeObject<T extends ObjectSchema> = {
90
+ [K in Exclude<keyof T, KeysWithOptionalSchemas<T>>]: Data<T[K]>;
91
+ } & {
92
+ [K in KeysWithOptionalSchemas<T>]?: Data<T[K]>;
93
+ };
94
+ export type Data<Schm extends Schema> = Schm extends NullSchema ? null : Schm extends OptionalSchema<infer T> ? Data<T> | undefined : Schm extends SimpleSchema ? DecodePrimitive<Schm> : Schm extends TupleSchema ? DecodeTuple<Schm> : Schm extends ObjectSchema ? DecodeObject<Schm> : Schm extends CustomSchemaHandler<infer CS> ? CS : Schm extends CompiledSchema<infer S> ? Data<S> : never;
95
+ export {};
96
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { PrimitiveType } from "../schema/schema.ts";
2
+ export interface DestructuredSimpleSchema {
3
+ base: PrimitiveType;
4
+ isArray: boolean;
5
+ byteLength: number;
6
+ arrayLength: number;
7
+ }
8
+ export interface GrowingBuffer {
9
+ buffer: Uint8Array<ArrayBuffer>;
10
+ view: DataView<ArrayBuffer>;
11
+ growthFactor: number;
12
+ offset: number;
13
+ updateGrowthFactor(value: number): null;
14
+ ensureCapacity(byteLength: number): null;
15
+ writeOne(value: number): null;
16
+ write(values: ArrayLike<number>): null;
17
+ finalise(): Uint8Array<ArrayBuffer>;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IAEf,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { PrimitiveType, SimpleSchema } from "../schema/schema.ts";
2
+ import type { DestructuredSimpleSchema, GrowingBuffer } from "./types.ts";
3
+ export declare const PRIMITIVE_TYPES_ARRAY: ReadonlyArray<PrimitiveType>;
4
+ export declare const PRIMITIVE_TYPES: ReadonlySet<PrimitiveType>;
5
+ export declare const BITLENGTH_REGEX: RegExp;
6
+ export declare const PRIMITIVE_TYPE_REGEX: RegExp;
7
+ export declare const textEncoder: TextEncoder;
8
+ export declare const textDecoder: TextDecoder;
9
+ export declare const coder: {
10
+ encodeNumber: (value: number) => Uint8Array<ArrayBuffer>;
11
+ decodeNumber: (value: ArrayLike<number>) => number;
12
+ encodeString: (value: string) => Uint8Array<ArrayBuffer>;
13
+ decodeString: (x: ArrayLike<number>) => string;
14
+ };
15
+ export declare const getStringCodePoints: (value: string, guardFn?: (cp: number) => number) => number[];
16
+ export declare const destructureSimpleSchema: (schema: SimpleSchema) => DestructuredSimpleSchema;
17
+ export declare const sortObjectKeys: (a: PropertyKey, b: PropertyKey) => number;
18
+ export declare const sortObjectEntries: <Key extends PropertyKey, Value>(entries: [Key, Value][]) => [Key, Value][];
19
+ export declare const createGrowingBuffer: (initialSize?: number, growth?: number) => GrowingBuffer;
20
+ export type * from "./types.ts";
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,aAAa,CAU7D,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,aAAa,CAAkC,CAAC;AAE1F,eAAO,MAAM,eAAe,QAAkB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,QAGhC,CAAC;AAEF,eAAO,MAAM,WAAW,aAAoB,CAAC;AAC7C,eAAO,MAAM,WAAW,aAAoB,CAAC;AAK7C,eAAO,MAAM,KAAK;0BACM,MAAM,KAAG,UAAU,CAAC,WAAW,CAAC;0BAYhC,SAAS,CAAC,MAAM,CAAC,KAAG,MAAM;0BAM1B,MAAM,KAAG,UAAU,CAAC,WAAW,CAAC;sBACpC,SAAS,CAAC,MAAM,CAAC,KAAG,MAAM;CAC7C,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,aAWlF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,YAAY,KAAG,wBAkB9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,KAAG,MAM/D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,GAAG,SAAS,WAAW,EAAE,KAAK,EAC9D,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KACtB,CAAC,GAAG,EAAE,KAAK,CAAC,EAEd,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,oBAAsB,EAAE,eAAU,KAAG,aA8CxE,CAAC;AAEF,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,122 @@
1
+ export const PRIMITIVE_TYPES_ARRAY = Object.freeze([
2
+ "char",
3
+ "u8",
4
+ "u16",
5
+ "u32",
6
+ "i8",
7
+ "i16",
8
+ "i32",
9
+ "f32",
10
+ "f64",
11
+ ]);
12
+ export const PRIMITIVE_TYPES = new Set(PRIMITIVE_TYPES_ARRAY);
13
+ export const BITLENGTH_REGEX = /(8|16|32|64)$/;
14
+ export const PRIMITIVE_TYPE_REGEX = new RegExp(`^((?:${PRIMITIVE_TYPES_ARRAY.join("|")})+)(\\[([0-9])?\\])?$`, "i");
15
+ export const textEncoder = new TextEncoder();
16
+ export const textDecoder = new TextDecoder();
17
+ // Math.log(256) -> 5.545177444479562
18
+ const getByteCount = (x) => +!(x % 256) + Math.ceil(Math.log(x) / 5.545177444479562);
19
+ export const coder = {
20
+ encodeNumber: (value) => {
21
+ const result = new Uint8Array(getByteCount(value));
22
+ let offset = 0;
23
+ do {
24
+ result[offset++] = value & 0xff;
25
+ value = Math.floor(value / 256);
26
+ } while (value);
27
+ return result;
28
+ },
29
+ decodeNumber: (value) => {
30
+ let result = 0;
31
+ for (let i = 0; i < value.length; result += (value[i] ?? 0) * 256 ** i++)
32
+ ;
33
+ return result;
34
+ },
35
+ encodeString: (value) => textEncoder.encode(value),
36
+ decodeString: (x) => textDecoder.decode(new Uint8Array(x)),
37
+ };
38
+ export const getStringCodePoints = (value, guardFn) => {
39
+ const codepoints = [];
40
+ if (typeof value !== "string")
41
+ throw new TypeError("value must be a string.");
42
+ if (guardFn) {
43
+ for (let i = 0; i < value.length; i++)
44
+ codepoints.push(guardFn(value.codePointAt(i) || 0));
45
+ }
46
+ else {
47
+ for (let i = 0; i < value.length; i++)
48
+ codepoints.push(value.codePointAt(i) || 0);
49
+ }
50
+ return codepoints;
51
+ };
52
+ export const destructureSimpleSchema = (schema) => {
53
+ const match = schema.match(PRIMITIVE_TYPE_REGEX);
54
+ if (!match)
55
+ throw new Error("Invalid struct.");
56
+ const [_input, base, array, arrayLength] = match;
57
+ const [_, _byteLength] = base?.match(BITLENGTH_REGEX) || [];
58
+ if (_byteLength == null && base !== "char")
59
+ throw new Error("Invalid struct.");
60
+ if (!PRIMITIVE_TYPES.has(base)) {
61
+ throw new Error(`Unknown primitive type: ${base}`);
62
+ }
63
+ return {
64
+ base: base,
65
+ isArray: array != null,
66
+ byteLength: base === "char" ? 1 : +_byteLength / 8,
67
+ arrayLength: arrayLength == null ? -1 : +arrayLength,
68
+ };
69
+ };
70
+ export const sortObjectKeys = (a, b) => {
71
+ const _a = String(a);
72
+ const _b = String(b);
73
+ if (_a < _b)
74
+ return -1;
75
+ if (_a > _b)
76
+ return 1;
77
+ return 0;
78
+ };
79
+ export const sortObjectEntries = (entries) => {
80
+ return entries.sort(([a], [b]) => sortObjectKeys(a, b));
81
+ };
82
+ export const createGrowingBuffer = (initialSize = 1024 * 4, growth = 2) => {
83
+ let buffer = new Uint8Array(initialSize);
84
+ return {
85
+ buffer: buffer,
86
+ view: new DataView(buffer.buffer),
87
+ growthFactor: growth > 1 ? growth : 2,
88
+ offset: 0,
89
+ updateGrowthFactor(value) {
90
+ if (!Number.isFinite(value))
91
+ throw new Error("Growth factor must be finite.");
92
+ if (value <= 1)
93
+ throw new Error("Growth factor must be greater than 1.");
94
+ this.growthFactor = value;
95
+ return null;
96
+ },
97
+ ensureCapacity(byteLength) {
98
+ if (this.buffer.byteLength >= this.offset + byteLength)
99
+ return null;
100
+ const newBuffer = new Uint8Array(Math.ceil(Math.max(this.buffer.byteLength * this.growthFactor, this.offset + byteLength)));
101
+ newBuffer.set(this.buffer, 0);
102
+ this.buffer = newBuffer;
103
+ this.view = new DataView(this.buffer.buffer);
104
+ return null;
105
+ },
106
+ writeOne(value) {
107
+ this.ensureCapacity(1);
108
+ this.buffer[this.offset++] = value;
109
+ return null;
110
+ },
111
+ write(values) {
112
+ this.ensureCapacity(values.length);
113
+ this.buffer.set(values, this.offset);
114
+ this.offset += values.length;
115
+ return null;
116
+ },
117
+ finalise() {
118
+ return this.buffer.slice(0, this.offset);
119
+ },
120
+ };
121
+ };
122
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "1n-destructure",
3
+ "version": "0.0.1-alpha.0",
4
+ "description": "A library for serialisation and deserialisation of structured data.",
5
+ "homepage": "https://github.com/1natsie/destructure#readme",
6
+ "author": "Oghenevwegba Obire",
7
+ "license": "MIT",
8
+ "keywords": [
9
+ "destructure",
10
+ "serialisation",
11
+ "binary-data",
12
+ "memory-manipulation",
13
+ "buffer"
14
+ ],
15
+ "type": "module",
16
+ "scripts": {
17
+ "build": "node ./scripts/build.js",
18
+ "build:watch": "node ./scripts/build-watch.js",
19
+ "dev": "node ./scripts/dev.js"
20
+ },
21
+ "files": [
22
+ "dist/",
23
+ "package.json",
24
+ "LICENSE",
25
+ "README.md"
26
+ ],
27
+ "exports": {
28
+ "./decode": {
29
+ "import": "./dist/decoder/decoder.js",
30
+ "types": "./dist/decoder/decoder.d.ts"
31
+ },
32
+ "./encode": {
33
+ "import": "./dist/encoder/encoder.js",
34
+ "types": "./dist/encoder/encoder.d.ts"
35
+ },
36
+ "./schema": {
37
+ "import": "./dist/schema/schema.js",
38
+ "types": "./dist/schema/schema.d.ts"
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^25.7.0",
43
+ "prettier": "^3.8.3",
44
+ "typescript": "^6.0.3"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/1natsie/destructure/issues"
48
+ },
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/1natsie/destructure.git"
52
+ }
53
+ }