Skip to content

Commit

Permalink
Merge pull request #3 from gnosisguild/upgrade-typechain-ethers
Browse files Browse the repository at this point in the history
fix: code generation for ethers v6 + typescript compilation
  • Loading branch information
jfschwarz authored Aug 28, 2024
2 parents a1e049d + ce2c5ac commit 137be2d
Show file tree
Hide file tree
Showing 12 changed files with 41 additions and 48 deletions.
6 changes: 6 additions & 0 deletions .changeset/ninety-seals-push.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@gnosis-guild/eth-sdk": patch
"test-e2e": patch
---

fix: code generation for ethers v6 + typescript compilation
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,19 @@
"@typescript-eslint/parser": "^5.3.0",
"dotenv": "^10.0.0",
"earljs": "^0.1.10",
"eslint": "^7",
"eslint-config-typestrict": "^1.0.2",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-no-only-tests": "^2.6.0",
"eslint-plugin-simple-import-sort": "^7.0.0",
"eslint-plugin-sonarjs": "^0.10.0",
"eslint-plugin-unused-imports": "^1.1.5",
"eslint": "^7",
"mocha": "^9.1.3",
"prettier": "^2.4.1",
"proxyquire": "^2.1.3",
"ts-essentials": "^9.0.0",
"ts-node": "^10.4.0",
"typescript": "5.3.3",
"typescript": "^5.5.4",
"wsrun": "^5.2.4"
}
}
}
1 change: 0 additions & 1 deletion packages/eth-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
"lodash": "^4.17.21",
"mkdirp": "^1.0.4",
"ora": "^5.4.1",
"tmp-promise": "^3.0.3",
"typechain": "^8.0.0",
"zod": "^3.11.5"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/eth-sdk/src/client/generateIndex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ export async function generateIndex(
const indexPath = join(outputPath, './index.ts')

const index = `
import { providers, Signer, Contract } from 'ethers'
import { Provider, Signer, Contract, Interface, InterfaceAbi } from 'ethers'
import * as types from './types'
${await getAbiImports(contracts, outputToAbiRelativePath)}
export function getContract(address: string, abi: object, defaultSignerOrProvider: Signer | providers.Provider) {
export function getContract(address: string, abi: Interface | InterfaceAbi, defaultSignerOrProvider: Signer | Provider): unknown {
return new Contract(address, abi, defaultSignerOrProvider)
}
Expand Down Expand Up @@ -63,7 +63,7 @@ function generateNetworkSdk(networkSymbol: NetworkSymbol, sdkDef: EthSdkContract

return `
export type ${network}Sdk = ReturnType<typeof get${network}Sdk>
export function get${network}Sdk(defaultSignerOrProvider: Signer | providers.Provider) {
export function get${network}Sdk(defaultSignerOrProvider: Signer | Provider) {
return ${generateBody(nestedAddresses, [networkSymbol], true)}
}
`
Expand Down
10 changes: 6 additions & 4 deletions packages/eth-sdk/src/client/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ export async function generateSdk(ctx: EthSdkCtx): Promise<void> {

await fs.ensureDir(outputPath)

const tmpDirPath = join(workingDirPath, 'tmp')
await fs.ensureDir(tmpDirPath)

await copyStaticFiles(ctx)

const abisRoot = join(workingDirPath, 'abis')
const outputToAbiRelativePath = relative(outputPath, abisRoot).replace(/\\/g, '/')

const randomTmpDir = await fs.tmpDir('eth-sdk')

const shapedFlag: CodegenConfig = {
discriminateTypes: typechainFlags?.discriminateTypes ?? false,
alwaysGenerateOverloads: typechainFlags?.alwaysGenerateOverloads ?? false,
Expand All @@ -30,8 +31,9 @@ export async function generateSdk(ctx: EthSdkCtx): Promise<void> {
shapedFlag.tsNocheck = typechainFlags.tsNocheck
}

await generateTsClient(contracts, abisRoot, randomTmpDir, outputToAbiRelativePath, fs, shapedFlag)
await transpileClient(randomTmpDir, outputPath, fs)
await generateTsClient(contracts, abisRoot, tmpDirPath, outputToAbiRelativePath, fs, shapedFlag)
await transpileClient(tmpDirPath, outputPath, fs)
fs.rmDir(tmpDirPath)
}

async function copyStaticFiles({ fs, config }: EthSdkCtx) {
Expand Down
2 changes: 1 addition & 1 deletion packages/eth-sdk/src/client/transpileClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export async function transpileClient(clientPath: string, outputPath: string, fs
rootDir: clientPath,
resolveJsonModule: true,
esModuleInterop: true,
moduleResolution: tsc.ModuleResolutionKind.NodeJs,
moduleResolution: tsc.ModuleResolutionKind.Node10,
}
const host = tsc.createCompilerHost(options)
host.getCurrentDirectory = () => clientPath
Expand Down
10 changes: 4 additions & 6 deletions packages/eth-sdk/src/peripherals/fs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import fs from 'fs'
import fsExtra from 'fs-extra'
import glob, { IOptions as GlobOptions } from 'glob'
import mkdirp from 'mkdirp'
import { dir as tmpDir } from 'tmp-promise'
import { promisify } from 'util'

export interface Fs {
Expand All @@ -11,8 +10,8 @@ export interface Fs {
ensureDir(path: string): Promise<void>
copy(src: string, dest: string): Promise<void>
readDir(path: string): Promise<string[]>
tmpDir(prefix: string): Promise<string>
glob(pattern: string, options?: GlobOptions | undefined): Promise<string[]>
rmDir(path: string): void
}

export const realFs: Fs = {
Expand All @@ -23,9 +22,8 @@ export const realFs: Fs = {
},
copy: (src, dest) => fsExtra.copy(src, dest),
readDir: (path) => fsExtra.readdir(path),
tmpDir: async (prefix) => {
const { path } = await tmpDir({ prefix })
return path
},
glob: promisify(glob),
rmDir: (path) => {
fs.rmdirSync(path, { recursive: true })
},
}
11 changes: 6 additions & 5 deletions packages/eth-sdk/test/filesystemMock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,15 @@ export function mockFilesystem(files: Record<FilePath, FileContents | DirectoryM
async readDir(path) {
return Object.keys(files).filter((file) => file.startsWith(normalize(path)))
},
async tmpDir(prefix) {
const dir = `${normalize(prefix)}-${Math.random()}`
files[dir] = DirectoryMarker
return dir
},
async glob(pattern, options) {
return Object.keys(files).filter(minimatch.filter(pattern, options))
},
rmDir(path) {
if (files[normalize(path)] !== DirectoryMarker) {
throw new Error('Not a directory')
}
delete files[normalize(path)]
},
}

const fsMocks = Object.fromEntries(unsafeEntries(fs).map(([key, fn]) => [key, mockFn(fn)] as const)) as FsMocks
Expand Down
6 changes: 3 additions & 3 deletions packages/test-e2e/test/with-etherscan/sdk/cjs/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { providers, Signer } from 'ethers';
import { Provider, Signer, Interface, InterfaceAbi } from 'ethers';
import * as types from './types';
export declare function getContract(address: string, abi: object, defaultSignerOrProvider: Signer | providers.Provider): any;
export declare function getContract(address: string, abi: Interface | InterfaceAbi, defaultSignerOrProvider: Signer | Provider): unknown;
export type MainnetSdk = ReturnType<typeof getMainnetSdk>;
export declare function getMainnetSdk(defaultSignerOrProvider: Signer | providers.Provider): {
export declare function getMainnetSdk(defaultSignerOrProvider: Signer | Provider): {
tokens: {
dai: types.mainnet.tokens.Dai;
mkr: types.mainnet.tokens.Mkr;
Expand Down
5 changes: 2 additions & 3 deletions packages/test-e2e/test/with-etherscan/sdk/cjs/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMainnetSdk = exports.getContract = void 0;
exports.getContract = getContract;
exports.getMainnetSdk = getMainnetSdk;
const ethers_1 = require("ethers");
const dai_json_1 = __importDefault(require("../../eth-sdk/abis/mainnet/tokens/dai.json"));
const mkr_json_1 = __importDefault(require("../../eth-sdk/abis/mainnet/tokens/mkr.json"));
Expand All @@ -13,7 +14,6 @@ const proxyCustomImplementation_json_1 = __importDefault(require("../../eth-sdk/
function getContract(address, abi, defaultSignerOrProvider) {
return new ethers_1.Contract(address, abi, defaultSignerOrProvider);
}
exports.getContract = getContract;
function getMainnetSdk(defaultSignerOrProvider) {
return {
"tokens": {
Expand All @@ -27,4 +27,3 @@ function getMainnetSdk(defaultSignerOrProvider) {
},
};
}
exports.getMainnetSdk = getMainnetSdk;
6 changes: 3 additions & 3 deletions packages/test-e2e/test/with-etherscan/sdk/esm/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { providers, Signer } from 'ethers';
import { Provider, Signer, Interface, InterfaceAbi } from 'ethers';
import * as types from './types';
export declare function getContract(address: string, abi: object, defaultSignerOrProvider: Signer | providers.Provider): any;
export declare function getContract(address: string, abi: Interface | InterfaceAbi, defaultSignerOrProvider: Signer | Provider): unknown;
export type MainnetSdk = ReturnType<typeof getMainnetSdk>;
export declare function getMainnetSdk(defaultSignerOrProvider: Signer | providers.Provider): {
export declare function getMainnetSdk(defaultSignerOrProvider: Signer | Provider): {
tokens: {
dai: types.mainnet.tokens.Dai;
mkr: types.mainnet.tokens.Mkr;
Expand Down
20 changes: 4 additions & 16 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4350,25 +4350,13 @@ through@2:
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==

tmp-promise@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==
dependencies:
tmp "^0.2.0"

tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
dependencies:
os-tmpdir "~1.0.2"

tmp@^0.2.0:
version "0.2.3"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==

tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
Expand Down Expand Up @@ -4564,10 +4552,10 @@ typed-array-length@^1.0.6:
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"

typescript@5.3.3:
version "5.3.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
typescript@^5.5.4:
version "5.5.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba"
integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==

typical@^4.0.0:
version "4.0.0"
Expand Down

0 comments on commit 137be2d

Please sign in to comment.