data-struct 0.0.11-n → 0.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/CHANGELOG.md +52 -0
- package/README.md +164 -83
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +86 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +57 -17
- package/.npmignore +0 -3
- package/benchmark/benchmark.js +0 -52
- package/gruntfile.js +0 -36
- package/src/dataReader.js +0 -128
- package/src/dataTypes.js +0 -15
- package/src/dataWriter.js +0 -141
- package/src/index.js +0 -3
- package/test/tests.js +0 -219
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/codecs.ts","../src/struct.ts"],"names":["DataStructError","code","message","opts","textEncoder","textDecoder","U8_MAX","U16_MAX","U32_MAX","I8_MIN","I8_MAX","I16_MIN","I16_MAX","I32_MIN","I32_MAX","I64_MIN","I64_MAX","U64_MAX","ensureCapacity","view","offset","need","ensureInt","value","min","max","type","ensureFiniteNumber","ensureBigInt","ensureUint8Array","fixed","tag","size","write","read","validate","_bytes","boolImpl","makeString","littleEndian","plan","encoded","bytes","_value","length","cause","makeShortBytes","makeBytes","intCodec","signed","name","setters","v","o","x","le","getters","key","setter","getter","floatCodec","bigIntCodec","BE","LE","beCodecs","leCodecs","t","ARRAY_LENGTH_MAX","PATH_AT","isCodec","rethrowWithPrefix","err","segment","oldPath","newPath","oldSuffix","baseMessage","compile","schema","element","arrayCodec","structCodec","i","e","out","r","fields","child","obj","codec","struct","Buffer","written","input","encode","decode"],"mappings":"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","file":"index.mjs","sourcesContent":["export type DataStructErrorCode =\n | 'VALUE_OUT_OF_RANGE'\n | 'STRING_TOO_LONG'\n | 'BYTES_TOO_LONG'\n | 'ARRAY_TOO_LONG'\n | 'BUFFER_UNDERFLOW'\n | 'SCHEMA_MISMATCH'\n | 'INVALID_SCHEMA';\n\nexport interface DataStructErrorOptions {\n path?: string;\n offset?: number;\n cause?: unknown;\n}\n\nexport class DataStructError extends Error {\n readonly code: DataStructErrorCode;\n readonly path: string;\n readonly offset: number | undefined;\n\n constructor(code: DataStructErrorCode, message: string, opts: DataStructErrorOptions = {}) {\n super(opts.path ? `${message} at ${opts.path}` : message, { cause: opts.cause });\n this.name = 'DataStructError';\n this.code = code;\n this.path = opts.path ?? '$';\n this.offset = opts.offset;\n }\n}\n","import { DataStructError } from './errors.js';\nimport type { Codec, CodecImpl } from './types.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder('utf-8', { fatal: true });\n\nconst U8_MAX = 0xff;\nconst U16_MAX = 0xffff;\nconst U32_MAX = 0xffffffff;\nconst I8_MIN = -0x80;\nconst I8_MAX = 0x7f;\nconst I16_MIN = -0x8000;\nconst I16_MAX = 0x7fff;\nconst I32_MIN = -0x80000000;\nconst I32_MAX = 0x7fffffff;\nconst I64_MIN = -(1n << 63n);\nconst I64_MAX = (1n << 63n) - 1n;\nconst U64_MAX = (1n << 64n) - 1n;\n\n// Leaves throw without path context; parent codecs (struct/array) prefix\n// the segment via prefixPath() in struct.ts. This keeps the happy path\n// allocation-free for the field-iteration string concatenations.\n\nfunction ensureCapacity(view: DataView, offset: number, need: number): void {\n if (offset + need > view.byteLength) {\n throw new DataStructError(\n 'BUFFER_UNDERFLOW',\n `need ${need} byte(s) at offset ${offset}, but buffer has ${view.byteLength}`,\n { offset },\n );\n }\n}\n\nfunction ensureInt(value: number, min: number, max: number, type: string): void {\n if (typeof value !== 'number' || !Number.isInteger(value) || value < min || value > max) {\n throw new DataStructError(\n 'VALUE_OUT_OF_RANGE',\n `${type} requires integer in [${min}, ${max}], got ${value}`,\n );\n }\n}\n\nfunction ensureFiniteNumber(value: number, type: string): void {\n if (typeof value !== 'number') {\n throw new DataStructError('VALUE_OUT_OF_RANGE', `${type} requires number, got ${typeof value}`);\n }\n}\n\nfunction ensureBigInt(value: bigint, min: bigint, max: bigint, type: string): void {\n if (typeof value !== 'bigint' || value < min || value > max) {\n throw new DataStructError(\n 'VALUE_OUT_OF_RANGE',\n `${type} requires bigint in [${min}, ${max}], got ${value}`,\n );\n }\n}\n\nfunction ensureUint8Array(value: unknown, type: string): asserts value is Uint8Array {\n if (!(value instanceof Uint8Array)) {\n throw new DataStructError(\n 'SCHEMA_MISMATCH',\n `${type} requires Uint8Array, got ${typeof value}`,\n );\n }\n}\n\nfunction fixed<T>(\n tag: number,\n size: number,\n write: (view: DataView, offset: number, value: T) => void,\n read: (view: DataView, offset: number) => T,\n validate: (value: T) => void,\n): Codec<T> {\n const impl: CodecImpl<T> = {\n measure: () => size,\n write(view, _bytes, offset, value) {\n validate(value);\n write(view, offset, value);\n return offset + size;\n },\n read(view, _bytes, offset) {\n ensureCapacity(view, offset, size);\n return { value: read(view, offset), offset: offset + size };\n },\n };\n return { tag, impl };\n}\n\nconst boolImpl: CodecImpl<boolean> = {\n measure: () => 1,\n write(view, _bytes, offset, value) {\n if (typeof value !== 'boolean') {\n throw new DataStructError('SCHEMA_MISMATCH', `bool requires boolean, got ${typeof value}`);\n }\n view.setUint8(offset, value ? 1 : 0);\n return offset + 1;\n },\n read(view, _bytes, offset) {\n ensureCapacity(view, offset, 1);\n return { value: view.getInt8(offset) !== 0, offset: offset + 1 };\n },\n};\n\nfunction makeString(littleEndian: boolean, tag: number): Codec<string> {\n const impl: CodecImpl<string> = {\n measure(value, plan) {\n if (typeof value !== 'string') {\n throw new DataStructError('SCHEMA_MISMATCH', `string requires string, got ${typeof value}`);\n }\n const encoded = textEncoder.encode(value);\n if (encoded.byteLength > U16_MAX) {\n throw new DataStructError(\n 'STRING_TOO_LONG',\n `string UTF-8 byte length ${encoded.byteLength} exceeds 65535`,\n );\n }\n plan.strings.push(encoded);\n return 2 + encoded.byteLength;\n },\n write(view, bytes, offset, _value, plan) {\n const encoded = plan.strings[plan.cursor++] as Uint8Array;\n view.setUint16(offset, encoded.byteLength, littleEndian);\n offset += 2;\n bytes.set(encoded, offset);\n return offset + encoded.byteLength;\n },\n read(view, bytes, offset) {\n ensureCapacity(view, offset, 2);\n const length = view.getUint16(offset, littleEndian);\n offset += 2;\n ensureCapacity(view, offset, length);\n let value: string;\n try {\n value = textDecoder.decode(bytes.subarray(offset, offset + length));\n } catch (cause) {\n throw new DataStructError('SCHEMA_MISMATCH', 'invalid UTF-8 in string field', {\n offset,\n cause,\n });\n }\n return { value, offset: offset + length };\n },\n };\n return { tag, impl };\n}\n\nfunction makeShortBytes(littleEndian: boolean, tag: number): Codec<Uint8Array> {\n const impl: CodecImpl<Uint8Array> = {\n measure(value) {\n ensureUint8Array(value, 'shortBytes');\n if (value.byteLength > U16_MAX) {\n throw new DataStructError(\n 'BYTES_TOO_LONG',\n `shortBytes length ${value.byteLength} exceeds 65535`,\n );\n }\n return 2 + value.byteLength;\n },\n write(view, bytes, offset, value) {\n view.setUint16(offset, value.byteLength, littleEndian);\n offset += 2;\n bytes.set(value, offset);\n return offset + value.byteLength;\n },\n read(view, bytes, offset) {\n ensureCapacity(view, offset, 2);\n const length = view.getUint16(offset, littleEndian);\n offset += 2;\n ensureCapacity(view, offset, length);\n const value = new Uint8Array(length);\n value.set(bytes.subarray(offset, offset + length));\n return { value, offset: offset + length };\n },\n };\n return { tag, impl };\n}\n\nfunction makeBytes(littleEndian: boolean, tag: number): Codec<Uint8Array> {\n const impl: CodecImpl<Uint8Array> = {\n measure(value) {\n ensureUint8Array(value, 'bytes');\n if (value.byteLength > U32_MAX) {\n throw new DataStructError(\n 'BYTES_TOO_LONG',\n `bytes length ${value.byteLength} exceeds 4294967295`,\n );\n }\n return 4 + value.byteLength;\n },\n write(view, bytes, offset, value) {\n view.setUint32(offset, value.byteLength, littleEndian);\n offset += 4;\n bytes.set(value, offset);\n return offset + value.byteLength;\n },\n read(view, bytes, offset) {\n ensureCapacity(view, offset, 4);\n const length = view.getUint32(offset, littleEndian);\n offset += 4;\n ensureCapacity(view, offset, length);\n const value = new Uint8Array(length);\n value.set(bytes.subarray(offset, offset + length));\n return { value, offset: offset + length };\n },\n };\n return { tag, impl };\n}\n\nfunction intCodec(\n tag: number,\n size: number,\n signed: boolean,\n min: number,\n max: number,\n name: string,\n littleEndian: boolean,\n): Codec<number> {\n const setters: Record<string, (view: DataView, o: number, v: number, le: boolean) => void> = {\n 'i:1': (v, o, x) => v.setInt8(o, x),\n 'u:1': (v, o, x) => v.setUint8(o, x),\n 'i:2': (v, o, x, le) => v.setInt16(o, x, le),\n 'u:2': (v, o, x, le) => v.setUint16(o, x, le),\n 'i:4': (v, o, x, le) => v.setInt32(o, x, le),\n 'u:4': (v, o, x, le) => v.setUint32(o, x, le),\n };\n const getters: Record<string, (view: DataView, o: number, le: boolean) => number> = {\n 'i:1': (v, o) => v.getInt8(o),\n 'u:1': (v, o) => v.getUint8(o),\n 'i:2': (v, o, le) => v.getInt16(o, le),\n 'u:2': (v, o, le) => v.getUint16(o, le),\n 'i:4': (v, o, le) => v.getInt32(o, le),\n 'u:4': (v, o, le) => v.getUint32(o, le),\n };\n const key = `${signed ? 'i' : 'u'}:${size}`;\n const setter = setters[key] as (view: DataView, o: number, v: number, le: boolean) => void;\n const getter = getters[key] as (view: DataView, o: number, le: boolean) => number;\n return fixed<number>(\n tag,\n size,\n (view, offset, value) => setter(view, offset, value, littleEndian),\n (view, offset) => getter(view, offset, littleEndian),\n (value) => ensureInt(value, min, max, name),\n );\n}\n\nfunction floatCodec(tag: number, size: 4 | 8, name: string, littleEndian: boolean): Codec<number> {\n if (size === 4) {\n return fixed<number>(\n tag,\n 4,\n (view, offset, value) => view.setFloat32(offset, value, littleEndian),\n (view, offset) => view.getFloat32(offset, littleEndian),\n (value) => ensureFiniteNumber(value, name),\n );\n }\n return fixed<number>(\n tag,\n 8,\n (view, offset, value) => view.setFloat64(offset, value, littleEndian),\n (view, offset) => view.getFloat64(offset, littleEndian),\n (value) => ensureFiniteNumber(value, name),\n );\n}\n\nfunction bigIntCodec(\n tag: number,\n signed: boolean,\n name: string,\n littleEndian: boolean,\n): Codec<bigint> {\n const min = signed ? I64_MIN : 0n;\n const max = signed ? I64_MAX : U64_MAX;\n return fixed<bigint>(\n tag,\n 8,\n (view, offset, value) => {\n if (signed) view.setBigInt64(offset, value, littleEndian);\n else view.setBigUint64(offset, value, littleEndian);\n },\n (view, offset) =>\n signed ? view.getBigInt64(offset, littleEndian) : view.getBigUint64(offset, littleEndian),\n (value) => ensureBigInt(value, min, max, name),\n );\n}\n\nconst BE = false;\nconst LE = true;\n\nconst beCodecs = {\n bool: { tag: 0x000, impl: boolImpl } as Codec<boolean>,\n i8: intCodec(0x010, 1, true, I8_MIN, I8_MAX, 'i8', BE),\n u8: intCodec(0x011, 1, false, 0, U8_MAX, 'u8', BE),\n i16: intCodec(0x020, 2, true, I16_MIN, I16_MAX, 'i16', BE),\n u16: intCodec(0x021, 2, false, 0, U16_MAX, 'u16', BE),\n i32: intCodec(0x030, 4, true, I32_MIN, I32_MAX, 'i32', BE),\n u32: intCodec(0x031, 4, false, 0, U32_MAX, 'u32', BE),\n f32: floatCodec(0x040, 4, 'f32', BE),\n f64: floatCodec(0x041, 8, 'f64', BE),\n i64: bigIntCodec(0x050, true, 'i64', BE),\n u64: bigIntCodec(0x051, false, 'u64', BE),\n string: makeString(BE, 0x200),\n shortBytes: makeShortBytes(BE, 0x210),\n bytes: makeBytes(BE, 0x211),\n};\n\nconst leCodecs = {\n i16: intCodec(0x1020, 2, true, I16_MIN, I16_MAX, 'le.i16', LE),\n u16: intCodec(0x1021, 2, false, 0, U16_MAX, 'le.u16', LE),\n i32: intCodec(0x1030, 4, true, I32_MIN, I32_MAX, 'le.i32', LE),\n u32: intCodec(0x1031, 4, false, 0, U32_MAX, 'le.u32', LE),\n f32: floatCodec(0x1040, 4, 'le.f32', LE),\n f64: floatCodec(0x1041, 8, 'le.f64', LE),\n i64: bigIntCodec(0x1050, true, 'le.i64', LE),\n u64: bigIntCodec(0x1051, false, 'le.u64', LE),\n string: makeString(LE, 0x1200),\n shortBytes: makeShortBytes(LE, 0x1210),\n bytes: makeBytes(LE, 0x1211),\n};\n\nexport const t = {\n ...beCodecs,\n le: leCodecs,\n} as const;\n\nexport type TypeRegistry = typeof t;\n","import { Buffer } from 'node:buffer';\nimport { DataStructError } from './errors.js';\nimport type { AnyCodec, Codec, CodecImpl, EncodePlan, Infer, Schema } from './types.js';\n\nconst ARRAY_LENGTH_MAX = 0xffff;\nconst PATH_AT = ' at ';\n\nfunction isCodec(v: unknown): v is AnyCodec {\n return (\n typeof v === 'object' &&\n v !== null &&\n 'impl' in v &&\n 'tag' in v &&\n typeof (v as { tag: unknown }).tag === 'number'\n );\n}\n\n// Re-throw a DataStructError after prefixing its path with a new segment.\n// `segment` is either `.field` or `[index]`. Only allocated on the error path.\nfunction rethrowWithPrefix(err: unknown, segment: string): never {\n if (!(err instanceof DataStructError)) throw err;\n const oldPath = err.path === '$' ? '' : err.path.slice(1);\n const newPath = `$${segment}${oldPath}`;\n // DataStructError's constructor appends \" at <path>\" to the message when\n // a path is provided; strip the previous suffix so we don't accumulate.\n const oldSuffix = err.path === '$' ? '' : `${PATH_AT}${err.path}`;\n const baseMessage =\n oldSuffix && err.message.endsWith(oldSuffix)\n ? err.message.slice(0, -oldSuffix.length)\n : err.message;\n const opts: { path: string; offset?: number; cause?: unknown } = { path: newPath };\n if (err.offset !== undefined) opts.offset = err.offset;\n opts.cause = err.cause ?? err;\n throw new DataStructError(err.code, baseMessage, opts);\n}\n\nfunction compile(schema: Schema): AnyCodec {\n if (isCodec(schema)) return schema;\n if (Array.isArray(schema)) {\n if (schema.length !== 1) {\n throw new DataStructError(\n 'INVALID_SCHEMA',\n `array schema must have exactly one element descriptor, got ${schema.length}`,\n );\n }\n const element = schema[0];\n if (element === undefined) {\n throw new DataStructError('INVALID_SCHEMA', 'array schema element is undefined');\n }\n return arrayCodec(compile(element));\n }\n if (typeof schema === 'object' && schema !== null) {\n return structCodec(schema as Record<string, Schema>);\n }\n throw new DataStructError('INVALID_SCHEMA', `unsupported schema node: ${String(schema)}`);\n}\n\nfunction arrayCodec(element: AnyCodec): Codec<unknown[]> {\n const impl: CodecImpl<unknown[]> = {\n measure(value, plan) {\n if (!Array.isArray(value)) {\n throw new DataStructError('SCHEMA_MISMATCH', `expected array, got ${typeof value}`);\n }\n if (value.length > ARRAY_LENGTH_MAX) {\n throw new DataStructError(\n 'ARRAY_TOO_LONG',\n `array length ${value.length} exceeds ${ARRAY_LENGTH_MAX}`,\n );\n }\n let size = 2;\n for (let i = 0; i < value.length; i++) {\n try {\n size += element.impl.measure(value[i], plan);\n } catch (e) {\n rethrowWithPrefix(e, `[${i}]`);\n }\n }\n return size;\n },\n write(view, bytes, offset, value, plan) {\n view.setUint16(offset, value.length, false);\n offset += 2;\n for (let i = 0; i < value.length; i++) {\n try {\n offset = element.impl.write(view, bytes, offset, value[i], plan);\n } catch (e) {\n rethrowWithPrefix(e, `[${i}]`);\n }\n }\n return offset;\n },\n read(view, bytes, offset) {\n if (offset + 2 > view.byteLength) {\n throw new DataStructError(\n 'BUFFER_UNDERFLOW',\n `need 2 byte(s) for array length at offset ${offset}`,\n { offset },\n );\n }\n const length = view.getUint16(offset, false);\n offset += 2;\n const out = new Array<unknown>(length);\n for (let i = 0; i < length; i++) {\n try {\n const r = element.impl.read(view, bytes, offset);\n out[i] = r.value;\n offset = r.offset;\n } catch (e) {\n rethrowWithPrefix(e, `[${i}]`);\n }\n }\n return { value: out, offset };\n },\n };\n return { tag: 0x100, impl };\n}\n\nfunction structCodec(schema: Record<string, Schema>): Codec<Record<string, unknown>> {\n const keys = Object.keys(schema);\n const fields: [string, AnyCodec][] = keys.map((key) => {\n const child = schema[key];\n if (child === undefined) {\n throw new DataStructError('INVALID_SCHEMA', `field \"${key}\" is undefined`);\n }\n return [key, compile(child)];\n });\n\n const impl: CodecImpl<Record<string, unknown>> = {\n measure(value, plan) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new DataStructError('SCHEMA_MISMATCH', `expected object, got ${typeof value}`);\n }\n const obj = value as Record<string, unknown>;\n let size = 0;\n for (const [key, codec] of fields) {\n try {\n size += codec.impl.measure(obj[key], plan);\n } catch (e) {\n rethrowWithPrefix(e, `.${key}`);\n }\n }\n return size;\n },\n write(view, bytes, offset, value, plan) {\n for (const [key, codec] of fields) {\n try {\n offset = codec.impl.write(view, bytes, offset, value[key], plan);\n } catch (e) {\n rethrowWithPrefix(e, `.${key}`);\n }\n }\n return offset;\n },\n read(view, bytes, offset) {\n const out = Object.create(null) as Record<string, unknown>;\n for (const [key, codec] of fields) {\n try {\n const r = codec.impl.read(view, bytes, offset);\n out[key] = r.value;\n offset = r.offset;\n } catch (e) {\n rethrowWithPrefix(e, `.${key}`);\n }\n }\n return { value: out, offset };\n },\n };\n return { tag: 0x300, impl };\n}\n\nexport interface Struct<S extends Schema> {\n readonly schema: S;\n encode(value: Infer<S>): Buffer;\n decode(input: Uint8Array): Infer<S>;\n sizeOf(value: Infer<S>): number;\n}\n\nexport function struct<S extends Schema>(schema: S): Struct<S> {\n const codec = compile(schema);\n\n return {\n schema,\n encode(value): Buffer {\n const plan: EncodePlan = { strings: [], cursor: 0 };\n const size = codec.impl.measure(value, plan);\n const out = Buffer.allocUnsafe(size);\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n plan.cursor = 0;\n const written = codec.impl.write(view, out, 0, value, plan);\n if (written !== size) {\n throw new DataStructError(\n 'INVALID_SCHEMA',\n `internal size mismatch: measured ${size}, wrote ${written}`,\n );\n }\n return out;\n },\n decode(input): Infer<S> {\n if (!(input instanceof Uint8Array)) {\n throw new DataStructError(\n 'SCHEMA_MISMATCH',\n `decode expects Uint8Array, got ${typeof input}`,\n );\n }\n const view = new DataView(input.buffer, input.byteOffset, input.byteLength);\n const { value } = codec.impl.read(view, input, 0);\n return value as Infer<S>;\n },\n sizeOf(value): number {\n return codec.impl.measure(value, { strings: [], cursor: 0 });\n },\n };\n}\n\nexport function encode<S extends Schema>(value: Infer<S>, schema: S): Buffer {\n return struct(schema).encode(value);\n}\n\nexport function decode<S extends Schema>(input: Uint8Array, schema: S): Infer<S> {\n return struct(schema).decode(input);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,35 +1,75 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-struct",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Schema-driven binary serialization between JS objects and Node Buffers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.cts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.mjs"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
"files": ["dist", "README.md", "LICENSE", "CHANGELOG.md"],
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20.9"
|
|
25
|
+
},
|
|
26
|
+
"sideEffects": false,
|
|
6
27
|
"scripts": {
|
|
7
|
-
"
|
|
28
|
+
"build": "tsup",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest",
|
|
31
|
+
"test:coverage": "vitest run --coverage",
|
|
32
|
+
"bench": "tsx benchmark/benchmark.ts",
|
|
33
|
+
"lint": "biome check .",
|
|
34
|
+
"lint:fix": "biome check --write .",
|
|
35
|
+
"format": "biome format --write .",
|
|
36
|
+
"format:check": "biome format .",
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"prepublishOnly": "npm run typecheck && npm run lint && npm test && npm run build"
|
|
8
39
|
},
|
|
9
40
|
"repository": {
|
|
10
41
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/rzcoder/data-struct.git"
|
|
42
|
+
"url": "git+https://github.com/rzcoder/data-struct.git"
|
|
12
43
|
},
|
|
13
44
|
"keywords": [
|
|
14
|
-
"
|
|
45
|
+
"binary",
|
|
15
46
|
"buffer",
|
|
16
|
-
"
|
|
47
|
+
"codec",
|
|
48
|
+
"decode",
|
|
49
|
+
"encode",
|
|
50
|
+
"schema",
|
|
17
51
|
"serialization",
|
|
18
|
-
"
|
|
52
|
+
"struct",
|
|
53
|
+
"typescript"
|
|
19
54
|
],
|
|
20
55
|
"author": "rzcoder",
|
|
21
56
|
"license": "MIT",
|
|
22
57
|
"bugs": {
|
|
23
58
|
"url": "https://github.com/rzcoder/data-struct/issues"
|
|
24
59
|
},
|
|
25
|
-
"homepage": "https://github.com/rzcoder/data-struct",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"jit-grunt": "^0.3.2",
|
|
30
|
-
"chai": "^1.9.1",
|
|
31
|
-
"grunt-contrib-jshint": "^0.9.2",
|
|
32
|
-
"benchmark": "^1.0.0"
|
|
60
|
+
"homepage": "https://github.com/rzcoder/data-struct#readme",
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public",
|
|
63
|
+
"provenance": true
|
|
33
64
|
},
|
|
34
|
-
"
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@biomejs/biome": "^1.9.4",
|
|
67
|
+
"@types/node": "^20.17.0",
|
|
68
|
+
"@vitest/coverage-v8": "^2.1.8",
|
|
69
|
+
"tinybench": "^3.1.0",
|
|
70
|
+
"tsup": "^8.3.5",
|
|
71
|
+
"tsx": "^4.22.1",
|
|
72
|
+
"typescript": "^5.7.2",
|
|
73
|
+
"vitest": "^2.1.8"
|
|
74
|
+
}
|
|
35
75
|
}
|
package/.npmignore
DELETED
package/benchmark/benchmark.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
var Benchmark = require('benchmark');
|
|
2
|
-
var suite = new Benchmark.Suite;
|
|
3
|
-
|
|
4
|
-
DataTypes = require("../src/index").DataTypes;
|
|
5
|
-
DataReader = require("../src/index").DataReader;
|
|
6
|
-
DataWriter = require("../src/index").DataWriter;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var suites = {
|
|
11
|
-
'int32': {
|
|
12
|
-
object: 0x0F00FF00,
|
|
13
|
-
scheme: DataTypes.int32
|
|
14
|
-
},
|
|
15
|
-
'string': {
|
|
16
|
-
object: 'Hello I String',
|
|
17
|
-
scheme: DataTypes.string
|
|
18
|
-
},
|
|
19
|
-
'nested': {
|
|
20
|
-
object: { nested: { nested2: { nested3: { nested4: { nested5: 42 } } } } },
|
|
21
|
-
scheme: { nested: { nested2: { nested3: { nested4: { nested5: DataTypes.uint8 } } } } }
|
|
22
|
-
},
|
|
23
|
-
'list of list': {
|
|
24
|
-
object: [
|
|
25
|
-
[90,10,101],
|
|
26
|
-
[20,30,400],
|
|
27
|
-
[100,110,1]
|
|
28
|
-
],
|
|
29
|
-
scheme: [[DataTypes.int16]]
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
for(s in suites) {
|
|
34
|
-
var object = suites[s].object;
|
|
35
|
-
var scheme = suites[s].scheme;
|
|
36
|
-
|
|
37
|
-
(function(s, object, scheme) {
|
|
38
|
-
var buf = null;
|
|
39
|
-
var obj = null;
|
|
40
|
-
suite.add(s + '#writing to buffer', function () {
|
|
41
|
-
buf = DataWriter(object, scheme);
|
|
42
|
-
})
|
|
43
|
-
.add(s + '#reading from buffer', function () {
|
|
44
|
-
obj = DataReader(buf, scheme);
|
|
45
|
-
});
|
|
46
|
-
})(s, object, scheme);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
suite.on('cycle', function(event) {
|
|
51
|
-
console.log(String(event.target));
|
|
52
|
-
}).run();
|
package/gruntfile.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
module.exports = function(grunt) {
|
|
2
|
-
grunt.initConfig({
|
|
3
|
-
jshint: {
|
|
4
|
-
options: {
|
|
5
|
-
},
|
|
6
|
-
default: {
|
|
7
|
-
files: {
|
|
8
|
-
src: ['src/**/*.js', '!src/libs/**/*']
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
libs: {
|
|
12
|
-
files: {
|
|
13
|
-
src: ['src/libs/**/*']
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
simplemocha: {
|
|
19
|
-
options: {
|
|
20
|
-
reporter: 'List',
|
|
21
|
-
ui: 'tdd'
|
|
22
|
-
},
|
|
23
|
-
all: { src: ['test/**/*.js'] }
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
require('jit-grunt')(grunt, {
|
|
28
|
-
'simplemocha': 'grunt-simple-mocha'
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
grunt.registerTask('lint', ['jshint:default']);
|
|
33
|
-
grunt.registerTask('test', ['simplemocha']);
|
|
34
|
-
|
|
35
|
-
grunt.registerTask('default', ['lint', 'test']);
|
|
36
|
-
};
|
package/src/dataReader.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
var DataTypes = require('./dataTypes');
|
|
2
|
-
|
|
3
|
-
var typesTable = {};
|
|
4
|
-
|
|
5
|
-
typesTable[DataTypes.boolean] = function (pointer, buffer) {
|
|
6
|
-
var res = buffer.readInt8(pointer.offset);
|
|
7
|
-
pointer.offset += 1;
|
|
8
|
-
return !!res;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
typesTable[DataTypes.int8] = function (pointer, buffer) {
|
|
12
|
-
var res = buffer.readInt8(pointer.offset);
|
|
13
|
-
pointer.offset += 1;
|
|
14
|
-
return res;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
typesTable[DataTypes.uint8] = function (pointer, buffer) {
|
|
18
|
-
var res = buffer.readUInt8(pointer.offset);
|
|
19
|
-
pointer.offset += 1;
|
|
20
|
-
return res;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
typesTable[DataTypes.int16] = function (pointer, buffer) {
|
|
24
|
-
var res = buffer.readInt16BE(pointer.offset);
|
|
25
|
-
pointer.offset += 2;
|
|
26
|
-
return res;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
typesTable[DataTypes.uint16] = function (pointer, buffer) {
|
|
30
|
-
var res = buffer.readUInt16BE(pointer.offset);
|
|
31
|
-
pointer.offset += 2;
|
|
32
|
-
return res;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
typesTable[DataTypes.int32] = function (pointer, buffer) {
|
|
36
|
-
var res = buffer.readInt32BE(pointer.offset);
|
|
37
|
-
pointer.offset += 4;
|
|
38
|
-
return res;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
typesTable[DataTypes.uint32] = function (pointer, buffer) {
|
|
42
|
-
var res = buffer.readUInt32BE(pointer.offset);
|
|
43
|
-
pointer.offset += 4;
|
|
44
|
-
return res;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
typesTable[DataTypes.float] = function (pointer, buffer) {
|
|
48
|
-
var res = buffer.readFloatBE(pointer.offset);
|
|
49
|
-
pointer.offset += 4;
|
|
50
|
-
return res;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
typesTable[DataTypes.double] = function (pointer, buffer) {
|
|
54
|
-
var res = buffer.readDoubleBE(pointer.offset);
|
|
55
|
-
pointer.offset += 8;
|
|
56
|
-
return res;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
typesTable[DataTypes.string] = function (pointer, buffer) {
|
|
60
|
-
var length;
|
|
61
|
-
length = buffer.readUInt16BE(pointer.offset);
|
|
62
|
-
pointer.offset += 2;
|
|
63
|
-
var res = buffer.toString('utf8', pointer.offset, pointer.offset + length);
|
|
64
|
-
pointer.offset += length;
|
|
65
|
-
return res;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
typesTable[DataTypes.shortBuffer] = function (pointer, buffer) {
|
|
69
|
-
var length;
|
|
70
|
-
length = buffer.readUInt16BE(pointer.offset);
|
|
71
|
-
pointer.offset += 2;
|
|
72
|
-
var res = buffer.slice(pointer.offset, pointer.offset + length);
|
|
73
|
-
pointer.offset += length;
|
|
74
|
-
return res;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
typesTable[DataTypes.buffer] = function (pointer, buffer) {
|
|
78
|
-
var length;
|
|
79
|
-
length = buffer.readUInt32BE(pointer.offset);
|
|
80
|
-
pointer.offset += 4;
|
|
81
|
-
var res = buffer.slice(pointer.offset, pointer.offset + length);
|
|
82
|
-
pointer.offset += length;
|
|
83
|
-
return res;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
function list (pointer, buffer, scheme) {
|
|
87
|
-
var length = buffer.readUInt16BE(pointer.offset);
|
|
88
|
-
pointer.offset += 2;
|
|
89
|
-
|
|
90
|
-
var res = [];
|
|
91
|
-
while (length--) {
|
|
92
|
-
res.push(structureReader(pointer, buffer, scheme));
|
|
93
|
-
}
|
|
94
|
-
return res;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
var structureReader = function (pointer, buffer, scheme) {
|
|
98
|
-
var res = {};
|
|
99
|
-
|
|
100
|
-
if (arguments.length === 2) {
|
|
101
|
-
scheme = buffer;
|
|
102
|
-
buffer = pointer;
|
|
103
|
-
pointer = {
|
|
104
|
-
offset: 0
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if(typeof scheme === 'number') {
|
|
109
|
-
res = typesTable[scheme](pointer, buffer);
|
|
110
|
-
} else if (Array.isArray(scheme)) {
|
|
111
|
-
res = list(pointer, buffer, scheme[0]);
|
|
112
|
-
} else {
|
|
113
|
-
for (var el in scheme) {
|
|
114
|
-
var s = scheme[el];
|
|
115
|
-
if (typeof s === 'number') {
|
|
116
|
-
res[el] = typesTable[s](pointer, buffer);
|
|
117
|
-
} else if (Array.isArray(s)) {
|
|
118
|
-
res[el] = list(pointer, buffer, s[0]);
|
|
119
|
-
} else {
|
|
120
|
-
res[el] = structureReader(pointer, buffer, s);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return res;
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
module.exports = structureReader;
|
package/src/dataTypes.js
DELETED
package/src/dataWriter.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
var DataTypes = require('./dataTypes');
|
|
2
|
-
|
|
3
|
-
var typesTable = {};
|
|
4
|
-
|
|
5
|
-
typesTable[DataTypes.boolean] = function (value) {
|
|
6
|
-
var buffer = new Buffer(1);
|
|
7
|
-
buffer.writeInt8(value, 0);
|
|
8
|
-
return buffer;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
typesTable[DataTypes.int8] = function (value) {
|
|
12
|
-
var buffer = new Buffer(1);
|
|
13
|
-
buffer.writeInt8(value, 0);
|
|
14
|
-
return buffer;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
typesTable[DataTypes.uint8] = function (value) {
|
|
18
|
-
var buffer = new Buffer(1);
|
|
19
|
-
buffer.writeUInt8(value, 0);
|
|
20
|
-
return buffer;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
typesTable[DataTypes.int16] = function (value) {
|
|
24
|
-
var buffer = new Buffer(2);
|
|
25
|
-
buffer.writeInt16BE(value, 0);
|
|
26
|
-
return buffer;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
typesTable[DataTypes.uint16] = function (value) {
|
|
30
|
-
var buffer = new Buffer(2);
|
|
31
|
-
buffer.writeUInt16BE(value, 0);
|
|
32
|
-
return buffer;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
typesTable[DataTypes.int32] = function (value) {
|
|
36
|
-
var buffer = new Buffer(4);
|
|
37
|
-
buffer.writeInt32BE(value, 0);
|
|
38
|
-
return buffer;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
typesTable[DataTypes.uint32] = function (value) {
|
|
42
|
-
var buffer = new Buffer(4);
|
|
43
|
-
buffer.writeUInt32BE(value, 0);
|
|
44
|
-
return buffer;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
typesTable[DataTypes.float] = function (value) {
|
|
48
|
-
var buffer = new Buffer(4);
|
|
49
|
-
buffer.writeFloatBE(value, 0);
|
|
50
|
-
return buffer;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
typesTable[DataTypes.double] = function (value) {
|
|
54
|
-
var buffer = new Buffer(8);
|
|
55
|
-
buffer.writeDoubleBE(value, 0);
|
|
56
|
-
return buffer;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
typesTable[DataTypes.string] = function (value) {
|
|
60
|
-
var buffer = new Buffer(value);
|
|
61
|
-
var length = buffer.length;
|
|
62
|
-
if (length > 0xFFFF) {
|
|
63
|
-
throw Error('String too long');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
var res = new Buffer(2 + length);
|
|
67
|
-
res.writeUInt16BE(length, 0);
|
|
68
|
-
buffer.copy(res, 2);
|
|
69
|
-
|
|
70
|
-
return res;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
typesTable[DataTypes.shortBuffer] = function (value) {
|
|
74
|
-
var length = value.length;
|
|
75
|
-
if (length > 0xFFFF) {
|
|
76
|
-
throw Error('Buffer too long');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
var res = new Buffer(2 + length);
|
|
80
|
-
res.writeUInt16BE(length, 0);
|
|
81
|
-
value.copy(res, 2);
|
|
82
|
-
|
|
83
|
-
return res;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
typesTable[DataTypes.buffer] = function (value) {
|
|
87
|
-
var length = value.length;
|
|
88
|
-
|
|
89
|
-
if (length > 0xFFFFFFFF) {
|
|
90
|
-
throw Error('Buffer too long');
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
var res = new Buffer(4 + length);
|
|
94
|
-
res.writeUInt32BE(length, 0);
|
|
95
|
-
value.copy(res, 4);
|
|
96
|
-
|
|
97
|
-
return res;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
function list (value, scheme) {
|
|
101
|
-
if (!Array.isArray(value)) {
|
|
102
|
-
throw Error('Value is not array.');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
var res = [];
|
|
106
|
-
var lenBuf = new Buffer(2);
|
|
107
|
-
var length = value.length;
|
|
108
|
-
lenBuf.writeUInt16BE(length,0);
|
|
109
|
-
res.push(lenBuf);
|
|
110
|
-
|
|
111
|
-
for(var i = 0; i < length; i++) {
|
|
112
|
-
res.push(structureWriter(value[i], scheme));
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return Buffer.concat(res);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
var structureWriter = function (object, scheme) {
|
|
119
|
-
var res = [];
|
|
120
|
-
|
|
121
|
-
if(typeof scheme === 'number') {
|
|
122
|
-
res.push(typesTable[scheme](object));
|
|
123
|
-
} else if(Array.isArray(scheme)) {
|
|
124
|
-
res.push(list(object, scheme[0]));
|
|
125
|
-
} else {
|
|
126
|
-
for (var el in scheme) {
|
|
127
|
-
var s = scheme[el];
|
|
128
|
-
if (typeof s === 'number') {
|
|
129
|
-
res.push(typesTable[s](object[el]));
|
|
130
|
-
} else if (Array.isArray(s)) {
|
|
131
|
-
res.push(list(object[el], s[0]));
|
|
132
|
-
} else {
|
|
133
|
-
res.push(structureWriter(object[el], s));
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return new Buffer.concat(res);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
module.exports = structureWriter;
|
package/src/index.js
DELETED