@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 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] <glob-pattern>
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
 
@@ -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 pattern;
6
+ private readonly inputs;
7
7
  private readonly minify;
8
8
  private readonly docsDir;
9
9
  private readonly backend;
10
- constructor(pattern: string, outputDir: string, minify?: boolean, docsDir?: string, backend?: WrapperBackend);
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
  }
@@ -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
- pattern;
57
+ inputs;
34
58
  minify;
35
59
  docsDir;
36
60
  backend;
37
- constructor(pattern, outputDir, minify = false, docsDir, backend = 'viem') {
38
- this.pattern = pattern;
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 = (0, glob_1.globSync)(this.pattern);
100
+ const fileNames = [...new Set(this.inputs.flatMap(resolveInputFileNames))];
77
101
  if (!fileNames.length) {
78
- throw new Error(`No contract artifact found at ${this.pattern}`);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"abiWrapper.js","sourceRoot":"","sources":["../src/abiWrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abiWrapper.js","sourceRoot":"","sources":["../src/abiWrapper.ts"],"names":[],"mappings":"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"}
@@ -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] <glob-pattern>')
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 glob-pattern provided.');
42
+ throw new Error('No ABI input path provided.');
43
43
  }
44
- const pattern = String(args._[0]);
45
- const abiWrapper = new index_js_1.AbiWrapper(pattern, args.output, args.minify, args.docs, args.backend);
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,6BAA6B,CAAC;SACpC,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,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,IAAI,qBAAU,CAC/B,OAAO,EACP,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"}
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"}
@@ -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 = JSON.parse((0, node_fs_1.readFileSync)(abiFilePath, 'utf8'));
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, node_fs_1.writeFileSync)(filePath, code, 'utf8');
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":"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"}
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.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
- "glob": "^11.0.3",
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 %> = "<%= event.name %>"<%= index < it.events.length - 1 ? ',' : '' %>
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(`<%= it.abi %>`) as InterfaceAbi
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
- return (await this.contract().getFunction("<%= method.name %>")(
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("<%= method.name %>")
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 === "<%= event.name %>"
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: any
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 %> = "<%= event.name %>"<%= index < it.events.length - 1 ? ',' : '' %>
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(`<%= it.abi %>`)
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: "<%= method.name %>",
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: "<%= method.name %>",
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 === "<%= event.name %>"
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 any
100
+ }) as ParseEventLogsReturnType
95
101
  }
96
102
 
97
103
  static hasEvent(receipt: TransactionReceipt, eventName: <%= it.contractName %>EventName): boolean {
98
- return parseEventLogs({ abi: abi, logs: receipt.logs }).some((log: any) => log.eventName === eventName)
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 parseEventLogs({ abi: abi, logs: receipt.logs }).find((log: any) => log.eventName === eventName) as T
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 parseEventLogs({ abi: abi, logs: receipt.logs }).map((log: any) => ({
112
+ return this.parseLogs(receipt).map((log: any) => ({
107
113
  eventName: log.eventName,
108
114
  args: log.args,
109
115
  address: log.address,