@emagjby/strata-js 0.3.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.
Files changed (56) hide show
  1. package/dist/__tests__/decode.test.js +28 -0
  2. package/dist/__tests__/encode.vectors.test.js +46 -0
  3. package/dist/__tests__/hash.vectors.test.js +51 -0
  4. package/dist/__tests__/value.test.js +23 -0
  5. package/dist/__tests__/varint.test.js +37 -0
  6. package/dist/__tests__/vectors.enforcement.test.js +75 -0
  7. package/dist/__tests__/vectors.smoke.test.js +17 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +127 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/decode.d.ts +3 -0
  13. package/dist/decode.d.ts.map +1 -0
  14. package/dist/decode.js +140 -0
  15. package/dist/decode.js.map +1 -0
  16. package/dist/decode_error.d.ts +18 -0
  17. package/dist/decode_error.d.ts.map +1 -0
  18. package/dist/decode_error.js +10 -0
  19. package/dist/decode_error.js.map +1 -0
  20. package/dist/encode.d.ts +3 -0
  21. package/dist/encode.d.ts.map +1 -0
  22. package/dist/encode.js +88 -0
  23. package/dist/encode.js.map +1 -0
  24. package/dist/hash.d.ts +6 -0
  25. package/dist/hash.d.ts.map +1 -0
  26. package/dist/hash.js +21 -0
  27. package/dist/hash.js.map +1 -0
  28. package/dist/index.d.ts +8 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +10 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/lexer.d.ts +63 -0
  33. package/dist/lexer.d.ts.map +1 -0
  34. package/dist/lexer.js +298 -0
  35. package/dist/lexer.js.map +1 -0
  36. package/dist/parse_error.d.ts +17 -0
  37. package/dist/parse_error.d.ts.map +1 -0
  38. package/dist/parse_error.js +14 -0
  39. package/dist/parse_error.js.map +1 -0
  40. package/dist/parser.d.ts +16 -0
  41. package/dist/parser.d.ts.map +1 -0
  42. package/dist/parser.js +159 -0
  43. package/dist/parser.js.map +1 -0
  44. package/dist/value.d.ts +29 -0
  45. package/dist/value.d.ts.map +1 -0
  46. package/dist/value.js +2 -0
  47. package/dist/value.js.map +1 -0
  48. package/dist/value_factory.d.ts +11 -0
  49. package/dist/value_factory.d.ts.map +1 -0
  50. package/dist/value_factory.js +30 -0
  51. package/dist/value_factory.js.map +1 -0
  52. package/dist/varint.d.ts +11 -0
  53. package/dist/varint.d.ts.map +1 -0
  54. package/dist/varint.js +86 -0
  55. package/dist/varint.js.map +1 -0
  56. package/package.json +35 -0
package/dist/parser.js ADDED
@@ -0,0 +1,159 @@
1
+ import { Lexer } from "./lexer.js";
2
+ import { ParseError } from "./parse_error.js";
3
+ import { V } from "./value_factory.js";
4
+ export class Parser {
5
+ lexer;
6
+ lookahead;
7
+ constructor(input) {
8
+ this.lexer = new Lexer(input);
9
+ this.lookahead = this.lexer.nextToken();
10
+ }
11
+ get type() {
12
+ return this.lookahead.kind.type;
13
+ }
14
+ advance() {
15
+ this.lookahead = this.lexer.nextToken();
16
+ }
17
+ unexpected(expected, found) {
18
+ const s = this.lookahead.span;
19
+ throw new ParseError({
20
+ type: "UnexpectedToken",
21
+ expected,
22
+ found,
23
+ }, s.offset, s.line, s.column);
24
+ }
25
+ expect(type) {
26
+ if (this.type === type) {
27
+ this.advance();
28
+ }
29
+ else {
30
+ this.unexpected(type, this.lookahead.kind.type);
31
+ }
32
+ }
33
+ parseList() {
34
+ this.expect("LBracket");
35
+ const items = [];
36
+ if (this.type === "RBracket") {
37
+ this.advance();
38
+ return V.list(items);
39
+ }
40
+ while (true) {
41
+ items.push(this.parseValue());
42
+ if (this.type === "Comma") {
43
+ this.advance();
44
+ if (this.type === "RBracket") {
45
+ break;
46
+ }
47
+ continue;
48
+ }
49
+ if (this.type === "RBracket") {
50
+ break;
51
+ }
52
+ this.unexpected("',' or ']'", this.type);
53
+ }
54
+ this.expect("RBracket");
55
+ return V.list(items);
56
+ }
57
+ parseMap() {
58
+ this.expect("LBrace");
59
+ const map = new Map();
60
+ if (this.type === "RBrace") {
61
+ this.advance();
62
+ return V.map(map);
63
+ }
64
+ while (true) {
65
+ if (this.type !== "Ident") {
66
+ this.unexpected("identifier", this.type);
67
+ }
68
+ const tok = this.lookahead;
69
+ if (tok.kind.type !== "Ident") {
70
+ this.unexpected("identifier", tok.kind.type);
71
+ }
72
+ const key = tok.kind.value;
73
+ this.advance();
74
+ // shorthand: key { ... }
75
+ let value;
76
+ if (this.lookahead.kind.type === "LBrace") {
77
+ value = this.parseMap();
78
+ }
79
+ else {
80
+ this.expect("Colon");
81
+ value = this.parseValue();
82
+ }
83
+ map.set(key, value);
84
+ if (this.type === "Comma") {
85
+ this.advance();
86
+ if (this.type === "RBrace") {
87
+ break;
88
+ }
89
+ continue;
90
+ }
91
+ if (this.type === "RBrace") {
92
+ break;
93
+ }
94
+ // newline separator
95
+ if (this.type === "Ident") {
96
+ continue;
97
+ }
98
+ this.unexpected("',' or '}'", this.type);
99
+ }
100
+ this.expect("RBrace");
101
+ return V.map(map);
102
+ }
103
+ parseValue() {
104
+ const kind = this.lookahead.kind;
105
+ switch (kind.type) {
106
+ case "Null":
107
+ this.advance();
108
+ return V.null();
109
+ case "True":
110
+ this.advance();
111
+ return V.bool(true);
112
+ case "False":
113
+ this.advance();
114
+ return V.bool(false);
115
+ case "Int": {
116
+ const value = kind.value;
117
+ this.advance();
118
+ return V.int(value);
119
+ }
120
+ case "String": {
121
+ const value = kind.value;
122
+ this.advance();
123
+ return V.string(value);
124
+ }
125
+ case "Bytes": {
126
+ const value = kind.value;
127
+ this.advance();
128
+ return V.bytes(value);
129
+ }
130
+ case "LBracket":
131
+ return this.parseList();
132
+ case "LBrace":
133
+ return this.parseMap();
134
+ case "Ident": {
135
+ const name = kind.value;
136
+ this.advance();
137
+ if (this.type === "LBrace") {
138
+ const inner = this.parseMap();
139
+ return V.map([[name, inner]]);
140
+ }
141
+ this.unexpected("map or value", "identifier");
142
+ }
143
+ default:
144
+ this.unexpected("value", kind.type);
145
+ }
146
+ }
147
+ parseRoot() {
148
+ const value = this.parseValue();
149
+ if (this.type !== "EOF") {
150
+ this.unexpected("EOF", "extra input");
151
+ }
152
+ return value;
153
+ }
154
+ }
155
+ export function parse(input) {
156
+ const parser = new Parser(input);
157
+ return parser.parseRoot();
158
+ }
159
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type Value = NullValue | BoolValue | IntValue | StringValue | BytesValue | ListValue | MapValue;
2
+ export interface NullValue {
3
+ readonly kind: "null";
4
+ }
5
+ export interface BoolValue {
6
+ readonly kind: "bool";
7
+ readonly value: boolean;
8
+ }
9
+ export interface IntValue {
10
+ readonly kind: "int";
11
+ readonly value: bigint;
12
+ }
13
+ export interface StringValue {
14
+ readonly kind: "string";
15
+ readonly value: string;
16
+ }
17
+ export interface BytesValue {
18
+ readonly kind: "bytes";
19
+ readonly value: Uint8Array;
20
+ }
21
+ export interface ListValue {
22
+ readonly kind: "list";
23
+ readonly value: readonly Value[];
24
+ }
25
+ export interface MapValue {
26
+ readonly kind: "map";
27
+ readonly value: ReadonlyMap<string, Value>;
28
+ }
29
+ //# sourceMappingURL=value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACX,SAAS,GACT,SAAS,GACT,QAAQ,GACR,WAAW,GACX,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEf,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9C"}
package/dist/value.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Value, NullValue, BoolValue, IntValue, StringValue, BytesValue, ListValue, MapValue } from "./value.js";
2
+ export declare const V: {
3
+ readonly null: () => NullValue;
4
+ readonly bool: (value: boolean) => BoolValue;
5
+ readonly int: (value: bigint) => IntValue;
6
+ readonly string: (value: string) => StringValue;
7
+ readonly bytes: (value: Uint8Array) => BytesValue;
8
+ readonly list: (value: readonly Value[]) => ListValue;
9
+ readonly map: (entries: Iterable<[string, Value]>) => MapValue;
10
+ };
11
+ //# sourceMappingURL=value_factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value_factory.d.ts","sourceRoot":"","sources":["../src/value_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACX,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,CAAC;yBACF,SAAS;2BAIL,OAAO,KAAG,SAAS;0BAIpB,MAAM,KAAG,QAAQ;6BAOd,MAAM,KAAG,WAAW;4BAIrB,UAAU,KAAG,UAAU;2BAOxB,SAAS,KAAK,EAAE,KAAG,SAAS;4BAI3B,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAG,QAAQ;CAG3C,CAAC"}
@@ -0,0 +1,30 @@
1
+ export const V = {
2
+ null() {
3
+ return { kind: "null" };
4
+ },
5
+ bool(value) {
6
+ return { kind: "bool", value };
7
+ },
8
+ int(value) {
9
+ if (typeof value !== "bigint") {
10
+ throw new TypeError("Strata Int must be a bigint");
11
+ }
12
+ return { kind: "int", value };
13
+ },
14
+ string(value) {
15
+ return { kind: "string", value };
16
+ },
17
+ bytes(value) {
18
+ if (!(value instanceof Uint8Array)) {
19
+ throw new TypeError("Strata Bytes must be a Uint8Array");
20
+ }
21
+ return { kind: "bytes", value };
22
+ },
23
+ list(value) {
24
+ return { kind: "list", value };
25
+ },
26
+ map(entries) {
27
+ return { kind: "map", value: new Map(entries) };
28
+ },
29
+ };
30
+ //# sourceMappingURL=value_factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value_factory.js","sourceRoot":"","sources":["../src/value_factory.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,CAAC,GAAG;IACb,IAAI;QACA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,KAAc;QACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,KAAa;QACb,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAiB;QACnB,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,KAAuB;QACxB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,OAAkC;QAClC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,CAAC;CACK,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function encodeULEB128(value: bigint): Uint8Array;
2
+ export declare function decodeULEB128(bytes: Uint8Array, offset?: number): {
3
+ value: bigint;
4
+ nextOffset: number;
5
+ };
6
+ export declare function encodeSLEB128(value: bigint): Uint8Array;
7
+ export declare function decodeSLEB128(bytes: Uint8Array, offset?: number): {
8
+ value: bigint;
9
+ nextOffset: number;
10
+ };
11
+ //# sourceMappingURL=varint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"varint.d.ts","sourceRoot":"","sources":["../src/varint.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAsBvD;AAED,wBAAgB,aAAa,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,SAAI,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA6BvC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAuBvD;AAED,wBAAgB,aAAa,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,SAAI,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAmCvC"}
package/dist/varint.js ADDED
@@ -0,0 +1,86 @@
1
+ export function encodeULEB128(value) {
2
+ if (value < 0n) {
3
+ throw new RangeError("ULEB128 encoding only supports non-negative integers");
4
+ }
5
+ const out = [];
6
+ let v = value;
7
+ do {
8
+ let byte = Number(v & 0x7fn);
9
+ v >>= 7n;
10
+ if (v !== 0n) {
11
+ byte |= 0x80;
12
+ }
13
+ out.push(byte);
14
+ } while (v !== 0n);
15
+ return new Uint8Array(out);
16
+ }
17
+ export function decodeULEB128(bytes, offset = 0) {
18
+ let result = 0n;
19
+ let shift = 0n;
20
+ let position = offset;
21
+ while (true) {
22
+ if (position >= bytes.length) {
23
+ throw new RangeError("ULEB128 decoding exceeded input length");
24
+ }
25
+ const byte = bytes[position++];
26
+ if (byte === undefined) {
27
+ throw new RangeError("ULEB128 decoding exceeded input length");
28
+ }
29
+ const value = BigInt(byte & 0x7f);
30
+ if (shift >= 64n) {
31
+ throw new RangeError("ULEB128 value exceeds maximum safe integer size");
32
+ }
33
+ result |= value << shift;
34
+ if ((byte & 0x80) === 0) {
35
+ return { value: result, nextOffset: position };
36
+ }
37
+ shift += 7n;
38
+ }
39
+ }
40
+ export function encodeSLEB128(value) {
41
+ const out = [];
42
+ let v = value;
43
+ while (true) {
44
+ let byte = Number(v & 0x7fn);
45
+ const signBit = byte & 0x40;
46
+ v >>= 7n;
47
+ const done = (v === 0n && signBit === 0) || (v === -1n && signBit !== 0);
48
+ if (!done) {
49
+ byte |= 0x80;
50
+ }
51
+ out.push(byte);
52
+ if (done) {
53
+ break;
54
+ }
55
+ }
56
+ return Uint8Array.from(out);
57
+ }
58
+ export function decodeSLEB128(bytes, offset = 0) {
59
+ let result = 0n;
60
+ let shift = 0n;
61
+ let position = offset;
62
+ let byte;
63
+ while (true) {
64
+ if (position >= bytes.length) {
65
+ throw new RangeError("SLEB128 decoding exceeded input length");
66
+ }
67
+ byte = bytes[position++];
68
+ if (byte === undefined) {
69
+ throw new RangeError("SLEB128 decoding exceeded input length");
70
+ }
71
+ const value = BigInt(byte & 0x7f);
72
+ result |= value << shift;
73
+ shift += 7n;
74
+ if ((byte & 0x80) === 0) {
75
+ break;
76
+ }
77
+ if (shift >= 64n) {
78
+ throw new RangeError("SLEB128 value exceeds maximum safe integer size");
79
+ }
80
+ }
81
+ if (shift < 64n && (byte & 0x40) !== 0) {
82
+ result |= -1n << shift;
83
+ }
84
+ return { value: result, nextOffset: position };
85
+ }
86
+ //# sourceMappingURL=varint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"varint.js","sourceRoot":"","sources":["../src/varint.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@emagjby/strata-js",
3
+ "version": "0.3.0",
4
+ "type": "module",
5
+
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": "./dist/index.js"
10
+ },
11
+
12
+ "bin": {
13
+ "strata-js": "./dist/cli.js"
14
+ },
15
+
16
+ "files": [
17
+ "dist"
18
+ ],
19
+
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "test": "tsx --test",
23
+ "check": "tsc --noEmit && npm run test",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+
27
+ "devDependencies": {
28
+ "@types/node": "^25.0.3",
29
+ "tsx": "^4.21.0",
30
+ "typescript": "^5.9.3"
31
+ },
32
+ "dependencies": {
33
+ "@noble/hashes": "^2.0.1"
34
+ }
35
+ }