@tevm/ts-plugin
Version:
A typescript plugin for tevm
1 lines • 5.4 kB
Source Map (JSON)
{"version":3,"sources":["../../src/bin/tevm-gen.ts"],"names":["existsSync","readFile","readFileSync","writeFileSync","statSync","stat","mkdirSync","mkdir","writeFile","path","access","cwd","include","glob","config","runSync","loadConfig","createCache","bundler","solc"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,GAAA,GAAwB;AAAA,cAC7BA,aAAA;AAAA,YACAC,iBAAA;AAAA,gBACAC,eAAA;AAAA,iBACAC,gBAAA;AAAA,YACAC,WAAA;AAAA,QACAC,aAAA;AAAA,aACAC,YAAA;AAAA,SACAC,cAAA;AAAA,aACAC,kBAAA;AAAA,EACA,MAAA,EAAQ,OAAOC,KAAAA,KAAiB;AAC/B,IAAA,IAAI;AACH,MAAA,MAAMC,gBAAOD,KAAI,CAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACR,SAAS,EAAA,EAAI;AACZ,MAAA,OAAO,KAAA;AAAA,IACR;AAAA,EACD;AACD,CAAA;AAMA,IAAM,WAAW,MAAM;AACtB,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAWZ,CAAA;AACD,CAAA;AAgBA,IAAM,QAAA,GAAW,CAACE,IAAAA,GAAM,OAAA,CAAQ,KAAI,EAAGC,QAAAA,GAAU,CAAC,cAAc,CAAA,KAAM;AACrE,EAAA,OAAA,CAAQ,IAAI,oCAAA,EAAsC,EAAE,KAAKD,IAAAA,EAAK,OAAA,EAAAC,UAAS,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQC,SAAA,CAAK,IAAA,CAAKD,QAAAA,EAAS;AAAA,IAChC,GAAA,EAAAD;AAAA,GACA,CAAA;AACD,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,EACjC;AACA,EAAA,KAAA,CAAM,OAAA,CAAQ,OAAO,IAAA,KAAS;AAC7B,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAG,EAAE,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACrD,IAAA,MAAMG,QAAA,GAASC,cAAA,CAAQC,iBAAA,CAAWL,IAAG,CAAC,CAAA;AACtC,IAAA,MAAM,SAAA,GAAYM,wBAAA,CAAYH,QAAA,CAAO,QAAA,EAAU,KAAKH,IAAG,CAAA;AACvD,IAAA,MAAM,SAASO,mBAAA,CAAQJ,QAAA,EAAQ,SAAS,GAAA,EAAKK,eAAA,EAAM,WAAW,gBAAgB,CAAA;AAC9E,IAAA,MAAA,CACE,eAAA,CAAgB,KAAK,IAAI,CAAA,CAAA,EAAIR,MAAK,KAAA,EAAO,IAAI,EAC7C,IAAA,CAAK,CAAC,cAAcH,kBAAA,CAAUC,qBAAA,CAAK,KAAK,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACtF,CAAC,CAAA;AACF,CAAA;AAEA,IAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEjC,IAAI,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,EAAA,QAAA,EAAS;AACT,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACf;AAEA,IAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAI,IAAA;AAC/B,IAAM,GAAA,GAAM,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAM,UAAU,WAAA,GAAc,WAAA,CAAY,MAAM,GAAG,CAAA,GAAI,CAAC,cAAc,CAAA;AAEtE,QAAA,CAAS,KAAK,OAAO,CAAA","file":"tevm-gen.cjs","sourcesContent":["#!/usr/bin/env node\nimport { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { access, mkdir, readFile, stat, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\nimport { bundler, type FileAccessObject } from '@tevm/base-bundler'\nimport { createCache } from '@tevm/bundler-cache'\nimport { loadConfig } from '@tevm/config'\nimport { runSync } from 'effect/Effect'\nimport { glob } from 'glob'\nimport * as solc from 'solc'\n\nconst fao: FileAccessObject = {\n\texistsSync: existsSync,\n\treadFile: readFile,\n\treadFileSync: readFileSync,\n\twriteFileSync: writeFileSync,\n\tstatSync,\n\tstat,\n\tmkdirSync,\n\tmkdir,\n\twriteFile,\n\texists: async (path: string) => {\n\t\ttry {\n\t\t\tawait access(path)\n\t\t\treturn true\n\t\t} catch (_e) {\n\t\t\treturn false\n\t\t}\n\t},\n}\n\n/**\n * Displays the help information for the tevm-gen CLI tool.\n * Shows usage instructions and available command line options.\n */\nconst showHelp = () => {\n\tconsole.log(`\nUsage: tevm-gen [cwd] [include]\nDescription:\n Generates TypeScript type definitions for Solidity contracts.\n\nArguments:\n cwd Working directory (defaults to current directory)\n include Glob pattern(s) for Solidity files, comma-separated (defaults to 'src/**/*.sol')\n\nOptions:\n -h, --help Show this help message and exit\n`)\n}\n\n/**\n * Generates TypeScript type definitions for Solidity contracts.\n *\n * This function:\n * 1. Finds all Solidity files matching the include patterns\n * 2. Loads the Tevm configuration from the working directory\n * 3. Creates a bundler cache to speed up compilation\n * 4. For each Solidity file, generates TypeScript type definitions\n * 5. Writes the generated TypeScript files alongside the Solidity files\n *\n * @param {string} cwd - The working directory to use as the base for file resolution\n * @param {string[]} include - Array of glob patterns to match Solidity files\n * @throws {Error} If no matching files are found\n */\nconst generate = (cwd = process.cwd(), include = ['src/**/*.sol']) => {\n\tconsole.log('Generating types from contracts...', { dir: cwd, include })\n\tconst files = glob.sync(include, {\n\t\tcwd,\n\t})\n\tif (files.length === 0) {\n\t\tthrow new Error('No files found')\n\t}\n\tfiles.forEach(async (file) => {\n\t\tconst fileName = file.split('/').at(-1) as string\n\t\tconst fileDir = file.split('/').slice(0, -1).join('/')\n\t\tconst config = runSync(loadConfig(cwd))\n\t\tconst solcCache = createCache(config.cacheDir, fao, cwd)\n\t\tconst plugin = bundler(config, console, fao, solc, solcCache, '@tevm/contract')\n\t\tplugin\n\t\t\t.resolveTsModule(`./${file}`, cwd, false, true)\n\t\t\t.then((tsContent) => writeFile(path.join(fileDir, `${fileName}.ts`), tsContent.code))\n\t})\n}\n\nconst args = process.argv.slice(2)\n\nif (args.includes('-h') || args.includes('--help')) {\n\tshowHelp()\n\tprocess.exit(0)\n}\n\nconst [userCwd, userInclude] = args\nconst cwd = userCwd || process.cwd()\nconst include = userInclude ? userInclude.split(',') : ['src/**/*.sol']\n\ngenerate(cwd, include)\n"]}