@riaskov/iohtee-abi-wrapper 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/dist/abiWrapper.d.ts +2 -2
- package/dist/abiWrapper.js +30 -6
- package/dist/abiWrapper.js.map +1 -1
- package/dist/bin/iohtee-abi-wrapper.js +4 -4
- package/dist/bin/iohtee-abi-wrapper.js.map +1 -1
- package/dist/contractTemplate.js +26 -5
- package/dist/contractTemplate.js.map +1 -1
- package/package.json +10 -3
- package/templates/contract.ethers.eta +23 -13
- package/templates/contract.viem.eta +25 -19
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ pnpm add -g @riaskov/iohtee-abi-wrapper
|
|
|
24
24
|
## CLI usage
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
iohtee-abi-wrapper [options] <
|
|
27
|
+
iohtee-abi-wrapper [options] <input...>
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Examples:
|
|
@@ -33,6 +33,13 @@ Examples:
|
|
|
33
33
|
# Generate wrappers with default backend (viem)
|
|
34
34
|
iohtee-abi-wrapper -o ./generated ./abi/*
|
|
35
35
|
|
|
36
|
+
# Generate wrappers from directory
|
|
37
|
+
iohtee-abi-wrapper -o ./generated ./abi
|
|
38
|
+
iohtee-abi-wrapper -o ./generated ./abi/
|
|
39
|
+
|
|
40
|
+
# Generate wrappers from multiple explicit files
|
|
41
|
+
iohtee-abi-wrapper -o ./generated ./abi/A.json ./abi/B.json
|
|
42
|
+
|
|
36
43
|
# Explicit viem backend
|
|
37
44
|
iohtee-abi-wrapper -o ./generated -b viem ./abi/*
|
|
38
45
|
|
package/dist/abiWrapper.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ export declare function findNearestTsConfig(startPath: string): string | null;
|
|
|
3
3
|
export declare class AbiWrapper {
|
|
4
4
|
private readonly templatesDir;
|
|
5
5
|
private readonly outputDir;
|
|
6
|
-
private readonly
|
|
6
|
+
private readonly inputs;
|
|
7
7
|
private readonly minify;
|
|
8
8
|
private readonly docsDir;
|
|
9
9
|
private readonly backend;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(inputs: string | string[], outputDir: string, minify?: boolean, docsDir?: string, backend?: WrapperBackend);
|
|
11
11
|
generateDocs(filePath: string): Promise<void>;
|
|
12
12
|
run(): Promise<void>;
|
|
13
13
|
}
|
package/dist/abiWrapper.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.AbiWrapper = void 0;
|
|
|
7
7
|
exports.findNearestTsConfig = findNearestTsConfig;
|
|
8
8
|
const node_fs_1 = require("node:fs");
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
-
const glob_1 = require("glob");
|
|
11
10
|
const typedoc_1 = require("typedoc");
|
|
12
11
|
const contractTemplate_js_1 = __importDefault(require("./contractTemplate.js"));
|
|
13
12
|
function findNearestTsConfig(startPath) {
|
|
@@ -27,15 +26,40 @@ function findNearestTsConfig(startPath) {
|
|
|
27
26
|
currentDir = parentDir;
|
|
28
27
|
}
|
|
29
28
|
}
|
|
29
|
+
function listJsonFiles(directory) {
|
|
30
|
+
return (0, node_fs_1.readdirSync)(directory, { withFileTypes: true })
|
|
31
|
+
.filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.json'))
|
|
32
|
+
.map((entry) => node_path_1.default.join(directory, entry.name))
|
|
33
|
+
.sort((left, right) => left.localeCompare(right));
|
|
34
|
+
}
|
|
35
|
+
function resolveInputFileNames(inputPath) {
|
|
36
|
+
const resolvedPath = node_path_1.default.resolve(inputPath);
|
|
37
|
+
if ((0, node_fs_1.existsSync)(resolvedPath)) {
|
|
38
|
+
const stat = (0, node_fs_1.statSync)(resolvedPath);
|
|
39
|
+
if (stat.isFile()) {
|
|
40
|
+
return [resolvedPath];
|
|
41
|
+
}
|
|
42
|
+
if (stat.isDirectory()) {
|
|
43
|
+
return listJsonFiles(resolvedPath);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (inputPath.endsWith('/*') || inputPath.endsWith('\\*')) {
|
|
47
|
+
const directoryPath = node_path_1.default.resolve(inputPath.slice(0, -2));
|
|
48
|
+
if ((0, node_fs_1.existsSync)(directoryPath) && (0, node_fs_1.statSync)(directoryPath).isDirectory()) {
|
|
49
|
+
return listJsonFiles(directoryPath);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
30
54
|
class AbiWrapper {
|
|
31
55
|
templatesDir;
|
|
32
56
|
outputDir;
|
|
33
|
-
|
|
57
|
+
inputs;
|
|
34
58
|
minify;
|
|
35
59
|
docsDir;
|
|
36
60
|
backend;
|
|
37
|
-
constructor(
|
|
38
|
-
this.
|
|
61
|
+
constructor(inputs, outputDir, minify = false, docsDir, backend = 'viem') {
|
|
62
|
+
this.inputs = Array.isArray(inputs) ? inputs : [inputs];
|
|
39
63
|
this.templatesDir = node_path_1.default.join(__dirname, '../templates');
|
|
40
64
|
this.outputDir = outputDir;
|
|
41
65
|
this.minify = minify;
|
|
@@ -73,9 +97,9 @@ class AbiWrapper {
|
|
|
73
97
|
if (!(0, node_fs_1.existsSync)(this.outputDir)) {
|
|
74
98
|
(0, node_fs_1.mkdirSync)(this.outputDir, { recursive: true });
|
|
75
99
|
}
|
|
76
|
-
const fileNames =
|
|
100
|
+
const fileNames = [...new Set(this.inputs.flatMap(resolveInputFileNames))];
|
|
77
101
|
if (!fileNames.length) {
|
|
78
|
-
throw new Error(`No contract artifact found at ${this.
|
|
102
|
+
throw new Error(`No contract artifact found at ${this.inputs.join(', ')}. Supported inputs: a .json file, a directory, or directory/*`);
|
|
79
103
|
}
|
|
80
104
|
if (this.docsDir) {
|
|
81
105
|
const docsDirFull = node_path_1.default.resolve(this.docsDir);
|
package/dist/abiWrapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abiWrapper.js","sourceRoot":"","sources":["../src/abiWrapper.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"abiWrapper.js","sourceRoot":"","sources":["../src/abiWrapper.ts"],"names":[],"mappings":";;;;;;AAMA,kDAkBC;AAxBD,qCAA8E;AAC9E,0DAA4B;AAC5B,qCAAoE;AACpE,gFAAoD;AAGpD,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,IAAI,UAAU,GAAG,SAAS,CAAA;IAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;QAC3D,IAAI,IAAA,oBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,YAAY,CAAA;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC1C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,UAAU,GAAG,SAAS,CAAA;IACxB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,IAAA,qBAAW,EAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACnD,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CACxE;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAChD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,MAAM,YAAY,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAE5C,IAAI,IAAA,oBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAA,kBAAQ,EAAC,YAAY,CAAC,CAAA;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,YAAY,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,aAAa,CAAC,YAAY,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAI,IAAA,oBAAU,EAAC,aAAa,CAAC,IAAI,IAAA,kBAAQ,EAAC,aAAa,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,OAAO,aAAa,CAAC,aAAa,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAa,UAAU;IACJ,YAAY,CAAQ;IACpB,SAAS,CAAQ;IACjB,MAAM,CAAU;IAChB,MAAM,CAAS;IACf,OAAO,CAAoB;IAC3B,OAAO,CAAgB;IAExC,YACE,MAAyB,EACzB,SAAiB,EACjB,MAAM,GAAG,KAAK,EACd,OAAgB,EAChB,UAA0B,MAAM;QAEhC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE9C,MAAM,QAAQ,GAAG,mBAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAA;QAC1C,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAElD,MAAM,GAAG,GAAG,MAAM,qBAAW,CAAC,SAAS,CAAC;YACtC,WAAW,EAAE,CAAC,QAAQ,CAAC;YACvB,GAAG,EAAE,SAAS;YACd,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,YAAY;YACtB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,wBAAc,EAAE,CAAC,CAAA;QAC3C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,uBAAa,EAAE,CAAC,CAAA;QAE1C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,IAAA,mBAAS,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CACvH,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAA,gBAAM,EAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACrD,IAAA,mBAAS,EAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,6BAAgB,CACtC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,CACb,CAAA;YACD,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAE/C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAQ;YAE3B,MAAM,QAAQ,GAAG,mBAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;YAChE,MAAM,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,aAAa,CAAC,CAAA;YACzE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;CACF;AA3FD,gCA2FC"}
|
|
@@ -10,7 +10,7 @@ const index_js_1 = require("../index.js");
|
|
|
10
10
|
async function main() {
|
|
11
11
|
const args = (await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
12
12
|
.scriptName('iohtee-abi-wrapper')
|
|
13
|
-
.usage('$0 [options] <
|
|
13
|
+
.usage('$0 [options] <input>')
|
|
14
14
|
.option('output', {
|
|
15
15
|
describe: 'Folder for generated files',
|
|
16
16
|
alias: 'o',
|
|
@@ -39,10 +39,10 @@ async function main() {
|
|
|
39
39
|
.help()
|
|
40
40
|
.parse());
|
|
41
41
|
if (!args._.length) {
|
|
42
|
-
throw new Error('No ABI
|
|
42
|
+
throw new Error('No ABI input path provided.');
|
|
43
43
|
}
|
|
44
|
-
const
|
|
45
|
-
const abiWrapper = new index_js_1.AbiWrapper(
|
|
44
|
+
const inputs = args._.map((value) => String(value));
|
|
45
|
+
const abiWrapper = new index_js_1.AbiWrapper(inputs, args.output, args.minify, args.docs, args.backend);
|
|
46
46
|
await abiWrapper.run();
|
|
47
47
|
}
|
|
48
48
|
main().catch((error) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iohtee-abi-wrapper.js","sourceRoot":"","sources":["../../src/bin/iohtee-abi-wrapper.ts"],"names":[],"mappings":";;;;;;AAEA,kDAAyB;AACzB,2CAAuC;AACvC,0CAAwC;AAWxC,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7C,UAAU,CAAC,oBAAoB,CAAC;SAChC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"iohtee-abi-wrapper.js","sourceRoot":"","sources":["../../src/bin/iohtee-abi-wrapper.ts"],"names":[],"mappings":";;;;;;AAEA,kDAAyB;AACzB,2CAAuC;AACvC,0CAAwC;AAWxC,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7C,UAAU,CAAC,oBAAoB,CAAC;SAChC,KAAK,CAAC,sBAAsB,CAAC;SAC7B,MAAM,CAAC,QAAQ,EAAE;QAChB,QAAQ,EAAE,4BAA4B;QACtC,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,QAAQ,EAAE,iCAAiC;QAC3C,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,QAAQ,EAAE,2BAA2B;QACrC,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,QAAQ,EAAE,kCAAkC;QAC5C,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;QACpC,OAAO,EAAE,MAAe;KACzB,CAAC;SACD,aAAa,EAAE;SACf,aAAa,CAAC,CAAC,CAAC;SAChB,IAAI,EAAE;SACN,KAAK,EAAE,CAAY,CAAA;IAEtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,IAAI,qBAAU,CAC/B,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,CACb,CAAA;IAED,MAAM,UAAU,CAAC,GAAG,EAAE,CAAA;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/contractTemplate.js
CHANGED
|
@@ -7,6 +7,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
7
7
|
const node_fs_1 = require("node:fs");
|
|
8
8
|
const esbuild_1 = require("esbuild");
|
|
9
9
|
const eta_1 = require("eta");
|
|
10
|
+
const prettier_1 = require("prettier");
|
|
10
11
|
const helpers_js_1 = require("./helpers.js");
|
|
11
12
|
const ABI_TYPE_FUNCTION = 'function';
|
|
12
13
|
const ABI_TYPE_EVENT = 'event';
|
|
@@ -41,6 +42,22 @@ function normalizeMethods(abiMethods) {
|
|
|
41
42
|
return normalized;
|
|
42
43
|
});
|
|
43
44
|
}
|
|
45
|
+
function parseArtifactOrRawAbi(abiFilePath, fileContent) {
|
|
46
|
+
const parsed = JSON.parse(fileContent);
|
|
47
|
+
if (Array.isArray(parsed)) {
|
|
48
|
+
return { abi: parsed };
|
|
49
|
+
}
|
|
50
|
+
if (parsed && typeof parsed === 'object') {
|
|
51
|
+
const artifact = parsed;
|
|
52
|
+
if (Array.isArray(artifact.abi)) {
|
|
53
|
+
return {
|
|
54
|
+
...artifact,
|
|
55
|
+
abi: artifact.abi,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`No ABI found in ${abiFilePath}. Expected either a raw ABI array or an artifact object with "abi".`);
|
|
60
|
+
}
|
|
44
61
|
class ContractTemplate {
|
|
45
62
|
eta;
|
|
46
63
|
outputDir;
|
|
@@ -55,11 +72,8 @@ class ContractTemplate {
|
|
|
55
72
|
this.backend = backend;
|
|
56
73
|
}
|
|
57
74
|
async render(abiFilePath, minified) {
|
|
58
|
-
const artifact =
|
|
75
|
+
const artifact = parseArtifactOrRawAbi(abiFilePath, (0, node_fs_1.readFileSync)(abiFilePath, 'utf8'));
|
|
59
76
|
const abi = artifact.abi;
|
|
60
|
-
if (!abi) {
|
|
61
|
-
throw new Error(`No ABI found in ${abiFilePath}.`);
|
|
62
|
-
}
|
|
63
77
|
const sourceAbi = JSON.stringify(abi);
|
|
64
78
|
const methods = normalizeMethods(abi.filter(isAbiFunction));
|
|
65
79
|
const getters = methods.filter((method) => method.stateMutability === 'view' || method.stateMutability === 'pure');
|
|
@@ -87,7 +101,14 @@ class ContractTemplate {
|
|
|
87
101
|
if (!code) {
|
|
88
102
|
throw new Error(`Unable to render template: ${templateName}`);
|
|
89
103
|
}
|
|
90
|
-
(0,
|
|
104
|
+
const formattedCode = await (0, prettier_1.format)(code, {
|
|
105
|
+
parser: 'typescript',
|
|
106
|
+
singleQuote: true,
|
|
107
|
+
semi: false,
|
|
108
|
+
trailingComma: 'all',
|
|
109
|
+
printWidth: 80,
|
|
110
|
+
});
|
|
111
|
+
(0, node_fs_1.writeFileSync)(filePath, formattedCode, 'utf8');
|
|
91
112
|
if (!minified)
|
|
92
113
|
return;
|
|
93
114
|
await (0, esbuild_1.build)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractTemplate.js","sourceRoot":"","sources":["../src/contractTemplate.ts"],"names":[],"mappings":";;;;;AAAA,0DAA4B;AAC5B,qCAAqD;AAErD,qCAA+B;AAC/B,6BAAyB;
|
|
1
|
+
{"version":3,"file":"contractTemplate.js","sourceRoot":"","sources":["../src/contractTemplate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riaskov/iohtee-abi-wrapper",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "Generate TypeScript wrapper class for Solidity smart contract ABI",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Machinomy Team <hello@machinomy.com>",
|
|
@@ -36,6 +36,14 @@
|
|
|
36
36
|
"main": "dist/index.js",
|
|
37
37
|
"types": "dist/index.d.ts",
|
|
38
38
|
"bin": "dist/bin/iohtee-abi-wrapper.js",
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"types": "./dist/index.d.ts",
|
|
42
|
+
"import": "./dist/index.js",
|
|
43
|
+
"require": "./dist/index.js",
|
|
44
|
+
"default": "./dist/index.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
39
47
|
"files": [
|
|
40
48
|
"dist/",
|
|
41
49
|
"templates/"
|
|
@@ -44,7 +52,7 @@
|
|
|
44
52
|
"esbuild": "^0.25.9",
|
|
45
53
|
"eta": "^3.5.0",
|
|
46
54
|
"ethers": "^6.15.0",
|
|
47
|
-
"
|
|
55
|
+
"prettier": "^3.6.2",
|
|
48
56
|
"typedoc": "^0.28.14",
|
|
49
57
|
"viem": "^2.45.0",
|
|
50
58
|
"yargs": "^17.7.2"
|
|
@@ -53,7 +61,6 @@
|
|
|
53
61
|
"@types/node": "^22.13.4",
|
|
54
62
|
"@types/yargs": "^17.0.33",
|
|
55
63
|
"docsify-cli": "^4.4.4",
|
|
56
|
-
"prettier": "^3.6.2",
|
|
57
64
|
"rimraf": "^6.0.1",
|
|
58
65
|
"tsx": "^4.20.3",
|
|
59
66
|
"typedoc-plugin-markdown": "^4.9.0",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/* tslint:disable */
|
|
1
3
|
import { Interface, TransactionReceipt, type InterfaceAbi } from 'ethers'
|
|
2
4
|
import {
|
|
3
5
|
BaseContractEthers,
|
|
@@ -13,40 +15,48 @@ export interface <%= it.contractName %>Event {
|
|
|
13
15
|
log: unknown
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
<% it.events.forEach((event) => {
|
|
18
|
+
<% it.events.forEach((event, eventIndex) => { -%>
|
|
17
19
|
export interface <%= event.name %> {
|
|
18
|
-
<% if (event.inputs.length) {
|
|
20
|
+
<% if (event.inputs.length) { -%>
|
|
19
21
|
args: {
|
|
20
|
-
<% event.inputs.forEach((input, index) => {
|
|
22
|
+
<% event.inputs.forEach((input, index) => { -%>
|
|
21
23
|
<%= input.name || `arg${index}` %>: <%= it.helpers.renderType(input.type, input.components) %>
|
|
22
|
-
<% })
|
|
24
|
+
<% }) -%>
|
|
23
25
|
}
|
|
24
|
-
<% }
|
|
26
|
+
<% } -%>
|
|
25
27
|
}
|
|
28
|
+
<% if (eventIndex < it.events.length - 1) { -%>
|
|
26
29
|
|
|
27
|
-
<% }
|
|
30
|
+
<% } -%>
|
|
31
|
+
<% }) -%>
|
|
28
32
|
export enum <%= it.contractName %>EventName {
|
|
29
|
-
<% it.events.forEach((event, index) => {
|
|
30
|
-
<%= event.name %> =
|
|
31
|
-
<% })
|
|
33
|
+
<% it.events.forEach((event, index) => { -%>
|
|
34
|
+
<%= event.name %> = '<%= event.name %>'<%= index < it.events.length - 1 ? ',' : '' %>
|
|
35
|
+
<% }) -%>
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
const abi = JSON.parse(
|
|
38
|
+
const abi = JSON.parse(
|
|
39
|
+
`<%= it.abi %>`,
|
|
40
|
+
) as InterfaceAbi
|
|
35
41
|
|
|
36
42
|
export class <%= it.contractName %>Contract extends BaseContractEthers {
|
|
37
43
|
/// GETTERS
|
|
38
44
|
<% it.getters.forEach((method) => { %>
|
|
39
45
|
async <%= method.name %><%= method.namePostfix ?? '' %>(<%= it.helpers.renderMethodInput(method.inputs) %>): Promise<<%= it.helpers.renderMethodOutput(method) %>> {
|
|
40
|
-
|
|
46
|
+
<% if (method.inputs.length) { %>
|
|
47
|
+
return (await this.contract().getFunction('<%= method.name %>')(
|
|
41
48
|
<%= it.helpers.renderParams(method.inputs) %>
|
|
42
49
|
)) as <%= it.helpers.renderMethodOutput(method) %>
|
|
50
|
+
<% } else { %>
|
|
51
|
+
return (await this.contract().getFunction('<%= method.name %>')()) as <%= it.helpers.renderMethodOutput(method) %>
|
|
52
|
+
<% } %>
|
|
43
53
|
}
|
|
44
54
|
|
|
45
55
|
<% }) %>
|
|
46
56
|
/// SETTERS
|
|
47
57
|
<% it.functions.forEach((method) => { %>
|
|
48
58
|
async <%= method.name %><%= method.namePostfix ?? '' %>(<%= it.helpers.renderMethodInput(method.inputs, true) %>options?: TxOptions): Promise<TransactionReceipt> {
|
|
49
|
-
const fn = this.contract().getFunction(
|
|
59
|
+
const fn = this.contract().getFunction('<%= method.name %>')
|
|
50
60
|
const args = [<%= it.helpers.renderParams(method.inputs) %>] as const
|
|
51
61
|
|
|
52
62
|
const tx = await (options?.value !== undefined
|
|
@@ -60,7 +70,7 @@ export class <%= it.contractName %>Contract extends BaseContractEthers {
|
|
|
60
70
|
/// EVENTS
|
|
61
71
|
<% it.events.forEach((event) => { %>
|
|
62
72
|
is<%= event.name %>Event(eventName: string): boolean {
|
|
63
|
-
return eventName ===
|
|
73
|
+
return eventName === '<%= event.name %>'
|
|
64
74
|
}
|
|
65
75
|
|
|
66
76
|
<% }) %>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/* tslint:disable */
|
|
1
3
|
import {
|
|
2
4
|
TransactionReceipt,
|
|
3
5
|
parseEventLogs,
|
|
@@ -13,7 +15,7 @@ export { isCtorAccountParamPure, CtorParams, TxOptions }
|
|
|
13
15
|
|
|
14
16
|
export interface <%= it.contractName %>Event {
|
|
15
17
|
eventName: string
|
|
16
|
-
args:
|
|
18
|
+
args: unknown
|
|
17
19
|
address: `0x${string}`
|
|
18
20
|
blockHash: `0x${string}`
|
|
19
21
|
blockNumber: bigint
|
|
@@ -25,25 +27,29 @@ export interface <%= it.contractName %>Event {
|
|
|
25
27
|
transactionIndex: number
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
<% it.events.forEach((event) => {
|
|
30
|
+
<% it.events.forEach((event, eventIndex) => { -%>
|
|
29
31
|
export interface <%= event.name %> {
|
|
30
|
-
<% if (event.inputs.length) {
|
|
32
|
+
<% if (event.inputs.length) { -%>
|
|
31
33
|
args: {
|
|
32
|
-
<% event.inputs.forEach((input, index) => {
|
|
34
|
+
<% event.inputs.forEach((input, index) => { -%>
|
|
33
35
|
<%= input.name || `arg${index}` %>: <%= it.helpers.renderType(input.type, input.components) %>
|
|
34
|
-
<% })
|
|
36
|
+
<% }) -%>
|
|
35
37
|
}
|
|
36
|
-
<% }
|
|
38
|
+
<% } -%>
|
|
37
39
|
}
|
|
40
|
+
<% if (eventIndex < it.events.length - 1) { -%>
|
|
38
41
|
|
|
39
|
-
<% }
|
|
42
|
+
<% } -%>
|
|
43
|
+
<% }) -%>
|
|
40
44
|
export enum <%= it.contractName %>EventName {
|
|
41
|
-
<% it.events.forEach((event, index) => {
|
|
42
|
-
<%= event.name %> =
|
|
43
|
-
<% })
|
|
45
|
+
<% it.events.forEach((event, index) => { -%>
|
|
46
|
+
<%= event.name %> = '<%= event.name %>'<%= index < it.events.length - 1 ? ',' : '' %>
|
|
47
|
+
<% }) -%>
|
|
44
48
|
}
|
|
45
49
|
|
|
46
|
-
const abi = JSON.parse(
|
|
50
|
+
const abi = JSON.parse(
|
|
51
|
+
`<%= it.abi %>`,
|
|
52
|
+
)
|
|
47
53
|
|
|
48
54
|
export class <%= it.contractName %>Contract extends BaseContractViem {
|
|
49
55
|
/// GETTERS
|
|
@@ -52,7 +58,7 @@ export class <%= it.contractName %>Contract extends BaseContractViem {
|
|
|
52
58
|
return (await this.publicClient().readContract({
|
|
53
59
|
address: this.address(),
|
|
54
60
|
abi: this.abi(),
|
|
55
|
-
functionName:
|
|
61
|
+
functionName: '<%= method.name %>',
|
|
56
62
|
args: [<%= it.helpers.renderParams(method.inputs) %>],
|
|
57
63
|
})) as never as <%= it.helpers.renderMethodOutput(method) %>
|
|
58
64
|
}
|
|
@@ -60,12 +66,12 @@ export class <%= it.contractName %>Contract extends BaseContractViem {
|
|
|
60
66
|
<% }) %>
|
|
61
67
|
/// SETTERS
|
|
62
68
|
<% it.functions.forEach((method) => { %>
|
|
63
|
-
async <%= method.name %><%= method.namePostfix ?? '' %>(<%= it.helpers.renderMethodInput(method.inputs, true) %>options?: TxOptions): Promise<TransactionReceipt>{
|
|
69
|
+
async <%= method.name %><%= method.namePostfix ?? '' %>(<%= it.helpers.renderMethodInput(method.inputs, true) %>options?: TxOptions): Promise<TransactionReceipt> {
|
|
64
70
|
const { request } = await this.publicClient().simulateContract({
|
|
65
71
|
chain: this.walletClient().chain,
|
|
66
72
|
address: this.address(),
|
|
67
73
|
abi: this.abi(),
|
|
68
|
-
functionName:
|
|
74
|
+
functionName: '<%= method.name %>',
|
|
69
75
|
args: [<%= it.helpers.renderParams(method.inputs) %>],
|
|
70
76
|
account: this.walletClient().account,
|
|
71
77
|
value: options?.value,
|
|
@@ -83,7 +89,7 @@ export class <%= it.contractName %>Contract extends BaseContractViem {
|
|
|
83
89
|
/// EVENTS
|
|
84
90
|
<% it.events.forEach((event) => { %>
|
|
85
91
|
is<%= event.name %>Event(eventName: string): boolean {
|
|
86
|
-
return eventName ===
|
|
92
|
+
return eventName === '<%= event.name %>'
|
|
87
93
|
}
|
|
88
94
|
|
|
89
95
|
<% }) %>
|
|
@@ -91,19 +97,19 @@ export class <%= it.contractName %>Contract extends BaseContractViem {
|
|
|
91
97
|
return parseEventLogs({
|
|
92
98
|
abi: abi as any,
|
|
93
99
|
logs: receipt.logs,
|
|
94
|
-
}) as
|
|
100
|
+
}) as ParseEventLogsReturnType
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
static hasEvent(receipt: TransactionReceipt, eventName: <%= it.contractName %>EventName): boolean {
|
|
98
|
-
return
|
|
104
|
+
return this.parseLogs(receipt).some((log: any) => log.eventName === eventName)
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
static extractEventFromReceipt<T>(receipt: TransactionReceipt, eventName: <%= it.contractName %>EventName): T {
|
|
102
|
-
return
|
|
108
|
+
return this.parseLogs(receipt).find((log: any) => log.eventName === eventName) as T
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
static parseEvents(receipt: TransactionReceipt): <%= it.contractName %>Event[] {
|
|
106
|
-
return
|
|
112
|
+
return this.parseLogs(receipt).map((log: any) => ({
|
|
107
113
|
eventName: log.eventName,
|
|
108
114
|
args: log.args,
|
|
109
115
|
address: log.address,
|