From cd56037a850a49274d7cb0434bd415291068acf9 Mon Sep 17 00:00:00 2001 From: Shravan Sunder Date: Sun, 15 May 2022 16:19:53 -0400 Subject: [PATCH] #98 Allow for descriminate-types options and other typechain flags (#99) Co-authored-by: Kris Kaczor --- .changeset/strong-islands-call.md | 5 +++++ packages/eth-sdk/src/client/generateTsClient.ts | 4 +++- packages/eth-sdk/src/client/generateTypes.ts | 5 +++-- packages/eth-sdk/src/client/index.ts | 15 +++++++++++++-- packages/eth-sdk/src/config/types.ts | 7 +++++++ 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 .changeset/strong-islands-call.md diff --git a/.changeset/strong-islands-call.md b/.changeset/strong-islands-call.md new file mode 100644 index 0000000..cf89636 --- /dev/null +++ b/.changeset/strong-islands-call.md @@ -0,0 +1,5 @@ +--- +'@dethcrypto/eth-sdk': patch +--- + +TypeChain flags can be via eth-sdk config. diff --git a/packages/eth-sdk/src/client/generateTsClient.ts b/packages/eth-sdk/src/client/generateTsClient.ts index 36d2324..f795fd6 100644 --- a/packages/eth-sdk/src/client/generateTsClient.ts +++ b/packages/eth-sdk/src/client/generateTsClient.ts @@ -1,5 +1,6 @@ import debug from 'debug' import { join } from 'path' +import { CodegenConfig } from 'typechain' import { EthSdkContracts } from '../config' import { Fs, realFs } from '../peripherals/fs' @@ -13,10 +14,11 @@ export async function generateTsClient( outputRoot: string, outputToAbiRelativePath: string, fs: Fs = realFs, + typechainFlags: CodegenConfig, ) { d(`Generating ts client to ${outputRoot}`) const typesOutputPath = join(outputRoot, './types') - await generateTypes(abisRoot, typesOutputPath) + await generateTypes(abisRoot, typesOutputPath, typechainFlags) const abisRootOut = join(outputRoot, 'abis') await fs.copy(abisRoot, abisRootOut) diff --git a/packages/eth-sdk/src/client/generateTypes.ts b/packages/eth-sdk/src/client/generateTypes.ts index ef1e8a3..ba9cd85 100644 --- a/packages/eth-sdk/src/client/generateTypes.ts +++ b/packages/eth-sdk/src/client/generateTypes.ts @@ -1,7 +1,7 @@ import { join } from 'path' -import { glob, runTypeChain } from 'typechain' +import { CodegenConfig, glob, runTypeChain } from 'typechain' -export async function generateTypes(abisRoot: string, outputPath: string) { +export async function generateTypes(abisRoot: string, outputPath: string, typechainFlags: CodegenConfig) { const cwd = process.cwd() const files = glob(cwd, [join(abisRoot, '/**/*.json')]) @@ -12,5 +12,6 @@ export async function generateTypes(abisRoot: string, outputPath: string) { target: 'ethers-v5', outDir: outputPath, inputDir: abisRoot, + flags: typechainFlags, }) } diff --git a/packages/eth-sdk/src/client/index.ts b/packages/eth-sdk/src/client/index.ts index 4491343..b17c450 100644 --- a/packages/eth-sdk/src/client/index.ts +++ b/packages/eth-sdk/src/client/index.ts @@ -1,4 +1,5 @@ import { join, relative } from 'path' +import { CodegenConfig } from 'typechain' import { EthSdkCtx } from '../types' import { generateTsClient } from './generateTsClient' @@ -7,7 +8,7 @@ import { transpileClient } from './transpileClient' export async function generateSdk(ctx: EthSdkCtx): Promise { const { cliArgs: { workingDirPath }, - config: { contracts, outputPath }, + config: { contracts, outputPath, typechainFlags }, fs, } = ctx @@ -19,7 +20,17 @@ export async function generateSdk(ctx: EthSdkCtx): Promise { const outputToAbiRelativePath = relative(outputPath, abisRoot).replace(/\\/g, '/') const randomTmpDir = await fs.tmpDir('eth-sdk') - await generateTsClient(contracts, abisRoot, randomTmpDir, outputToAbiRelativePath, fs) + + const shapedFlag: CodegenConfig = { + discriminateTypes: typechainFlags?.discriminateTypes ?? false, + alwaysGenerateOverloads: typechainFlags?.alwaysGenerateOverloads ?? false, + environment: undefined, + } + if (typechainFlags?.tsNocheck != null) { + shapedFlag.tsNocheck = typechainFlags.tsNocheck + } + + await generateTsClient(contracts, abisRoot, randomTmpDir, outputToAbiRelativePath, fs, shapedFlag) await transpileClient(randomTmpDir, outputPath, fs) } diff --git a/packages/eth-sdk/src/config/types.ts b/packages/eth-sdk/src/config/types.ts index 3c9d186..cbfbe82 100644 --- a/packages/eth-sdk/src/config/types.ts +++ b/packages/eth-sdk/src/config/types.ts @@ -72,6 +72,12 @@ export type NetworkIds = { [key in NetworkSymbol | (string & {})]?: number } export const networkIdsSchema: z.ZodSchema = z.record(z.number()) +export const flagsSchema = z.object({ + tsNocheck: z.optional(z.boolean()), + discriminateTypes: z.boolean(), + alwaysGenerateOverloads: z.boolean(), +}) + const ethSdkConfigSchema = z .object({ contracts: ethSdKContractsSchema, @@ -83,6 +89,7 @@ const ethSdkConfigSchema = z noFollowProxies: z.boolean().optional(), abiSource: abiSourceSchema.default(DEFAULT_ABI_SOURCE), networkIds: networkIdsSchema.default({}), + typechainFlags: flagsSchema.optional(), }) .strict()