@sentio/sdk 2.4.0-rc.1 → 2.5.0-rc.1
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/lib/aptos/aptos-processor.d.ts +1 -1
- package/lib/aptos/aptos-processor.js +1 -1
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/builtin/0x1.d.ts +16 -177
- package/lib/aptos/builtin/0x1.js +56 -538
- package/lib/aptos/builtin/0x1.js.map +1 -1
- package/lib/aptos/builtin/0x3.d.ts +2 -13
- package/lib/aptos/builtin/0x3.js +20 -48
- package/lib/aptos/builtin/0x3.js.map +1 -1
- package/lib/aptos/codegen/codegen.d.ts +0 -20
- package/lib/aptos/codegen/codegen.js +37 -357
- package/lib/aptos/codegen/codegen.js.map +1 -1
- package/lib/aptos/{types.test.d.ts → codegen/types.test.d.ts} +0 -0
- package/lib/aptos/codegen/types.test.js.map +1 -0
- package/lib/aptos/models.d.ts +0 -8
- package/lib/aptos/models.js.map +1 -1
- package/lib/aptos/move-coder.d.ts +4 -13
- package/lib/aptos/move-coder.js +13 -124
- package/lib/aptos/move-coder.js.map +1 -1
- package/lib/aptos/move-types.d.ts +6 -0
- package/lib/aptos/move-types.js +52 -1
- package/lib/aptos/move-types.js.map +1 -1
- package/lib/aptos/tests/souffl3.js +1 -1
- package/lib/aptos/tests/souffl3.js.map +1 -1
- package/lib/aptos/tests/types/reserved.d.ts +2 -8
- package/lib/aptos/tests/types/reserved.js +11 -24
- package/lib/aptos/tests/types/reserved.js.map +1 -1
- package/lib/aptos/tests/types/soffl3.d.ts +2 -14
- package/lib/aptos/tests/types/soffl3.js +15 -48
- package/lib/aptos/tests/types/soffl3.js.map +1 -1
- package/lib/aptos/tests/types/souffle.d.ts +2 -8
- package/lib/aptos/tests/types/souffle.js +11 -24
- package/lib/aptos/tests/types/souffle.js.map +1 -1
- package/lib/aptos/utils.d.ts +2 -7
- package/lib/aptos/utils.js +2 -15
- package/lib/aptos/utils.js.map +1 -1
- package/lib/eth/tests/codegen.test.js.map +1 -1
- package/lib/eth/tests/erc20.js +1 -1
- package/lib/eth/tests/erc20.js.map +1 -1
- package/lib/eth/tests/logger.test.js.map +1 -1
- package/lib/move/abstract-codegen.d.ts +44 -0
- package/lib/move/abstract-codegen.js +341 -0
- package/lib/move/abstract-codegen.js.map +1 -0
- package/lib/move/abstract-move-coder.d.ts +24 -0
- package/lib/move/abstract-move-coder.js +141 -0
- package/lib/move/abstract-move-coder.js.map +1 -0
- package/lib/move/account.d.ts +18 -0
- package/lib/{aptos/codegen/typegen.js → move/account.js} +20 -82
- package/lib/move/account.js.map +1 -0
- package/lib/move/filter.d.ts +25 -0
- package/lib/move/filter.js +11 -0
- package/lib/move/filter.js.map +1 -0
- package/lib/move/index.d.ts +5 -25
- package/lib/move/index.js +5 -10
- package/lib/move/index.js.map +1 -1
- package/lib/move/neutral-models.d.ts +34 -0
- package/lib/move/neutral-models.js +7 -0
- package/lib/move/neutral-models.js.map +1 -0
- package/lib/move/ts-type.d.ts +2 -0
- package/lib/move/ts-type.js +77 -0
- package/lib/move/ts-type.js.map +1 -0
- package/lib/{aptos/codegen/typegen.test.d.ts → move/ts-type.test.d.ts} +0 -0
- package/lib/move/ts-type.test.js.map +1 -0
- package/lib/{aptos → move}/types.d.ts +1 -0
- package/lib/{aptos → move}/types.js +26 -3
- package/lib/move/types.js.map +1 -0
- package/lib/move/utils.d.ts +9 -0
- package/lib/move/utils.js +20 -0
- package/lib/move/utils.js.map +1 -0
- package/lib/sui/builtin/0x1.d.ts +114 -0
- package/lib/sui/builtin/0x1.js +174 -0
- package/lib/sui/builtin/0x1.js.map +1 -0
- package/lib/sui/builtin/0x2.d.ts +1047 -0
- package/lib/sui/builtin/0x2.js +1295 -0
- package/lib/sui/builtin/0x2.js.map +1 -0
- package/lib/sui/builtin/index.d.ts +2 -0
- package/lib/sui/builtin/index.js +6 -0
- package/lib/sui/builtin/index.js.map +1 -0
- package/lib/sui/codegen/codegen.d.ts +1 -0
- package/lib/sui/codegen/codegen.js +61 -0
- package/lib/sui/codegen/codegen.js.map +1 -0
- package/lib/sui/codegen/index.d.ts +1 -0
- package/lib/sui/codegen/index.js +2 -0
- package/lib/sui/codegen/index.js.map +1 -0
- package/lib/sui/codegen/run.d.ts +1 -0
- package/lib/sui/codegen/run.js +12 -0
- package/lib/sui/codegen/run.js.map +1 -0
- package/lib/sui/index.d.ts +2 -0
- package/lib/sui/index.js +1 -0
- package/lib/sui/index.js.map +1 -1
- package/lib/sui/models.d.ts +7 -1
- package/lib/sui/models.js +0 -23
- package/lib/sui/models.js.map +1 -1
- package/lib/sui/move-coder.d.ts +11 -0
- package/lib/sui/move-coder.js +53 -0
- package/lib/sui/move-coder.js.map +1 -0
- package/lib/sui/move-types.d.ts +9 -0
- package/lib/sui/move-types.js +81 -0
- package/lib/sui/move-types.js.map +1 -0
- package/lib/sui/sui-processor.js +3 -3
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/sui/tests/sui.test.js.map +1 -1
- package/lib/sui/tests/types/index.d.ts +1 -0
- package/lib/sui/tests/types/index.js +5 -0
- package/lib/sui/tests/types/index.js.map +1 -0
- package/lib/sui/tests/types/testnet/index.d.ts +1 -0
- package/lib/sui/tests/types/testnet/index.js +5 -0
- package/lib/sui/tests/types/testnet/index.js.map +1 -0
- package/lib/sui/tests/types/testnet/swap.d.ts +249 -0
- package/lib/sui/tests/types/testnet/swap.js +310 -0
- package/lib/sui/tests/types/testnet/swap.js.map +1 -0
- package/lib/testing/aptos-facet.js +1 -1
- package/lib/testing/aptos-facet.js.map +1 -1
- package/lib/testing/sui-facet.js +3 -2
- package/lib/testing/sui-facet.js.map +1 -1
- package/package.json +8 -5
- package/src/aptos/aptos-processor.ts +1 -1
- package/src/aptos/builtin/0x1.ts +70 -652
- package/src/aptos/builtin/0x3.ts +24 -59
- package/src/aptos/codegen/codegen.ts +35 -421
- package/src/aptos/models.ts +0 -10
- package/src/aptos/move-coder.ts +16 -150
- package/src/aptos/move-types.ts +62 -0
- package/src/aptos/tests/souffl3.ts +1 -1
- package/src/aptos/tests/types/reserved.ts +15 -30
- package/src/aptos/tests/types/soffl3.ts +19 -58
- package/src/aptos/tests/types/souffle.ts +15 -30
- package/src/aptos/utils.ts +3 -21
- package/src/eth/tests/erc20.ts +1 -1
- package/src/move/abstract-codegen.ts +426 -0
- package/src/move/abstract-move-coder.ts +170 -0
- package/src/move/account.ts +96 -0
- package/src/move/filter.ts +33 -0
- package/src/move/index.ts +5 -33
- package/src/move/neutral-models.ts +45 -0
- package/src/move/ts-type.ts +86 -0
- package/src/{aptos → move}/types.ts +28 -3
- package/src/move/utils.ts +25 -0
- package/src/sui/abis/0x1.json +1729 -1733
- package/src/sui/abis/0x2.json +13279 -13283
- package/src/sui/builtin/0x1.ts +307 -0
- package/src/sui/builtin/0x2.ts +2578 -0
- package/src/sui/builtin/index.ts +5 -0
- package/src/sui/codegen/codegen.ts +71 -0
- package/src/sui/codegen/index.ts +1 -0
- package/src/sui/codegen/run.ts +13 -0
- package/src/sui/index.ts +4 -0
- package/src/sui/models.ts +7 -28
- package/src/sui/move-coder.ts +63 -0
- package/src/sui/move-types.ts +109 -0
- package/src/sui/sui-processor.ts +3 -3
- package/src/sui/tests/abis/testnet/swap.json +1752 -0
- package/src/sui/tests/types/index.ts +3 -0
- package/src/sui/tests/types/testnet/index.ts +4 -0
- package/src/sui/tests/types/testnet/swap.ts +698 -0
- package/src/testing/aptos-facet.ts +1 -1
- package/src/testing/sui-facet.ts +3 -2
- package/lib/aptos/codegen/typegen.d.ts +0 -18
- package/lib/aptos/codegen/typegen.js.map +0 -1
- package/lib/aptos/codegen/typegen.test.js.map +0 -1
- package/lib/aptos/types.js.map +0 -1
- package/lib/aptos/types.test.js.map +0 -1
- package/lib/jest.config.d.ts +0 -9
- package/lib/jest.config.js +0 -9
- package/lib/jest.config.js.map +0 -1
- package/src/aptos/codegen/typegen.ts +0 -165
- package/src/jest.config.ts +0 -8
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { parseMoveType, TypeDescriptor } from './types.js'
|
|
2
|
+
import { moduleQname, moduleQnameForType } from './utils.js'
|
|
3
|
+
import { NeutralMoveModule } from './neutral-models.js'
|
|
4
|
+
|
|
5
|
+
export class AccountModulesImportInfo {
|
|
6
|
+
// account to module
|
|
7
|
+
imports: Map<string, Set<string>>
|
|
8
|
+
account: string
|
|
9
|
+
moduleName: string
|
|
10
|
+
|
|
11
|
+
constructor(account: string, tsModuleName: string) {
|
|
12
|
+
this.account = account
|
|
13
|
+
this.moduleName = tsModuleName
|
|
14
|
+
this.imports = new Map<string, Set<string>>()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
addImport(account: string, module: string) {
|
|
18
|
+
if (account === this.account) {
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
let accountModules = this.imports.get(account)
|
|
22
|
+
if (!accountModules) {
|
|
23
|
+
accountModules = new Set<string>()
|
|
24
|
+
this.imports.set(account, accountModules)
|
|
25
|
+
}
|
|
26
|
+
accountModules.add(module)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class AccountRegister {
|
|
31
|
+
accountImports = new Map<string, AccountModulesImportInfo>()
|
|
32
|
+
pendingAccounts = new Set<string>()
|
|
33
|
+
|
|
34
|
+
// loadedAccount = new Set<string>()
|
|
35
|
+
typeDescriptors = new Map<string, TypeDescriptor>()
|
|
36
|
+
|
|
37
|
+
protected loadTypeDescriptor(type: string) {
|
|
38
|
+
let descriptor = this.typeDescriptors.get(type)
|
|
39
|
+
|
|
40
|
+
// const descriptparseMoveType(type)
|
|
41
|
+
if (!descriptor) {
|
|
42
|
+
descriptor = parseMoveType(type)
|
|
43
|
+
this.typeDescriptors.set(type, descriptor)
|
|
44
|
+
}
|
|
45
|
+
return descriptor
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
register(module: NeutralMoveModule, tsModuleName: string): AccountModulesImportInfo {
|
|
49
|
+
const currentModuleFqn = moduleQname(module)
|
|
50
|
+
|
|
51
|
+
let accountModuleImports = this.accountImports.get(module.address)
|
|
52
|
+
if (!accountModuleImports) {
|
|
53
|
+
accountModuleImports = new AccountModulesImportInfo(module.address, tsModuleName)
|
|
54
|
+
this.accountImports.set(module.address, accountModuleImports)
|
|
55
|
+
// the account has already be processed, delete pending task
|
|
56
|
+
this.pendingAccounts.delete(module.address)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
this.registerStruct(module, accountModuleImports)
|
|
60
|
+
this.registerFunctions(module, accountModuleImports)
|
|
61
|
+
|
|
62
|
+
this.accountImports.set(currentModuleFqn, accountModuleImports)
|
|
63
|
+
return accountModuleImports
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
registerFunctions(module: NeutralMoveModule, accountModuleImports: AccountModulesImportInfo): void {
|
|
67
|
+
for (const func of module.exposed_functions) {
|
|
68
|
+
if (!func.is_entry) {
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
for (const param of func.params) {
|
|
72
|
+
for (const type of param.dependedTypes()) {
|
|
73
|
+
const [account, module] = moduleQnameForType(type)
|
|
74
|
+
accountModuleImports.addImport(account, module)
|
|
75
|
+
if (!this.accountImports.has(account)) {
|
|
76
|
+
this.pendingAccounts.add(account)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
registerStruct(module: NeutralMoveModule, accountModuleImports: AccountModulesImportInfo): void {
|
|
84
|
+
for (const struct of module.structs) {
|
|
85
|
+
for (const field of struct.fields) {
|
|
86
|
+
for (const type of field.type.dependedTypes()) {
|
|
87
|
+
const [account, module] = moduleQnameForType(type)
|
|
88
|
+
accountModuleImports.addImport(account, module)
|
|
89
|
+
if (!this.accountImports.has(account)) {
|
|
90
|
+
this.pendingAccounts.add(account)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// TODO extends ArgumentsFilter
|
|
2
|
+
import { MoveFetchConfig, ProcessResult } from '@sentio/protos'
|
|
3
|
+
|
|
4
|
+
export interface EventFilter {
|
|
5
|
+
type: string
|
|
6
|
+
account?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface FunctionNameAndCallFilter extends CallFilter {
|
|
10
|
+
function: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// TODO extends ArgumentsFilter
|
|
14
|
+
export interface CallFilter {
|
|
15
|
+
includeFailed?: boolean
|
|
16
|
+
typeArguments?: string[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ArgumentsFilter {
|
|
20
|
+
arguments?: string[]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class EventHandler<T> {
|
|
24
|
+
filters: EventFilter[]
|
|
25
|
+
handler: (event: T) => Promise<ProcessResult>
|
|
26
|
+
fetchConfig: MoveFetchConfig
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class CallHandler<T> {
|
|
30
|
+
filters: FunctionNameAndCallFilter[]
|
|
31
|
+
handler: (call: T) => Promise<ProcessResult>
|
|
32
|
+
fetchConfig: MoveFetchConfig
|
|
33
|
+
}
|
package/src/move/index.ts
CHANGED
|
@@ -1,33 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
account?: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface FunctionNameAndCallFilter extends CallFilter {
|
|
10
|
-
function: string
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// TODO extends ArgumentsFilter
|
|
14
|
-
export interface CallFilter {
|
|
15
|
-
includeFailed?: boolean
|
|
16
|
-
typeArguments?: string[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface ArgumentsFilter {
|
|
20
|
-
arguments?: string[]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class EventHandler<T> {
|
|
24
|
-
filters: EventFilter[]
|
|
25
|
-
handler: (event: T) => Promise<ProcessResult>
|
|
26
|
-
fetchConfig: MoveFetchConfig
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class CallHandler<T> {
|
|
30
|
-
filters: FunctionNameAndCallFilter[]
|
|
31
|
-
handler: (call: T) => Promise<ProcessResult>
|
|
32
|
-
fetchConfig: MoveFetchConfig
|
|
33
|
-
}
|
|
1
|
+
export * from './filter.js'
|
|
2
|
+
export * from './types.js'
|
|
3
|
+
export * from './ts-type.js'
|
|
4
|
+
export * from './utils.js'
|
|
5
|
+
export * from './account.js'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { TypeDescriptor } from './types.js'
|
|
2
|
+
|
|
3
|
+
export interface NeutralMoveModule {
|
|
4
|
+
address: string
|
|
5
|
+
name: string
|
|
6
|
+
|
|
7
|
+
exposed_functions: Array<NeutralMoveFunction>
|
|
8
|
+
structs: Array<NeutralMoveStruct>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface NeutralMoveFunction {
|
|
12
|
+
name: string
|
|
13
|
+
visibility: NeutralMoveFunctionVisibility
|
|
14
|
+
is_entry: boolean
|
|
15
|
+
generic_type_params: Array<NeutralMoveGenericTypeParam>
|
|
16
|
+
params: Array<TypeDescriptor>
|
|
17
|
+
return: Array<TypeDescriptor>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface NeutralMoveStruct {
|
|
21
|
+
name: string
|
|
22
|
+
|
|
23
|
+
is_native: boolean
|
|
24
|
+
|
|
25
|
+
abilities: Array<string>
|
|
26
|
+
|
|
27
|
+
generic_type_params: Array<NeutralMoveGenericTypeParam>
|
|
28
|
+
|
|
29
|
+
fields: Array<NeutralMoveStructField>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface NeutralMoveStructField {
|
|
33
|
+
name: string
|
|
34
|
+
type: TypeDescriptor
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export enum NeutralMoveFunctionVisibility {
|
|
38
|
+
PRIVATE = 'private',
|
|
39
|
+
PUBLIC = 'public',
|
|
40
|
+
FRIEND = 'friend',
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type NeutralMoveGenericTypeParam = {
|
|
44
|
+
constraints: Array<string>
|
|
45
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { TypeDescriptor } from './types.js'
|
|
2
|
+
import { normalizeToJSName, SPLITTER, VECTOR_STR } from './utils.js'
|
|
3
|
+
|
|
4
|
+
export function generateTypeForDescriptor(type: TypeDescriptor, currentAddress: string, addressType: string): string {
|
|
5
|
+
// TODO &signer is defintely an address, but what if &OTHER_TYPE?
|
|
6
|
+
if (type.qname.startsWith('&')) {
|
|
7
|
+
console.error('Unexpected &')
|
|
8
|
+
return addressType
|
|
9
|
+
}
|
|
10
|
+
if (type.reference) {
|
|
11
|
+
return addressType
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
switch (type.qname) {
|
|
15
|
+
case 'signer': // TODO check this
|
|
16
|
+
case 'address':
|
|
17
|
+
case 'Address':
|
|
18
|
+
return addressType
|
|
19
|
+
case '0x2::object::ID':
|
|
20
|
+
case '0x2::coin::Coin':
|
|
21
|
+
return 'string'
|
|
22
|
+
case '0x1::string::String':
|
|
23
|
+
return 'string'
|
|
24
|
+
case 'bool':
|
|
25
|
+
case 'Bool':
|
|
26
|
+
return 'Boolean'
|
|
27
|
+
case 'u8':
|
|
28
|
+
case 'U8':
|
|
29
|
+
case 'u16':
|
|
30
|
+
case 'U16':
|
|
31
|
+
case 'u32':
|
|
32
|
+
case 'U32':
|
|
33
|
+
return 'number'
|
|
34
|
+
case 'u64':
|
|
35
|
+
case 'U64':
|
|
36
|
+
case 'u128':
|
|
37
|
+
case 'U128':
|
|
38
|
+
return 'bigint'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (type.qname.toLowerCase() === VECTOR_STR) {
|
|
42
|
+
// vector<u8> as hex string
|
|
43
|
+
const elementTypeQname = type.typeArgs[0].qname
|
|
44
|
+
if (elementTypeQname === 'u8' || elementTypeQname === 'U8') {
|
|
45
|
+
return 'string'
|
|
46
|
+
}
|
|
47
|
+
if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(SPLITTER)) {
|
|
48
|
+
return `${elementTypeQname}[] | string`
|
|
49
|
+
}
|
|
50
|
+
return generateTypeForDescriptor(type.typeArgs[0], currentAddress, addressType) + '[]'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const simpleName = generateSimpleType(type.qname, currentAddress)
|
|
54
|
+
if (simpleName.length === 0) {
|
|
55
|
+
console.error('unexpected error')
|
|
56
|
+
}
|
|
57
|
+
if (simpleName.toLowerCase().includes(VECTOR_STR)) {
|
|
58
|
+
console.error('unexpected vector type error')
|
|
59
|
+
}
|
|
60
|
+
if (type.typeArgs.length > 0) {
|
|
61
|
+
// return simpleName
|
|
62
|
+
return (
|
|
63
|
+
simpleName +
|
|
64
|
+
'<' +
|
|
65
|
+
type.typeArgs.map((t) => generateTypeForDescriptor(t, currentAddress, addressType)).join(',') +
|
|
66
|
+
'>'
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
return simpleName
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function generateSimpleType(type: string, currentAddress: string): string {
|
|
73
|
+
const parts = type.split(SPLITTER)
|
|
74
|
+
|
|
75
|
+
for (let i = 0; i < parts.length; i++) {
|
|
76
|
+
parts[i] = normalizeToJSName(parts[i])
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (parts.length < 2) {
|
|
80
|
+
return parts[0]
|
|
81
|
+
}
|
|
82
|
+
if (parts[0] === currentAddress) {
|
|
83
|
+
return parts.slice(1).join('.')
|
|
84
|
+
}
|
|
85
|
+
return '_' + parts.join('.')
|
|
86
|
+
}
|
|
@@ -3,8 +3,11 @@ import { SPLITTER, VECTOR_STR } from './utils.js'
|
|
|
3
3
|
export class TypeDescriptor {
|
|
4
4
|
// type: string
|
|
5
5
|
|
|
6
|
+
// TODO add reference flag
|
|
7
|
+
|
|
6
8
|
// qualified name without type parameters
|
|
7
9
|
qname: string
|
|
10
|
+
reference: boolean
|
|
8
11
|
// account?: string
|
|
9
12
|
// module?: string
|
|
10
13
|
|
|
@@ -47,18 +50,29 @@ export class TypeDescriptor {
|
|
|
47
50
|
// all depended types including itself, not include system type
|
|
48
51
|
dependedTypes(): string[] {
|
|
49
52
|
if (this.qname.startsWith('&')) {
|
|
53
|
+
console.error('Not expected &')
|
|
54
|
+
return []
|
|
55
|
+
}
|
|
56
|
+
if (this.reference) {
|
|
50
57
|
return []
|
|
51
58
|
}
|
|
52
59
|
switch (this.qname) {
|
|
53
60
|
case 'signer':
|
|
54
61
|
case 'address':
|
|
62
|
+
case 'Address':
|
|
55
63
|
case '0x1::string::String':
|
|
56
64
|
case 'bool':
|
|
65
|
+
case 'Bool':
|
|
57
66
|
case 'u8':
|
|
67
|
+
case 'U8':
|
|
58
68
|
case 'u16':
|
|
69
|
+
case 'U16':
|
|
59
70
|
case 'u32':
|
|
71
|
+
case 'U32':
|
|
60
72
|
case 'u64':
|
|
73
|
+
case 'U64':
|
|
61
74
|
case 'u128':
|
|
75
|
+
case 'U128':
|
|
62
76
|
return []
|
|
63
77
|
}
|
|
64
78
|
|
|
@@ -103,30 +117,33 @@ export function parseMoveType(type: string): TypeDescriptor {
|
|
|
103
117
|
const symbol = buffer.join('')
|
|
104
118
|
buffer = []
|
|
105
119
|
stack[stack.length - 1].qname = symbol
|
|
120
|
+
adjustType(stack[stack.length - 1])
|
|
106
121
|
stack.push(new TypeDescriptor(''))
|
|
107
122
|
continue
|
|
108
123
|
}
|
|
109
124
|
if (ch === '>') {
|
|
110
125
|
const typeParam = stack.pop()
|
|
111
126
|
if (!typeParam) {
|
|
112
|
-
throw Error('
|
|
127
|
+
throw Error('Unexpected stack size')
|
|
113
128
|
}
|
|
114
129
|
if (buffer.length > 0) {
|
|
115
130
|
typeParam.qname = buffer.join('')
|
|
116
131
|
buffer = []
|
|
117
132
|
}
|
|
133
|
+
adjustType(typeParam)
|
|
118
134
|
stack[stack.length - 1].typeArgs.push(typeParam)
|
|
119
135
|
continue
|
|
120
136
|
}
|
|
121
137
|
if (ch === ',') {
|
|
122
138
|
const typeParam = stack.pop()
|
|
123
139
|
if (!typeParam) {
|
|
124
|
-
throw Error('
|
|
140
|
+
throw Error('Unexpected stack size')
|
|
125
141
|
}
|
|
126
142
|
if (buffer.length > 0) {
|
|
127
143
|
typeParam.qname = buffer.join('')
|
|
128
144
|
buffer = []
|
|
129
145
|
}
|
|
146
|
+
adjustType(typeParam)
|
|
130
147
|
|
|
131
148
|
stack[stack.length - 1].typeArgs.push(typeParam)
|
|
132
149
|
// continue parse next param
|
|
@@ -140,10 +157,18 @@ export function parseMoveType(type: string): TypeDescriptor {
|
|
|
140
157
|
if (buffer.length > 0) {
|
|
141
158
|
stack[stack.length - 1].qname = buffer.join('')
|
|
142
159
|
}
|
|
160
|
+
adjustType(stack[stack.length - 1])
|
|
143
161
|
|
|
144
162
|
const res = stack.pop()
|
|
145
163
|
if (!res || stack.length > 0) {
|
|
146
|
-
throw Error('
|
|
164
|
+
throw Error('Unexpected stack size')
|
|
147
165
|
}
|
|
148
166
|
return res
|
|
149
167
|
}
|
|
168
|
+
|
|
169
|
+
function adjustType(type: TypeDescriptor) {
|
|
170
|
+
if (type.qname.startsWith('&')) {
|
|
171
|
+
type.reference = true
|
|
172
|
+
type.qname = type.qname.slice(1)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const SPLITTER = '::'
|
|
2
|
+
|
|
3
|
+
export const VECTOR_STR = 'vector'
|
|
4
|
+
|
|
5
|
+
export function isFrameworkAccount(account: string) {
|
|
6
|
+
return account === '0x1' || account === '0x2' || account === '0x3'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const KEYWORDS = new Set(['package', 'namespace', 'volatile', 'object', 'string', 'number', 'bigint'])
|
|
10
|
+
|
|
11
|
+
export function normalizeToJSName(name: string) {
|
|
12
|
+
if (KEYWORDS.has(name)) {
|
|
13
|
+
return name + '_'
|
|
14
|
+
}
|
|
15
|
+
return name
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function moduleQnameForType(type: string): [string, string] {
|
|
19
|
+
const parts = type.split(SPLITTER).slice(0, 2)
|
|
20
|
+
return [parts[0], parts[1]]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function moduleQname(module: { address: string; name: string }): string {
|
|
24
|
+
return module.address.toLowerCase() + SPLITTER + module.name
|
|
25
|
+
}
|