@sentio/sdk 2.10.2 → 2.11.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/codegen/codegen.js +0 -1
- package/lib/aptos/codegen/codegen.js.map +1 -1
- package/lib/move/abstract-codegen.d.ts +2 -1
- package/lib/move/abstract-codegen.js +9 -8
- package/lib/move/abstract-codegen.js.map +1 -1
- package/lib/solana/builtin/types.d.ts +170 -170
- package/lib/solana/builtin/types.js +2 -1
- package/lib/solana/builtin/types.js.map +1 -1
- package/lib/sui/builtin/0x1.js +1 -1
- package/lib/sui/builtin/0x1.js.map +1 -1
- package/lib/sui/builtin/0x2.d.ts +235 -640
- package/lib/sui/builtin/0x2.js +294 -716
- package/lib/sui/builtin/0x2.js.map +1 -1
- package/lib/sui/builtin/0x3.d.ts +566 -0
- package/lib/sui/builtin/0x3.js +681 -0
- package/lib/sui/builtin/0x3.js.map +1 -0
- package/lib/sui/builtin/index.d.ts +1 -0
- package/lib/sui/builtin/index.js +1 -0
- package/lib/sui/builtin/index.js.map +1 -1
- package/lib/sui/codegen/codegen.js +4 -3
- package/lib/sui/codegen/codegen.js.map +1 -1
- package/lib/sui/context.d.ts +3 -3
- package/lib/sui/context.js +1 -1
- package/lib/sui/context.js.map +1 -1
- package/lib/sui/models.d.ts +4 -4
- package/lib/sui/models.js.map +1 -1
- package/lib/sui/move-coder.d.ts +5 -5
- package/lib/sui/move-coder.js +19 -7
- package/lib/sui/move-coder.js.map +1 -1
- package/lib/sui/move-types.js +7 -7
- package/lib/sui/move-types.js.map +1 -1
- package/lib/sui/sui-processor.d.ts +3 -3
- package/lib/sui/sui-processor.js +15 -9
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/sui/utils.d.ts +2 -2
- package/lib/sui/utils.js +13 -5
- package/lib/sui/utils.js.map +1 -1
- package/lib/testing/sui-facet.d.ts +4 -4
- package/lib/testing/sui-facet.js +7 -7
- package/lib/testing/sui-facet.js.map +1 -1
- package/package.json +7 -5
- package/src/aptos/codegen/codegen.ts +0 -1
- package/src/move/abstract-codegen.ts +9 -8
- package/src/solana/builtin/types.ts +2 -1
- package/src/sui/abis/0x1.json +357 -357
- package/src/sui/abis/0x2.json +5563 -8247
- package/src/sui/abis/0x3.json +8399 -0
- package/src/sui/builtin/0x1.ts +1 -1
- package/src/sui/builtin/0x2.ts +531 -1537
- package/src/sui/builtin/0x3.ts +1515 -0
- package/src/sui/builtin/index.ts +1 -0
- package/src/sui/codegen/codegen.ts +5 -3
- package/src/sui/context.ts +4 -4
- package/src/sui/models.ts +4 -4
- package/src/sui/move-coder.ts +24 -12
- package/src/sui/move-types.ts +7 -7
- package/src/sui/sui-processor.ts +28 -15
- package/src/sui/utils.ts +21 -5
- package/src/testing/sui-facet.ts +19 -15
- package/src/eth/codegen/tsconfig.json +0 -8
@@ -29,7 +29,6 @@ class AptosCodegen extends AbstractCodegen {
|
|
29
29
|
MAIN_NET = AptosNetwork.MAIN_NET;
|
30
30
|
TEST_NET = AptosNetwork.TEST_NET;
|
31
31
|
PREFIX = 'Aptos';
|
32
|
-
// GENERATED_CLIENT = true
|
33
32
|
async fetchModules(account, network) {
|
34
33
|
const client = getRpcClient(network);
|
35
34
|
return await client.getAccountModules(account);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/aptos/codegen/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAsB,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAA;AAC3E,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,MAAM,GAAG,iBAAiB,EAAE,UAAU,GAAG,KAAK;IAC3F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAM;KACP;IACD,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,YAAY,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,OAAqB;IAC3C,QAAQ,OAAO,EAAE;QACf,KAAK,YAAY,CAAC,QAAQ;YACxB,OAAO,gCAAgC,CAAA;KAC1C;IACD,OAAO,gCAAgC,CAAA;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,OAAqB;IACzC,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,YAAa,SAAQ,eAAmD;IAC5E,YAAY,GAAG,SAAS,CAAA;IACxB,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;IAChC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;IAChC,MAAM,GAAG,OAAO,CAAA;
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/aptos/codegen/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs'\nimport { MoveModuleBytecode, toInternalModule } from '../move-types.js'\nimport { moduleQname, SPLITTER, TypeDescriptor } from '../../move/index.js'\nimport chalk from 'chalk'\nimport { AptosNetwork } from '../network.js'\nimport { AptosClient } from 'aptos-sdk'\nimport { getMeaningfulFunctionParams } from '../utils.js'\nimport { InternalMoveModule, InternalMoveStruct } from '../../move/internal-models.js'\nimport { AbstractCodegen } from '../../move/abstract-codegen.js'\n\nexport async function codegen(abisDir: string, outDir = 'src/types/aptos', genExample = false) {\n if (!fs.existsSync(abisDir)) {\n return\n }\n const gen = new AptosCodegen()\n const numFiles = await gen.generate(abisDir, outDir)\n console.log(chalk.green(`Generated ${numFiles} for Aptos`))\n}\n\nfunction getRpcEndpoint(network: AptosNetwork): string {\n switch (network) {\n case AptosNetwork.TEST_NET:\n return 'https://testnet.aptoslabs.com/'\n }\n return 'https://mainnet.aptoslabs.com/'\n}\n\nfunction getRpcClient(network: AptosNetwork): AptosClient {\n return new AptosClient(getRpcEndpoint(network))\n}\n\nclass AptosCodegen extends AbstractCodegen<MoveModuleBytecode[], AptosNetwork> {\n ADDRESS_TYPE = 'Address'\n MAIN_NET = AptosNetwork.MAIN_NET\n TEST_NET = AptosNetwork.TEST_NET\n PREFIX = 'Aptos'\n\n async fetchModules(account: string, network: AptosNetwork): Promise<MoveModuleBytecode[]> {\n const client = getRpcClient(network)\n return await client.getAccountModules(account)\n }\n\n toInternalModules(modules: MoveModuleBytecode[]): InternalMoveModule[] {\n return modules.flatMap((m) => (m.abi ? [toInternalModule(m)] : []))\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return getMeaningfulFunctionParams(params)\n }\n\n getEventStructs(module: InternalMoveModule) {\n const qname = moduleQname(module)\n const structMap = new Map<string, InternalMoveStruct>()\n const eventMap = new Map<string, InternalMoveStruct>()\n\n for (const struct of module.structs) {\n structMap.set(qname + SPLITTER + struct.name, struct)\n }\n\n for (const struct of module.structs) {\n for (const field of struct.fields) {\n const t = field.type\n if (t.qname === '0x1::event::EventHandle') {\n const event = t.typeArgs[0].qname\n const eventStruct = structMap.get(event)\n if (eventStruct) {\n eventMap.set(event, eventStruct)\n }\n }\n }\n }\n\n return eventMap\n }\n}\n"]}
|
@@ -16,7 +16,8 @@ export declare abstract class AbstractCodegen<ModuleTypes, NetworkType> {
|
|
16
16
|
ADDRESS_TYPE: string;
|
17
17
|
PREFIX: string;
|
18
18
|
STRUCT_FIELD_NAME: string;
|
19
|
-
|
19
|
+
GENERATE_CLIENT: boolean;
|
20
|
+
GENERATE_ON_ENTRY: boolean;
|
20
21
|
abstract fetchModules(account: string, network: NetworkType): Promise<ModuleTypes>;
|
21
22
|
abstract toInternalModules(modules: ModuleTypes): InternalMoveModule[];
|
22
23
|
abstract getEventStructs(module: InternalMoveModule): Map<string, InternalMoveStruct>;
|
@@ -12,7 +12,8 @@ export class AbstractCodegen {
|
|
12
12
|
ADDRESS_TYPE;
|
13
13
|
PREFIX;
|
14
14
|
STRUCT_FIELD_NAME = 'data';
|
15
|
-
|
15
|
+
GENERATE_CLIENT = false;
|
16
|
+
GENERATE_ON_ENTRY = true;
|
16
17
|
readModulesFile(fullPath) {
|
17
18
|
return JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
|
18
19
|
}
|
@@ -101,12 +102,12 @@ export class AbstractCodegen {
|
|
101
102
|
return 'MAIN_NET';
|
102
103
|
}
|
103
104
|
generateModule(module, network) {
|
104
|
-
const functions =
|
105
|
-
.map((f) => this.generateOnEntryFunctions(module, f))
|
106
|
-
|
107
|
-
const clientFunctions =
|
108
|
-
.map((f) => this.generateClientFunctions(module, f))
|
109
|
-
|
105
|
+
const functions = this.GENERATE_ON_ENTRY
|
106
|
+
? module.exposedFunctions.map((f) => this.generateOnEntryFunctions(module, f)).filter((s) => s !== '')
|
107
|
+
: [];
|
108
|
+
const clientFunctions = this.GENERATE_CLIENT
|
109
|
+
? module.exposedFunctions.map((f) => this.generateClientFunctions(module, f)).filter((s) => s !== '')
|
110
|
+
: [];
|
110
111
|
const eventStructs = this.getEventStructs(module);
|
111
112
|
const eventTypes = new Set(eventStructs.keys());
|
112
113
|
const events = Array.from(eventStructs.values())
|
@@ -117,7 +118,7 @@ export class AbstractCodegen {
|
|
117
118
|
const moduleName = normalizeToJSName(module.name);
|
118
119
|
let processor = '';
|
119
120
|
let client = '';
|
120
|
-
if (
|
121
|
+
if (clientFunctions.length > 0) {
|
121
122
|
client = `
|
122
123
|
export class ${moduleName}_client extends ModuleClient {
|
123
124
|
${clientFunctions.join('\n')}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"abstract-codegen.js","sourceRoot":"","sources":["../../src/move/abstract-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n} from './internal-models.js'\nimport path from 'path'\nimport fs from 'fs'\nimport { AccountModulesImportInfo, AccountRegister } from './account.js'\nimport chalk from 'chalk'\nimport { format } from 'prettier'\nimport { isFrameworkAccount, moduleQname, normalizeToJSName, SPLITTER, VECTOR_STR } from './utils.js'\nimport { camelCase, upperFirst } from 'lodash-es'\nimport { TypeDescriptor } from './types.js'\n\ninterface OutputFile {\n fileName: string\n fileContent: string\n}\n\ninterface Config<NetworkType> {\n fileName: string\n outputDir: string\n network: NetworkType\n}\n\nexport abstract class AbstractCodegen<ModuleTypes, NetworkType> {\n TEST_NET: NetworkType\n MAIN_NET: NetworkType\n ADDRESS_TYPE: string\n PREFIX: string\n STRUCT_FIELD_NAME: string = 'data'\n GENERATED_CLIENT = false\n\n abstract fetchModules(account: string, network: NetworkType): Promise<ModuleTypes>\n abstract toInternalModules(modules: ModuleTypes): InternalMoveModule[]\n // Get the structs that represent Events\n abstract getEventStructs(module: InternalMoveModule): Map<string, InternalMoveStruct>\n // Get the parameters that actually have arguments in runtime\n // Aptos first signer and Sui's last TxContext are no use\n abstract getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[]\n\n readModulesFile(fullPath: string) {\n return JSON.parse(fs.readFileSync(fullPath, 'utf-8'))\n }\n\n async generate(srcDir: string, outputDir: string): Promise<number> {\n const num1 = await this.generateForNetwork(srcDir, outputDir, this.MAIN_NET)\n const num2 = await this.generateForNetwork(\n path.join(srcDir, 'testnet'),\n path.join(outputDir, 'testnet'),\n this.TEST_NET\n )\n return num1 + num2\n }\n\n async generateForNetwork(srcDir: string, outputDir: string, network: NetworkType) {\n if (!fs.existsSync(srcDir)) {\n return 0\n }\n\n const files = fs.readdirSync(srcDir)\n outputDir = path.resolve(outputDir)\n const outputs: OutputFile[] = []\n\n fs.mkdirSync(outputDir, { recursive: true })\n\n const loader = new AccountRegister()\n\n // when generating user code, don't need to generate framework account\n loader.accountImports.set('0x1', new AccountModulesImportInfo('0x1', '0x1'))\n loader.accountImports.set('0x2', new AccountModulesImportInfo('0x2', '0x2'))\n loader.accountImports.set('0x3', new AccountModulesImportInfo('0x3', '0x3'))\n // const client = getRpcClient(network)\n\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n const fullPath = path.resolve(srcDir, file)\n const abi = this.readModulesFile(fullPath)\n const modules = this.toInternalModules(abi)\n\n for (const module of modules) {\n loader.register(module, path.basename(file, '.json'))\n }\n const codeGen = new AccountCodegen(this, loader, abi, modules, {\n fileName: path.basename(file, '.json'),\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n }\n\n while (loader.pendingAccounts.size > 0) {\n for (const account of loader.pendingAccounts) {\n console.log(`download dependent module for account ${account} at ${network}`)\n\n try {\n const rawModules = await this.fetchModules(account, network)\n const modules = this.toInternalModules(rawModules)\n\n fs.writeFileSync(path.resolve(srcDir, account + '.json'), JSON.stringify(rawModules, null, '\\t'))\n for (const module of modules) {\n loader.register(module, account)\n }\n const codeGen = new AccountCodegen(this, loader, rawModules, modules, {\n fileName: account,\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n } catch (e) {\n console.error(\n chalk.red(\n 'Error downloading account module, check if you choose the right network,or download account modules manually into your director'\n )\n )\n console.error(e)\n process.exit(1)\n }\n }\n }\n\n for (const output of outputs) {\n // const content = output.fileContent\n const content = format(output.fileContent, { parser: 'typescript' })\n fs.writeFileSync(path.join(outputDir, output.fileName), content)\n }\n\n const rootFile = path.join(outputDir, 'index.ts')\n fs.writeFileSync(\n rootFile,\n `/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n`\n )\n for (const output of outputs) {\n const parsed = path.parse(output.fileName)\n const content = `export * as _${parsed.name.replaceAll('-', '_')} from './${parsed.name}.js'\\n`\n fs.appendFileSync(rootFile, content)\n }\n return outputs.length + 1\n }\n\n generateNetworkOption(network: NetworkType) {\n switch (network) {\n case this.TEST_NET:\n return 'TEST_NET'\n }\n return 'MAIN_NET'\n }\n\n generateModule(module: InternalMoveModule, network: NetworkType) {\n const functions = module.exposedFunctions\n .map((f) => this.generateOnEntryFunctions(module, f))\n .filter((s) => s !== '')\n const clientFunctions = module.exposedFunctions\n .map((f) => this.generateClientFunctions(module, f))\n .filter((s) => s !== '')\n const eventStructs = this.getEventStructs(module)\n const eventTypes = new Set(eventStructs.keys())\n const events = Array.from(eventStructs.values())\n .map((e) => this.generateOnEvents(module, e))\n .filter((s) => s !== '')\n const structs = module.structs.map((s) => this.generateStructs(module, s, eventTypes))\n const callArgs = module.exposedFunctions.map((f) => this.generateCallArgsStructs(module, f))\n\n const moduleName = normalizeToJSName(module.name)\n let processor = ''\n let client = ''\n\n if (this.GENERATED_CLIENT && clientFunctions.length > 0) {\n client = `\n export class ${moduleName}_client extends ModuleClient {\n ${clientFunctions.join('\\n')}\n }\n `\n }\n\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${moduleName} extends ${this.PREFIX}BaseProcessor {\n\n constructor(options: ${this.PREFIX}BindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: ${this.PREFIX}BindOptions = {\n address: \"${module.address}\",\n network: ${this.PREFIX}Network.${this.generateNetworkOption(network)}\n }\n\n static bind(options: Partial<${this.PREFIX}BindOptions> = {}): ${moduleName} {\n return new ${moduleName}({ ...${moduleName}.DEFAULT_OPTIONS, ...options })\n }\n\n ${functions.join('\\n')}\n\n ${events.join('\\n')}\n }\n `\n }\n\n return `\n ${client}\n\n ${processor}\n\n export namespace ${moduleName} {\n ${structs.join('\\n')}\n\n ${callArgs.join('\\n')}\n }\n `\n }\n\n generateStructs(module: InternalMoveModule, struct: InternalMoveStruct, events: Set<string>) {\n const genericString = this.generateStructTypeParameters(struct)\n const genericStringAny = this.generateStructTypeParameters(struct, true)\n\n const structName = normalizeToJSName(struct.name)\n\n const fields = struct.fields.map((field) => {\n const type = this.generateTypeForDescriptor(field.type, module.address)\n return `${field.name}: ${type}`\n })\n\n let eventPayload = ''\n if (events.has(moduleQname(module) + SPLITTER + struct.name)) {\n eventPayload = `\n export interface ${structName}Instance extends\n TypedEventInstance<${structName}${genericStringAny}> {\n ${this.STRUCT_FIELD_NAME}_decoded: ${structName}${genericStringAny}\n type_arguments: [${struct.typeParams.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n return `\n export class ${structName}${genericString} {\n static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'\n ${fields.join('\\n')}\n }\n\n ${eventPayload}\n `\n }\n\n generateFunctionTypeParameters(func: InternalMoveFunction) {\n let genericString = ''\n if (func.typeParams && func.typeParams.length > 0) {\n const params = func.typeParams\n .map((v, idx) => {\n return `T${idx}=any`\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n }\n\n generateStructTypeParameters(struct: InternalMoveStruct, useAny = false) {\n let genericString = ''\n\n if (struct.typeParams && struct.typeParams.length > 0) {\n const params = struct.typeParams\n .map((v, idx) => {\n return useAny ? 'any' : 'T' + idx\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n }\n\n generateCallArgsStructs(module: InternalMoveModule, func: InternalMoveFunction) {\n if (!func.isEntry) {\n return\n }\n\n const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n\n const camelFuncName = upperFirst(camelCase(func.name))\n\n const genericString = this.generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload${genericString}\n extends TypedFunctionPayload<[${fields.join(',')}]> {\n arguments_decoded: [${fields.join(',')}],\n type_arguments: [${func.typeParams.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n generateClientFunctions(module: InternalMoveModule, func: InternalMoveFunction) {\n if (func.visibility === InternalMoveFunctionVisibility.PRIVATE) {\n return ''\n }\n if (func.isEntry) {\n return ''\n }\n // const moduleName = normalizeToJSName(module.name)\n const funcName = camelCase(func.name)\n const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n const genericString = this.generateFunctionTypeParameters(func)\n\n const returns = func.return.map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n\n const source = `\n ${funcName}${genericString}(type_arguments: [${func.typeParams\n .map((_) => 'string')\n .join(', ')}], args: [${fields.join(',')}], version?: bigint): Promise<[${returns.join(',')}]> {\n return this.viewDecoded('${module.address}::${module.name}::${func.name}', type_arguments, args, version) as any\n }`\n return source\n }\n\n generateOnEntryFunctions(module: InternalMoveModule, func: InternalMoveFunction) {\n if (!func.isEntry) {\n return ''\n }\n\n // const genericString = generateFunctionTypeParameters(func)\n const moduleName = normalizeToJSName(module.name)\n\n const camelFuncName = upperFirst(camelCase(func.name))\n const source = `\n onEntry${camelFuncName}(func: (call: ${moduleName}.${camelFuncName}Payload, ctx: ${this.PREFIX}Context) => void, filter?: CallFilter, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n },\n fetchConfig)\n return this\n }`\n\n return source\n }\n\n generateOnEvents(module: InternalMoveModule, struct: InternalMoveStruct): string {\n // for struct that has drop + store\n // if (!isEvent(struct, module)) {\n // return ''\n // }\n\n // const genericString = generateStructTypeParameters(struct)\n\n const moduleName = normalizeToJSName(module.name)\n const source = `\n onEvent${struct.name}(func: (event: ${moduleName}.${normalizeToJSName(struct.name)}Instance, ctx: ${\n this.PREFIX\n }Context) => void, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onMoveEvent(func, {\n type: '${module.name}::${struct.name}'\n },\n fetchConfig)\n return this\n }\n `\n return source\n }\n\n generateTypeForDescriptor(type: TypeDescriptor, currentAddress: string): string {\n if (type.reference) {\n return this.ADDRESS_TYPE\n }\n\n switch (type.qname) {\n case 'signer': // TODO check this\n case 'address':\n case 'Address':\n return this.ADDRESS_TYPE\n case '0x1::string::String':\n return 'string'\n case 'bool':\n case 'Bool':\n return 'Boolean'\n case 'u8':\n case 'U8':\n case 'u16':\n case 'U16':\n case 'u32':\n case 'U32':\n return 'number'\n case 'u64':\n case 'U64':\n case 'u128':\n case 'U128':\n case 'u256':\n case 'U256':\n return 'bigint'\n }\n\n if (type.qname.toLowerCase() === VECTOR_STR) {\n // vector<u8> as hex string\n const elementTypeQname = type.typeArgs[0].qname\n if (elementTypeQname === 'u8') {\n // only for aptos\n return 'string'\n }\n if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(SPLITTER)) {\n return `${elementTypeQname}[] | string`\n }\n return this.generateTypeForDescriptor(type.typeArgs[0], currentAddress) + '[]'\n }\n\n const simpleName = this.generateSimpleType(type.qname, currentAddress)\n if (simpleName.length === 0) {\n console.error('unexpected error')\n }\n if (simpleName.toLowerCase() === VECTOR_STR || simpleName.toLowerCase().startsWith(VECTOR_STR + SPLITTER)) {\n console.error('unexpected vector type error')\n }\n if (type.typeArgs.length > 0) {\n // return simpleName\n return (\n simpleName + '<' + type.typeArgs.map((t) => this.generateTypeForDescriptor(t, currentAddress)).join(',') + '>'\n )\n }\n return simpleName\n }\n\n generateSimpleType(type: string, currentAddress: string): string {\n const parts = type.split(SPLITTER)\n\n for (let i = 0; i < parts.length; i++) {\n parts[i] = normalizeToJSName(parts[i])\n }\n\n if (parts.length < 2) {\n return parts[0]\n }\n if (parts[0] === currentAddress) {\n return parts.slice(1).join('.')\n }\n return '_' + parts.join('.')\n }\n}\n\nexport class AccountCodegen<ModuleType, NetworkType> {\n modules: InternalMoveModule[]\n config: Config<NetworkType>\n abi: ModuleType\n loader: AccountRegister\n moduleGen: AbstractCodegen<ModuleType, NetworkType>\n\n constructor(\n moduleGen: AbstractCodegen<ModuleType, NetworkType>,\n loader: AccountRegister,\n abi: ModuleType,\n modules: InternalMoveModule[],\n config: Config<NetworkType>\n ) {\n // const json = fs.readFileSync(config.srcFile, 'utf-8')\n this.moduleGen = moduleGen\n this.abi = abi\n this.modules = modules\n this.config = config\n this.loader = loader\n }\n\n generate(): OutputFile[] {\n if (!this.modules) {\n return []\n }\n // const baseName = path.basename(this.config.fileName, '.json')\n\n let address: string | undefined\n for (const module of this.modules) {\n address = module.address\n }\n if (!address) {\n return []\n }\n\n const imports = `\n import { CallFilter } from \"@sentio/sdk/move\"\n import {\n MoveCoder, defaultMoveCoder, ${this.moduleGen.PREFIX}BindOptions, ${this.moduleGen.PREFIX}BaseProcessor,\n TypedEventInstance, ${this.moduleGen.PREFIX}Network, TypedFunctionPayload,\n ${this.moduleGen.PREFIX}Context } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}\"\n import { MoveFetchConfig } from \"@sentio/protos\"\n import { ${this.moduleGen.ADDRESS_TYPE}, ModuleClient } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}\"\n `\n\n const dependedAccounts: string[] = []\n\n const moduleImports: string[] = []\n\n const info = this.loader.accountImports.get(address)\n\n if (info) {\n for (const [account] of info.imports.entries()) {\n // Remap to user's filename if possible, TODO codepath not well tested\n const tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n moduleImports.push(`import { _${account} } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}/builtin\"`)\n } else {\n moduleImports.push(`import * as _${account} from \"${tsAccountModule}.js\"`)\n }\n\n dependedAccounts.push(account)\n }\n }\n\n const source = `\n /* Autogenerated file. Do not edit manually. */\n /* tslint:disable */\n /* eslint-disable */\n\n /* Generated modules for account ${address} */\n\n ${imports}\n\n ${moduleImports.join('\\n')}\n\n ${this.modules.map((m) => this.moduleGen.generateModule(m, this.config.network)).join('\\n')}\n\n const MODULES = JSON.parse('${JSON.stringify(this.abi)}')\n\n export function loadAllTypes(coder: MoveCoder) {\n ${dependedAccounts.map((a) => `_${a}.loadAllTypes(coder)`).join('\\n')}\n for (const m of Object.values(MODULES)) {\n coder.load(m as any)\n }\n }\n\n loadAllTypes(defaultMoveCoder())\n ` // source\n\n return [\n {\n fileName: this.config.fileName + '.ts',\n fileContent: source,\n },\n ]\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"abstract-codegen.js","sourceRoot":"","sources":["../../src/move/abstract-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n} from './internal-models.js'\nimport path from 'path'\nimport fs from 'fs'\nimport { AccountModulesImportInfo, AccountRegister } from './account.js'\nimport chalk from 'chalk'\nimport { format } from 'prettier'\nimport { isFrameworkAccount, moduleQname, normalizeToJSName, SPLITTER, VECTOR_STR } from './utils.js'\nimport { camelCase, upperFirst } from 'lodash-es'\nimport { TypeDescriptor } from './types.js'\n\ninterface OutputFile {\n fileName: string\n fileContent: string\n}\n\ninterface Config<NetworkType> {\n fileName: string\n outputDir: string\n network: NetworkType\n}\n\nexport abstract class AbstractCodegen<ModuleTypes, NetworkType> {\n TEST_NET: NetworkType\n MAIN_NET: NetworkType\n ADDRESS_TYPE: string\n PREFIX: string\n STRUCT_FIELD_NAME: string = 'data'\n GENERATE_CLIENT = false\n GENERATE_ON_ENTRY = true\n\n abstract fetchModules(account: string, network: NetworkType): Promise<ModuleTypes>\n abstract toInternalModules(modules: ModuleTypes): InternalMoveModule[]\n // Get the structs that represent Events\n abstract getEventStructs(module: InternalMoveModule): Map<string, InternalMoveStruct>\n // Get the parameters that actually have arguments in runtime\n // Aptos first signer and Sui's last TxContext are no use\n abstract getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[]\n\n readModulesFile(fullPath: string) {\n return JSON.parse(fs.readFileSync(fullPath, 'utf-8'))\n }\n\n async generate(srcDir: string, outputDir: string): Promise<number> {\n const num1 = await this.generateForNetwork(srcDir, outputDir, this.MAIN_NET)\n const num2 = await this.generateForNetwork(\n path.join(srcDir, 'testnet'),\n path.join(outputDir, 'testnet'),\n this.TEST_NET\n )\n return num1 + num2\n }\n\n async generateForNetwork(srcDir: string, outputDir: string, network: NetworkType) {\n if (!fs.existsSync(srcDir)) {\n return 0\n }\n\n const files = fs.readdirSync(srcDir)\n outputDir = path.resolve(outputDir)\n const outputs: OutputFile[] = []\n\n fs.mkdirSync(outputDir, { recursive: true })\n\n const loader = new AccountRegister()\n\n // when generating user code, don't need to generate framework account\n loader.accountImports.set('0x1', new AccountModulesImportInfo('0x1', '0x1'))\n loader.accountImports.set('0x2', new AccountModulesImportInfo('0x2', '0x2'))\n loader.accountImports.set('0x3', new AccountModulesImportInfo('0x3', '0x3'))\n // const client = getRpcClient(network)\n\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n const fullPath = path.resolve(srcDir, file)\n const abi = this.readModulesFile(fullPath)\n const modules = this.toInternalModules(abi)\n\n for (const module of modules) {\n loader.register(module, path.basename(file, '.json'))\n }\n const codeGen = new AccountCodegen(this, loader, abi, modules, {\n fileName: path.basename(file, '.json'),\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n }\n\n while (loader.pendingAccounts.size > 0) {\n for (const account of loader.pendingAccounts) {\n console.log(`download dependent module for account ${account} at ${network}`)\n\n try {\n const rawModules = await this.fetchModules(account, network)\n const modules = this.toInternalModules(rawModules)\n\n fs.writeFileSync(path.resolve(srcDir, account + '.json'), JSON.stringify(rawModules, null, '\\t'))\n for (const module of modules) {\n loader.register(module, account)\n }\n const codeGen = new AccountCodegen(this, loader, rawModules, modules, {\n fileName: account,\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n } catch (e) {\n console.error(\n chalk.red(\n 'Error downloading account module, check if you choose the right network,or download account modules manually into your director'\n )\n )\n console.error(e)\n process.exit(1)\n }\n }\n }\n\n for (const output of outputs) {\n // const content = output.fileContent\n const content = format(output.fileContent, { parser: 'typescript' })\n fs.writeFileSync(path.join(outputDir, output.fileName), content)\n }\n\n const rootFile = path.join(outputDir, 'index.ts')\n fs.writeFileSync(\n rootFile,\n `/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n`\n )\n for (const output of outputs) {\n const parsed = path.parse(output.fileName)\n const content = `export * as _${parsed.name.replaceAll('-', '_')} from './${parsed.name}.js'\\n`\n fs.appendFileSync(rootFile, content)\n }\n return outputs.length + 1\n }\n\n generateNetworkOption(network: NetworkType) {\n switch (network) {\n case this.TEST_NET:\n return 'TEST_NET'\n }\n return 'MAIN_NET'\n }\n\n generateModule(module: InternalMoveModule, network: NetworkType) {\n const functions = this.GENERATE_ON_ENTRY\n ? module.exposedFunctions.map((f) => this.generateOnEntryFunctions(module, f)).filter((s) => s !== '')\n : []\n const clientFunctions = this.GENERATE_CLIENT\n ? module.exposedFunctions.map((f) => this.generateClientFunctions(module, f)).filter((s) => s !== '')\n : []\n const eventStructs = this.getEventStructs(module)\n const eventTypes = new Set(eventStructs.keys())\n const events = Array.from(eventStructs.values())\n .map((e) => this.generateOnEvents(module, e))\n .filter((s) => s !== '')\n const structs = module.structs.map((s) => this.generateStructs(module, s, eventTypes))\n const callArgs = module.exposedFunctions.map((f) => this.generateCallArgsStructs(module, f))\n\n const moduleName = normalizeToJSName(module.name)\n let processor = ''\n let client = ''\n\n if (clientFunctions.length > 0) {\n client = `\n export class ${moduleName}_client extends ModuleClient {\n ${clientFunctions.join('\\n')}\n }\n `\n }\n\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${moduleName} extends ${this.PREFIX}BaseProcessor {\n\n constructor(options: ${this.PREFIX}BindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: ${this.PREFIX}BindOptions = {\n address: \"${module.address}\",\n network: ${this.PREFIX}Network.${this.generateNetworkOption(network)}\n }\n\n static bind(options: Partial<${this.PREFIX}BindOptions> = {}): ${moduleName} {\n return new ${moduleName}({ ...${moduleName}.DEFAULT_OPTIONS, ...options })\n }\n\n ${functions.join('\\n')}\n\n ${events.join('\\n')}\n }\n `\n }\n\n return `\n ${client}\n\n ${processor}\n\n export namespace ${moduleName} {\n ${structs.join('\\n')}\n\n ${callArgs.join('\\n')}\n }\n `\n }\n\n generateStructs(module: InternalMoveModule, struct: InternalMoveStruct, events: Set<string>) {\n const genericString = this.generateStructTypeParameters(struct)\n const genericStringAny = this.generateStructTypeParameters(struct, true)\n\n const structName = normalizeToJSName(struct.name)\n\n const fields = struct.fields.map((field) => {\n const type = this.generateTypeForDescriptor(field.type, module.address)\n return `${field.name}: ${type}`\n })\n\n let eventPayload = ''\n if (events.has(moduleQname(module) + SPLITTER + struct.name)) {\n eventPayload = `\n export interface ${structName}Instance extends\n TypedEventInstance<${structName}${genericStringAny}> {\n ${this.STRUCT_FIELD_NAME}_decoded: ${structName}${genericStringAny}\n type_arguments: [${struct.typeParams.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n return `\n export class ${structName}${genericString} {\n static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'\n ${fields.join('\\n')}\n }\n\n ${eventPayload}\n `\n }\n\n generateFunctionTypeParameters(func: InternalMoveFunction) {\n let genericString = ''\n if (func.typeParams && func.typeParams.length > 0) {\n const params = func.typeParams\n .map((v, idx) => {\n return `T${idx}=any`\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n }\n\n generateStructTypeParameters(struct: InternalMoveStruct, useAny = false) {\n let genericString = ''\n\n if (struct.typeParams && struct.typeParams.length > 0) {\n const params = struct.typeParams\n .map((v, idx) => {\n return useAny ? 'any' : 'T' + idx\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n }\n\n generateCallArgsStructs(module: InternalMoveModule, func: InternalMoveFunction) {\n if (!func.isEntry) {\n return\n }\n\n const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n\n const camelFuncName = upperFirst(camelCase(func.name))\n\n const genericString = this.generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload${genericString}\n extends TypedFunctionPayload<[${fields.join(',')}]> {\n arguments_decoded: [${fields.join(',')}],\n type_arguments: [${func.typeParams.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n generateClientFunctions(module: InternalMoveModule, func: InternalMoveFunction) {\n if (func.visibility === InternalMoveFunctionVisibility.PRIVATE) {\n return ''\n }\n if (func.isEntry) {\n return ''\n }\n // const moduleName = normalizeToJSName(module.name)\n const funcName = camelCase(func.name)\n const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n const genericString = this.generateFunctionTypeParameters(func)\n\n const returns = func.return.map((param) => {\n return this.generateTypeForDescriptor(param, module.address)\n })\n\n const source = `\n ${funcName}${genericString}(type_arguments: [${func.typeParams\n .map((_) => 'string')\n .join(', ')}], args: [${fields.join(',')}], version?: bigint): Promise<[${returns.join(',')}]> {\n return this.viewDecoded('${module.address}::${module.name}::${func.name}', type_arguments, args, version) as any\n }`\n return source\n }\n\n generateOnEntryFunctions(module: InternalMoveModule, func: InternalMoveFunction) {\n if (!func.isEntry) {\n return ''\n }\n\n // const genericString = generateFunctionTypeParameters(func)\n const moduleName = normalizeToJSName(module.name)\n\n const camelFuncName = upperFirst(camelCase(func.name))\n const source = `\n onEntry${camelFuncName}(func: (call: ${moduleName}.${camelFuncName}Payload, ctx: ${this.PREFIX}Context) => void, filter?: CallFilter, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n },\n fetchConfig)\n return this\n }`\n\n return source\n }\n\n generateOnEvents(module: InternalMoveModule, struct: InternalMoveStruct): string {\n // for struct that has drop + store\n // if (!isEvent(struct, module)) {\n // return ''\n // }\n\n // const genericString = generateStructTypeParameters(struct)\n\n const moduleName = normalizeToJSName(module.name)\n const source = `\n onEvent${struct.name}(func: (event: ${moduleName}.${normalizeToJSName(struct.name)}Instance, ctx: ${\n this.PREFIX\n }Context) => void, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onMoveEvent(func, {\n type: '${module.name}::${struct.name}'\n },\n fetchConfig)\n return this\n }\n `\n return source\n }\n\n generateTypeForDescriptor(type: TypeDescriptor, currentAddress: string): string {\n if (type.reference) {\n return this.ADDRESS_TYPE\n }\n\n switch (type.qname) {\n case 'signer': // TODO check this\n case 'address':\n case 'Address':\n return this.ADDRESS_TYPE\n case '0x1::string::String':\n return 'string'\n case 'bool':\n case 'Bool':\n return 'Boolean'\n case 'u8':\n case 'U8':\n case 'u16':\n case 'U16':\n case 'u32':\n case 'U32':\n return 'number'\n case 'u64':\n case 'U64':\n case 'u128':\n case 'U128':\n case 'u256':\n case 'U256':\n return 'bigint'\n }\n\n if (type.qname.toLowerCase() === VECTOR_STR) {\n // vector<u8> as hex string\n const elementTypeQname = type.typeArgs[0].qname\n if (elementTypeQname === 'u8') {\n // only for aptos\n return 'string'\n }\n if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(SPLITTER)) {\n return `${elementTypeQname}[] | string`\n }\n return this.generateTypeForDescriptor(type.typeArgs[0], currentAddress) + '[]'\n }\n\n const simpleName = this.generateSimpleType(type.qname, currentAddress)\n if (simpleName.length === 0) {\n console.error('unexpected error')\n }\n if (simpleName.toLowerCase() === VECTOR_STR || simpleName.toLowerCase().startsWith(VECTOR_STR + SPLITTER)) {\n console.error('unexpected vector type error')\n }\n if (type.typeArgs.length > 0) {\n // return simpleName\n return (\n simpleName + '<' + type.typeArgs.map((t) => this.generateTypeForDescriptor(t, currentAddress)).join(',') + '>'\n )\n }\n return simpleName\n }\n\n generateSimpleType(type: string, currentAddress: string): string {\n const parts = type.split(SPLITTER)\n\n for (let i = 0; i < parts.length; i++) {\n parts[i] = normalizeToJSName(parts[i])\n }\n\n if (parts.length < 2) {\n return parts[0]\n }\n if (parts[0] === currentAddress) {\n return parts.slice(1).join('.')\n }\n return '_' + parts.join('.')\n }\n}\n\nexport class AccountCodegen<ModuleType, NetworkType> {\n modules: InternalMoveModule[]\n config: Config<NetworkType>\n abi: ModuleType\n loader: AccountRegister\n moduleGen: AbstractCodegen<ModuleType, NetworkType>\n\n constructor(\n moduleGen: AbstractCodegen<ModuleType, NetworkType>,\n loader: AccountRegister,\n abi: ModuleType,\n modules: InternalMoveModule[],\n config: Config<NetworkType>\n ) {\n // const json = fs.readFileSync(config.srcFile, 'utf-8')\n this.moduleGen = moduleGen\n this.abi = abi\n this.modules = modules\n this.config = config\n this.loader = loader\n }\n\n generate(): OutputFile[] {\n if (!this.modules) {\n return []\n }\n // const baseName = path.basename(this.config.fileName, '.json')\n\n let address: string | undefined\n for (const module of this.modules) {\n address = module.address\n }\n if (!address) {\n return []\n }\n\n const imports = `\n import { CallFilter } from \"@sentio/sdk/move\"\n import {\n MoveCoder, defaultMoveCoder, ${this.moduleGen.PREFIX}BindOptions, ${this.moduleGen.PREFIX}BaseProcessor,\n TypedEventInstance, ${this.moduleGen.PREFIX}Network, TypedFunctionPayload,\n ${this.moduleGen.PREFIX}Context } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}\"\n import { MoveFetchConfig } from \"@sentio/protos\"\n import { ${this.moduleGen.ADDRESS_TYPE}, ModuleClient } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}\"\n `\n\n const dependedAccounts: string[] = []\n\n const moduleImports: string[] = []\n\n const info = this.loader.accountImports.get(address)\n\n if (info) {\n for (const [account] of info.imports.entries()) {\n // Remap to user's filename if possible, TODO codepath not well tested\n const tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n moduleImports.push(`import { _${account} } from \"@sentio/sdk/${this.moduleGen.PREFIX.toLowerCase()}/builtin\"`)\n } else {\n moduleImports.push(`import * as _${account} from \"${tsAccountModule}.js\"`)\n }\n\n dependedAccounts.push(account)\n }\n }\n\n const source = `\n /* Autogenerated file. Do not edit manually. */\n /* tslint:disable */\n /* eslint-disable */\n\n /* Generated modules for account ${address} */\n\n ${imports}\n\n ${moduleImports.join('\\n')}\n\n ${this.modules.map((m) => this.moduleGen.generateModule(m, this.config.network)).join('\\n')}\n\n const MODULES = JSON.parse('${JSON.stringify(this.abi)}')\n\n export function loadAllTypes(coder: MoveCoder) {\n ${dependedAccounts.map((a) => `_${a}.loadAllTypes(coder)`).join('\\n')}\n for (const m of Object.values(MODULES)) {\n coder.load(m as any)\n }\n }\n\n loadAllTypes(defaultMoveCoder())\n ` // source\n\n return [\n {\n fileName: this.config.fileName + '.ts',\n fileContent: source,\n },\n ]\n }\n}\n"]}
|