Skip to content

Commit cd56037

Browse files
#98 Allow for descriminate-types options and other typechain flags (#99)
Co-authored-by: Kris Kaczor <chris@kaczor.io>
1 parent 5bb53ba commit cd56037

File tree

5 files changed

+31
-5
lines changed

5 files changed

+31
-5
lines changed

.changeset/strong-islands-call.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@dethcrypto/eth-sdk': patch
3+
---
4+
5+
TypeChain flags can be via eth-sdk config.

packages/eth-sdk/src/client/generateTsClient.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import debug from 'debug'
22
import { join } from 'path'
3+
import { CodegenConfig } from 'typechain'
34

45
import { EthSdkContracts } from '../config'
56
import { Fs, realFs } from '../peripherals/fs'
@@ -13,10 +14,11 @@ export async function generateTsClient(
1314
outputRoot: string,
1415
outputToAbiRelativePath: string,
1516
fs: Fs = realFs,
17+
typechainFlags: CodegenConfig,
1618
) {
1719
d(`Generating ts client to ${outputRoot}`)
1820
const typesOutputPath = join(outputRoot, './types')
19-
await generateTypes(abisRoot, typesOutputPath)
21+
await generateTypes(abisRoot, typesOutputPath, typechainFlags)
2022

2123
const abisRootOut = join(outputRoot, 'abis')
2224
await fs.copy(abisRoot, abisRootOut)

packages/eth-sdk/src/client/generateTypes.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { join } from 'path'
2-
import { glob, runTypeChain } from 'typechain'
2+
import { CodegenConfig, glob, runTypeChain } from 'typechain'
33

4-
export async function generateTypes(abisRoot: string, outputPath: string) {
4+
export async function generateTypes(abisRoot: string, outputPath: string, typechainFlags: CodegenConfig) {
55
const cwd = process.cwd()
66
const files = glob(cwd, [join(abisRoot, '/**/*.json')])
77

@@ -12,5 +12,6 @@ export async function generateTypes(abisRoot: string, outputPath: string) {
1212
target: 'ethers-v5',
1313
outDir: outputPath,
1414
inputDir: abisRoot,
15+
flags: typechainFlags,
1516
})
1617
}

packages/eth-sdk/src/client/index.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { join, relative } from 'path'
2+
import { CodegenConfig } from 'typechain'
23

34
import { EthSdkCtx } from '../types'
45
import { generateTsClient } from './generateTsClient'
@@ -7,7 +8,7 @@ import { transpileClient } from './transpileClient'
78
export async function generateSdk(ctx: EthSdkCtx): Promise<void> {
89
const {
910
cliArgs: { workingDirPath },
10-
config: { contracts, outputPath },
11+
config: { contracts, outputPath, typechainFlags },
1112
fs,
1213
} = ctx
1314

@@ -19,7 +20,17 @@ export async function generateSdk(ctx: EthSdkCtx): Promise<void> {
1920
const outputToAbiRelativePath = relative(outputPath, abisRoot).replace(/\\/g, '/')
2021

2122
const randomTmpDir = await fs.tmpDir('eth-sdk')
22-
await generateTsClient(contracts, abisRoot, randomTmpDir, outputToAbiRelativePath, fs)
23+
24+
const shapedFlag: CodegenConfig = {
25+
discriminateTypes: typechainFlags?.discriminateTypes ?? false,
26+
alwaysGenerateOverloads: typechainFlags?.alwaysGenerateOverloads ?? false,
27+
environment: undefined,
28+
}
29+
if (typechainFlags?.tsNocheck != null) {
30+
shapedFlag.tsNocheck = typechainFlags.tsNocheck
31+
}
32+
33+
await generateTsClient(contracts, abisRoot, randomTmpDir, outputToAbiRelativePath, fs, shapedFlag)
2334
await transpileClient(randomTmpDir, outputPath, fs)
2435
}
2536

packages/eth-sdk/src/config/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ export type NetworkIds = { [key in NetworkSymbol | (string & {})]?: number }
7272

7373
export const networkIdsSchema: z.ZodSchema<NetworkIds> = z.record(z.number())
7474

75+
export const flagsSchema = z.object({
76+
tsNocheck: z.optional(z.boolean()),
77+
discriminateTypes: z.boolean(),
78+
alwaysGenerateOverloads: z.boolean(),
79+
})
80+
7581
const ethSdkConfigSchema = z
7682
.object({
7783
contracts: ethSdKContractsSchema,
@@ -83,6 +89,7 @@ const ethSdkConfigSchema = z
8389
noFollowProxies: z.boolean().optional(),
8490
abiSource: abiSourceSchema.default(DEFAULT_ABI_SOURCE),
8591
networkIds: networkIdsSchema.default({}),
92+
typechainFlags: flagsSchema.optional(),
8693
})
8794
.strict()
8895

0 commit comments

Comments
 (0)