rocketh 0.10.15 → 0.10.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/esm/cli.d.ts +3 -0
  3. package/dist/esm/cli.d.ts.map +1 -0
  4. package/dist/esm/cli.js +31 -0
  5. package/dist/esm/cli.js.map +1 -0
  6. package/dist/esm/environment/deployments.d.ts +11 -0
  7. package/dist/esm/environment/deployments.d.ts.map +1 -0
  8. package/dist/esm/environment/deployments.js +90 -0
  9. package/dist/esm/environment/deployments.js.map +1 -0
  10. package/dist/esm/environment/index.d.ts +15 -0
  11. package/dist/esm/environment/index.d.ts.map +1 -0
  12. package/dist/esm/environment/index.js +566 -0
  13. package/dist/esm/environment/index.js.map +1 -0
  14. package/dist/esm/environment/providers/BaseProvider.d.ts +53 -0
  15. package/dist/esm/environment/providers/BaseProvider.d.ts.map +1 -0
  16. package/dist/esm/environment/providers/BaseProvider.js +10 -0
  17. package/dist/esm/environment/providers/BaseProvider.js.map +1 -0
  18. package/dist/esm/environment/providers/TransactionHashTracker.d.ts +8 -0
  19. package/dist/esm/environment/providers/TransactionHashTracker.d.ts.map +1 -0
  20. package/dist/esm/environment/providers/TransactionHashTracker.js +22 -0
  21. package/dist/esm/environment/providers/TransactionHashTracker.js.map +1 -0
  22. package/dist/esm/environment/types.d.ts +294 -0
  23. package/dist/esm/environment/types.d.ts.map +1 -0
  24. package/dist/esm/environment/types.js +2 -0
  25. package/dist/esm/environment/types.js.map +1 -0
  26. package/dist/esm/environment/utils/artifacts.d.ts +23 -0
  27. package/dist/esm/environment/utils/artifacts.d.ts.map +1 -0
  28. package/dist/esm/environment/utils/artifacts.js +142 -0
  29. package/dist/esm/environment/utils/artifacts.js.map +1 -0
  30. package/dist/esm/environment/utils/chains.d.ts +10 -0
  31. package/dist/esm/environment/utils/chains.d.ts.map +1 -0
  32. package/dist/esm/environment/utils/chains.js +55 -0
  33. package/dist/esm/environment/utils/chains.js.map +1 -0
  34. package/dist/esm/executor/index.d.ts +28 -0
  35. package/dist/esm/executor/index.d.ts.map +1 -0
  36. package/dist/esm/executor/index.js +354 -0
  37. package/dist/esm/executor/index.js.map +1 -0
  38. package/dist/esm/executor/types.d.ts +17 -0
  39. package/dist/esm/executor/types.d.ts.map +1 -0
  40. package/dist/esm/executor/types.js +2 -0
  41. package/dist/esm/executor/types.js.map +1 -0
  42. package/dist/esm/index.d.ts +9 -0
  43. package/dist/esm/index.d.ts.map +1 -0
  44. package/dist/esm/index.js +9 -0
  45. package/dist/esm/index.js.map +1 -0
  46. package/dist/esm/internal/logging.d.ts +11 -0
  47. package/dist/esm/internal/logging.d.ts.map +1 -0
  48. package/dist/esm/internal/logging.js +71 -0
  49. package/dist/esm/internal/logging.js.map +1 -0
  50. package/dist/esm/internal/types.d.ts +5 -0
  51. package/dist/esm/internal/types.d.ts.map +1 -0
  52. package/dist/esm/internal/types.js +2 -0
  53. package/dist/esm/internal/types.js.map +1 -0
  54. package/dist/esm/utils/eth.d.ts +24 -0
  55. package/dist/esm/utils/eth.d.ts.map +1 -0
  56. package/dist/esm/utils/eth.js +62 -0
  57. package/dist/esm/utils/eth.js.map +1 -0
  58. package/dist/esm/utils/fs.d.ts +16 -0
  59. package/dist/esm/utils/fs.d.ts.map +1 -0
  60. package/dist/esm/utils/fs.js +52 -0
  61. package/dist/esm/utils/fs.js.map +1 -0
  62. package/dist/esm/utils/json.d.ts +5 -0
  63. package/dist/esm/utils/json.d.ts.map +1 -0
  64. package/dist/esm/utils/json.js +22 -0
  65. package/dist/esm/utils/json.js.map +1 -0
  66. package/package.json +10 -16
  67. package/src/cli.ts +2 -2
  68. package/src/environment/deployments.ts +2 -2
  69. package/src/environment/index.ts +10 -10
  70. package/src/environment/providers/TransactionHashTracker.ts +1 -1
  71. package/src/environment/types.ts +2 -2
  72. package/src/environment/utils/artifacts.ts +1 -1
  73. package/src/executor/index.ts +8 -14
  74. package/src/executor/types.ts +1 -1
  75. package/src/index.ts +8 -8
  76. package/tsconfig.json +13 -10
  77. package/dist/cli.cjs +0 -100
  78. package/dist/cli.cjs.map +0 -1
  79. package/dist/cli.mjs +0 -97
  80. package/dist/cli.mjs.map +0 -1
  81. package/dist/index-CqGGHs42.cjs +0 -1317
  82. package/dist/index-CqGGHs42.cjs.map +0 -1
  83. package/dist/index-DESow-6-.mjs +0 -1299
  84. package/dist/index-DESow-6-.mjs.map +0 -1
  85. package/dist/index.cjs +0 -33
  86. package/dist/index.cjs.map +0 -1
  87. package/dist/index.d.ts +0 -1442
  88. package/dist/index.mjs +0 -12
  89. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,62 @@
1
+ function avg(arr) {
2
+ const sum = arr.reduce((a, v) => a + v);
3
+ return sum / BigInt(arr.length);
4
+ }
5
+ export async function getGasPriceEstimate(provider, options) {
6
+ const defaultOptions = {
7
+ blockCount: 20,
8
+ newestBlock: 'pending',
9
+ rewardPercentiles: [10, 50, 80],
10
+ };
11
+ const optionsResolved = options ? { ...defaultOptions, ...options } : defaultOptions;
12
+ const historicalBlocks = optionsResolved.blockCount;
13
+ const rawFeeHistory = await provider.request({
14
+ method: 'eth_feeHistory',
15
+ params: [`0x${historicalBlocks.toString(16)}`, optionsResolved.newestBlock, optionsResolved.rewardPercentiles],
16
+ });
17
+ let blockNum = Number(rawFeeHistory.oldestBlock);
18
+ const lastBlock = blockNum + rawFeeHistory.reward.length;
19
+ let index = 0;
20
+ const blocksHistory = [];
21
+ while (blockNum < lastBlock) {
22
+ blocksHistory.push({
23
+ number: blockNum,
24
+ baseFeePerGas: BigInt(rawFeeHistory.baseFeePerGas[index]),
25
+ gasUsedRatio: Number(rawFeeHistory.gasUsedRatio[index]),
26
+ priorityFeePerGas: rawFeeHistory.reward[index].map((x) => BigInt(x)),
27
+ });
28
+ blockNum += 1;
29
+ index += 1;
30
+ }
31
+ const percentilePriorityFeeAverages = [];
32
+ for (let i = 0; i < optionsResolved.rewardPercentiles.length; i++) {
33
+ percentilePriorityFeeAverages.push(avg(blocksHistory.map((b) => b.priorityFeePerGas[i])));
34
+ }
35
+ const baseFeePerGas = BigInt(rawFeeHistory.baseFeePerGas[rawFeeHistory.baseFeePerGas.length - 1]);
36
+ const result = [];
37
+ for (let i = 0; i < optionsResolved.rewardPercentiles.length; i++) {
38
+ result.push({
39
+ maxFeePerGas: percentilePriorityFeeAverages[i] + baseFeePerGas,
40
+ maxPriorityFeePerGas: percentilePriorityFeeAverages[i],
41
+ });
42
+ }
43
+ return result;
44
+ }
45
+ export async function getRoughGasPriceEstimate(provider, options) {
46
+ const defaultOptions = {
47
+ blockCount: 20,
48
+ newestBlock: 'pending',
49
+ rewardPercentiles: [10, 50, 80],
50
+ };
51
+ const optionsResolved = options ? { ...defaultOptions, ...options } : defaultOptions;
52
+ if (optionsResolved.rewardPercentiles.length !== 3) {
53
+ throw new Error(`rough gas estimate require 3 percentile, it defaults to [10,50,80]`);
54
+ }
55
+ const result = await getGasPriceEstimate(provider, optionsResolved);
56
+ return {
57
+ slow: result[0],
58
+ average: result[1],
59
+ fast: result[2],
60
+ };
61
+ }
62
+ //# sourceMappingURL=eth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eth.js","sourceRoot":"","sources":["../../../src/utils/eth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ interface LookupFileOptions {
2
+ pathOnly?: boolean;
3
+ rootDir?: string;
4
+ predicate?: (file: string) => boolean;
5
+ }
6
+ export declare function lookupFile(dir: string, formats: string[], options?: LookupFileOptions): string | undefined;
7
+ export declare function traverseMultipleDirectory(dirs: string[]): string[];
8
+ export declare const traverse: (dir: string, result?: any[], topDir?: string, filter?: (name: string, stats: any) => boolean) => Array<{
9
+ name: string;
10
+ path: string;
11
+ relativePath: string;
12
+ mtimeMs: number;
13
+ directory: boolean;
14
+ }>;
15
+ export {};
16
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/utils/fs.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACtC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAc1G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAUlE;AAED,eAAO,MAAM,QAAQ,QACf,MAAM,WACH,GAAG,EAAE,WACJ,MAAM,WACN,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,KAC5C,KAAK,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACnB,CAoBA,CAAC"}
@@ -0,0 +1,52 @@
1
+ // taken from https://github.com/vitejs/vite/blob/63524bac878e8d3771d34ad7ad2e10cd16870ff4/packages/vite/src/node/utils.ts#L371-L400
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ export function lookupFile(dir, formats, options) {
5
+ for (const format of formats) {
6
+ const fullPath = path.join(dir, format);
7
+ if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {
8
+ const result = options?.pathOnly ? fullPath : fs.readFileSync(fullPath, 'utf-8');
9
+ if (!options?.predicate || options.predicate(result)) {
10
+ return result;
11
+ }
12
+ }
13
+ }
14
+ const parentDir = path.dirname(dir);
15
+ if (parentDir !== dir && (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {
16
+ return lookupFile(parentDir, formats, options);
17
+ }
18
+ }
19
+ export function traverseMultipleDirectory(dirs) {
20
+ const filepaths = [];
21
+ for (const dir of dirs) {
22
+ let filesStats = traverse(dir);
23
+ filesStats = filesStats.filter((v) => !v.directory);
24
+ for (const filestat of filesStats) {
25
+ filepaths.push(path.join(dir, filestat.relativePath));
26
+ }
27
+ }
28
+ return filepaths;
29
+ }
30
+ export const traverse = function (dir, result = [], topDir, filter // TODO any is Stats
31
+ ) {
32
+ fs.readdirSync(dir).forEach((name) => {
33
+ const fPath = path.resolve(dir, name);
34
+ const stats = fs.statSync(fPath);
35
+ if ((!filter && !name.startsWith('.')) || (filter && filter(name, stats))) {
36
+ const fileStats = {
37
+ name,
38
+ path: fPath,
39
+ relativePath: path.relative(topDir || dir, fPath),
40
+ mtimeMs: stats.mtimeMs,
41
+ directory: stats.isDirectory(),
42
+ };
43
+ if (fileStats.directory) {
44
+ result.push(fileStats);
45
+ return traverse(fPath, result, topDir || dir, filter);
46
+ }
47
+ result.push(fileStats);
48
+ }
49
+ });
50
+ return result;
51
+ };
52
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function bnReplacer(k: string, v: any): any;
2
+ export declare function bnReviver(k: string, v: any): any;
3
+ export declare function JSONToString<T = unknown>(json: unknown, space?: string | number): string;
4
+ export declare function stringToJSON<T = unknown>(str: string): T;
5
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"AACA,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAKjD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAShD;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,UAE/E;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAExD"}
@@ -0,0 +1,22 @@
1
+ // TODO share with db-utils
2
+ export function bnReplacer(k, v) {
3
+ if (typeof v === 'bigint') {
4
+ return v.toString() + 'n';
5
+ }
6
+ return v;
7
+ }
8
+ export function bnReviver(k, v) {
9
+ if (typeof v === 'string' &&
10
+ (v.startsWith('-') ? !isNaN(parseInt(v.charAt(1))) : !isNaN(parseInt(v.charAt(0)))) &&
11
+ v.charAt(v.length - 1) === 'n') {
12
+ return BigInt(v.slice(0, -1));
13
+ }
14
+ return v;
15
+ }
16
+ export function JSONToString(json, space) {
17
+ return JSON.stringify(json, bnReplacer, space);
18
+ }
19
+ export function stringToJSON(str) {
20
+ return JSON.parse(str, bnReviver);
21
+ }
22
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAM;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAM;IAC1C,IACC,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAC7B,CAAC;QACF,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED,MAAM,UAAU,YAAY,CAAc,IAAa,EAAE,KAAuB;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAc,GAAW;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,33 +1,28 @@
1
1
  {
2
2
  "name": "rocketh",
3
- "version": "0.10.15",
3
+ "version": "0.10.16",
4
4
  "description": "deploy smart contract on ethereum-compatible networks",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "type": "module",
9
- "main": "dist/index.cjs",
10
- "module": "dist/index.mjs",
11
- "types": "dist/index.d.ts",
9
+ "module": "dist/esm/index.js",
10
+ "types": "dist/esm/index.d.ts",
12
11
  ".": {
13
- "require": {
14
- "types": "./dist/index.d.ts",
15
- "default": "./dist/index.cjs"
16
- },
17
12
  "import": {
18
- "types": "./dist/index.d.ts",
19
- "default": "./dist/index.mjs"
13
+ "types": "./dist/esm/index.d.ts",
14
+ "default": "./dist/esm/index.js"
20
15
  }
21
16
  },
22
17
  "bin": {
23
- "rocketh": "dist/cli.cjs"
18
+ "rocketh": "dist/esm/cli.js"
24
19
  },
25
20
  "devDependencies": {
26
21
  "@types/node": "^20.14.8",
27
22
  "abitype": "^1.0.4",
23
+ "as-soon": "^0.0.11",
28
24
  "eip-1193": "^0.5.0",
29
25
  "ipfs-gateway-emulator": "4.2.1-ipfs.2",
30
- "pkgroll": "^2.1.1",
31
26
  "rimraf": "^5.0.7",
32
27
  "typedoc": "^0.26.2",
33
28
  "typescript": "^5.5.2"
@@ -37,19 +32,18 @@
37
32
  "@types/prompts": "^2.4.9",
38
33
  "commander": "^12.1.0",
39
34
  "eip-1193-jsonrpc-provider": "^0.4.0",
40
- "esbuild": "^0.25.0",
41
- "esbuild-register": "^3.6.0",
42
35
  "ethers": "^6.13.1",
43
36
  "figlet": "^1.7.0",
44
37
  "ldenv": "^0.3.10",
45
38
  "named-logs": "^0.2.4",
46
39
  "named-logs-console": "^0.3.1",
47
40
  "prompts": "^2.4.2",
41
+ "tsx": "^4.19.2",
48
42
  "viem": "^2.16.2"
49
43
  },
50
44
  "scripts": {
51
- "build": "rimraf dist && pkgroll --sourcemap",
52
- "dev": "pkgroll --watch",
45
+ "build": "tsc --project tsconfig.json",
46
+ "dev": "as-soon -w src pnpm build",
53
47
  "gen-docs": "typedoc --out docs src",
54
48
  "serve-docs": "ipfs-emulator --only -d docs -p 8080"
55
49
  }
package/src/cli.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  #! /usr/bin/env node
2
2
  import {loadEnv} from 'ldenv';
3
- import {ConfigOptions, loadAndExecuteDeployments, readConfig} from '.';
3
+ import {ConfigOptions, loadAndExecuteDeployments, readConfig} from './index.js';
4
4
  import {Command} from 'commander';
5
- import pkg from '../package.json';
5
+ import pkg from '../package.json' with {type: 'json'};
6
6
 
7
7
  loadEnv();
8
8
 
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import fs from 'node:fs';
3
- import {traverse} from '../utils/fs';
4
- import {UnknownDeployments} from './types';
3
+ import {traverse} from '../utils/fs.js';
4
+ import {UnknownDeployments} from './types.js';
5
5
 
6
6
  export function loadDeployments(
7
7
  deploymentsPath: string,
@@ -17,13 +17,13 @@ import {
17
17
  UnknownArtifacts,
18
18
  UnknownDeployments,
19
19
  UnresolvedUnknownNamedAccounts,
20
- } from './types';
20
+ } from './types.js';
21
21
  import {JSONRPCHTTPProvider} from 'eip-1193-jsonrpc-provider';
22
22
  import {Abi, Address} from 'abitype';
23
- import {InternalEnvironment} from '../internal/types';
23
+ import {InternalEnvironment} from '../internal/types.js';
24
24
  import path from 'node:path';
25
- import {JSONToString, stringToJSON} from '../utils/json';
26
- import {loadDeployments} from './deployments';
25
+ import {JSONToString, stringToJSON} from '../utils/json.js';
26
+ import {loadDeployments} from './deployments.js';
27
27
  import {
28
28
  EIP1193Account,
29
29
  EIP1193DATA,
@@ -32,12 +32,12 @@ import {
32
32
  EIP1193Transaction,
33
33
  EIP1193TransactionReceipt,
34
34
  } from 'eip-1193';
35
- import {ProvidedContext} from '../executor/types';
36
- import {ProgressIndicator, log, spin} from '../internal/logging';
37
- import {PendingExecution} from './types';
38
- import {getChain} from './utils/chains';
39
- import {mergeArtifacts} from './utils/artifacts';
40
- import {TransactionHashTracker} from './providers/TransactionHashTracker';
35
+ import {ProvidedContext} from '../executor/types.js';
36
+ import {ProgressIndicator, log, spin} from '../internal/logging.js';
37
+ import {PendingExecution} from './types.js';
38
+ import {getChain} from './utils/chains.js';
39
+ import {mergeArtifacts} from './utils/artifacts.js';
40
+ import {TransactionHashTracker} from './providers/TransactionHashTracker.js';
41
41
 
42
42
  type ReceiptResult = {receipt: EIP1193TransactionReceipt; latestBlockNumber: EIP1193QUANTITY};
43
43
 
@@ -1,5 +1,5 @@
1
1
  import {EIP1193GenericRequest, EIP1193GenericRequestProvider} from 'eip-1193';
2
- import {BaseProvider} from './BaseProvider';
2
+ import {BaseProvider} from './BaseProvider.js';
3
3
 
4
4
  export class TransactionHashTracker extends BaseProvider {
5
5
  public transactionHashes: `0x${string}`[] = [];
@@ -11,8 +11,8 @@ import {
11
11
  import {Abi, Narrow, AbiError, AbiEvent, AbiConstructor, AbiFallback, AbiFunction, AbiReceive} from 'abitype';
12
12
  import type {Address, DeployContractParameters} from 'viem';
13
13
  import type {Chain} from 'viem';
14
- import {ProgressIndicator} from '../internal/logging';
15
- import {TransactionHashTracker} from './providers/TransactionHashTracker';
14
+ import {ProgressIndicator} from '../internal/logging.js';
15
+ import {TransactionHashTracker} from './providers/TransactionHashTracker.js';
16
16
 
17
17
  export type {Abi, AbiError, AbiEvent, AbiConstructor, AbiFallback, AbiFunction, AbiReceive};
18
18
  export type Libraries = {readonly [libraryName: string]: EIP1193Account};
@@ -1,5 +1,5 @@
1
1
  import {Abi} from 'abitype';
2
- import {Artifact, DevDoc, UserDoc} from '../types';
2
+ import {Artifact, DevDoc, UserDoc} from '../types.js';
3
3
  import {FunctionFragment} from 'ethers';
4
4
 
5
5
  type CreateMutable<Type> = {
@@ -1,4 +1,4 @@
1
- import {traverseMultipleDirectory} from '../utils/fs';
1
+ import {traverseMultipleDirectory} from '../utils/fs.js';
2
2
  import path from 'node:path';
3
3
  import fs from 'node:fs';
4
4
  import type {
@@ -9,18 +9,15 @@ import type {
9
9
  UnknownArtifacts,
10
10
  UnknownDeployments,
11
11
  UnresolvedUnknownNamedAccounts,
12
- } from '../environment/types';
13
- import {createEnvironment} from '../environment';
14
- import {DeployScriptFunction, DeployScriptModule, ProvidedContext} from './types';
15
- import {logger, setLogLevel, spin} from '../internal/logging';
12
+ } from '../environment/types.js';
13
+ import {createEnvironment} from '../environment/index.js';
14
+ import {DeployScriptFunction, DeployScriptModule, ProvidedContext} from './types.js';
15
+ import {logger, setLogLevel, spin} from '../internal/logging.js';
16
16
  import {EIP1193GenericRequestProvider, EIP1193ProviderWithoutEvents} from 'eip-1193';
17
- import {getRoughGasPriceEstimate} from '../utils/eth';
17
+ import {getRoughGasPriceEstimate} from '../utils/eth.js';
18
18
  import prompts from 'prompts';
19
19
  import {formatEther} from 'viem';
20
-
21
- if (!process.env['ROCKETH_SKIP_ESBUILD']) {
22
- require('esbuild-register/dist/node').register();
23
- }
20
+ import {tsImport} from 'tsx/esm/api';
24
21
 
25
22
  export function execute<
26
23
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
@@ -234,10 +231,7 @@ export async function executeDeployScripts<
234
231
  const scriptFilePath = path.resolve(filepath);
235
232
  let scriptModule: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
236
233
  try {
237
- if (require.cache) {
238
- delete require.cache[scriptFilePath]; // ensure we reload it every time, so changes are taken in consideration
239
- }
240
- scriptModule = require(scriptFilePath);
234
+ scriptModule = await tsImport(scriptFilePath, import.meta.url);
241
235
 
242
236
  if ((scriptModule as any).default) {
243
237
  scriptModule = (scriptModule as any).default as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
@@ -5,7 +5,7 @@ import type {
5
5
  UnknownDeployments,
6
6
  UnknownNamedAccounts,
7
7
  UnresolvedUnknownNamedAccounts,
8
- } from '../environment/types';
8
+ } from '../environment/types.js';
9
9
 
10
10
  export type DeployScriptFunction<
11
11
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
- export * from './executor';
2
- export * from './executor/types';
3
- export * from './environment/types';
4
- export {extendEnvironment, handleSignerProtocol} from './environment';
5
- export {loadDeployments} from './environment/deployments';
6
- export * from './environment/utils/artifacts';
7
- export * from './environment/utils/chains';
8
- export * from './utils/eth';
1
+ export * from './executor/index.js';
2
+ export * from './executor/types.js';
3
+ export * from './environment/types.js';
4
+ export {extendEnvironment, handleSignerProtocol} from './environment/index.js';
5
+ export {loadDeployments} from './environment/deployments.js';
6
+ export * from './environment/utils/artifacts.js';
7
+ export * from './environment/utils/chains.js';
8
+ export * from './utils/eth.js';
package/tsconfig.json CHANGED
@@ -1,15 +1,18 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "moduleResolution": "Node",
4
- "lib": ["ES2020"],
5
- "target": "ES2020",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "sourceMap": true,
9
3
  "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
4
+ "strictNullChecks": true,
5
+ "target": "ESNext",
6
+ "module": "NodeNext",
7
+ "lib": ["ESNext", "dom"],
8
+ "moduleResolution": "NodeNext",
12
9
  "resolveJsonModule": true,
13
- "module": "ES6"
14
- }
10
+ "skipLibCheck": true,
11
+ "sourceMap": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "rootDir": "./src",
15
+ "outDir": "./dist/esm"
16
+ },
17
+ "include": ["src/**/*.ts"]
15
18
  }
package/dist/cli.cjs DELETED
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var ldenv = require('ldenv');
5
- var index = require('./index-CqGGHs42.cjs');
6
- require('node:path');
7
- require('node:fs');
8
- require('ethers');
9
- var commander = require('commander');
10
- require('module');
11
- require('viem');
12
- require('eip-1193-jsonrpc-provider');
13
- require('named-logs');
14
- require('named-logs-console');
15
- require('viem/chains');
16
- require('prompts');
17
-
18
- var name = "rocketh";
19
- var version = "0.10.15";
20
- var description = "deploy smart contract on ethereum-compatible networks";
21
- var publishConfig = {
22
- access: "public"
23
- };
24
- var type = "module";
25
- var main = "dist/index.cjs";
26
- var module$1 = "dist/index.mjs";
27
- var types = "dist/index.d.ts";
28
- var bin = {
29
- rocketh: "dist/cli.cjs"
30
- };
31
- var devDependencies = {
32
- "@types/node": "^20.14.8",
33
- abitype: "^1.0.4",
34
- "eip-1193": "^0.5.0",
35
- "ipfs-gateway-emulator": "4.2.1-ipfs.2",
36
- pkgroll: "^2.1.1",
37
- rimraf: "^5.0.7",
38
- typedoc: "^0.26.2",
39
- typescript: "^5.5.2"
40
- };
41
- var dependencies = {
42
- "@types/figlet": "^1.5.8",
43
- "@types/prompts": "^2.4.9",
44
- commander: "^12.1.0",
45
- "eip-1193-jsonrpc-provider": "^0.4.0",
46
- esbuild: "^0.25.0",
47
- "esbuild-register": "^3.6.0",
48
- ethers: "^6.13.1",
49
- figlet: "^1.7.0",
50
- ldenv: "^0.3.10",
51
- "named-logs": "^0.2.4",
52
- "named-logs-console": "^0.3.1",
53
- prompts: "^2.4.2",
54
- viem: "^2.16.2"
55
- };
56
- var scripts = {
57
- build: "rimraf dist && pkgroll --sourcemap",
58
- dev: "pkgroll --watch",
59
- "gen-docs": "typedoc --out docs src",
60
- "serve-docs": "ipfs-emulator --only -d docs -p 8080"
61
- };
62
- var pkg = {
63
- name: name,
64
- version: version,
65
- description: description,
66
- publishConfig: publishConfig,
67
- type: type,
68
- main: main,
69
- module: module$1,
70
- types: types,
71
- ".": {
72
- require: {
73
- types: "./dist/index.d.ts",
74
- "default": "./dist/index.cjs"
75
- },
76
- "import": {
77
- types: "./dist/index.d.ts",
78
- "default": "./dist/index.mjs"
79
- }
80
- },
81
- bin: bin,
82
- devDependencies: devDependencies,
83
- dependencies: dependencies,
84
- scripts: scripts
85
- };
86
-
87
- ldenv.loadEnv();
88
- const commandName = pkg.name;
89
- const program = new commander.Command();
90
- program.name(commandName).version(pkg.version).usage(`${commandName}`).description("execute deploy scripts and store the deployments").option("-s, --scripts <value>", "path the folder containing the deploy scripts to execute").option("-t, --tags <value>", "comma separated list of tags to execute").option("-d, --deployments <value>", "folder where deployments are saved").option("--skip-gas-report", "if set skip gas report").option("--skip-prompts", "if set skip any prompts").option("--save-deployments", "if set, save deployments").requiredOption("-n, --network <value>", "network context to use").parse(process.argv);
91
- const options = program.opts();
92
- console.log(options);
93
- index.loadAndExecuteDeployments({
94
- ...options,
95
- logLevel: 1,
96
- askBeforeProceeding: options.skipPrompts ? false : true,
97
- reportGasUse: options.skipGasReport ? false : true,
98
- saveDeployments: options.saveDeployments
99
- });
100
- //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.cjs","sources":["../src/cli.ts"],"sourcesContent":["#! /usr/bin/env node\nimport {loadEnv} from 'ldenv';\nimport {ConfigOptions, loadAndExecuteDeployments, readConfig} from '.';\nimport {Command} from 'commander';\nimport pkg from '../package.json';\n\nloadEnv();\n\nconst commandName = pkg.name;\nconst program = new Command();\nprogram\n\t.name(commandName)\n\t.version(pkg.version)\n\t.usage(`${commandName}`)\n\t.description('execute deploy scripts and store the deployments')\n\t.option('-s, --scripts <value>', 'path the folder containing the deploy scripts to execute')\n\t.option('-t, --tags <value>', 'comma separated list of tags to execute')\n\t.option('-d, --deployments <value>', 'folder where deployments are saved')\n\t.option('--skip-gas-report', 'if set skip gas report')\n\t.option('--skip-prompts', 'if set skip any prompts')\n\t.option('--save-deployments', 'if set, save deployments')\n\t.requiredOption('-n, --network <value>', 'network context to use')\n\t.parse(process.argv);\n\nconst options = program.opts();\n\nconsole.log(options);\n\nloadAndExecuteDeployments({\n\t...(options as ConfigOptions),\n\tlogLevel: 1,\n\taskBeforeProceeding: options.skipPrompts ? false : true,\n\treportGasUse: options.skipGasReport ? false : true,\n\tsaveDeployments: options.saveDeployments,\n});\n"],"names":["loadEnv","Command","loadAndExecuteDeployments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,EAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,EAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,kDAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yCAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACPC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAmB,CAAA,CAAA;AACnB,CAAA,CAAE,GAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACZ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAC,CAAA;AACb,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,EAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,WAAW,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAI,CAAA,CAAA,CAAA,CAAA;AACzD,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,aAAa,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAI,CAAA,CAAA,CAAA,CAAA;AACpD,CAAA,CAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1C,CAAC,CAAC"}