@haneullabs/bcs 2.0.3 → 2.1.2
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 +46 -0
- package/README.md +1 -1
- package/dist/bcs-type.d.mts +15 -50
- package/dist/bcs-type.d.mts.map +1 -1
- package/dist/bcs-type.mjs +4 -5
- package/dist/bcs-type.mjs.map +1 -1
- package/dist/bcs.d.mts +5 -6
- package/dist/bcs.d.mts.map +1 -1
- package/dist/bcs.mjs +137 -5
- package/dist/bcs.mjs.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/reader.d.mts.map +1 -1
- package/dist/reader.mjs +3 -3
- package/dist/reader.mjs.map +1 -1
- package/dist/types.d.mts +4 -5
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +1 -1
- package/dist/uleb.d.mts.map +1 -1
- package/dist/uleb.mjs +5 -2
- package/dist/uleb.mjs.map +1 -1
- package/dist/utils.d.mts +0 -1
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +1 -2
- package/dist/utils.mjs.map +1 -1
- package/dist/writer.d.mts +1 -6
- package/dist/writer.d.mts.map +1 -1
- package/dist/writer.mjs +1 -2
- package/dist/writer.mjs.map +1 -1
- package/docs/index.md +11 -5
- package/docs/llms-index.md +1 -3
- package/package.json +10 -10
- package/src/bcs.ts +9 -2
- package/src/uleb.ts +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 2.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 30289c1: Reject non-canonical encodings when decoding: `bool` values other than `0` or `1`,
|
|
8
|
+
non-minimal ULEB128 encodings (used for lengths and enum variant indices) and strings that are not
|
|
9
|
+
valid UTF-8. Strings now also keep a leading byte order mark instead of silently dropping it
|
|
10
|
+
|
|
11
|
+
## 2.1.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- f2f7048: Upgrade workspace dependencies, remove the legacy dapp-kit package, and migrate the
|
|
16
|
+
remaining consumers to the current gRPC-based dapp-kit. Remove the legacy API reference while
|
|
17
|
+
retaining the migration guide and deprecation notice.
|
|
18
|
+
|
|
19
|
+
## 2.1.0
|
|
20
|
+
|
|
21
|
+
### Minor Changes
|
|
22
|
+
|
|
23
|
+
- bbf63cb: Updated dependencies
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- Updated dependencies [bbf63cb]
|
|
28
|
+
- @mysten/utils@0.4.0
|
|
29
|
+
|
|
30
|
+
## 2.0.5
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- f7de3e5: Restore docs in published tarballs.
|
|
35
|
+
- Updated dependencies [f7de3e5]
|
|
36
|
+
- @mysten/utils@0.3.3
|
|
37
|
+
|
|
38
|
+
## 2.0.4
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- 9e067cf: Validate the new per-package release flow end-to-end across every public @mysten package.
|
|
43
|
+
No functional changes — empty patch bump to force the orchestrator to dispatch every
|
|
44
|
+
release-<pkg>.yml workflow with `dry_run=false` so each package publishes via OIDC trusted
|
|
45
|
+
publishing.
|
|
46
|
+
- Updated dependencies [9e067cf]
|
|
47
|
+
- @mysten/utils@0.3.2
|
|
48
|
+
|
|
3
49
|
## 2.0.3
|
|
4
50
|
|
|
5
51
|
### Patch Changes
|
package/README.md
CHANGED
package/dist/bcs-type.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BcsReader } from "./reader.mjs";
|
|
2
2
|
import { EnumInputShape, EnumOutputShape, JoinString } from "./types.mjs";
|
|
3
3
|
import { BcsWriter, BcsWriterOptions } from "./writer.mjs";
|
|
4
|
-
|
|
5
4
|
//#region src/bcs-type.d.ts
|
|
6
5
|
interface BcsTypeOptions<T, Input = T, Name extends string = string> {
|
|
7
6
|
name?: Name;
|
|
@@ -29,12 +28,7 @@ declare class BcsType<T, Input = T, const Name extends string = string> {
|
|
|
29
28
|
fromHex(hex: string): T;
|
|
30
29
|
fromBase58(b64: string): T;
|
|
31
30
|
fromBase64(b64: string): T;
|
|
32
|
-
transform<T2 = T, Input2 = Input, NewName extends string = Name>({
|
|
33
|
-
name,
|
|
34
|
-
input,
|
|
35
|
-
output,
|
|
36
|
-
validate
|
|
37
|
-
}: {
|
|
31
|
+
transform<T2 = T, Input2 = Input, NewName extends string = Name>({ name, input, output, validate }: {
|
|
38
32
|
input?: (val: Input2) => Input;
|
|
39
33
|
output?: (value: T) => T2;
|
|
40
34
|
} & BcsTypeOptions<T2, Input2, NewName>): BcsType<T2, Input2, NewName>;
|
|
@@ -51,87 +45,58 @@ declare class SerializedBcs<T, Input = T> {
|
|
|
51
45
|
toBase58(): string;
|
|
52
46
|
parse(): T;
|
|
53
47
|
}
|
|
54
|
-
declare function fixedSizeBcsType<T, Input = T, const Name extends string = string>({
|
|
55
|
-
size,
|
|
56
|
-
...options
|
|
57
|
-
}: {
|
|
48
|
+
declare function fixedSizeBcsType<T, Input = T, const Name extends string = string>({ size, ...options }: {
|
|
58
49
|
name: Name;
|
|
59
50
|
size: number;
|
|
60
51
|
read: (reader: BcsReader) => T;
|
|
61
52
|
write: (value: Input, writer: BcsWriter) => void;
|
|
62
53
|
} & BcsTypeOptions<T, Input, Name>): BcsType<T, Input, Name>;
|
|
63
|
-
declare function uIntBcsType<const Name extends string = string>({
|
|
64
|
-
readMethod,
|
|
65
|
-
writeMethod,
|
|
66
|
-
...options
|
|
67
|
-
}: {
|
|
54
|
+
declare function uIntBcsType<const Name extends string = string>({ readMethod, writeMethod, ...options }: {
|
|
68
55
|
name: Name;
|
|
69
56
|
size: number;
|
|
70
57
|
readMethod: `read${8 | 16 | 32}`;
|
|
71
58
|
writeMethod: `write${8 | 16 | 32}`;
|
|
72
59
|
maxValue: number;
|
|
73
60
|
} & BcsTypeOptions<number, number, Name>): BcsType<number, number, Name>;
|
|
74
|
-
declare function bigUIntBcsType<const Name extends string = string>({
|
|
75
|
-
readMethod,
|
|
76
|
-
writeMethod,
|
|
77
|
-
...options
|
|
78
|
-
}: {
|
|
61
|
+
declare function bigUIntBcsType<const Name extends string = string>({ readMethod, writeMethod, ...options }: {
|
|
79
62
|
name: Name;
|
|
80
63
|
size: number;
|
|
81
64
|
readMethod: `read${64 | 128 | 256}`;
|
|
82
65
|
writeMethod: `write${64 | 128 | 256}`;
|
|
83
66
|
maxValue: bigint;
|
|
84
67
|
} & BcsTypeOptions<string, string | number | bigint>): BcsType<string, string | number | bigint, Name>;
|
|
85
|
-
declare function dynamicSizeBcsType<T, Input = T, const Name extends string = string>({
|
|
86
|
-
serialize,
|
|
87
|
-
...options
|
|
88
|
-
}: {
|
|
68
|
+
declare function dynamicSizeBcsType<T, Input = T, const Name extends string = string>({ serialize, ...options }: {
|
|
89
69
|
name: Name;
|
|
90
70
|
read: (reader: BcsReader) => T;
|
|
91
71
|
serialize: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;
|
|
92
72
|
} & BcsTypeOptions<T, Input>): BcsType<T, Input, string>;
|
|
93
|
-
declare function stringLikeBcsType<const Name extends string = string>({
|
|
94
|
-
toBytes,
|
|
95
|
-
fromBytes,
|
|
96
|
-
...options
|
|
97
|
-
}: {
|
|
73
|
+
declare function stringLikeBcsType<const Name extends string = string>({ toBytes, fromBytes, ...options }: {
|
|
98
74
|
name: Name;
|
|
99
75
|
toBytes: (value: string) => Uint8Array;
|
|
100
76
|
fromBytes: (bytes: Uint8Array) => string;
|
|
101
77
|
serializedSize?: (value: string) => number | null;
|
|
102
78
|
} & BcsTypeOptions<string, string, Name>): BcsType<string, string, Name>;
|
|
103
79
|
declare function lazyBcsType<T, Input>(cb: () => BcsType<T, Input>): BcsType<T, Input, string>;
|
|
104
|
-
interface BcsStructOptions<T extends Record<string, BcsType<any>>, Name extends string = string> extends Omit<BcsTypeOptions<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never }, Name>, 'name'> {
|
|
80
|
+
interface BcsStructOptions<T extends Record<string, BcsType<any>>, Name extends string = string> extends Omit<BcsTypeOptions<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never; }, Name>, 'name'> {
|
|
105
81
|
name: Name;
|
|
106
82
|
fields: T;
|
|
107
83
|
}
|
|
108
|
-
declare class BcsStruct<T extends Record<string, BcsType<any>>, const Name extends string = string> extends BcsType<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never }, Name> {
|
|
109
|
-
constructor({
|
|
110
|
-
name,
|
|
111
|
-
fields,
|
|
112
|
-
...options
|
|
113
|
-
}: BcsStructOptions<T, Name>);
|
|
84
|
+
declare class BcsStruct<T extends Record<string, BcsType<any>>, const Name extends string = string> extends BcsType<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never; }, Name> {
|
|
85
|
+
constructor({ name, fields, ...options }: BcsStructOptions<T, Name>);
|
|
114
86
|
}
|
|
115
|
-
interface BcsEnumOptions<T extends Record<string, BcsType<any> | null>, Name extends string = string> extends Omit<BcsTypeOptions<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null }>, Name>, 'name'> {
|
|
87
|
+
interface BcsEnumOptions<T extends Record<string, BcsType<any> | null>, Name extends string = string> extends Omit<BcsTypeOptions<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true; }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null; }>, Name>, 'name'> {
|
|
116
88
|
name: Name;
|
|
117
89
|
fields: T;
|
|
118
90
|
}
|
|
119
|
-
declare class BcsEnum<T extends Record<string, BcsType<any> | null>, const Name extends string = string> extends BcsType<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : true }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null }>, Name> {
|
|
120
|
-
constructor({
|
|
121
|
-
fields,
|
|
122
|
-
...options
|
|
123
|
-
}: BcsEnumOptions<T, Name>);
|
|
91
|
+
declare class BcsEnum<T extends Record<string, BcsType<any> | null>, const Name extends string = string> extends BcsType<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : true; }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null; }>, Name> {
|
|
92
|
+
constructor({ fields, ...options }: BcsEnumOptions<T, Name>);
|
|
124
93
|
}
|
|
125
|
-
interface BcsTupleOptions<T extends readonly BcsType<any>[], Name extends string> extends Omit<BcsTypeOptions<{ -readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never }, { [K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never }, Name>, 'name'> {
|
|
94
|
+
interface BcsTupleOptions<T extends readonly BcsType<any>[], Name extends string> extends Omit<BcsTypeOptions<{ -readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never; }, Name>, 'name'> {
|
|
126
95
|
name?: Name;
|
|
127
96
|
fields: T;
|
|
128
97
|
}
|
|
129
|
-
declare class BcsTuple<const T extends readonly BcsType<any>[], const Name extends string = `(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T> ? T : never }, ', '>})`> extends BcsType<{ -readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never }, { [K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never }, Name> {
|
|
130
|
-
constructor({
|
|
131
|
-
fields,
|
|
132
|
-
name,
|
|
133
|
-
...options
|
|
134
|
-
}: BcsTupleOptions<T, Name>);
|
|
98
|
+
declare class BcsTuple<const T extends readonly BcsType<any>[], const Name extends string = `(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T> ? T : never; }, ', '>})`> extends BcsType<{ -readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never; }, Name> {
|
|
99
|
+
constructor({ fields, name, ...options }: BcsTupleOptions<T, Name>);
|
|
135
100
|
}
|
|
136
101
|
//#endregion
|
|
137
102
|
export { BcsEnum, BcsEnumOptions, BcsStruct, BcsStructOptions, BcsTuple, BcsTupleOptions, BcsType, BcsTypeOptions, SerializedBcs, bigUIntBcsType, dynamicSizeBcsType, fixedSizeBcsType, isSerializedBcs, lazyBcsType, stringLikeBcsType, uIntBcsType };
|
package/dist/bcs-type.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bcs-type.d.mts","names":[],"sources":["../src/bcs-type.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"bcs-type.d.mts","names":[],"sources":["../src/bcs-type.ts"],"mappings":";;;;UAUiB,eAAe,GAAG,QAAQ,GAAG;EAC7C,OAAO;EACP,YAAY,OAAO;;cAGP,QAAQ,GAAG,QAAQ,SAAS;;EACxC,YAAa;EACb,aAAc;EACd,MAAM;EACN,OAAO,QAAQ,cAAc;EAC7B,iBAAiB,OAAO,OAAO,UAAU;EACzC,WAAW,OAAO;EAIlB,YACC;IACC,MAAM;IACN,OAAO,QAAQ,cAAc;IAC7B,QAAQ,OAAO,OAAO,QAAQ;IAC9B,aAAa,OAAO,OAAO,UAAU,qBAAqB,WAAW;IACrE,kBAAkB,OAAO;IACzB,YAAY,OAAO;MAChB,eAAe,GAAG,OAAO;EAoB9B,MAAM,OAAO,OAAO,QAAQ;EAK5B,UAAU,OAAO,OAAO,UAAU,mBAAgB,cAAA,GAAA;EAKlD,MAAM,OAAO,aAAa;EAK1B,QAAQ,cAAW;EAInB,WAAW,cAAW;EAItB,WAAW,cAAW;EAItB,UAAU,KAAK,GAAG,SAAS,OAAO,yBAAyB,QAC1D,MACA,OACA,QACA;IAEA,SAAS,KAAK,WAAW;IACzB,UAAU,OAAO,MAAM;MACpB,eAAe,IAAI,QAAQ,WAAQ,QAAA,IAAA,QAAA;;cAgBlC;iBACU,gBAAgB,eAAe,OAAO;cAIzC,cAAc,GAAG,QAAQ;;GAMhC;EAIL,YAAY,QAAQ,QAAQ,GAAG,QAAQ,OAAO,WAAW;EAKzD,WAAO,WAAA;EAIP;EAIA;EAIA;EAIA,SAAK;;iBAKU,iBAAiB,GAAG,QAAQ,SAAS,gCACpD,SACG;EAEH,MAAM;EACN;EACA,OAAO,QAAQ,cAAc;EAC7B,QAAQ,OAAO,OAAO,QAAQ;IAC3B,eAAe,GAAG,OAAO,QAAK,QAAA,GAAA,OAAA;iBAOlB,kBAAkB,gCACjC,YACA,gBACG;EAEH,MAAM;EACN;EACA;EACA;EACA;IACG,+BAA+B,QAAK,wBAAA;iBAgBxB,qBAAqB,gCACpC,YACA,gBACG;EAEH,MAAM;EACN;EACA;EACA;EACA;IACG,mDAAgD,0CAAA;iBAiBpC,mBAAmB,GAAG,QAAQ,SAAS,gCACtD,cACG;EAEH,MAAM;EACN,OAAO,QAAQ,cAAc;EAC7B,YAAY,OAAO,OAAO,UAAU,qBAAqB,WAAW;IACjE,eAAe,GAAG,SAAM,QAAA,GAAA;iBAcZ,wBAAwB,gCACvC,SACA,cACG;EAEH,MAAM;EACN,UAAU,kBAAkB;EAC5B,YAAY,OAAO;EACnB,kBAAkB;IACf,+BAA+B,QAAK,wBAAA;iBAkCxB,YAAY,GAAG,OAAO,UAAU,QAAQ,GAAG,SAAM,QAAA,GAAA;UAkBhD,iBAChB,UAAU,eAAe,eACzB,sCACS,KACT,kBAEG,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,iBAGpD,WAAW,IAAI,EAAE,WAAW,mBAAmB,KAAK,cAEtD;EAID,MAAM;EACN,QAAQ;;cAGI,UACZ,UAAU,eAAe,qBACnB,sCACG,WAEP,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,iBAGpD,WAAW,IAAI,EAAE,WAAW,mBAAmB,KAAK,cAEtD;EAEA,cAAc,MAAM,WAAW,WAAW,iBAAiB,GAAG;;UA0C9C,eAChB,UAAU,eAAe,sBACzB,sCACS,KACT,eACC,mBACE,WAAW,IAAI,EAAE,WAAW,cAAc,eAAe,cAE3D,kBACE,WAAW,IAAI,EAAE,WAAW,mBAAmB,UAAU,iCAE3D;EAID,MAAM;EACN,QAAQ;;cAGI,QACZ,UAAU,eAAe,4BACnB,sCACG,QACT,mBACE,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,cAEtD,kBACE,WAAW,IAAI,EAAE,WAAW,mBAAmB,UAAU,iCAE3D;EAEA,cAAc,WAAW,WAAW,eAAe,GAAG;;UA2DtC,gBAChB,mBAAmB,gBACnB,6BACS,KACT,4BAEa,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,iBAG9D,WAAW,IAAI,EAAE,WAAW,mBAAmB,KAAK,cAEtD;EAID,OAAO;EACP,QAAQ;;cAGI,eACN,mBAAmB,sBACnB,0BACD,cAAc,WAAW,IAAI,EAAE,WAAW,wBAAwB,KAAK,gCACnE,qBAEG,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,iBAG9D,WAAW,IAAI,EAAE,WAAW,mBAAmB,KAAK,cAEtD;EAEA,cAAc,QAAQ,SAAS,WAAW,gBAAgB,GAAG"}
|
package/dist/bcs-type.mjs
CHANGED
|
@@ -2,7 +2,6 @@ import { ulebEncode } from "./uleb.mjs";
|
|
|
2
2
|
import { BcsReader } from "./reader.mjs";
|
|
3
3
|
import { BcsWriter } from "./writer.mjs";
|
|
4
4
|
import { fromBase58, fromBase64, fromHex, toBase58, toBase64, toHex } from "@haneullabs/utils";
|
|
5
|
-
|
|
6
5
|
//#region src/bcs-type.ts
|
|
7
6
|
var BcsType = class BcsType {
|
|
8
7
|
#write;
|
|
@@ -12,10 +11,10 @@ var BcsType = class BcsType {
|
|
|
12
11
|
this.read = options.read;
|
|
13
12
|
this.serializedSize = options.serializedSize ?? (() => null);
|
|
14
13
|
this.#write = options.write;
|
|
15
|
-
this.#serialize = options.serialize ?? ((value, options
|
|
14
|
+
this.#serialize = options.serialize ?? ((value, options) => {
|
|
16
15
|
const writer = new BcsWriter({
|
|
17
16
|
initialSize: this.serializedSize(value) ?? void 0,
|
|
18
|
-
...options
|
|
17
|
+
...options
|
|
19
18
|
});
|
|
20
19
|
this.#write(value, writer);
|
|
21
20
|
return writer.toBytes();
|
|
@@ -211,7 +210,7 @@ var BcsEnum = class extends BcsType {
|
|
|
211
210
|
};
|
|
212
211
|
},
|
|
213
212
|
write: (value, writer) => {
|
|
214
|
-
const [name, val] = Object.entries(value).filter(([name
|
|
213
|
+
const [name, val] = Object.entries(value).filter(([name]) => Object.hasOwn(fields, name))[0];
|
|
215
214
|
for (let i = 0; i < canonicalOrder.length; i++) {
|
|
216
215
|
const [optionName, optionType] = canonicalOrder[i];
|
|
217
216
|
if (optionName === name) {
|
|
@@ -263,7 +262,7 @@ var BcsTuple = class extends BcsType {
|
|
|
263
262
|
});
|
|
264
263
|
}
|
|
265
264
|
};
|
|
266
|
-
|
|
267
265
|
//#endregion
|
|
268
266
|
export { BcsEnum, BcsStruct, BcsTuple, BcsType, SerializedBcs, bigUIntBcsType, dynamicSizeBcsType, fixedSizeBcsType, isSerializedBcs, lazyBcsType, stringLikeBcsType, uIntBcsType };
|
|
267
|
+
|
|
269
268
|
//# sourceMappingURL=bcs-type.mjs.map
|
package/dist/bcs-type.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bcs-type.mjs","names":["#write","#serialize","options","#schema","#bytes","name"],"sources":["../src/bcs-type.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase58, fromBase64, toBase58, toBase64, fromHex, toHex } from '@haneullabs/utils';\nimport { BcsReader } from './reader.js';\nimport { ulebEncode } from './uleb.js';\nimport type { BcsWriterOptions } from './writer.js';\nimport { BcsWriter } from './writer.js';\nimport type { EnumInputShape, EnumOutputShape, JoinString } from './types.js';\n\nexport interface BcsTypeOptions<T, Input = T, Name extends string = string> {\n\tname?: Name;\n\tvalidate?: (value: Input) => void;\n}\n\nexport class BcsType<T, Input = T, const Name extends string = string> {\n\t$inferType!: T;\n\t$inferInput!: Input;\n\tname: Name;\n\tread: (reader: BcsReader) => T;\n\tserializedSize: (value: Input, options?: BcsWriterOptions) => number | null;\n\tvalidate: (value: Input) => void;\n\t#write: (value: Input, writer: BcsWriter) => void;\n\t#serialize: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n\n\tconstructor(\n\t\toptions: {\n\t\t\tname: Name;\n\t\t\tread: (reader: BcsReader) => T;\n\t\t\twrite: (value: Input, writer: BcsWriter) => void;\n\t\t\tserialize?: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n\t\t\tserializedSize?: (value: Input) => number | null;\n\t\t\tvalidate?: (value: Input) => void;\n\t\t} & BcsTypeOptions<T, Input, Name>,\n\t) {\n\t\tthis.name = options.name;\n\t\tthis.read = options.read;\n\t\tthis.serializedSize = options.serializedSize ?? (() => null);\n\t\tthis.#write = options.write;\n\t\tthis.#serialize =\n\t\t\toptions.serialize ??\n\t\t\t((value, options) => {\n\t\t\t\tconst writer = new BcsWriter({\n\t\t\t\t\tinitialSize: this.serializedSize(value) ?? undefined,\n\t\t\t\t\t...options,\n\t\t\t\t});\n\t\t\t\tthis.#write(value, writer);\n\t\t\t\treturn writer.toBytes();\n\t\t\t});\n\n\t\tthis.validate = options.validate ?? (() => {});\n\t}\n\n\twrite(value: Input, writer: BcsWriter) {\n\t\tthis.validate(value);\n\t\tthis.#write(value, writer);\n\t}\n\n\tserialize(value: Input, options?: BcsWriterOptions) {\n\t\tthis.validate(value);\n\t\treturn new SerializedBcs(this, this.#serialize(value, options));\n\t}\n\n\tparse(bytes: Uint8Array): T {\n\t\tconst reader = new BcsReader(bytes);\n\t\treturn this.read(reader);\n\t}\n\n\tfromHex(hex: string) {\n\t\treturn this.parse(fromHex(hex));\n\t}\n\n\tfromBase58(b64: string) {\n\t\treturn this.parse(fromBase58(b64));\n\t}\n\n\tfromBase64(b64: string) {\n\t\treturn this.parse(fromBase64(b64));\n\t}\n\n\ttransform<T2 = T, Input2 = Input, NewName extends string = Name>({\n\t\tname,\n\t\tinput,\n\t\toutput,\n\t\tvalidate,\n\t}: {\n\t\tinput?: (val: Input2) => Input;\n\t\toutput?: (value: T) => T2;\n\t} & BcsTypeOptions<T2, Input2, NewName>) {\n\t\treturn new BcsType<T2, Input2, NewName>({\n\t\t\tname: (name ?? this.name) as NewName,\n\t\t\tread: (reader) => (output ? output(this.read(reader)) : (this.read(reader) as never)),\n\t\t\twrite: (value, writer) => this.#write(input ? input(value) : (value as never), writer),\n\t\t\tserializedSize: (value) => this.serializedSize(input ? input(value) : (value as never)),\n\t\t\tserialize: (value, options) =>\n\t\t\t\tthis.#serialize(input ? input(value) : (value as never), options),\n\t\t\tvalidate: (value) => {\n\t\t\t\tvalidate?.(value);\n\t\t\t\tthis.validate(input ? input(value) : (value as never));\n\t\t\t},\n\t\t});\n\t}\n}\n\nconst SERIALIZED_BCS_BRAND = Symbol.for('@haneullabs/serialized-bcs') as never;\nexport function isSerializedBcs(obj: unknown): obj is SerializedBcs<unknown> {\n\treturn !!obj && typeof obj === 'object' && (obj as any)[SERIALIZED_BCS_BRAND] === true;\n}\n\nexport class SerializedBcs<T, Input = T> {\n\t#schema: BcsType<T, Input>;\n\t#bytes: Uint8Array<ArrayBuffer>;\n\n\t// Used to brand SerializedBcs so that they can be identified, even between multiple copies\n\t// of the @haneullabs/bcs package are installed\n\tget [SERIALIZED_BCS_BRAND]() {\n\t\treturn true;\n\t}\n\n\tconstructor(schema: BcsType<T, Input>, bytes: Uint8Array<ArrayBuffer>) {\n\t\tthis.#schema = schema;\n\t\tthis.#bytes = bytes;\n\t}\n\n\ttoBytes() {\n\t\treturn this.#bytes;\n\t}\n\n\ttoHex() {\n\t\treturn toHex(this.#bytes);\n\t}\n\n\ttoBase64() {\n\t\treturn toBase64(this.#bytes);\n\t}\n\n\ttoBase58() {\n\t\treturn toBase58(this.#bytes);\n\t}\n\n\tparse() {\n\t\treturn this.#schema.parse(this.#bytes);\n\t}\n}\n\nexport function fixedSizeBcsType<T, Input = T, const Name extends string = string>({\n\tsize,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\tread: (reader: BcsReader) => T;\n\twrite: (value: Input, writer: BcsWriter) => void;\n} & BcsTypeOptions<T, Input, Name>) {\n\treturn new BcsType<T, Input, Name>({\n\t\t...options,\n\t\tserializedSize: () => size,\n\t});\n}\n\nexport function uIntBcsType<const Name extends string = string>({\n\treadMethod,\n\twriteMethod,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\treadMethod: `read${8 | 16 | 32}`;\n\twriteMethod: `write${8 | 16 | 32}`;\n\tmaxValue: number;\n} & BcsTypeOptions<number, number, Name>) {\n\treturn fixedSizeBcsType<number, number, Name>({\n\t\t...options,\n\t\tread: (reader) => reader[readMethod](),\n\t\twrite: (value, writer) => writer[writeMethod](value),\n\t\tvalidate: (value) => {\n\t\t\tif (value < 0 || value > options.maxValue) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function bigUIntBcsType<const Name extends string = string>({\n\treadMethod,\n\twriteMethod,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\treadMethod: `read${64 | 128 | 256}`;\n\twriteMethod: `write${64 | 128 | 256}`;\n\tmaxValue: bigint;\n} & BcsTypeOptions<string, string | number | bigint>) {\n\treturn fixedSizeBcsType<string, string | number | bigint, Name>({\n\t\t...options,\n\t\tread: (reader) => reader[readMethod](),\n\t\twrite: (value, writer) => writer[writeMethod](BigInt(value)),\n\t\tvalidate: (val) => {\n\t\t\tconst value = BigInt(val);\n\t\t\tif (value < 0 || value > options.maxValue) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function dynamicSizeBcsType<T, Input = T, const Name extends string = string>({\n\tserialize,\n\t...options\n}: {\n\tname: Name;\n\tread: (reader: BcsReader) => T;\n\tserialize: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n} & BcsTypeOptions<T, Input>) {\n\tconst type = new BcsType<T, Input>({\n\t\t...options,\n\t\tserialize,\n\t\twrite: (value, writer) => {\n\t\t\tfor (const byte of type.serialize(value).toBytes()) {\n\t\t\t\twriter.write8(byte);\n\t\t\t}\n\t\t},\n\t});\n\n\treturn type;\n}\n\nexport function stringLikeBcsType<const Name extends string = string>({\n\ttoBytes,\n\tfromBytes,\n\t...options\n}: {\n\tname: Name;\n\ttoBytes: (value: string) => Uint8Array;\n\tfromBytes: (bytes: Uint8Array) => string;\n\tserializedSize?: (value: string) => number | null;\n} & BcsTypeOptions<string, string, Name>) {\n\treturn new BcsType<string, string, Name>({\n\t\t...options,\n\t\tread: (reader) => {\n\t\t\tconst length = reader.readULEB();\n\t\t\tconst bytes = reader.readBytes(length);\n\n\t\t\treturn fromBytes(bytes);\n\t\t},\n\t\twrite: (hex, writer) => {\n\t\t\tconst bytes = toBytes(hex);\n\t\t\twriter.writeULEB(bytes.length);\n\t\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\t\twriter.write8(bytes[i]);\n\t\t\t}\n\t\t},\n\t\tserialize: (value) => {\n\t\t\tconst bytes = toBytes(value);\n\t\t\tconst size = ulebEncode(bytes.length);\n\t\t\tconst result = new Uint8Array(size.length + bytes.length);\n\t\t\tresult.set(size, 0);\n\t\t\tresult.set(bytes, size.length);\n\n\t\t\treturn result;\n\t\t},\n\t\tvalidate: (value) => {\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\tthrow new TypeError(`Invalid ${options.name} value: ${value}. Expected string`);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function lazyBcsType<T, Input>(cb: () => BcsType<T, Input>) {\n\tlet lazyType: BcsType<T, Input> | null = null;\n\tfunction getType() {\n\t\tif (!lazyType) {\n\t\t\tlazyType = cb();\n\t\t}\n\t\treturn lazyType;\n\t}\n\n\treturn new BcsType<T, Input>({\n\t\tname: 'lazy' as never,\n\t\tread: (data) => getType().read(data),\n\t\tserializedSize: (value) => getType().serializedSize(value),\n\t\twrite: (value, writer) => getType().write(value, writer),\n\t\tserialize: (value, options) => getType().serialize(value, options).toBytes(),\n\t});\n}\n\nexport interface BcsStructOptions<\n\tT extends Record<string, BcsType<any>>,\n\tName extends string = string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never;\n\t\t},\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never;\n\t\t},\n\t\tName\n\t>,\n\t'name'\n> {\n\tname: Name;\n\tfields: T;\n}\n\nexport class BcsStruct<\n\tT extends Record<string, BcsType<any>>,\n\tconst Name extends string = string,\n> extends BcsType<\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never;\n\t},\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never;\n\t},\n\tName\n> {\n\tconstructor({ name, fields, ...options }: BcsStructOptions<T, Name>) {\n\t\tconst canonicalOrder = Object.entries(fields);\n\n\t\tsuper({\n\t\t\tname,\n\t\t\tserializedSize: (values) => {\n\t\t\t\tlet total = 0;\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\tconst size = type.serializedSize(values[field]);\n\t\t\t\t\tif (size == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotal += size;\n\t\t\t\t}\n\n\t\t\t\treturn total;\n\t\t\t},\n\t\t\tread: (reader) => {\n\t\t\t\tconst result: Record<string, unknown> = {};\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\tresult[field] = type.read(reader);\n\t\t\t\t}\n\n\t\t\t\treturn result as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\ttype.write(value[field], writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (typeof value !== 'object' || value == null) {\n\t\t\t\t\tthrow new TypeError(`Expected object, found ${typeof value}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport interface BcsEnumOptions<\n\tT extends Record<string, BcsType<any> | null>,\n\tName extends string = string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\tEnumOutputShape<{\n\t\t\t[K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true;\n\t\t}>,\n\t\tEnumInputShape<{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null;\n\t\t}>,\n\t\tName\n\t>,\n\t'name'\n> {\n\tname: Name;\n\tfields: T;\n}\n\nexport class BcsEnum<\n\tT extends Record<string, BcsType<any> | null>,\n\tconst Name extends string = string,\n> extends BcsType<\n\tEnumOutputShape<{\n\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : true;\n\t}>,\n\tEnumInputShape<{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null;\n\t}>,\n\tName\n> {\n\tconstructor({ fields, ...options }: BcsEnumOptions<T, Name>) {\n\t\tconst canonicalOrder = Object.entries(fields as object);\n\t\tsuper({\n\t\t\tread: (reader) => {\n\t\t\t\tconst index = reader.readULEB();\n\n\t\t\t\tconst enumEntry = canonicalOrder[index];\n\t\t\t\tif (!enumEntry) {\n\t\t\t\t\tthrow new TypeError(`Unknown value ${index} for enum ${options.name}`);\n\t\t\t\t}\n\n\t\t\t\tconst [kind, type] = enumEntry;\n\n\t\t\t\treturn {\n\t\t\t\t\t[kind]: type?.read(reader) ?? true,\n\t\t\t\t\t$kind: kind,\n\t\t\t\t} as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tconst [name, val] = Object.entries(value).filter(([name]) =>\n\t\t\t\t\tObject.hasOwn(fields, name),\n\t\t\t\t)[0];\n\n\t\t\t\tfor (let i = 0; i < canonicalOrder.length; i++) {\n\t\t\t\t\tconst [optionName, optionType] = canonicalOrder[i];\n\t\t\t\t\tif (optionName === name) {\n\t\t\t\t\t\twriter.writeULEB(i);\n\t\t\t\t\t\toptionType?.write(val, writer);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (typeof value !== 'object' || value == null) {\n\t\t\t\t\tthrow new TypeError(`Expected object, found ${typeof value}`);\n\t\t\t\t}\n\n\t\t\t\tconst keys = Object.keys(value).filter(\n\t\t\t\t\t(k) => value[k] !== undefined && Object.hasOwn(fields, k),\n\t\t\t\t);\n\n\t\t\t\tif (keys.length !== 1) {\n\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t`Expected object with one key, but found ${keys.length} for type ${options.name}}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst [variant] = keys;\n\n\t\t\t\tif (!Object.hasOwn(fields, variant)) {\n\t\t\t\t\tthrow new TypeError(`Invalid enum variant ${variant}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport interface BcsTupleOptions<\n\tT extends readonly BcsType<any>[],\n\tName extends string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\t{\n\t\t\t-readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never;\n\t\t},\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never;\n\t\t},\n\t\tName\n\t>,\n\t'name'\n> {\n\tname?: Name;\n\tfields: T;\n}\n\nexport class BcsTuple<\n\tconst T extends readonly BcsType<any>[],\n\tconst Name extends string =\n\t\t`(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T> ? T : never }, ', '>})`,\n> extends BcsType<\n\t{\n\t\t-readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never;\n\t},\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never;\n\t},\n\tName\n> {\n\tconstructor({ fields, name, ...options }: BcsTupleOptions<T, Name>) {\n\t\tsuper({\n\t\t\tname: name ?? (`(${fields.map((t) => t.name).join(', ')})` as never),\n\t\t\tserializedSize: (values) => {\n\t\t\t\tlet total = 0;\n\t\t\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t\t\tconst size = fields[i].serializedSize(values[i]);\n\t\t\t\t\tif (size == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotal += size;\n\t\t\t\t}\n\n\t\t\t\treturn total;\n\t\t\t},\n\t\t\tread: (reader) => {\n\t\t\t\tconst result: unknown[] = [];\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tresult.push(field.read(reader));\n\t\t\t\t}\n\t\t\t\treturn result as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t\t\tfields[i].write(value[i], writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (!Array.isArray(value)) {\n\t\t\t\t\tthrow new TypeError(`Expected array, found ${typeof value}`);\n\t\t\t\t}\n\t\t\t\tif (value.length !== fields.length) {\n\t\t\t\t\tthrow new TypeError(`Expected array of length ${fields.length}, found ${value.length}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n"],"mappings":";;;;;;AAeA,IAAa,UAAb,MAAa,QAA0D;CAOtE;CACA;CAEA,YACC,SAQC;AACD,OAAK,OAAO,QAAQ;AACpB,OAAK,OAAO,QAAQ;AACpB,OAAK,iBAAiB,QAAQ,yBAAyB;AACvD,QAAKA,QAAS,QAAQ;AACtB,QAAKC,YACJ,QAAQ,eACN,OAAO,cAAY;GACpB,MAAM,SAAS,IAAI,UAAU;IAC5B,aAAa,KAAK,eAAe,MAAM,IAAI;IAC3C,GAAGC;IACH,CAAC;AACF,SAAKF,MAAO,OAAO,OAAO;AAC1B,UAAO,OAAO,SAAS;;AAGzB,OAAK,WAAW,QAAQ,mBAAmB;;CAG5C,MAAM,OAAc,QAAmB;AACtC,OAAK,SAAS,MAAM;AACpB,QAAKA,MAAO,OAAO,OAAO;;CAG3B,UAAU,OAAc,SAA4B;AACnD,OAAK,SAAS,MAAM;AACpB,SAAO,IAAI,cAAc,MAAM,MAAKC,UAAW,OAAO,QAAQ,CAAC;;CAGhE,MAAM,OAAsB;EAC3B,MAAM,SAAS,IAAI,UAAU,MAAM;AACnC,SAAO,KAAK,KAAK,OAAO;;CAGzB,QAAQ,KAAa;AACpB,SAAO,KAAK,MAAM,QAAQ,IAAI,CAAC;;CAGhC,WAAW,KAAa;AACvB,SAAO,KAAK,MAAM,WAAW,IAAI,CAAC;;CAGnC,WAAW,KAAa;AACvB,SAAO,KAAK,MAAM,WAAW,IAAI,CAAC;;CAGnC,UAAiE,EAChE,MACA,OACA,QACA,YAIwC;AACxC,SAAO,IAAI,QAA6B;GACvC,MAAO,QAAQ,KAAK;GACpB,OAAO,WAAY,SAAS,OAAO,KAAK,KAAK,OAAO,CAAC,GAAI,KAAK,KAAK,OAAO;GAC1E,QAAQ,OAAO,WAAW,MAAKD,MAAO,QAAQ,MAAM,MAAM,GAAI,OAAiB,OAAO;GACtF,iBAAiB,UAAU,KAAK,eAAe,QAAQ,MAAM,MAAM,GAAI,MAAgB;GACvF,YAAY,OAAO,YAClB,MAAKC,UAAW,QAAQ,MAAM,MAAM,GAAI,OAAiB,QAAQ;GAClE,WAAW,UAAU;AACpB,eAAW,MAAM;AACjB,SAAK,SAAS,QAAQ,MAAM,MAAM,GAAI,MAAgB;;GAEvD,CAAC;;;AAIJ,MAAM,uBAAuB,OAAO,IAAI,6BAA6B;AACrE,SAAgB,gBAAgB,KAA6C;AAC5E,QAAO,CAAC,CAAC,OAAO,OAAO,QAAQ,YAAa,IAAY,0BAA0B;;AAGnF,IAAa,gBAAb,MAAyC;CACxC;CACA;CAIA,KAAK,wBAAwB;AAC5B,SAAO;;CAGR,YAAY,QAA2B,OAAgC;AACtE,QAAKE,SAAU;AACf,QAAKC,QAAS;;CAGf,UAAU;AACT,SAAO,MAAKA;;CAGb,QAAQ;AACP,SAAO,MAAM,MAAKA,MAAO;;CAG1B,WAAW;AACV,SAAO,SAAS,MAAKA,MAAO;;CAG7B,WAAW;AACV,SAAO,SAAS,MAAKA,MAAO;;CAG7B,QAAQ;AACP,SAAO,MAAKD,OAAQ,MAAM,MAAKC,MAAO;;;AAIxC,SAAgB,iBAAmE,EAClF,MACA,GAAG,WAMgC;AACnC,QAAO,IAAI,QAAwB;EAClC,GAAG;EACH,sBAAsB;EACtB,CAAC;;AAGH,SAAgB,YAAgD,EAC/D,YACA,aACA,GAAG,WAOsC;AACzC,QAAO,iBAAuC;EAC7C,GAAG;EACH,OAAO,WAAW,OAAO,aAAa;EACtC,QAAQ,OAAO,WAAW,OAAO,aAAa,MAAM;EACpD,WAAW,UAAU;AACpB,OAAI,QAAQ,KAAK,QAAQ,QAAQ,SAChC,OAAM,IAAI,UACT,WAAW,QAAQ,KAAK,UAAU,MAAM,8BAA8B,QAAQ,WAC9E;AAEF,WAAQ,WAAW,MAAM;;EAE1B,CAAC;;AAGH,SAAgB,eAAmD,EAClE,YACA,aACA,GAAG,WAOkD;AACrD,QAAO,iBAAyD;EAC/D,GAAG;EACH,OAAO,WAAW,OAAO,aAAa;EACtC,QAAQ,OAAO,WAAW,OAAO,aAAa,OAAO,MAAM,CAAC;EAC5D,WAAW,QAAQ;GAClB,MAAM,QAAQ,OAAO,IAAI;AACzB,OAAI,QAAQ,KAAK,QAAQ,QAAQ,SAChC,OAAM,IAAI,UACT,WAAW,QAAQ,KAAK,UAAU,MAAM,8BAA8B,QAAQ,WAC9E;AAEF,WAAQ,WAAW,MAAM;;EAE1B,CAAC;;AAGH,SAAgB,mBAAqE,EACpF,WACA,GAAG,WAK0B;CAC7B,MAAM,OAAO,IAAI,QAAkB;EAClC,GAAG;EACH;EACA,QAAQ,OAAO,WAAW;AACzB,QAAK,MAAM,QAAQ,KAAK,UAAU,MAAM,CAAC,SAAS,CACjD,QAAO,OAAO,KAAK;;EAGrB,CAAC;AAEF,QAAO;;AAGR,SAAgB,kBAAsD,EACrE,SACA,WACA,GAAG,WAMsC;AACzC,QAAO,IAAI,QAA8B;EACxC,GAAG;EACH,OAAO,WAAW;GACjB,MAAM,SAAS,OAAO,UAAU;AAGhC,UAAO,UAFO,OAAO,UAAU,OAAO,CAEf;;EAExB,QAAQ,KAAK,WAAW;GACvB,MAAM,QAAQ,QAAQ,IAAI;AAC1B,UAAO,UAAU,MAAM,OAAO;AAC9B,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IACjC,QAAO,OAAO,MAAM,GAAG;;EAGzB,YAAY,UAAU;GACrB,MAAM,QAAQ,QAAQ,MAAM;GAC5B,MAAM,OAAO,WAAW,MAAM,OAAO;GACrC,MAAM,SAAS,IAAI,WAAW,KAAK,SAAS,MAAM,OAAO;AACzD,UAAO,IAAI,MAAM,EAAE;AACnB,UAAO,IAAI,OAAO,KAAK,OAAO;AAE9B,UAAO;;EAER,WAAW,UAAU;AACpB,OAAI,OAAO,UAAU,SACpB,OAAM,IAAI,UAAU,WAAW,QAAQ,KAAK,UAAU,MAAM,mBAAmB;AAEhF,WAAQ,WAAW,MAAM;;EAE1B,CAAC;;AAGH,SAAgB,YAAsB,IAA6B;CAClE,IAAI,WAAqC;CACzC,SAAS,UAAU;AAClB,MAAI,CAAC,SACJ,YAAW,IAAI;AAEhB,SAAO;;AAGR,QAAO,IAAI,QAAkB;EAC5B,MAAM;EACN,OAAO,SAAS,SAAS,CAAC,KAAK,KAAK;EACpC,iBAAiB,UAAU,SAAS,CAAC,eAAe,MAAM;EAC1D,QAAQ,OAAO,WAAW,SAAS,CAAC,MAAM,OAAO,OAAO;EACxD,YAAY,OAAO,YAAY,SAAS,CAAC,UAAU,OAAO,QAAQ,CAAC,SAAS;EAC5E,CAAC;;AAsBH,IAAa,YAAb,cAGU,QAQR;CACD,YAAY,EAAE,MAAM,QAAQ,GAAG,WAAsC;EACpE,MAAM,iBAAiB,OAAO,QAAQ,OAAO;AAE7C,QAAM;GACL;GACA,iBAAiB,WAAW;IAC3B,IAAI,QAAQ;AACZ,SAAK,MAAM,CAAC,OAAO,SAAS,gBAAgB;KAC3C,MAAM,OAAO,KAAK,eAAe,OAAO,OAAO;AAC/C,SAAI,QAAQ,KACX,QAAO;AAGR,cAAS;;AAGV,WAAO;;GAER,OAAO,WAAW;IACjB,MAAM,SAAkC,EAAE;AAC1C,SAAK,MAAM,CAAC,OAAO,SAAS,eAC3B,QAAO,SAAS,KAAK,KAAK,OAAO;AAGlC,WAAO;;GAER,QAAQ,OAAO,WAAW;AACzB,SAAK,MAAM,CAAC,OAAO,SAAS,eAC3B,MAAK,MAAM,MAAM,QAAQ,OAAO;;GAGlC,GAAG;GACH,WAAW,UAAU;AACpB,aAAS,WAAW,MAAM;AAC1B,QAAI,OAAO,UAAU,YAAY,SAAS,KACzC,OAAM,IAAI,UAAU,0BAA0B,OAAO,QAAQ;;GAG/D,CAAC;;;AAuBJ,IAAa,UAAb,cAGU,QAQR;CACD,YAAY,EAAE,QAAQ,GAAG,WAAoC;EAC5D,MAAM,iBAAiB,OAAO,QAAQ,OAAiB;AACvD,QAAM;GACL,OAAO,WAAW;IACjB,MAAM,QAAQ,OAAO,UAAU;IAE/B,MAAM,YAAY,eAAe;AACjC,QAAI,CAAC,UACJ,OAAM,IAAI,UAAU,iBAAiB,MAAM,YAAY,QAAQ,OAAO;IAGvE,MAAM,CAAC,MAAM,QAAQ;AAErB,WAAO;MACL,OAAO,MAAM,KAAK,OAAO,IAAI;KAC9B,OAAO;KACP;;GAEF,QAAQ,OAAO,WAAW;IACzB,MAAM,CAAC,MAAM,OAAO,OAAO,QAAQ,MAAM,CAAC,QAAQ,CAACC,YAClD,OAAO,OAAO,QAAQA,OAAK,CAC3B,CAAC;AAEF,SAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;KAC/C,MAAM,CAAC,YAAY,cAAc,eAAe;AAChD,SAAI,eAAe,MAAM;AACxB,aAAO,UAAU,EAAE;AACnB,kBAAY,MAAM,KAAK,OAAO;AAC9B;;;;GAIH,GAAG;GACH,WAAW,UAAU;AACpB,aAAS,WAAW,MAAM;AAC1B,QAAI,OAAO,UAAU,YAAY,SAAS,KACzC,OAAM,IAAI,UAAU,0BAA0B,OAAO,QAAQ;IAG9D,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,QAC9B,MAAM,MAAM,OAAO,UAAa,OAAO,OAAO,QAAQ,EAAE,CACzD;AAED,QAAI,KAAK,WAAW,EACnB,OAAM,IAAI,UACT,2CAA2C,KAAK,OAAO,YAAY,QAAQ,KAAK,GAChF;IAGF,MAAM,CAAC,WAAW;AAElB,QAAI,CAAC,OAAO,OAAO,QAAQ,QAAQ,CAClC,OAAM,IAAI,UAAU,wBAAwB,UAAU;;GAGxD,CAAC;;;AAuBJ,IAAa,WAAb,cAIU,QAQR;CACD,YAAY,EAAE,QAAQ,MAAM,GAAG,WAAqC;AACnE,QAAM;GACL,MAAM,QAAS,IAAI,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC;GACxD,iBAAiB,WAAW;IAC3B,IAAI,QAAQ;AACZ,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;KACvC,MAAM,OAAO,OAAO,GAAG,eAAe,OAAO,GAAG;AAChD,SAAI,QAAQ,KACX,QAAO;AAGR,cAAS;;AAGV,WAAO;;GAER,OAAO,WAAW;IACjB,MAAM,SAAoB,EAAE;AAC5B,SAAK,MAAM,SAAS,OACnB,QAAO,KAAK,MAAM,KAAK,OAAO,CAAC;AAEhC,WAAO;;GAER,QAAQ,OAAO,WAAW;AACzB,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAClC,QAAO,GAAG,MAAM,MAAM,IAAI,OAAO;;GAGnC,GAAG;GACH,WAAW,UAAU;AACpB,aAAS,WAAW,MAAM;AAC1B,QAAI,CAAC,MAAM,QAAQ,MAAM,CACxB,OAAM,IAAI,UAAU,yBAAyB,OAAO,QAAQ;AAE7D,QAAI,MAAM,WAAW,OAAO,OAC3B,OAAM,IAAI,UAAU,4BAA4B,OAAO,OAAO,UAAU,MAAM,SAAS;;GAGzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"bcs-type.mjs","names":["#write","#serialize","#schema","#bytes"],"sources":["../src/bcs-type.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase58, fromBase64, toBase58, toBase64, fromHex, toHex } from '@haneullabs/utils';\nimport { BcsReader } from './reader.js';\nimport { ulebEncode } from './uleb.js';\nimport type { BcsWriterOptions } from './writer.js';\nimport { BcsWriter } from './writer.js';\nimport type { EnumInputShape, EnumOutputShape, JoinString } from './types.js';\n\nexport interface BcsTypeOptions<T, Input = T, Name extends string = string> {\n\tname?: Name;\n\tvalidate?: (value: Input) => void;\n}\n\nexport class BcsType<T, Input = T, const Name extends string = string> {\n\t$inferType!: T;\n\t$inferInput!: Input;\n\tname: Name;\n\tread: (reader: BcsReader) => T;\n\tserializedSize: (value: Input, options?: BcsWriterOptions) => number | null;\n\tvalidate: (value: Input) => void;\n\t#write: (value: Input, writer: BcsWriter) => void;\n\t#serialize: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n\n\tconstructor(\n\t\toptions: {\n\t\t\tname: Name;\n\t\t\tread: (reader: BcsReader) => T;\n\t\t\twrite: (value: Input, writer: BcsWriter) => void;\n\t\t\tserialize?: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n\t\t\tserializedSize?: (value: Input) => number | null;\n\t\t\tvalidate?: (value: Input) => void;\n\t\t} & BcsTypeOptions<T, Input, Name>,\n\t) {\n\t\tthis.name = options.name;\n\t\tthis.read = options.read;\n\t\tthis.serializedSize = options.serializedSize ?? (() => null);\n\t\tthis.#write = options.write;\n\t\tthis.#serialize =\n\t\t\toptions.serialize ??\n\t\t\t((value, options) => {\n\t\t\t\tconst writer = new BcsWriter({\n\t\t\t\t\tinitialSize: this.serializedSize(value) ?? undefined,\n\t\t\t\t\t...options,\n\t\t\t\t});\n\t\t\t\tthis.#write(value, writer);\n\t\t\t\treturn writer.toBytes();\n\t\t\t});\n\n\t\tthis.validate = options.validate ?? (() => {});\n\t}\n\n\twrite(value: Input, writer: BcsWriter) {\n\t\tthis.validate(value);\n\t\tthis.#write(value, writer);\n\t}\n\n\tserialize(value: Input, options?: BcsWriterOptions) {\n\t\tthis.validate(value);\n\t\treturn new SerializedBcs(this, this.#serialize(value, options));\n\t}\n\n\tparse(bytes: Uint8Array): T {\n\t\tconst reader = new BcsReader(bytes);\n\t\treturn this.read(reader);\n\t}\n\n\tfromHex(hex: string) {\n\t\treturn this.parse(fromHex(hex));\n\t}\n\n\tfromBase58(b64: string) {\n\t\treturn this.parse(fromBase58(b64));\n\t}\n\n\tfromBase64(b64: string) {\n\t\treturn this.parse(fromBase64(b64));\n\t}\n\n\ttransform<T2 = T, Input2 = Input, NewName extends string = Name>({\n\t\tname,\n\t\tinput,\n\t\toutput,\n\t\tvalidate,\n\t}: {\n\t\tinput?: (val: Input2) => Input;\n\t\toutput?: (value: T) => T2;\n\t} & BcsTypeOptions<T2, Input2, NewName>) {\n\t\treturn new BcsType<T2, Input2, NewName>({\n\t\t\tname: (name ?? this.name) as NewName,\n\t\t\tread: (reader) => (output ? output(this.read(reader)) : (this.read(reader) as never)),\n\t\t\twrite: (value, writer) => this.#write(input ? input(value) : (value as never), writer),\n\t\t\tserializedSize: (value) => this.serializedSize(input ? input(value) : (value as never)),\n\t\t\tserialize: (value, options) =>\n\t\t\t\tthis.#serialize(input ? input(value) : (value as never), options),\n\t\t\tvalidate: (value) => {\n\t\t\t\tvalidate?.(value);\n\t\t\t\tthis.validate(input ? input(value) : (value as never));\n\t\t\t},\n\t\t});\n\t}\n}\n\nconst SERIALIZED_BCS_BRAND = Symbol.for('@haneullabs/serialized-bcs') as never;\nexport function isSerializedBcs(obj: unknown): obj is SerializedBcs<unknown> {\n\treturn !!obj && typeof obj === 'object' && (obj as any)[SERIALIZED_BCS_BRAND] === true;\n}\n\nexport class SerializedBcs<T, Input = T> {\n\t#schema: BcsType<T, Input>;\n\t#bytes: Uint8Array<ArrayBuffer>;\n\n\t// Used to brand SerializedBcs so that they can be identified, even between multiple copies\n\t// of the @haneullabs/bcs package are installed\n\tget [SERIALIZED_BCS_BRAND]() {\n\t\treturn true;\n\t}\n\n\tconstructor(schema: BcsType<T, Input>, bytes: Uint8Array<ArrayBuffer>) {\n\t\tthis.#schema = schema;\n\t\tthis.#bytes = bytes;\n\t}\n\n\ttoBytes() {\n\t\treturn this.#bytes;\n\t}\n\n\ttoHex() {\n\t\treturn toHex(this.#bytes);\n\t}\n\n\ttoBase64() {\n\t\treturn toBase64(this.#bytes);\n\t}\n\n\ttoBase58() {\n\t\treturn toBase58(this.#bytes);\n\t}\n\n\tparse() {\n\t\treturn this.#schema.parse(this.#bytes);\n\t}\n}\n\nexport function fixedSizeBcsType<T, Input = T, const Name extends string = string>({\n\tsize,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\tread: (reader: BcsReader) => T;\n\twrite: (value: Input, writer: BcsWriter) => void;\n} & BcsTypeOptions<T, Input, Name>) {\n\treturn new BcsType<T, Input, Name>({\n\t\t...options,\n\t\tserializedSize: () => size,\n\t});\n}\n\nexport function uIntBcsType<const Name extends string = string>({\n\treadMethod,\n\twriteMethod,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\treadMethod: `read${8 | 16 | 32}`;\n\twriteMethod: `write${8 | 16 | 32}`;\n\tmaxValue: number;\n} & BcsTypeOptions<number, number, Name>) {\n\treturn fixedSizeBcsType<number, number, Name>({\n\t\t...options,\n\t\tread: (reader) => reader[readMethod](),\n\t\twrite: (value, writer) => writer[writeMethod](value),\n\t\tvalidate: (value) => {\n\t\t\tif (value < 0 || value > options.maxValue) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function bigUIntBcsType<const Name extends string = string>({\n\treadMethod,\n\twriteMethod,\n\t...options\n}: {\n\tname: Name;\n\tsize: number;\n\treadMethod: `read${64 | 128 | 256}`;\n\twriteMethod: `write${64 | 128 | 256}`;\n\tmaxValue: bigint;\n} & BcsTypeOptions<string, string | number | bigint>) {\n\treturn fixedSizeBcsType<string, string | number | bigint, Name>({\n\t\t...options,\n\t\tread: (reader) => reader[readMethod](),\n\t\twrite: (value, writer) => writer[writeMethod](BigInt(value)),\n\t\tvalidate: (val) => {\n\t\t\tconst value = BigInt(val);\n\t\t\tif (value < 0 || value > options.maxValue) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function dynamicSizeBcsType<T, Input = T, const Name extends string = string>({\n\tserialize,\n\t...options\n}: {\n\tname: Name;\n\tread: (reader: BcsReader) => T;\n\tserialize: (value: Input, options?: BcsWriterOptions) => Uint8Array<ArrayBuffer>;\n} & BcsTypeOptions<T, Input>) {\n\tconst type = new BcsType<T, Input>({\n\t\t...options,\n\t\tserialize,\n\t\twrite: (value, writer) => {\n\t\t\tfor (const byte of type.serialize(value).toBytes()) {\n\t\t\t\twriter.write8(byte);\n\t\t\t}\n\t\t},\n\t});\n\n\treturn type;\n}\n\nexport function stringLikeBcsType<const Name extends string = string>({\n\ttoBytes,\n\tfromBytes,\n\t...options\n}: {\n\tname: Name;\n\ttoBytes: (value: string) => Uint8Array;\n\tfromBytes: (bytes: Uint8Array) => string;\n\tserializedSize?: (value: string) => number | null;\n} & BcsTypeOptions<string, string, Name>) {\n\treturn new BcsType<string, string, Name>({\n\t\t...options,\n\t\tread: (reader) => {\n\t\t\tconst length = reader.readULEB();\n\t\t\tconst bytes = reader.readBytes(length);\n\n\t\t\treturn fromBytes(bytes);\n\t\t},\n\t\twrite: (hex, writer) => {\n\t\t\tconst bytes = toBytes(hex);\n\t\t\twriter.writeULEB(bytes.length);\n\t\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\t\twriter.write8(bytes[i]);\n\t\t\t}\n\t\t},\n\t\tserialize: (value) => {\n\t\t\tconst bytes = toBytes(value);\n\t\t\tconst size = ulebEncode(bytes.length);\n\t\t\tconst result = new Uint8Array(size.length + bytes.length);\n\t\t\tresult.set(size, 0);\n\t\t\tresult.set(bytes, size.length);\n\n\t\t\treturn result;\n\t\t},\n\t\tvalidate: (value) => {\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\tthrow new TypeError(`Invalid ${options.name} value: ${value}. Expected string`);\n\t\t\t}\n\t\t\toptions.validate?.(value);\n\t\t},\n\t});\n}\n\nexport function lazyBcsType<T, Input>(cb: () => BcsType<T, Input>) {\n\tlet lazyType: BcsType<T, Input> | null = null;\n\tfunction getType() {\n\t\tif (!lazyType) {\n\t\t\tlazyType = cb();\n\t\t}\n\t\treturn lazyType;\n\t}\n\n\treturn new BcsType<T, Input>({\n\t\tname: 'lazy' as never,\n\t\tread: (data) => getType().read(data),\n\t\tserializedSize: (value) => getType().serializedSize(value),\n\t\twrite: (value, writer) => getType().write(value, writer),\n\t\tserialize: (value, options) => getType().serialize(value, options).toBytes(),\n\t});\n}\n\nexport interface BcsStructOptions<\n\tT extends Record<string, BcsType<any>>,\n\tName extends string = string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never;\n\t\t},\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never;\n\t\t},\n\t\tName\n\t>,\n\t'name'\n> {\n\tname: Name;\n\tfields: T;\n}\n\nexport class BcsStruct<\n\tT extends Record<string, BcsType<any>>,\n\tconst Name extends string = string,\n> extends BcsType<\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never;\n\t},\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never;\n\t},\n\tName\n> {\n\tconstructor({ name, fields, ...options }: BcsStructOptions<T, Name>) {\n\t\tconst canonicalOrder = Object.entries(fields);\n\n\t\tsuper({\n\t\t\tname,\n\t\t\tserializedSize: (values) => {\n\t\t\t\tlet total = 0;\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\tconst size = type.serializedSize(values[field]);\n\t\t\t\t\tif (size == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotal += size;\n\t\t\t\t}\n\n\t\t\t\treturn total;\n\t\t\t},\n\t\t\tread: (reader) => {\n\t\t\t\tconst result: Record<string, unknown> = {};\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\tresult[field] = type.read(reader);\n\t\t\t\t}\n\n\t\t\t\treturn result as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tfor (const [field, type] of canonicalOrder) {\n\t\t\t\t\ttype.write(value[field], writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (typeof value !== 'object' || value == null) {\n\t\t\t\t\tthrow new TypeError(`Expected object, found ${typeof value}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport interface BcsEnumOptions<\n\tT extends Record<string, BcsType<any> | null>,\n\tName extends string = string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\tEnumOutputShape<{\n\t\t\t[K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true;\n\t\t}>,\n\t\tEnumInputShape<{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null;\n\t\t}>,\n\t\tName\n\t>,\n\t'name'\n> {\n\tname: Name;\n\tfields: T;\n}\n\nexport class BcsEnum<\n\tT extends Record<string, BcsType<any> | null>,\n\tconst Name extends string = string,\n> extends BcsType<\n\tEnumOutputShape<{\n\t\t[K in keyof T]: T[K] extends BcsType<infer U, any> ? U : true;\n\t}>,\n\tEnumInputShape<{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null;\n\t}>,\n\tName\n> {\n\tconstructor({ fields, ...options }: BcsEnumOptions<T, Name>) {\n\t\tconst canonicalOrder = Object.entries(fields as object);\n\t\tsuper({\n\t\t\tread: (reader) => {\n\t\t\t\tconst index = reader.readULEB();\n\n\t\t\t\tconst enumEntry = canonicalOrder[index];\n\t\t\t\tif (!enumEntry) {\n\t\t\t\t\tthrow new TypeError(`Unknown value ${index} for enum ${options.name}`);\n\t\t\t\t}\n\n\t\t\t\tconst [kind, type] = enumEntry;\n\n\t\t\t\treturn {\n\t\t\t\t\t[kind]: type?.read(reader) ?? true,\n\t\t\t\t\t$kind: kind,\n\t\t\t\t} as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tconst [name, val] = Object.entries(value).filter(([name]) =>\n\t\t\t\t\tObject.hasOwn(fields, name),\n\t\t\t\t)[0];\n\n\t\t\t\tfor (let i = 0; i < canonicalOrder.length; i++) {\n\t\t\t\t\tconst [optionName, optionType] = canonicalOrder[i];\n\t\t\t\t\tif (optionName === name) {\n\t\t\t\t\t\twriter.writeULEB(i);\n\t\t\t\t\t\toptionType?.write(val, writer);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (typeof value !== 'object' || value == null) {\n\t\t\t\t\tthrow new TypeError(`Expected object, found ${typeof value}`);\n\t\t\t\t}\n\n\t\t\t\tconst keys = Object.keys(value).filter(\n\t\t\t\t\t(k) => value[k] !== undefined && Object.hasOwn(fields, k),\n\t\t\t\t);\n\n\t\t\t\tif (keys.length !== 1) {\n\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t`Expected object with one key, but found ${keys.length} for type ${options.name}}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst [variant] = keys;\n\n\t\t\t\tif (!Object.hasOwn(fields, variant)) {\n\t\t\t\t\tthrow new TypeError(`Invalid enum variant ${variant}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport interface BcsTupleOptions<\n\tT extends readonly BcsType<any>[],\n\tName extends string,\n> extends Omit<\n\tBcsTypeOptions<\n\t\t{\n\t\t\t-readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never;\n\t\t},\n\t\t{\n\t\t\t[K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never;\n\t\t},\n\t\tName\n\t>,\n\t'name'\n> {\n\tname?: Name;\n\tfields: T;\n}\n\nexport class BcsTuple<\n\tconst T extends readonly BcsType<any>[],\n\tconst Name extends string =\n\t\t`(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T> ? T : never }, ', '>})`,\n> extends BcsType<\n\t{\n\t\t-readonly [K in keyof T]: T[K] extends BcsType<infer T, any> ? T : never;\n\t},\n\t{\n\t\t[K in keyof T]: T[K] extends BcsType<any, infer T> ? T : never;\n\t},\n\tName\n> {\n\tconstructor({ fields, name, ...options }: BcsTupleOptions<T, Name>) {\n\t\tsuper({\n\t\t\tname: name ?? (`(${fields.map((t) => t.name).join(', ')})` as never),\n\t\t\tserializedSize: (values) => {\n\t\t\t\tlet total = 0;\n\t\t\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t\t\tconst size = fields[i].serializedSize(values[i]);\n\t\t\t\t\tif (size == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotal += size;\n\t\t\t\t}\n\n\t\t\t\treturn total;\n\t\t\t},\n\t\t\tread: (reader) => {\n\t\t\t\tconst result: unknown[] = [];\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tresult.push(field.read(reader));\n\t\t\t\t}\n\t\t\t\treturn result as never;\n\t\t\t},\n\t\t\twrite: (value, writer) => {\n\t\t\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t\t\tfields[i].write(value[i], writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\t...options,\n\t\t\tvalidate: (value) => {\n\t\t\t\toptions?.validate?.(value);\n\t\t\t\tif (!Array.isArray(value)) {\n\t\t\t\t\tthrow new TypeError(`Expected array, found ${typeof value}`);\n\t\t\t\t}\n\t\t\t\tif (value.length !== fields.length) {\n\t\t\t\t\tthrow new TypeError(`Expected array of length ${fields.length}, found ${value.length}`);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n"],"mappings":"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"}
|
package/dist/bcs.d.mts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { EnumInputShape, EnumOutputShape, InferBcsInput, InferBcsType, JoinString } from "./types.mjs";
|
|
2
2
|
import { BcsEnum, BcsStruct, BcsTuple, BcsType, BcsTypeOptions } from "./bcs-type.mjs";
|
|
3
|
-
|
|
4
3
|
//#region src/bcs.d.ts
|
|
5
4
|
declare function fixedArray<T extends BcsType<any>, Name extends string = string>(size: number, type: T, options?: BcsTypeOptions<InferBcsType<T>[], Iterable<InferBcsInput<T>> & {
|
|
6
5
|
length: number;
|
|
@@ -30,8 +29,8 @@ declare function vector<T, Input, Name extends string = string>(type: BcsType<T,
|
|
|
30
29
|
* Comparison is done byte-by-byte first, then by length if all compared bytes are equal.
|
|
31
30
|
*/
|
|
32
31
|
declare function compareBcsBytes(a: Uint8Array, b: Uint8Array): number;
|
|
33
|
-
declare function map<K
|
|
34
|
-
declare function map<K
|
|
32
|
+
declare function map<K extends BcsType<any>, V extends BcsType<any>>(keyType: K, valueType: V): BcsType<Map<InferBcsType<K>, InferBcsType<V>>, Map<InferBcsInput<K>, InferBcsInput<V>>, `Map<${K['name']}, ${V['name']}>`>;
|
|
33
|
+
declare function map<K, V, InputK = K, InputV = V>(keyType: BcsType<K, InputK>, valueType: BcsType<V, InputV>): BcsType<Map<K, V>, Map<InputK, InputV>, `Map<${string}, ${string}>`>;
|
|
35
34
|
declare const bcs: {
|
|
36
35
|
/**
|
|
37
36
|
* Creates a BcsType that can be used to read and write an 8-bit unsigned integer.
|
|
@@ -133,7 +132,7 @@ declare const bcs: {
|
|
|
133
132
|
* const tuple = bcs.tuple([bcs.u8(), bcs.string(), bcs.bool()])
|
|
134
133
|
* tuple.serialize([1, 'a', true]).toBytes() // Uint8Array [ 1, 1, 97, 1 ]
|
|
135
134
|
*/
|
|
136
|
-
tuple<const T extends readonly BcsType<any, any>[], const Name extends string = `(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T_1 extends string> ? T_1 : never }, ", ">})`>(fields: T, options?: BcsTypeOptions<{ -readonly [
|
|
135
|
+
tuple<const T extends readonly BcsType<any, any>[], const Name extends string = `(${JoinString<{ [K in keyof T]: T[K] extends BcsType<any, any, infer T_1 extends string> ? T_1 : never; }, ", ">})`>(fields: T, options?: BcsTypeOptions<{ -readonly [K in keyof T]: T[K] extends BcsType<infer T_1, any> ? T_1 : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer T_1> ? T_1 : never; }, Name>): BcsTuple<T, Name>;
|
|
137
136
|
/**
|
|
138
137
|
* Creates a BcsType representing a struct of a given set of fields
|
|
139
138
|
* @param name The name of the struct
|
|
@@ -146,7 +145,7 @@ declare const bcs: {
|
|
|
146
145
|
* })
|
|
147
146
|
* struct.serialize({ a: 1, b: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]
|
|
148
147
|
*/
|
|
149
|
-
struct<T extends Record<string, BcsType<any>>, const Name extends string = string>(name: Name, fields: T, options?: Omit<BcsTypeOptions<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never }>,
|
|
148
|
+
struct<T extends Record<string, BcsType<any>>, const Name extends string = string>(name: Name, fields: T, options?: Omit<BcsTypeOptions<{ [K in keyof T]: T[K] extends BcsType<infer U, any> ? U : never; }, { [K in keyof T]: T[K] extends BcsType<any, infer U> ? U : never; }>, 'name'>): BcsStruct<T, string>;
|
|
150
149
|
/**
|
|
151
150
|
* Creates a BcsType representing an enum of a given set of options
|
|
152
151
|
* @param name The name of the enum
|
|
@@ -163,7 +162,7 @@ declare const bcs: {
|
|
|
163
162
|
* enum.serialize({ B: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]
|
|
164
163
|
* enum.serialize({ C: true }).toBytes() // Uint8Array [ 2 ]
|
|
165
164
|
*/
|
|
166
|
-
enum<T extends Record<string, BcsType<any> | null>, const Name extends string = string>(name: Name, fields: T, options?: Omit<BcsTypeOptions<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null }>, Name>,
|
|
165
|
+
enum<T extends Record<string, BcsType<any> | null>, const Name extends string = string>(name: Name, fields: T, options?: Omit<BcsTypeOptions<EnumOutputShape<{ [K in keyof T]: T[K] extends BcsType<infer U, any, any> ? U : true; }>, EnumInputShape<{ [K in keyof T]: T[K] extends BcsType<any, infer U, any> ? U : boolean | object | null; }>, Name>, 'name'>): BcsEnum<T, Name>;
|
|
167
166
|
/**
|
|
168
167
|
* Creates a BcsType representing a map of a given key and value type
|
|
169
168
|
* @param keyType The BcsType of the key
|
package/dist/bcs.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bcs.d.mts","names":[],"sources":["../src/bcs.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"bcs.d.mts","names":[],"sources":["../src/bcs.ts"],"mappings":";;;iBAyBS,WAAW,UAAU,cAAc,8BAC3C,cACA,MAAM,GACN,UAAU,eACT,aAAa,MACb,SAAS,cAAc;EAAQ;GAC/B,QAEC,QAAQ,aAAa,MAAM,SAAS,cAAc;EAAQ;GAAkB;iBACtE,WAAW,GAAG,OAAO,8BAC7B,cACA,MAAM,QAAQ,GAAG,QACjB,UAAU,eAAe,KAAK,SAAS;EAAW;GAAkB,QAClE,QAAQ,KAAK,SAAS;EAAW;GAAkB;iBAqC7C,OAAO,UAAU,cACzB,MAAM,IACJ,QAAQ,aAAa,WAAW,cAAc,iCAAiC;iBACzE,OAAO,GAAG,OAAO,8BACzB,MAAM,QAAQ,GAAG,OAAO,QACtB,QAAQ,UAAU;iBA2BZ,OAAO,UAAU,cAAc,gCAAgC,cACvE,MAAM,GACN,UAAU,eACT,aAAa,MACb,SAAS,cAAc;EAAQ;GAC/B,QAEC,QAAQ,aAAa,MAAM,SAAS,cAAc;EAAQ;GAAkB;iBACtE,OAAO,GAAG,OAAO,8BACzB,MAAM,QAAQ,GAAG,OAAO,OACxB,UAAU,eAAe,KAAK,SAAS;EAAW;aAA4B,WAC5E,QAAQ,KAAK,SAAS;EAAW;aAA4B;;;;;;iBAwChD,gBAAgB,GAAG,YAAY,GAAG;iBAUzC,IAAI,UAAU,cAAc,UAAU,cAC9C,SAAS,GACT,WAAW,IACT,QACF,IAAI,aAAa,IAAI,aAAa,KAClC,IAAI,cAAc,IAAI,cAAc,YAC7B,cAAc;iBAEb,IAAI,GAAG,GAAG,SAAS,GAAG,SAAS,GACvC,SAAS,QAAQ,GAAG,SACpB,WAAW,QAAQ,GAAG,UACpB,QAAQ,IAAI,GAAG,IAAI,IAAI,QAAQ;cAkCrB;;;;;;EAMC,GAAA,UAAA,yBAAsB;;;;;;EAgBrB,IAAA,UAAA,yBAAsB;;;;;;EAgBtB,IAAA,UAAA,yBAAsB;;;;;;EAgBtB,IAAA,UAAA,mDAAgD;;;;;;EAgB/C,KAAA,UAAA,mDAAgD;;;;;;EAgBhD,KAAA,UAAA,mDAAgD;;;;;;EAgBhD,KAAA,UAAA,0BAAuB;;;;;;EA2BpB,QAAA,UAAA,yBAAsB;;;;;;;EAiBlC,MAAA,kBAAgB,MAAQ,GAAC,UAAY,eAAe,YAAY,oBAAiB,QAAA,WAAA,kBAAA,2BAAA;;;;;;;EA2BlE,WAAA,UAAA,eAAe,YAAY,oBAAiB,QAAA,WAAA,kBAAA;;;;;;EAgChD,OAAA,UAAA,yBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6ChC,YAAA,mBAAmB,2BACnB,0BAAmB,cACN,WAAC,IAAA,EAAA,WAAA,wBAAA,sBAAA,0BAAA,QAEZ,GAAC,UACC,4BAEG,WAAW,IAAI,EAAE,WAAW,cAAc,YAAU,mBAG9D,WAAW,IAAI,EAAE,WAAW,mBAAmB,OAAK,gBAEtD,QACA,SAAA,GAAA;;;;;;;;;;;;;EAoBK,OAAA,UAAU,eAAe,qBAAqB,8BAAmB,MACjE,MAAI,QACF,GAAC,UACC,KACT,kBAEG,WAAW,IAAI,EAAE,WAAW,cAAc,UAAU,iBAGpD,WAAW,IAAI,EAAE,WAAW,mBAAmB,KAAK,yBAIvD,UAAA;;;;;;;;;;;;;;;;;EAyBG,KAAA,UAAU,eAAe,4BAA4B,8BAAmB,MACtE,MAAI,QACF,GAAC,UACC,KACT,eACC,mBACE,WAAW,IAAI,EAAE,WAAW,cAAc,eAAe,cAE3D,kBACE,WAAW,IAAI,EAAE,WAAW,mBAAmB,UAAU,iCAE3D,iBAGD,QAAA,GAAA;;;;;;;;;;;;;;EAuBG,KAAA,UAAU,cAAY,UAAY,IAAI"}
|