@sentio/sdk 1.37.0-rc.1 → 1.37.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/lib/builtin/index.d.ts +0 -2
  2. package/lib/builtin/index.js +1 -3
  3. package/lib/builtin/index.js.map +1 -1
  4. package/lib/core/eth-plugin.js +12 -15
  5. package/lib/core/eth-plugin.js.map +1 -1
  6. package/lib/core/index.d.ts +0 -4
  7. package/lib/core/index.js +1 -9
  8. package/lib/core/index.js.map +1 -1
  9. package/lib/core/numberish.d.ts +1 -1
  10. package/lib/core/numberish.js +5 -13
  11. package/lib/core/numberish.js.map +1 -1
  12. package/lib/core/sui-plugin.js +1 -1
  13. package/lib/core/sui-plugin.js.map +1 -1
  14. package/lib/index.d.ts +1 -1
  15. package/lib/index.js +3 -14
  16. package/lib/index.js.map +1 -1
  17. package/lib/service.d.ts +0 -4
  18. package/lib/service.js +40 -71
  19. package/lib/service.js.map +1 -1
  20. package/package.json +5 -15
  21. package/src/builtin/index.ts +1 -4
  22. package/src/core/eth-plugin.ts +5 -8
  23. package/src/core/index.ts +0 -5
  24. package/src/core/numberish.ts +8 -15
  25. package/src/core/sui-plugin.ts +2 -2
  26. package/src/index.ts +3 -1
  27. package/src/service.ts +13 -71
  28. package/lib/aptos/api.d.ts +0 -2
  29. package/lib/aptos/api.js +0 -14
  30. package/lib/aptos/api.js.map +0 -1
  31. package/lib/aptos/aptos-plugin.d.ts +0 -14
  32. package/lib/aptos/aptos-plugin.js +0 -185
  33. package/lib/aptos/aptos-plugin.js.map +0 -1
  34. package/lib/aptos/aptos-processor.d.ts +0 -75
  35. package/lib/aptos/aptos-processor.js +0 -193
  36. package/lib/aptos/aptos-processor.js.map +0 -1
  37. package/lib/aptos/context.d.ts +0 -22
  38. package/lib/aptos/context.js +0 -65
  39. package/lib/aptos/context.js.map +0 -1
  40. package/lib/aptos/index.d.ts +0 -9
  41. package/lib/aptos/index.js +0 -34
  42. package/lib/aptos/index.js.map +0 -1
  43. package/lib/aptos/models.d.ts +0 -23
  44. package/lib/aptos/models.js +0 -3
  45. package/lib/aptos/models.js.map +0 -1
  46. package/lib/aptos/network.d.ts +0 -14
  47. package/lib/aptos/network.js +0 -46
  48. package/lib/aptos/network.js.map +0 -1
  49. package/lib/aptos/runtime.d.ts +0 -2
  50. package/lib/aptos/runtime.js +0 -16
  51. package/lib/aptos/runtime.js.map +0 -1
  52. package/lib/aptos/type-registry.d.ts +0 -21
  53. package/lib/aptos/type-registry.js +0 -156
  54. package/lib/aptos/type-registry.js.map +0 -1
  55. package/lib/aptos/types.d.ts +0 -9
  56. package/lib/aptos/types.js +0 -135
  57. package/lib/aptos/types.js.map +0 -1
  58. package/lib/aptos/types.test.d.ts +0 -1
  59. package/lib/aptos/types.test.js.map +0 -1
  60. package/lib/aptos/utils.d.ts +0 -7
  61. package/lib/aptos/utils.js +0 -27
  62. package/lib/aptos/utils.js.map +0 -1
  63. package/lib/aptos-codegen/codegen.d.ts +0 -23
  64. package/lib/aptos-codegen/codegen.js +0 -364
  65. package/lib/aptos-codegen/codegen.js.map +0 -1
  66. package/lib/aptos-codegen/typegen.d.ts +0 -17
  67. package/lib/aptos-codegen/typegen.js +0 -142
  68. package/lib/aptos-codegen/typegen.js.map +0 -1
  69. package/lib/builtin/aptos/0x1.d.ts +0 -1913
  70. package/lib/builtin/aptos/0x1.js +0 -2748
  71. package/lib/builtin/aptos/0x1.js.map +0 -1
  72. package/lib/builtin/aptos/0x3.d.ts +0 -482
  73. package/lib/builtin/aptos/0x3.js +0 -526
  74. package/lib/builtin/aptos/0x3.js.map +0 -1
  75. package/lib/builtin/aptos/index.d.ts +0 -2
  76. package/lib/builtin/aptos/index.js +0 -29
  77. package/lib/builtin/aptos/index.js.map +0 -1
  78. package/lib/builtin/solana/index.d.ts +0 -2
  79. package/lib/builtin/solana/index.js +0 -19
  80. package/lib/builtin/solana/index.js.map +0 -1
  81. package/lib/builtin/solana/spl-token-processor.d.ts +0 -39
  82. package/lib/builtin/solana/spl-token-processor.js +0 -258
  83. package/lib/builtin/solana/spl-token-processor.js.map +0 -1
  84. package/lib/builtin/solana/types.d.ts +0 -427
  85. package/lib/builtin/solana/types.js +0 -203
  86. package/lib/builtin/solana/types.js.map +0 -1
  87. package/lib/builtin/solana/wormhole-processor.d.ts +0 -16
  88. package/lib/builtin/solana/wormhole-processor.js +0 -195
  89. package/lib/builtin/solana/wormhole-processor.js.map +0 -1
  90. package/lib/core/solana-context.d.ts +0 -11
  91. package/lib/core/solana-context.js +0 -34
  92. package/lib/core/solana-context.js.map +0 -1
  93. package/lib/core/solana-options.d.ts +0 -8
  94. package/lib/core/solana-options.js +0 -13
  95. package/lib/core/solana-options.js.map +0 -1
  96. package/lib/core/solana-plugin.d.ts +0 -9
  97. package/lib/core/solana-plugin.js +0 -79
  98. package/lib/core/solana-plugin.js.map +0 -1
  99. package/lib/core/solana-processor.d.ts +0 -40
  100. package/lib/core/solana-processor.js +0 -80
  101. package/lib/core/solana-processor.js.map +0 -1
  102. package/lib/solana-codegen/codegen.d.ts +0 -1
  103. package/lib/solana-codegen/codegen.js +0 -113
  104. package/lib/solana-codegen/codegen.js.map +0 -1
  105. package/lib/test-abi-code-gen.d.ts +0 -2
  106. package/lib/test-abi-code-gen.js +0 -20
  107. package/lib/test-abi-code-gen.js.map +0 -1
  108. package/src/abis/aptos/0x1.json +0 -9205
  109. package/src/abis/aptos/0x3.json +0 -1515
  110. package/src/aptos/api.ts +0 -11
  111. package/src/aptos/aptos-plugin.ts +0 -216
  112. package/src/aptos/aptos-processor.ts +0 -305
  113. package/src/aptos/context.ts +0 -74
  114. package/src/aptos/index.ts +0 -10
  115. package/src/aptos/models.ts +0 -34
  116. package/src/aptos/network.ts +0 -42
  117. package/src/aptos/runtime.ts +0 -13
  118. package/src/aptos/type-registry.ts +0 -187
  119. package/src/aptos/types.ts +0 -149
  120. package/src/aptos/utils.ts +0 -26
  121. package/src/aptos-codegen/codegen.ts +0 -428
  122. package/src/aptos-codegen/tsconfig.json +0 -9
  123. package/src/aptos-codegen/typegen.ts +0 -153
  124. package/src/builtin/aptos/0x1.ts +0 -4210
  125. package/src/builtin/aptos/0x3.ts +0 -888
  126. package/src/builtin/aptos/index.ts +0 -2
  127. package/src/builtin/solana/index.ts +0 -2
  128. package/src/builtin/solana/spl-token-processor.ts +0 -298
  129. package/src/builtin/solana/types.ts +0 -279
  130. package/src/builtin/solana/wormhole-processor.ts +0 -178
  131. package/src/core/solana-context.ts +0 -34
  132. package/src/core/solana-options.ts +0 -8
  133. package/src/core/solana-plugin.ts +0 -97
  134. package/src/core/solana-processor.ts +0 -102
  135. package/src/solana-codegen/codegen.ts +0 -116
  136. package/src/test-abi-code-gen.ts +0 -16
@@ -1,364 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AccountCodegen = exports.generateForNetwork = exports.generate = exports.codeGenAptosProcessor = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const prettier_1 = __importDefault(require("prettier"));
10
- const typegen_1 = require("./typegen");
11
- const utils_1 = require("../aptos/utils");
12
- const chalk_1 = __importDefault(require("chalk"));
13
- const network_1 = require("../aptos/network");
14
- const types_1 = require("../aptos/types");
15
- function codeGenAptosProcessor(abisDir, outDir = 'src/types/aptos') {
16
- if (!fs_1.default.existsSync(abisDir)) {
17
- return;
18
- }
19
- console.log(chalk_1.default.green('Generated Types for Aptos'));
20
- generate(abisDir, outDir);
21
- }
22
- exports.codeGenAptosProcessor = codeGenAptosProcessor;
23
- async function generate(srcDir, outputDir) {
24
- await generateForNetwork(srcDir, outputDir, network_1.AptosNetwork.MAIN_NET);
25
- await generateForNetwork(path_1.default.join(srcDir, 'testnet'), path_1.default.join(outputDir, 'testnet'), network_1.AptosNetwork.TEST_NET);
26
- }
27
- exports.generate = generate;
28
- async function generateForNetwork(srcDir, outputDir, network) {
29
- if (!fs_1.default.existsSync(srcDir)) {
30
- return;
31
- }
32
- if (network === network_1.AptosNetwork.TEST_NET) {
33
- console.log('Found testnet directory, generate code for testnet modules');
34
- }
35
- const files = fs_1.default.readdirSync(srcDir);
36
- outputDir = path_1.default.resolve(outputDir);
37
- const outputs = [];
38
- fs_1.default.mkdirSync(outputDir, { recursive: true });
39
- const loader = new typegen_1.AccountRegister();
40
- // when generating user code, don't need to generate framework account
41
- loader.accountImports.set('0x1', new typegen_1.AccountModulesImportInfo('0x1', '0x1'));
42
- loader.accountImports.set('0x2', new typegen_1.AccountModulesImportInfo('0x2', '0x2'));
43
- loader.accountImports.set('0x3', new typegen_1.AccountModulesImportInfo('0x3', '0x3'));
44
- const client = (0, network_1.getRpcClient)(network);
45
- for (const file of files) {
46
- if (!file.endsWith('.json')) {
47
- continue;
48
- }
49
- const fullPath = path_1.default.resolve(srcDir, file);
50
- const modules = JSON.parse(fs_1.default.readFileSync(fullPath, 'utf-8'));
51
- for (const module of modules) {
52
- if (module.abi) {
53
- loader.register(module.abi, path_1.default.basename(file, '.json'));
54
- }
55
- }
56
- const codeGen = new AccountCodegen(loader, modules, {
57
- fileName: path_1.default.basename(file, '.json'),
58
- outputDir: outputDir,
59
- network,
60
- });
61
- outputs.push(...codeGen.generate());
62
- }
63
- while (loader.pendingAccounts.size > 0) {
64
- for (const account of loader.pendingAccounts) {
65
- console.log(`download dependent module for account ${account} at ${(0, network_1.getAptosChainName)(network)}`);
66
- try {
67
- const modules = await client.getAccountModules(account);
68
- fs_1.default.writeFileSync(path_1.default.resolve(srcDir, account + '.json'), JSON.stringify(modules, null, '\t'));
69
- for (const module of modules) {
70
- if (module.abi) {
71
- loader.register(module.abi, account);
72
- }
73
- }
74
- const codeGen = new AccountCodegen(loader, modules, {
75
- fileName: account,
76
- outputDir: outputDir,
77
- network,
78
- });
79
- outputs.push(...codeGen.generate());
80
- }
81
- catch (e) {
82
- console.error(chalk_1.default.red('Error downloading account module, check if you choose the right network,or download account modules manually into your director'));
83
- console.error(e);
84
- process.exit(1);
85
- }
86
- }
87
- }
88
- for (const output of outputs) {
89
- const content = prettier_1.default.format(output.fileContent, { parser: 'typescript' });
90
- fs_1.default.writeFileSync(path_1.default.join(outputDir, output.fileName), content);
91
- }
92
- }
93
- exports.generateForNetwork = generateForNetwork;
94
- class AccountCodegen {
95
- modules;
96
- config;
97
- loader;
98
- constructor(loader, modules, config) {
99
- // const json = fs.readFileSync(config.srcFile, 'utf-8')
100
- this.modules = modules;
101
- this.config = config;
102
- this.loader = loader;
103
- }
104
- generate() {
105
- if (!this.modules) {
106
- return [];
107
- }
108
- // const baseName = path.basename(this.config.fileName, '.json')
109
- let address;
110
- for (const module of this.modules) {
111
- if (module.abi && module.abi.address) {
112
- address = module.abi.address;
113
- }
114
- }
115
- if (!address) {
116
- return [];
117
- }
118
- const imports = `
119
- import { aptos } from "@sentio/sdk"
120
- import { Address, MoveModule } from "aptos-sdk/src/generated"
121
- `;
122
- const dependedAccounts = [];
123
- const moduleImports = [];
124
- const info = this.loader.accountImports.get(address);
125
- if (info) {
126
- for (const [account] of info.imports.entries()) {
127
- // Remap to user's filename if possible, TODO codepath not well tested
128
- let tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account);
129
- if ((0, utils_1.isFrameworkAccount)(account) && !(0, utils_1.isFrameworkAccount)(address)) {
130
- // Decide where to find runtime library
131
- let srcRoot = 'lib';
132
- if (__dirname.includes('sdk/src/aptos-codegen')) {
133
- srcRoot = 'src';
134
- }
135
- tsAccountModule = `@sentio/sdk/${srcRoot}/builtin/aptos/${account}`;
136
- }
137
- moduleImports.push(`import * as _${account} from "${tsAccountModule}"`);
138
- dependedAccounts.push(account);
139
- }
140
- }
141
- const source = `
142
- /* Autogenerated file. Do not edit manually. */
143
- /* tslint:disable */
144
- /* eslint-disable */
145
-
146
- /* Generated modules for account ${address} */
147
-
148
- ${imports}
149
-
150
- ${moduleImports.join('\n')}
151
-
152
- ${this.modules.map((m) => generateModule(m, this.config.network)).join('\n')}
153
-
154
- export function loadAllTypes(_r: aptos.TypeRegistry) {
155
- ${dependedAccounts.map((a) => `_${a}.loadAllTypes(_r)`).join('\n')}
156
-
157
- ${this.modules
158
- .map((m) => {
159
- return `_r.load(${m.abi?.name}.ABI)`;
160
- })
161
- .join('\n')}
162
- }
163
- `; // source
164
- return [
165
- {
166
- fileName: this.config.fileName + '.ts',
167
- fileContent: source,
168
- },
169
- ];
170
- }
171
- }
172
- exports.AccountCodegen = AccountCodegen;
173
- function generateNetworkOption(network) {
174
- switch (network) {
175
- case network_1.AptosNetwork.TEST_NET:
176
- return 'TEST_NET';
177
- }
178
- return 'MAIN_NET';
179
- }
180
- function generateModule(moduleByteCode, network) {
181
- if (!moduleByteCode.abi) {
182
- return '';
183
- }
184
- const module = moduleByteCode.abi;
185
- const functions = module.exposed_functions.map((f) => generateOnEntryFunctions(module, f)).filter((s) => s !== '');
186
- const eventStructs = getEventStructs(module);
187
- const eventTypes = new Set(eventStructs.keys());
188
- const events = Array.from(eventStructs.values())
189
- .map((e) => generateOnEvents(module, e))
190
- .filter((s) => s !== '');
191
- const structs = module.structs.map((s) => generateStructs(module, s, eventTypes));
192
- const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f));
193
- let processor = '';
194
- if (functions.length > 0 || events.length > 0) {
195
- processor = `export class ${module.name} extends aptos.AptosBaseProcessor {
196
-
197
- constructor(options: aptos.AptosBindOptions) {
198
- super("${module.name}", options)
199
- }
200
- static DEFAULT_OPTIONS: aptos.AptosBindOptions = {
201
- address: "${module.address}",
202
- network: aptos.AptosNetwork.${generateNetworkOption(network)}
203
- }
204
-
205
- static bind(options: Partial<aptos.AptosBindOptions> = {}): ${module.name} {
206
- return new ${module.name}({ ...${module.name}.DEFAULT_OPTIONS, ...options })
207
- }
208
-
209
- ${functions.join('\n')}
210
-
211
- ${events.join('\n')}
212
-
213
- loadTypesInternal(registry: aptos.TypeRegistry) {
214
- loadAllTypes(registry)
215
- }
216
- }
217
- `;
218
- }
219
- return `
220
- ${processor}
221
-
222
- export namespace ${module.name} {
223
- ${structs.join('\n')}
224
-
225
- ${callArgs.join('\n')}
226
-
227
- export function loadTypes(_r: aptos.TypeRegistry) {
228
- loadAllTypes(_r)
229
- }
230
- export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')
231
- }
232
- `;
233
- }
234
- function generateStructs(module, struct, events) {
235
- const genericString = generateStructTypeParameters(struct);
236
- const genericStringAny = generateStructTypeParameters(struct, true);
237
- const fields = struct.fields.map((field) => {
238
- return `${field.name}: ${(0, typegen_1.generateType)(field.type, module.address)}`;
239
- });
240
- let eventPayload = '';
241
- if (events.has((0, utils_1.moduleQname)(module) + utils_1.SPLITTER + struct.name)) {
242
- eventPayload = `
243
- export interface ${struct.name}Instance extends
244
- aptos.TypedEventInstance<${struct.name}${genericStringAny}> {
245
- data_typed: ${struct.name}${genericStringAny}
246
- type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]
247
- }
248
- `;
249
- }
250
- return `
251
- export class ${struct.name}${genericString} {
252
- static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'
253
- ${fields.join('\n')}
254
- }
255
-
256
- ${eventPayload}
257
- `;
258
- }
259
- function generateFunctionTypeParameters(func) {
260
- let genericString = '';
261
- if (func.generic_type_params && func.generic_type_params.length > 0) {
262
- const params = func.generic_type_params
263
- .map((v, idx) => {
264
- return `T${idx}=any`;
265
- })
266
- .join(',');
267
- genericString = `<${params}>`;
268
- }
269
- return genericString;
270
- }
271
- function generateStructTypeParameters(struct, useAny = false) {
272
- let genericString = '';
273
- if (struct.generic_type_params && struct.generic_type_params.length > 0) {
274
- const params = struct.generic_type_params
275
- .map((v, idx) => {
276
- return useAny ? 'any' : 'T' + idx;
277
- })
278
- .join(',');
279
- genericString = `<${params}>`;
280
- }
281
- return genericString;
282
- }
283
- function generateCallArgsStructs(module, func) {
284
- if (!func.is_entry) {
285
- return;
286
- }
287
- const fields = (0, utils_1.getMeaningfulFunctionParams)(func).map((param) => {
288
- return `${(0, typegen_1.generateType)(param, module.address)}`;
289
- });
290
- const camelFuncName = capitalizeFirstChar(camelize(func.name));
291
- const genericString = generateFunctionTypeParameters(func);
292
- return `
293
- export interface ${camelFuncName}Payload${genericString}
294
- extends aptos.TypedEntryFunctionPayload<[${fields.join(',')}]> {
295
- arguments_typed: [${fields.join(',')}],
296
- type_arguments: [${func.generic_type_params.map((_) => 'string').join(', ')}]
297
- }
298
- `;
299
- }
300
- function generateOnEntryFunctions(module, func) {
301
- if (!func.is_entry) {
302
- return '';
303
- }
304
- // const genericString = generateFunctionTypeParameters(func)
305
- const camelFuncName = capitalizeFirstChar(camelize(func.name));
306
- const source = `
307
- onEntry${camelFuncName}(func: (call: ${module.name}.${camelFuncName}Payload, ctx: aptos.AptosContext) => void, filter?: aptos.CallFilter): ${module.name} {
308
- this.onEntryFunctionCall(func, {
309
- ...filter,
310
- function: '${module.name}::${func.name}'
311
- })
312
- return this
313
- }`;
314
- return source;
315
- }
316
- function getEventStructs(module) {
317
- const qname = (0, utils_1.moduleQname)(module);
318
- const structMap = new Map();
319
- const eventMap = new Map();
320
- for (const struct of module.structs) {
321
- structMap.set(qname + utils_1.SPLITTER + struct.name, struct);
322
- }
323
- for (const struct of module.structs) {
324
- for (const field of struct.fields) {
325
- const t = (0, types_1.parseMoveType)(field.type);
326
- if (t.qname === '0x1::event::EventHandle') {
327
- const event = t.typeArgs[0].qname;
328
- const eventStruct = structMap.get(event);
329
- if (eventStruct) {
330
- eventMap.set(event, eventStruct);
331
- }
332
- }
333
- }
334
- }
335
- return eventMap;
336
- }
337
- function generateOnEvents(module, struct) {
338
- // for struct that has drop + store
339
- // if (!isEvent(struct, module)) {
340
- // return ''
341
- // }
342
- // const genericString = generateStructTypeParameters(struct)
343
- const source = `
344
- onEvent${struct.name}(func: (event: ${module.name}.${struct.name}Instance, ctx: aptos.AptosContext) => void): ${module.name} {
345
- this.onEvent(func, {
346
- type: '${module.name}::${struct.name}'
347
- })
348
- return this
349
- }
350
- `;
351
- return source;
352
- }
353
- function camelize(input) {
354
- return input
355
- .split('_')
356
- .reduce((res, word, i) => i === 0 ? word.toLowerCase() : `${res}${word.charAt(0).toUpperCase()}${word.substr(1).toLowerCase()}`, '');
357
- }
358
- function capitalizeFirstChar(input) {
359
- if (!input) {
360
- return input;
361
- }
362
- return input[0].toUpperCase() + (input.length > 1 ? input.substring(1) : '');
363
- }
364
- //# sourceMappingURL=codegen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/aptos-codegen/codegen.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,wDAA+B;AAE/B,uCAAmF;AACnF,0CAAuG;AACvG,kDAAyB;AACzB,8CAAgF;AAChF,0CAA8C;AAE9C,SAAgB,qBAAqB,CAAC,OAAe,EAAE,MAAM,GAAG,iBAAiB;IAC/E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAM;KACP;IACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC3B,CAAC;AAND,sDAMC;AAEM,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,SAAiB;IAC9D,MAAM,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,sBAAY,CAAC,QAAQ,CAAC,CAAA;IAClE,MAAM,kBAAkB,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,sBAAY,CAAC,QAAQ,CAAC,CAAA;AAChH,CAAC;AAHD,4BAGC;AAEM,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAqB;IAC/F,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAM;KACP;IACD,IAAI,OAAO,KAAK,sBAAY,CAAC,QAAQ,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;KAC1E;IACD,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,OAAO,GAAiB,EAAE,CAAA;IAEhC,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5C,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE,CAAA;IAEpC,sEAAsE;IACtE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,kCAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5E,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,kCAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5E,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,kCAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3B,SAAQ;SACT;QACD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;QAE9D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,MAAM,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;aAC1D;SACF;QACD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE;YAClD,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC,SAAS,EAAE,SAAS;YACpB,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;KACpC;IAED,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;QACtC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,OAAO,IAAA,2BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAEhG,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;gBACvD,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBAE9F,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC5B,IAAI,MAAM,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;qBACrC;iBACF;gBACD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE;oBAClD,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,SAAS;oBACpB,OAAO;iBACR,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;aACpC;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CACP,iIAAiI,CAClI,CACF,CAAA;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAChB;SACF;KACF;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,OAAO,GAAG,kBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;QAC7E,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;KACjE;AACH,CAAC;AA9ED,gDA8EC;AAaD,MAAa,cAAc;IACzB,OAAO,CAAsB;IAC7B,MAAM,CAAQ;IACd,MAAM,CAAiB;IAEvB,YAAY,MAAuB,EAAE,OAA6B,EAAE,MAAc;QAChF,wDAAwD;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,EAAE,CAAA;SACV;QACD,gEAAgE;QAEhE,IAAI,OAA2B,CAAA;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACjC,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;gBACpC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAA;aAC7B;SACF;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,CAAA;SACV;QAED,MAAM,OAAO,GAAG;;;KAGf,CAAA;QAED,MAAM,gBAAgB,GAAa,EAAE,CAAA;QAErC,MAAM,aAAa,GAAa,EAAE,CAAA;QAElC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEpD,IAAI,IAAI,EAAE;YACR,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;gBAC9C,sEAAsE;gBACtE,IAAI,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,IAAI,OAAO,CAAC,CAAA;gBAC7F,IAAI,IAAA,0BAAkB,EAAC,OAAO,CAAC,IAAI,CAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,EAAE;oBAC/D,uCAAuC;oBACvC,IAAI,OAAO,GAAG,KAAK,CAAA;oBACnB,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;wBAC/C,OAAO,GAAG,KAAK,CAAA;qBAChB;oBACD,eAAe,GAAG,eAAe,OAAO,kBAAkB,OAAO,EAAE,CAAA;iBACpE;gBACD,aAAa,CAAC,IAAI,CAAC,gBAAgB,OAAO,UAAU,eAAe,GAAG,CAAC,CAAA;gBAEvE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aAC/B;SACF;QAED,MAAM,MAAM,GAAG;;;;;uCAKoB,OAAO;;MAExC,OAAO;;MAEP,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;MAExB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;QAGxE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;QAEhE,IAAI,CAAC,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,OAAO,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAA;QACtC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC;;KAEd,CAAA,CAAC,SAAS;QAEX,OAAO;YACL;gBACE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK;gBACtC,WAAW,EAAE,MAAM;aACpB;SACF,CAAA;IACH,CAAC;CACF;AAxFD,wCAwFC;AAED,SAAS,qBAAqB,CAAC,OAAqB;IAClD,QAAQ,OAAO,EAAE;QACf,KAAK,sBAAY,CAAC,QAAQ;YACxB,OAAO,UAAU,CAAA;KACpB;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,cAAkC,EAAE,OAAqB;IAC/E,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;QACvB,OAAO,EAAE,CAAA;KACV;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAA;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAElH,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAExF,IAAI,SAAS,GAAG,EAAE,CAAA;IAClB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7C,SAAS,GAAG,gBAAgB,MAAM,CAAC,IAAI;;;eAG5B,MAAM,CAAC,IAAI;;;kBAGR,MAAM,CAAC,OAAO;oCACI,qBAAqB,CAAC,OAAO,CAAC;;;kEAGA,MAAM,CAAC,IAAI;mBAC1D,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI;;;MAG5C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;MAEpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;GAMpB,CAAA;KACA;IAED,OAAO;IACL,SAAS;;qBAEQ,MAAM,CAAC,IAAI;MAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;MAElB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;iDAKwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;GAEpE,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB,EAAE,MAAkB,EAAE,MAAmB;IAClF,MAAM,aAAa,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAA;IAC1D,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzC,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,IAAA,sBAAY,EAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,IAAI,YAAY,GAAG,EAAE,CAAA;IACrB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,MAAM,CAAC,GAAG,gBAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;QAC5D,YAAY,GAAG;uBACI,MAAM,CAAC,IAAI;mCACC,MAAM,CAAC,IAAI,GAAG,gBAAgB;oBAC7C,MAAM,CAAC,IAAI,GAAG,gBAAgB;yBACzB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;KAE9E,CAAA;KACF;IAED,OAAO;iBACQ,MAAM,CAAC,IAAI,GAAG,aAAa;2BACjB,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;MACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAGnB,YAAY;GACb,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAkB;IACxD,IAAI,aAAa,GAAG,EAAE,CAAA;IACtB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACd,OAAO,IAAI,GAAG,MAAM,CAAA;QACtB,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAA;QACZ,aAAa,GAAG,IAAI,MAAM,GAAG,CAAA;KAC9B;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAkB,EAAE,MAAM,GAAG,KAAK;IACtE,IAAI,aAAa,GAAG,EAAE,CAAA;IAEtB,IAAI,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB;aACtC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACd,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;QACnC,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAA;QACZ,aAAa,GAAG,IAAI,MAAM,GAAG,CAAA;KAC9B;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAkB,EAAE,IAAkB;IACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,OAAM;KACP;IAED,MAAM,MAAM,GAAG,IAAA,mCAA2B,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7D,OAAO,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAE9D,MAAM,aAAa,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAA;IAC1D,OAAO;qBACY,aAAa,UAAU,aAAa;iDACR,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;uBACjB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;GAE5E,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAkB,EAAE,IAAkB;IACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,OAAO,EAAE,CAAA;KACV;IAED,6DAA6D;IAE7D,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG;WACN,aAAa,iBAAiB,MAAM,CAAC,IAAI,IAAI,aAAa,0EAA0E,MAAM,CAAC,IAAI;;;mBAGvI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;;;IAGxC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAA;IAE9C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;QACnC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,gBAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACtD;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;YACjC,MAAM,CAAC,GAAG,IAAA,qBAAa,EAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,CAAC,KAAK,KAAK,yBAAyB,EAAE;gBACzC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;gBACjC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxC,IAAI,WAAW,EAAE;oBACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;iBACjC;aACF;SACF;KACF;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAkB,EAAE,MAAkB;IAC9D,mCAAmC;IACnC,kCAAkC;IAClC,cAAc;IACd,IAAI;IAEJ,6DAA6D;IAE7D,MAAM,MAAM,GAAG;WACN,MAAM,CAAC,IAAI,kBAAkB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,gDAAgD,MAAM,CAAC,IAAI;;eAE9G,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;;;;GAIvC,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CACL,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CACf,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,EACvG,EAAE,CACH,CAAA;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,KAAK,CAAA;KACb;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAC9E,CAAC","sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport prettier from 'prettier'\nimport { MoveFunction, MoveModule, MoveModuleBytecode, MoveStruct } from 'aptos-sdk/src/generated'\nimport { AccountModulesImportInfo, AccountRegister, generateType } from './typegen'\nimport { getMeaningfulFunctionParams, isFrameworkAccount, moduleQname, SPLITTER } from '../aptos/utils'\nimport chalk from 'chalk'\nimport { AptosNetwork, getAptosChainName, getRpcClient } from '../aptos/network'\nimport { parseMoveType } from '../aptos/types'\n\nexport function codeGenAptosProcessor(abisDir: string, outDir = 'src/types/aptos') {\n if (!fs.existsSync(abisDir)) {\n return\n }\n console.log(chalk.green('Generated Types for Aptos'))\n generate(abisDir, outDir)\n}\n\nexport async function generate(srcDir: string, outputDir: string) {\n await generateForNetwork(srcDir, outputDir, AptosNetwork.MAIN_NET)\n await generateForNetwork(path.join(srcDir, 'testnet'), path.join(outputDir, 'testnet'), AptosNetwork.TEST_NET)\n}\n\nexport async function generateForNetwork(srcDir: string, outputDir: string, network: AptosNetwork) {\n if (!fs.existsSync(srcDir)) {\n return\n }\n if (network === AptosNetwork.TEST_NET) {\n console.log('Found testnet directory, generate code for testnet modules')\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 modules = JSON.parse(fs.readFileSync(fullPath, 'utf-8'))\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, path.basename(file, '.json'))\n }\n }\n const codeGen = new AccountCodegen(loader, 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 ${getAptosChainName(network)}`)\n\n try {\n const modules = await client.getAccountModules(account)\n fs.writeFileSync(path.resolve(srcDir, account + '.json'), JSON.stringify(modules, null, '\\t'))\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, account)\n }\n }\n const codeGen = new AccountCodegen(loader, 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 = prettier.format(output.fileContent, { parser: 'typescript' })\n fs.writeFileSync(path.join(outputDir, output.fileName), content)\n }\n}\n\ninterface OutputFile {\n fileName: string\n fileContent: string\n}\n\ninterface Config {\n fileName: string\n outputDir: string\n network: AptosNetwork\n}\n\nexport class AccountCodegen {\n modules: MoveModuleBytecode[]\n config: Config\n loader: AccountRegister\n\n constructor(loader: AccountRegister, modules: MoveModuleBytecode[], config: Config) {\n // const json = fs.readFileSync(config.srcFile, 'utf-8')\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 if (module.abi && module.abi.address) {\n address = module.abi.address\n }\n }\n if (!address) {\n return []\n }\n\n const imports = `\n import { aptos } from \"@sentio/sdk\"\n import { Address, MoveModule } from \"aptos-sdk/src/generated\"\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 let tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n let srcRoot = 'lib'\n if (__dirname.includes('sdk/src/aptos-codegen')) {\n srcRoot = 'src'\n }\n tsAccountModule = `@sentio/sdk/${srcRoot}/builtin/aptos/${account}`\n }\n moduleImports.push(`import * as _${account} from \"${tsAccountModule}\"`)\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) => generateModule(m, this.config.network)).join('\\n')}\n \n export function loadAllTypes(_r: aptos.TypeRegistry) {\n ${dependedAccounts.map((a) => `_${a}.loadAllTypes(_r)`).join('\\n')}\n\n ${this.modules\n .map((m) => {\n return `_r.load(${m.abi?.name}.ABI)`\n })\n .join('\\n')}\n }\n ` // source\n\n return [\n {\n fileName: this.config.fileName + '.ts',\n fileContent: source,\n },\n ]\n }\n}\n\nfunction generateNetworkOption(network: AptosNetwork) {\n switch (network) {\n case AptosNetwork.TEST_NET:\n return 'TEST_NET'\n }\n return 'MAIN_NET'\n}\n\nfunction generateModule(moduleByteCode: MoveModuleBytecode, network: AptosNetwork) {\n if (!moduleByteCode.abi) {\n return ''\n }\n const module = moduleByteCode.abi\n\n const functions = module.exposed_functions.map((f) => generateOnEntryFunctions(module, f)).filter((s) => s !== '')\n\n const eventStructs = getEventStructs(module)\n const eventTypes = new Set(eventStructs.keys())\n const events = Array.from(eventStructs.values())\n .map((e) => generateOnEvents(module, e))\n .filter((s) => s !== '')\n const structs = module.structs.map((s) => generateStructs(module, s, eventTypes))\n const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f))\n\n let processor = ''\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${module.name} extends aptos.AptosBaseProcessor {\n\n constructor(options: aptos.AptosBindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: aptos.AptosBindOptions = {\n address: \"${module.address}\",\n network: aptos.AptosNetwork.${generateNetworkOption(network)} \n }\n\n static bind(options: Partial<aptos.AptosBindOptions> = {}): ${module.name} {\n return new ${module.name}({ ...${module.name}.DEFAULT_OPTIONS, ...options })\n }\n \n ${functions.join('\\n')}\n \n ${events.join('\\n')}\n \n loadTypesInternal(registry: aptos.TypeRegistry) {\n loadAllTypes(registry)\n }\n }\n `\n }\n\n return `\n ${processor}\n\n export namespace ${module.name} {\n ${structs.join('\\n')}\n \n ${callArgs.join('\\n')}\n \n export function loadTypes(_r: aptos.TypeRegistry) {\n loadAllTypes(_r)\n }\n export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')\n }\n `\n}\n\nfunction generateStructs(module: MoveModule, struct: MoveStruct, events: Set<string>) {\n const genericString = generateStructTypeParameters(struct)\n const genericStringAny = generateStructTypeParameters(struct, true)\n\n const fields = struct.fields.map((field) => {\n return `${field.name}: ${generateType(field.type, module.address)}`\n })\n\n let eventPayload = ''\n if (events.has(moduleQname(module) + SPLITTER + struct.name)) {\n eventPayload = `\n export interface ${struct.name}Instance extends \n aptos.TypedEventInstance<${struct.name}${genericStringAny}> {\n data_typed: ${struct.name}${genericStringAny}\n type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n return `\n export class ${struct.name}${genericString} {\n static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'\n ${fields.join('\\n')} \n }\n \n ${eventPayload}\n `\n}\n\nfunction generateFunctionTypeParameters(func: MoveFunction) {\n let genericString = ''\n if (func.generic_type_params && func.generic_type_params.length > 0) {\n const params = func.generic_type_params\n .map((v, idx) => {\n return `T${idx}=any`\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n}\n\nfunction generateStructTypeParameters(struct: MoveStruct, useAny = false) {\n let genericString = ''\n\n if (struct.generic_type_params && struct.generic_type_params.length > 0) {\n const params = struct.generic_type_params\n .map((v, idx) => {\n return useAny ? 'any' : 'T' + idx\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n}\n\nfunction generateCallArgsStructs(module: MoveModule, func: MoveFunction) {\n if (!func.is_entry) {\n return\n }\n\n const fields = getMeaningfulFunctionParams(func).map((param) => {\n return `${generateType(param, module.address)}`\n })\n\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n\n const genericString = generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload${genericString}\n extends aptos.TypedEntryFunctionPayload<[${fields.join(',')}]> {\n arguments_typed: [${fields.join(',')}],\n type_arguments: [${func.generic_type_params.map((_) => 'string').join(', ')}]\n }\n `\n}\n\nfunction generateOnEntryFunctions(module: MoveModule, func: MoveFunction) {\n if (!func.is_entry) {\n return ''\n }\n\n // const genericString = generateFunctionTypeParameters(func)\n\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n const source = `\n onEntry${camelFuncName}(func: (call: ${module.name}.${camelFuncName}Payload, ctx: aptos.AptosContext) => void, filter?: aptos.CallFilter): ${module.name} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n })\n return this\n }`\n\n return source\n}\n\nfunction getEventStructs(module: MoveModule) {\n const qname = moduleQname(module)\n const structMap = new Map<string, MoveStruct>()\n const eventMap = new Map<string, MoveStruct>()\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 = parseMoveType(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\nfunction generateOnEvents(module: MoveModule, struct: MoveStruct): 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 source = `\n onEvent${struct.name}(func: (event: ${module.name}.${struct.name}Instance, ctx: aptos.AptosContext) => void): ${module.name} {\n this.onEvent(func, {\n type: '${module.name}::${struct.name}'\n })\n return this\n }\n `\n return source\n}\n\nfunction camelize(input: string): string {\n return input\n .split('_')\n .reduce(\n (res, word, i) =>\n i === 0 ? word.toLowerCase() : `${res}${word.charAt(0).toUpperCase()}${word.substr(1).toLowerCase()}`,\n ''\n )\n}\n\nfunction capitalizeFirstChar(input: string): string {\n if (!input) {\n return input\n }\n return input[0].toUpperCase() + (input.length > 1 ? input.substring(1) : '')\n}\n"]}
@@ -1,17 +0,0 @@
1
- import { MoveModule } from 'aptos-sdk/src/generated';
2
- import { TypeDescriptor } from '../aptos/types';
3
- export declare function generateType(type: string, currentAddress: string): string;
4
- export declare class AccountModulesImportInfo {
5
- imports: Map<string, Set<string>>;
6
- account: string;
7
- moduleName: string;
8
- constructor(account: string, tsModuleName: string);
9
- addImport(account: string, module: string): void;
10
- }
11
- export declare class AccountRegister {
12
- accountImports: Map<string, AccountModulesImportInfo>;
13
- pendingAccounts: Set<string>;
14
- typeRegistry: Map<string, TypeDescriptor>;
15
- private loadTypeDescriptor;
16
- register(module: MoveModule, tsModuleName: string): AccountModulesImportInfo;
17
- }
@@ -1,142 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccountRegister = exports.AccountModulesImportInfo = exports.generateType = void 0;
4
- const types_1 = require("../aptos/types");
5
- const utils_1 = require("../aptos/utils");
6
- function generateTypeForDescriptor(type, currentAddress) {
7
- // TODO &signer is defintely an address, but what if &OTHER_TYPE?
8
- if (type.qname.startsWith('&')) {
9
- return 'Address';
10
- }
11
- switch (type.qname) {
12
- case 'signer': // TODO check this
13
- case 'address':
14
- return 'Address';
15
- case '0x1::string::String':
16
- return 'string';
17
- case 'bool':
18
- return 'Boolean';
19
- case 'u8':
20
- case 'u16':
21
- case 'u32':
22
- return 'number';
23
- case 'u64':
24
- case 'u128':
25
- return 'bigint';
26
- }
27
- if (type.qname === utils_1.VECTOR_STR) {
28
- // vector<u8> as hex string
29
- const elementTypeQname = type.typeArgs[0].qname;
30
- if (elementTypeQname === 'u8') {
31
- return 'string';
32
- }
33
- if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(utils_1.SPLITTER)) {
34
- return `${elementTypeQname}[] | string`;
35
- }
36
- return generateTypeForDescriptor(type.typeArgs[0], currentAddress) + '[]';
37
- }
38
- const simpleName = generateSimpleType(type.qname, currentAddress);
39
- if (simpleName.length === 0) {
40
- console.error('unexpected error');
41
- }
42
- if (simpleName.includes('vector')) {
43
- console.error('unexpected error');
44
- }
45
- if (type.typeArgs.length > 0) {
46
- // return simpleName
47
- return simpleName + '<' + type.typeArgs.map((t) => generateTypeForDescriptor(t, currentAddress)).join(',') + '>';
48
- }
49
- return simpleName;
50
- }
51
- function generateSimpleType(type, currentAddress) {
52
- const parts = type.split(utils_1.SPLITTER);
53
- if (parts.length < 2) {
54
- return parts[0];
55
- }
56
- if (parts[0] === currentAddress) {
57
- return parts.slice(1).join('.');
58
- }
59
- return '_' + parts.join('.');
60
- }
61
- // TODO ctx need to have type parameters
62
- function generateType(type, currentAddress) {
63
- return generateTypeForDescriptor((0, types_1.parseMoveType)(type), currentAddress);
64
- }
65
- exports.generateType = generateType;
66
- class AccountModulesImportInfo {
67
- // account to module
68
- imports;
69
- account;
70
- moduleName;
71
- constructor(account, tsModuleName) {
72
- this.account = account;
73
- this.moduleName = tsModuleName;
74
- this.imports = new Map();
75
- }
76
- addImport(account, module) {
77
- if (account === this.account) {
78
- return;
79
- }
80
- let accountModules = this.imports.get(account);
81
- if (!accountModules) {
82
- accountModules = new Set();
83
- this.imports.set(account, accountModules);
84
- }
85
- accountModules.add(module);
86
- }
87
- }
88
- exports.AccountModulesImportInfo = AccountModulesImportInfo;
89
- class AccountRegister {
90
- accountImports = new Map();
91
- pendingAccounts = new Set();
92
- // loadedAccount = new Set<string>()
93
- typeRegistry = new Map();
94
- loadTypeDescriptor(type) {
95
- let descriptor = this.typeRegistry.get(type);
96
- // const descriptparseMoveType(type)
97
- if (!descriptor) {
98
- descriptor = (0, types_1.parseMoveType)(type);
99
- this.typeRegistry.set(type, descriptor);
100
- }
101
- return descriptor;
102
- }
103
- register(module, tsModuleName) {
104
- const currentModuleFqn = (0, utils_1.moduleQname)(module);
105
- let accountModuleImports = this.accountImports.get(module.address);
106
- if (!accountModuleImports) {
107
- accountModuleImports = new AccountModulesImportInfo(module.address, tsModuleName);
108
- this.accountImports.set(module.address, accountModuleImports);
109
- // the account has already be processed, delete pending task
110
- this.pendingAccounts.delete(module.address);
111
- }
112
- for (const struct of module.structs) {
113
- for (const field of struct.fields) {
114
- for (const type of this.loadTypeDescriptor(field.type).dependedTypes()) {
115
- const [account, module] = (0, utils_1.moduleQnameForType)(type);
116
- accountModuleImports.addImport(account, module);
117
- if (!this.accountImports.has(account)) {
118
- this.pendingAccounts.add(account);
119
- }
120
- }
121
- }
122
- }
123
- for (const func of module.exposed_functions) {
124
- if (!func.is_entry) {
125
- continue;
126
- }
127
- for (const param of func.params) {
128
- for (const type of this.loadTypeDescriptor(param).dependedTypes()) {
129
- const [account, module] = (0, utils_1.moduleQnameForType)(type);
130
- accountModuleImports.addImport(account, module);
131
- if (!this.accountImports.has(account)) {
132
- this.pendingAccounts.add(account);
133
- }
134
- }
135
- }
136
- }
137
- this.accountImports.set(currentModuleFqn, accountModuleImports);
138
- return accountModuleImports;
139
- }
140
- }
141
- exports.AccountRegister = AccountRegister;
142
- //# sourceMappingURL=typegen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/aptos-codegen/typegen.ts"],"names":[],"mappings":";;;AACA,0CAA8D;AAC9D,0CAAsF;AAEtF,SAAS,yBAAyB,CAAC,IAAoB,EAAE,cAAsB;IAC7E,iEAAiE;IACjE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QAC9B,OAAO,SAAS,CAAA;KACjB;IAED,QAAQ,IAAI,CAAC,KAAK,EAAE;QAClB,KAAK,QAAQ,CAAC,CAAC,kBAAkB;QACjC,KAAK,SAAS;YACZ,OAAO,SAAS,CAAA;QAClB,KAAK,qBAAqB;YACxB,OAAO,QAAQ,CAAA;QACjB,KAAK,MAAM;YACT,OAAO,SAAS,CAAA;QAClB,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,QAAQ,CAAA;QACjB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,QAAQ,CAAA;KAClB;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAU,EAAE;QAC7B,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAC/C,IAAI,gBAAgB,KAAK,IAAI,EAAE;YAC7B,OAAO,QAAQ,CAAA;SAChB;QACD,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAQ,CAAC,EAAE;YAC5E,OAAO,GAAG,gBAAgB,aAAa,CAAA;SACxC;QACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,IAAI,CAAA;KAC1E;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACjE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;KAClC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;KAClC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,oBAAoB;QACpB,OAAO,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KACjH;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,cAAsB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;KAChB;IACD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;QAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAChC;IACD,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,wCAAwC;AACxC,SAAgB,YAAY,CAAC,IAAY,EAAE,cAAsB;IAC/D,OAAO,yBAAyB,CAAC,IAAA,qBAAa,EAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAA;AACvE,CAAC;AAFD,oCAEC;AAED,MAAa,wBAAwB;IACnC,oBAAoB;IACpB,OAAO,CAA0B;IACjC,OAAO,CAAQ;IACf,UAAU,CAAQ;IAElB,YAAY,OAAe,EAAE,YAAoB;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,MAAc;QACvC,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;YAC5B,OAAM;SACP;QACD,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,CAAC,cAAc,EAAE;YACnB,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;SAC1C;QACD,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;CACF;AAvBD,4DAuBC;AAED,MAAa,eAAe;IAC1B,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAA;IAC5D,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IAEnC,oCAAoC;IACpC,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAA;IAExC,kBAAkB,CAAC,IAAY;QACrC,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE5C,oCAAoC;QACpC,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;SACxC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,QAAQ,CAAC,MAAkB,EAAE,YAAoB;QAC/C,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAA;QAE5C,IAAI,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAClE,IAAI,CAAC,oBAAoB,EAAE;YACzB,oBAAoB,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YACjF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;YAC7D,4DAA4D;YAC5D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;SAC5C;QAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;YACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;oBACtE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAA;oBAClD,oBAAoB,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;oBAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;wBACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;qBAClC;iBACF;aACF;SACF;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,SAAQ;aACT;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,EAAE;oBACjE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAA;oBAClD,oBAAoB,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;oBAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;wBACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;qBAClC;iBACF;aACF;SACF;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;QAC/D,OAAO,oBAAoB,CAAA;IAC7B,CAAC;CACF;AA1DD,0CA0DC","sourcesContent":["import { MoveModule } from 'aptos-sdk/src/generated'\nimport { parseMoveType, TypeDescriptor } from '../aptos/types'\nimport { moduleQname, moduleQnameForType, SPLITTER, VECTOR_STR } from '../aptos/utils'\n\nfunction generateTypeForDescriptor(type: TypeDescriptor, currentAddress: string): string {\n // TODO &signer is defintely an address, but what if &OTHER_TYPE?\n if (type.qname.startsWith('&')) {\n return 'Address'\n }\n\n switch (type.qname) {\n case 'signer': // TODO check this\n case 'address':\n return 'Address'\n case '0x1::string::String':\n return 'string'\n case 'bool':\n return 'Boolean'\n case 'u8':\n case 'u16':\n case 'u32':\n return 'number'\n case 'u64':\n case 'u128':\n return 'bigint'\n }\n\n if (type.qname === VECTOR_STR) {\n // vector<u8> as hex string\n const elementTypeQname = type.typeArgs[0].qname\n if (elementTypeQname === 'u8') {\n return 'string'\n }\n if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(SPLITTER)) {\n return `${elementTypeQname}[] | string`\n }\n return generateTypeForDescriptor(type.typeArgs[0], currentAddress) + '[]'\n }\n\n const simpleName = generateSimpleType(type.qname, currentAddress)\n if (simpleName.length === 0) {\n console.error('unexpected error')\n }\n if (simpleName.includes('vector')) {\n console.error('unexpected error')\n }\n if (type.typeArgs.length > 0) {\n // return simpleName\n return simpleName + '<' + type.typeArgs.map((t) => generateTypeForDescriptor(t, currentAddress)).join(',') + '>'\n }\n return simpleName\n}\n\nfunction generateSimpleType(type: string, currentAddress: string): string {\n const parts = type.split(SPLITTER)\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// TODO ctx need to have type parameters\nexport function generateType(type: string, currentAddress: string): string {\n return generateTypeForDescriptor(parseMoveType(type), currentAddress)\n}\n\nexport class AccountModulesImportInfo {\n // account to module\n imports: Map<string, Set<string>>\n account: string\n moduleName: string\n\n constructor(account: string, tsModuleName: string) {\n this.account = account\n this.moduleName = tsModuleName\n this.imports = new Map<string, Set<string>>()\n }\n\n addImport(account: string, module: string) {\n if (account === this.account) {\n return\n }\n let accountModules = this.imports.get(account)\n if (!accountModules) {\n accountModules = new Set<string>()\n this.imports.set(account, accountModules)\n }\n accountModules.add(module)\n }\n}\n\nexport class AccountRegister {\n accountImports = new Map<string, AccountModulesImportInfo>()\n pendingAccounts = new Set<string>()\n\n // loadedAccount = new Set<string>()\n typeRegistry = new Map<string, TypeDescriptor>()\n\n private loadTypeDescriptor(type: string) {\n let descriptor = this.typeRegistry.get(type)\n\n // const descriptparseMoveType(type)\n if (!descriptor) {\n descriptor = parseMoveType(type)\n this.typeRegistry.set(type, descriptor)\n }\n return descriptor\n }\n\n register(module: MoveModule, tsModuleName: string): AccountModulesImportInfo {\n const currentModuleFqn = moduleQname(module)\n\n let accountModuleImports = this.accountImports.get(module.address)\n if (!accountModuleImports) {\n accountModuleImports = new AccountModulesImportInfo(module.address, tsModuleName)\n this.accountImports.set(module.address, accountModuleImports)\n // the account has already be processed, delete pending task\n this.pendingAccounts.delete(module.address)\n }\n\n for (const struct of module.structs) {\n for (const field of struct.fields) {\n for (const type of this.loadTypeDescriptor(field.type).dependedTypes()) {\n const [account, module] = moduleQnameForType(type)\n accountModuleImports.addImport(account, module)\n if (!this.accountImports.has(account)) {\n this.pendingAccounts.add(account)\n }\n }\n }\n }\n\n for (const func of module.exposed_functions) {\n if (!func.is_entry) {\n continue\n }\n for (const param of func.params) {\n for (const type of this.loadTypeDescriptor(param).dependedTypes()) {\n const [account, module] = moduleQnameForType(type)\n accountModuleImports.addImport(account, module)\n if (!this.accountImports.has(account)) {\n this.pendingAccounts.add(account)\n }\n }\n }\n }\n this.accountImports.set(currentModuleFqn, accountModuleImports)\n return accountModuleImports\n }\n}\n"]}