UNPKG

@tevm/ts-plugin

Version:
1 lines 5.37 kB
{"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,GAAwB,GAAA;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,KAAiB,KAAA;AAC/B,IAAI,IAAA;AACH,MAAA,MAAMC,gBAAOD,KAAI,CAAA;AACjB,MAAO,OAAA,IAAA;AAAA,aACC,CAAG,EAAA;AACX,MAAO,OAAA,KAAA;AAAA;AACR;AAEF,CAAA;AAMA,IAAM,WAAW,MAAM;AACtB,EAAA,OAAA,CAAQ,GAAI,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAWZ,CAAA;AACD,CAAA;AAgBA,IAAM,QAAA,GAAW,CAACE,IAAM,GAAA,OAAA,CAAQ,KAAOC,EAAAA,QAAAA,GAAU,CAAC,cAAc,CAAM,KAAA;AACrE,EAAA,OAAA,CAAQ,IAAI,oCAAsC,EAAA,EAAE,KAAKD,IAAK,EAAA,OAAA,EAAAC,UAAS,CAAA;AACvE,EAAM,MAAA,KAAA,GAAQC,SAAK,CAAA,IAAA,CAAKD,QAAS,EAAA;AAAA,IAChC,GAAAD,EAAAA;AAAA,GACA,CAAA;AACD,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACvB,IAAM,MAAA,IAAI,MAAM,gBAAgB,CAAA;AAAA;AAEjC,EAAM,KAAA,CAAA,OAAA,CAAQ,OAAO,IAAS,KAAA;AAC7B,IAAA,MAAM,WAAW,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAG,EAAE,CAAA;AACtC,IAAM,MAAA,OAAA,GAAU,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,MAAM,CAAG,EAAA,EAAE,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AACrD,IAAA,MAAMG,QAAS,GAAAC,cAAA,CAAQC,iBAAWL,CAAAA,IAAG,CAAC,CAAA;AACtC,IAAA,MAAM,SAAY,GAAAM,wBAAA,CAAYH,QAAO,CAAA,QAAA,EAAU,KAAKH,IAAG,CAAA;AACvD,IAAA,MAAM,SAASO,mBAAQ,CAAAJ,QAAA,EAAQ,SAAS,GAAK,EAAAK,eAAA,EAAM,WAAW,gBAAgB,CAAA;AAC9E,IACE,MAAA,CAAA,eAAA,CAAgB,KAAK,IAAI,CAAA,CAAA,EAAIR,MAAK,KAAO,EAAA,IAAI,EAC7C,IAAK,CAAA,CAAC,cAAcH,kBAAU,CAAAC,qBAAA,CAAK,KAAK,OAAS,EAAA,CAAA,EAAG,QAAQ,CAAK,GAAA,CAAA,CAAA,EAAG,SAAU,CAAA,IAAI,CAAC,CAAA;AAAA,GACrF,CAAA;AACF,CAAA;AAEA,IAAM,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AAEjC,IAAI,KAAK,QAAS,CAAA,IAAI,KAAK,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AACnD,EAAS,QAAA,EAAA;AACT,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACf;AAEA,IAAM,CAAC,OAAS,EAAA,WAAW,CAAI,GAAA,IAAA;AAC/B,IAAM,GAAA,GAAM,OAAW,IAAA,OAAA,CAAQ,GAAI,EAAA;AACnC,IAAM,UAAU,WAAc,GAAA,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 { type FileAccessObject, bundler } 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"]}