@thalalabs/surf 0.0.8 → 0.0.9
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 +6 -0
- package/README.md +34 -0
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/types/common.d.ts +2 -2
- package/build/types/types/common.d.ts.map +1 -1
- package/build/types/types/struct.d.ts +6 -6
- package/build/types/types/struct.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/__tests__/accountResource.test.ts +26 -2
- package/src/index.ts +1 -0
- package/src/types/common.ts +2 -2
- package/src/types/struct.ts +29 -31
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -165,6 +165,40 @@ const { hash } = await client.simulateTransaction(
|
|
|
165
165
|
);
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
+
### Get account resource
|
|
169
|
+
|
|
170
|
+
To get account resource with type safety:
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
const { data } = await client.useABI(COIN_ABI).resource.CoinStore({
|
|
174
|
+
type_arguments: ['0x1::aptos_coin::AptosCoin'],
|
|
175
|
+
account: '0x1',
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Get property in the struct with type safety
|
|
179
|
+
console.log(data.frozen);
|
|
180
|
+
|
|
181
|
+
// It also works for nested struct type.
|
|
182
|
+
// The `coin` property's type is 0x1::coin::Coin<T0>
|
|
183
|
+
console.log(data.coin.value);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Some fields of a stuct may reference external modules.To inference the type of a nested struct, it needs the ABI of the external module. Surf currently only built-in some of the ABIs from 0x1, so that it can inference types like "0x1::coin::Coin". The type of an unidentifiable field would be `object`. Developer can provide additional modules to Surf like this:
|
|
187
|
+
```TypeScript
|
|
188
|
+
import { DefaultABITable } from "@thalalabs/surf";
|
|
189
|
+
type ABITAble = DefaultABITable & {
|
|
190
|
+
'0x4dcae85fc5559071906cd5c76b7420fcbb4b0a92f00ab40ffc394aadbbff5ee9::fixed_point64': typeof FIXED_POINT64_ABI,
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
const client = createClient<ABITAble>({
|
|
194
|
+
nodeUrl: 'https://fullnode.mainnet.aptoslabs.com/v1',
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
With this customized `ABITAble`, Surf can inference the struct from `0x4dcae85fc5559071906cd5c76b7420fcbb4b0a92f00ab40ffc394aadbbff5ee9::fixed_point64`.
|
|
199
|
+
|
|
200
|
+
Considering the `ABITable` is only been used as a type, it would be stripped out after compiling. So it won't increase the bundle size. You can put the `ABITable` in a separate file and `import type { ABITable } from "./ABITable.ts"` to ensure that.
|
|
201
|
+
|
|
168
202
|
### React Hooks
|
|
169
203
|
|
|
170
204
|
Surf currently offers two React Hooks: `useWalletClient` and `useSubmitTransaction`. Both require the `@aptos-labs/wallet-adapter-react`. Check out the [example NextJS package](https://github.com/ThalaLabs/surf/blob/main/example/app/page.tsx) for more information.
|
package/build/types/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { createViewPayload, createEntryPayload, createClient } from "./core/index.js";
|
|
2
|
-
export type { EntryPayload, ViewPayload, } from "./types/index.js";
|
|
2
|
+
export type { EntryPayload, ViewPayload, DefaultABITable } from "./types/index.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACR,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACR,YAAY,EACZ,WAAW,EACX,eAAe,EAClB,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ABIRoot } from "./abi.js";
|
|
2
2
|
export type Primitive = 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'address' | '0x1::string::String';
|
|
3
|
-
type Vector = `vector<${
|
|
4
|
-
type VectorOfVector = `vector<vector<${
|
|
3
|
+
type Vector = `vector<${string}>`;
|
|
4
|
+
type VectorOfVector = `vector<vector<${string}>>`;
|
|
5
5
|
export type AllTypes = Primitive | Vector | VectorOfVector;
|
|
6
6
|
type ConvertPrimitiveArgsType<T extends Primitive> = T extends 'bool' ? boolean : T extends 'u8' ? number : T extends 'u16' ? number : T extends 'u32' ? number : T extends 'u64' ? AnyNumber : T extends 'u128' ? AnyNumber : T extends 'u256' ? AnyNumber : T extends 'address' ? `0x${string}` : T extends '0x1::string::String' ? string : never;
|
|
7
7
|
type ConvertVectorArgsType<TInner> = TInner extends Primitive ? ConvertPrimitiveArgsType<TInner>[] : (TInner extends `vector<${infer TInnerInner}>` ? (TInnerInner extends Primitive ? ConvertPrimitiveArgsType<TInnerInner>[][] : any[][]) : (object[]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,MAAM,SAAS,GACjB,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAC7B,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GACnC,qBAAqB,CAAC;AAE1B,KAAK,MAAM,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,MAAM,SAAS,GACjB,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAC7B,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GACnC,qBAAqB,CAAC;AAE1B,KAAK,MAAM,GAAG,UAAU,MAAM,GAAG,CAAC;AAClC,KAAK,cAAc,GAAG,iBAAiB,MAAM,IAAI,CAAC;AAGlD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;AAC3D,KAAK,wBAAwB,CAAC,CAAC,SAAS,SAAS,IAC7C,CAAC,SAAS,MAAM,GAAG,OAAO,GAC1B,CAAC,SAAS,IAAI,GAAG,MAAM,GACvB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,SAAS,GAC3B,CAAC,SAAS,MAAM,GAAG,SAAS,GAC5B,CAAC,SAAS,MAAM,GAAG,SAAS,GAC5B,CAAC,SAAS,SAAS,GAAG,KAAK,MAAM,EAAE,GACnC,CAAC,SAAS,qBAAqB,GAAG,MAAM,GACxC,KAAK,CAAC;AAEV,KAAK,qBAAqB,CAAC,MAAM,IAAI,MAAM,SAAS,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAAE,GAC9F,CACI,MAAM,SAAS,UAAU,MAAM,WAAW,GAAG,GAAG,CAC5C,WAAW,SAAS,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,EAAE,EAAE,GACzE,GAAG,EAAE,EAAE,CAAC,GAAG,CACX,MAAM,EAAE,CACX,CACJ,CAAC;AAEN,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,QAAQ,IAC1C,CAAC,SAAS,SAAS,GAAG,wBAAwB,CAAC,CAAC,CAAC,GACjD,CAAC,SAAS,UAAU,MAAM,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,GACnE,MAAM,CAAC,CAAC,CAAC,CAAC;AAGd,KAAK,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC;AAEvC,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IACtD,CAAC,SAAS,MAAM,GAAG,OAAO,GAC1B,CAAC,SAAS,IAAI,GAAG,MAAM,GACvB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,MAAM,GAAG,MAAM,GACzB,CAAC,SAAS,MAAM,GAAG,MAAM,GACzB,CAAC,SAAS,SAAS,GAAG,KAAK,MAAM,EAAE,GACnC,CAAC,SAAS,qBAAqB,GAAG,MAAM,GACxC,KAAK,CAAC;AAEV,KAAK,uBAAuB,CAAC,MAAM,IAAI,MAAM,SAAS,SAAS,GAAG,0BAA0B,CAAC,MAAM,CAAC,EAAE,GAClG,CACI,MAAM,SAAS,UAAU,MAAM,WAAW,GAAG,GAAG,CAC5C,WAAW,SAAS,SAAS,GAAG,0BAA0B,CAAC,WAAW,CAAC,EAAE,EAAE,GAC3E,GAAG,EAAE,EAAE,CAAC,GAAG,CACX,MAAM,EAAE,CACX,CACJ,CAAC;AAEN,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,QAAQ,IAC5C,CAAC,SAAS,SAAS,GAAG,0BAA0B,CAAC,CAAC,CAAC,GACnD,CAAC,SAAS,UAAU,MAAM,MAAM,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC,GACrE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEd,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3D,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IAC5E,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAElD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AACnG,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AACrG,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAIhF,KAAK,aAAa,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAG3F,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjF,CAAC;AAEF,MAAM,MAAM,iBAAiB,CACzB,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,cAAc,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAEvD,MAAM,MAAM,oBAAoB,CAC5B,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5C,MAAM,MAAM,iBAAiB,CACzB,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,aAAa,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtD,MAAM,MAAM,2BAA2B,CACnC,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,aAAa,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAElE,MAAM,MAAM,oBAAoB,CAC5B,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5C,MAAM,MAAM,wBAAwB,CAChC,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAEjE,MAAM,MAAM,2BAA2B,CACnC,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,YAAY,CAAC,CAAC,CAAC,IACjC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAGzD,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,SAAS,gBAAgB,CAAC,CAAC,CAAC,IAAI;IACvF,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3C,cAAc,EAAE,wBAAwB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;CACzD,CAAA;AAID,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI,CAAC,SAAS,SAAS,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,GACjG,IAAI,GACJ,CAAC,CAAC;AAER,MAAM,MAAM,mBAAmB,CAC3B,CAAC,SAAS,OAAO,EACjB,SAAS,SAAS,iBAAiB,CAAC,CAAC,CAAC,IAAI;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,2BAA2B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,cAAc,EAAE,wBAAwB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;CACzD,CAAA;AAEL,MAAM,MAAM,mBAAmB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;CAChB,CAAA"}
|
|
@@ -2,23 +2,23 @@ import { ABIRoot } from "./abi.js";
|
|
|
2
2
|
import { AllTypes, ConvertTypeParams, Primitive } from "./common.js";
|
|
3
3
|
type Struct<_T extends string> = object;
|
|
4
4
|
export type ConvertPrimitiveStructField<T extends Primitive> = T extends 'bool' ? boolean : T extends 'u8' ? number : T extends 'u16' ? number : T extends 'u32' ? number : T extends 'u64' ? string : T extends 'u128' ? string : T extends 'u256' ? string : T extends 'address' ? `0x${string}` : T extends '0x1::string::String' ? string : never;
|
|
5
|
-
type ConvertVectorStructField<TInner> = TInner extends Primitive ? ConvertPrimitiveStructField<TInner>[] : (TInner extends `vector<${infer TInnerInner}>` ? (TInnerInner extends Primitive ? ConvertPrimitiveStructField<TInnerInner>[][] : any[][]) : (object[]));
|
|
6
5
|
type MoveStruct<T extends ABIRoot> = T['structs'][number];
|
|
7
6
|
export type ResourceStructName<T extends ABIRoot> = MoveStruct<T>['name'];
|
|
8
7
|
type ExtractStructFieldsName<T extends ABIRoot, TStructName extends ResourceStructName<T>> = ExtractStruct<T, TStructName>['fields'][number]['name'];
|
|
9
8
|
type ExtractStruct<T extends ABIRoot, TResourceName extends ResourceStructName<T>> = Extract<MoveStruct<T>, {
|
|
10
9
|
name: TResourceName;
|
|
11
10
|
}>;
|
|
12
|
-
type
|
|
11
|
+
type ExtractStructFieldMoveType<T extends ABIRoot, TStructName extends ResourceStructName<T>, TFieldName extends string> = Extract<ExtractStruct<T, TStructName>['fields'][number], {
|
|
13
12
|
name: TFieldName;
|
|
14
13
|
}>['type'];
|
|
15
|
-
|
|
16
|
-
export type
|
|
17
|
-
|
|
14
|
+
type ConvertStructFieldType<TABITable extends ABITable, TMoveType extends string> = TMoveType extends AllTypes ? ConvertStructFieldNonStructType<TABITable, TMoveType> : ConvertStructFieldStructType<TABITable, TMoveType>;
|
|
15
|
+
export type ConvertStructFieldNonStructType<TABITable extends ABITable, TMoveType extends AllTypes> = TMoveType extends Primitive ? ConvertPrimitiveStructField<TMoveType> : TMoveType extends `vector<${infer TInner}>` ? ConvertStructFieldType<TABITable, TInner>[] : Struct<TMoveType>;
|
|
16
|
+
type ConvertStructFieldStructType<TABITable extends ABITable, TMoveType extends string> = TMoveType extends `${infer TAccountAddress}::${infer TModuleName}::${infer TStructName}${'' | `<${infer _TInnerType}>`}` ? `${TAccountAddress}::${TModuleName}` extends keyof TABITable ? OmitInner<TStructName> extends ResourceStructName<TABITable[`${TAccountAddress}::${TModuleName}`]> ? ExtractStructType<TABITable, TABITable[`${TAccountAddress}::${TModuleName}`], OmitInner<TStructName>> : Struct<TMoveType> : Struct<TMoveType> : Struct<TMoveType>;
|
|
17
|
+
export type ExtractStructType<TABITable extends ABITable, TABI extends ABIRoot, TStructName extends ResourceStructName<TABI>> = {
|
|
18
|
+
[TField in ExtractStructFieldsName<TABI, TStructName>]: ConvertStructFieldType<TABITable, ExtractStructFieldMoveType<TABI, TStructName, TField>>;
|
|
18
19
|
};
|
|
19
20
|
export type ExtractStructRawGenericParamsType<T extends ABIRoot, TStructName extends ResourceStructName<T>> = ExtractStruct<T, TStructName>['generic_type_params'];
|
|
20
21
|
export type ExtractStructGenericParamsType<T extends ABIRoot, TStructName extends ResourceStructName<T>> = ConvertTypeParams<ExtractStructRawGenericParamsType<T, TStructName>>;
|
|
21
|
-
type ExtractStructTypeGlobal<TABITable extends ABITable, TAddress extends string> = TAddress extends `${infer TAccountAddress}::${infer TModuleName}::${infer TStructName}${'' | `<${infer _TInnerType}>`}` ? `${TAccountAddress}::${TModuleName}` extends keyof TABITable ? OmitInner<TStructName> extends ResourceStructName<TABITable[`${TAccountAddress}::${TModuleName}`]> ? ExtractStructType<TABITable, TABITable[`${TAccountAddress}::${TModuleName}`], OmitInner<TStructName>> : Struct<TAddress> : Struct<TAddress> : Struct<TAddress>;
|
|
22
22
|
type OmitInner<T extends string> = T extends `${infer TOuter}<${infer _TInner}>` ? `${TOuter}` : T;
|
|
23
23
|
export type ABITable = {
|
|
24
24
|
[TAddress in string]: ABIRoot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../src/types/struct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErE,KAAK,MAAM,CAAC,EAAE,SAAS,MAAM,IAAI,MAAM,CAAC;AAExC,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,SAAS,IACvD,CAAC,SAAS,MAAM,GAAG,OAAO,GAC1B,CAAC,SAAS,IAAI,GAAG,MAAM,GACvB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,KAAK,GAAG,MAAM,GACxB,CAAC,SAAS,MAAM,GAAG,MAAM,GACzB,CAAC,SAAS,MAAM,GAAG,MAAM,GACzB,CAAC,SAAS,SAAS,GAAG,KAAK,MAAM,EAAE,GACnC,CAAC,SAAS,qBAAqB,GAAG,MAAM,GACxC,KAAK,CAAC;AAEV,KAAK,
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../src/types/struct.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@ describe('get account resource', () => {
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
expect(result.data.frozen).toBeFalsy();
|
|
28
|
-
expect(result.data.coin).toBeDefined();
|
|
28
|
+
expect(result.data.coin.value).toBeDefined();
|
|
29
29
|
expect(result.data.deposit_events).toBeDefined();
|
|
30
30
|
expect(result.data.withdraw_events).toBeDefined();
|
|
31
31
|
|
|
@@ -54,13 +54,25 @@ describe('get account resource', () => {
|
|
|
54
54
|
account: '0x1',
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
+
// `value` and `v` are string type
|
|
57
58
|
result.data.coin.value.startsWith;
|
|
58
|
-
result.data.ratio.v;
|
|
59
|
+
result.data.ratio.v.startsWith;
|
|
59
60
|
|
|
60
61
|
// @ts-expect-error field not exist
|
|
61
62
|
result.data.ratio.abc;
|
|
62
63
|
}
|
|
63
64
|
}, 60000);
|
|
65
|
+
|
|
66
|
+
it('vector struct type', async () => {
|
|
67
|
+
async () => {
|
|
68
|
+
const result = await client.useABI(TEST_ABI).resource.TestVectorStruct({
|
|
69
|
+
type_arguments: [],
|
|
70
|
+
account: '0x1',
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
result.data.coins[0]?.value.startsWith;
|
|
74
|
+
}
|
|
75
|
+
}, 60000);
|
|
64
76
|
});
|
|
65
77
|
|
|
66
78
|
const TEST_ABI = {
|
|
@@ -85,5 +97,17 @@ const TEST_ABI = {
|
|
|
85
97
|
},
|
|
86
98
|
],
|
|
87
99
|
},
|
|
100
|
+
{
|
|
101
|
+
name: 'TestVectorStruct',
|
|
102
|
+
is_native: false,
|
|
103
|
+
abilities: ['key'],
|
|
104
|
+
generic_type_params: [],
|
|
105
|
+
fields: [
|
|
106
|
+
{
|
|
107
|
+
"name": "coins",
|
|
108
|
+
"type": "vector<0x1::coin::Coin<T0>>"
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
88
112
|
],
|
|
89
113
|
} as const;
|
package/src/index.ts
CHANGED
package/src/types/common.ts
CHANGED
|
@@ -6,8 +6,8 @@ export type Primitive =
|
|
|
6
6
|
'u64' | 'u128' | 'u256' | 'address' |
|
|
7
7
|
'0x1::string::String';
|
|
8
8
|
|
|
9
|
-
type Vector = `vector<${
|
|
10
|
-
type VectorOfVector = `vector<vector<${
|
|
9
|
+
type Vector = `vector<${string}>`;
|
|
10
|
+
type VectorOfVector = `vector<vector<${string}>>`;
|
|
11
11
|
|
|
12
12
|
// TODO: support vector<vector<vector>>
|
|
13
13
|
export type AllTypes = Primitive | Vector | VectorOfVector;
|
package/src/types/struct.ts
CHANGED
|
@@ -15,15 +15,6 @@ export type ConvertPrimitiveStructField<T extends Primitive> =
|
|
|
15
15
|
T extends '0x1::string::String' ? string :
|
|
16
16
|
never;
|
|
17
17
|
|
|
18
|
-
type ConvertVectorStructField<TInner> = TInner extends Primitive ? ConvertPrimitiveStructField<TInner>[] :
|
|
19
|
-
(
|
|
20
|
-
TInner extends `vector<${infer TInnerInner}>` ? (
|
|
21
|
-
TInnerInner extends Primitive ? ConvertPrimitiveStructField<TInnerInner>[][] :
|
|
22
|
-
any[][]) : (
|
|
23
|
-
object[]
|
|
24
|
-
)
|
|
25
|
-
);
|
|
26
|
-
|
|
27
18
|
type MoveStruct<T extends ABIRoot> = T['structs'][number];
|
|
28
19
|
|
|
29
20
|
export type ResourceStructName<T extends ABIRoot> = MoveStruct<T>['name'];
|
|
@@ -35,26 +26,41 @@ type ExtractStructFieldsName<
|
|
|
35
26
|
type ExtractStruct<T extends ABIRoot, TResourceName extends ResourceStructName<T>> =
|
|
36
27
|
Extract<MoveStruct<T>, { name: TResourceName }>;
|
|
37
28
|
|
|
38
|
-
type
|
|
29
|
+
type ExtractStructFieldMoveType<
|
|
39
30
|
T extends ABIRoot,
|
|
40
31
|
TStructName extends ResourceStructName<T>,
|
|
41
32
|
TFieldName extends string> = Extract<ExtractStruct<T, TStructName>['fields'][number], { name: TFieldName }>['type'];
|
|
42
33
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
// Convert a struct field Move type to a TypeScript type
|
|
35
|
+
type ConvertStructFieldType<TABITable extends ABITable, TMoveType extends string> =
|
|
36
|
+
TMoveType extends AllTypes ?
|
|
37
|
+
// it's a non-struct type
|
|
38
|
+
ConvertStructFieldNonStructType<TABITable, TMoveType> :
|
|
39
|
+
// it's a struct type
|
|
40
|
+
ConvertStructFieldStructType<TABITable, TMoveType>;
|
|
41
|
+
|
|
42
|
+
// Convert a struct field non-struct Move type to a TypeScript type
|
|
43
|
+
export type ConvertStructFieldNonStructType<TABITable extends ABITable, TMoveType extends AllTypes> =
|
|
44
|
+
TMoveType extends Primitive ? ConvertPrimitiveStructField<TMoveType> :
|
|
45
|
+
TMoveType extends `vector<${infer TInner}>` ? ConvertStructFieldType<TABITable, TInner>[] :
|
|
46
|
+
Struct<TMoveType>;
|
|
47
|
+
|
|
48
|
+
// Convert a struct field struct Move type to a TypeScript type
|
|
49
|
+
type ConvertStructFieldStructType<TABITable extends ABITable, TMoveType extends string> =
|
|
50
|
+
TMoveType extends `${infer TAccountAddress}::${infer TModuleName}::${infer TStructName}${'' | `<${infer _TInnerType}>`}`
|
|
51
|
+
? `${TAccountAddress}::${TModuleName}` extends keyof TABITable ?
|
|
52
|
+
OmitInner<TStructName> extends ResourceStructName<TABITable[`${TAccountAddress}::${TModuleName}`]> ?
|
|
53
|
+
ExtractStructType<TABITable, TABITable[`${TAccountAddress}::${TModuleName}`], OmitInner<TStructName>>
|
|
54
|
+
// Unknown struct, use the default struct type
|
|
55
|
+
: Struct<TMoveType> : Struct<TMoveType> : Struct<TMoveType>;
|
|
47
56
|
|
|
57
|
+
// Get the struct type with the name of `TStructName` in `TABI`, with the help of `TABITable`
|
|
48
58
|
export type ExtractStructType<
|
|
49
59
|
TABITable extends ABITable,
|
|
50
|
-
|
|
51
|
-
TStructName extends ResourceStructName<
|
|
52
|
-
[TField in ExtractStructFieldsName<
|
|
53
|
-
|
|
54
|
-
// it's a non-struct type
|
|
55
|
-
ConvertStructField<ExtractStructFieldType<T, TStructName, TField>> :
|
|
56
|
-
// it's a struct type
|
|
57
|
-
ExtractStructTypeGlobal<TABITable, ExtractStructFieldType<T, TStructName, TField>>;
|
|
60
|
+
TABI extends ABIRoot,
|
|
61
|
+
TStructName extends ResourceStructName<TABI>> = {
|
|
62
|
+
[TField in ExtractStructFieldsName<TABI, TStructName>]:
|
|
63
|
+
ConvertStructFieldType<TABITable, ExtractStructFieldMoveType<TABI, TStructName, TField>>
|
|
58
64
|
};
|
|
59
65
|
|
|
60
66
|
export type ExtractStructRawGenericParamsType<
|
|
@@ -67,16 +73,8 @@ export type ExtractStructGenericParamsType<
|
|
|
67
73
|
TStructName extends ResourceStructName<T>> =
|
|
68
74
|
ConvertTypeParams<ExtractStructRawGenericParamsType<T, TStructName>>;
|
|
69
75
|
|
|
70
|
-
type ExtractStructTypeGlobal<TABITable extends ABITable, TAddress extends string> =
|
|
71
|
-
TAddress extends `${infer TAccountAddress}::${infer TModuleName}::${infer TStructName}${'' | `<${infer _TInnerType}>`}`
|
|
72
|
-
? `${TAccountAddress}::${TModuleName}` extends keyof TABITable ?
|
|
73
|
-
OmitInner<TStructName> extends ResourceStructName<TABITable[`${TAccountAddress}::${TModuleName}`]> ?
|
|
74
|
-
ExtractStructType<TABITable, TABITable[`${TAccountAddress}::${TModuleName}`], OmitInner<TStructName>>
|
|
75
|
-
// Unknown struct, use the default struct type
|
|
76
|
-
: Struct<TAddress> : Struct<TAddress> : Struct<TAddress>;
|
|
77
|
-
|
|
78
76
|
type OmitInner<T extends string> = T extends `${infer TOuter}<${infer _TInner}>` ? `${TOuter}` : T;
|
|
79
77
|
|
|
80
78
|
export type ABITable = {
|
|
81
79
|
[TAddress in string]: ABIRoot;
|
|
82
|
-
};
|
|
80
|
+
};
|