gate-evm-tools 1.0.27 → 1.0.31

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 (641) hide show
  1. package/README.md +16 -1
  2. package/bin/cli.js +3 -0
  3. package/bin/delivery.cjs +51 -0
  4. package/bin/manifest-bootstrap.js +4 -15
  5. package/bin/workflow.cjs +1 -1
  6. package/dist/commands/plan/file-store.d.ts.map +1 -0
  7. package/dist/commands/plan/generate-deployment.d.ts +48 -0
  8. package/dist/commands/plan/generate-deployment.d.ts.map +1 -0
  9. package/dist/commands/plan/generate-deployment.js +211 -0
  10. package/dist/commands/plan/generate-deployment.js.map +1 -0
  11. package/dist/commands/plan/helpers.d.ts.map +1 -0
  12. package/dist/commands/plan/index.d.ts +3 -0
  13. package/dist/commands/plan/index.d.ts.map +1 -0
  14. package/dist/commands/plan/index.js +88 -0
  15. package/dist/commands/plan/index.js.map +1 -0
  16. package/dist/commands/sync.js +1 -1
  17. package/dist/commands/sync.js.map +1 -1
  18. package/dist/core/BytecodeChecker.d.ts.map +1 -1
  19. package/dist/core/BytecodeChecker.js +27 -8
  20. package/dist/core/BytecodeChecker.js.map +1 -1
  21. package/dist/core/preparation/artifacts.d.ts +2 -0
  22. package/dist/core/preparation/artifacts.d.ts.map +1 -1
  23. package/dist/core/preparation/artifacts.js +9 -3
  24. package/dist/core/preparation/artifacts.js.map +1 -1
  25. package/dist/core/preparation/evm.d.ts +38 -2
  26. package/dist/core/preparation/evm.d.ts.map +1 -1
  27. package/dist/core/preparation/evm.js +104 -32
  28. package/dist/core/preparation/evm.js.map +1 -1
  29. package/dist/core/preparation/evmManifestSync.d.ts +63 -0
  30. package/dist/core/preparation/evmManifestSync.d.ts.map +1 -0
  31. package/dist/core/preparation/evmManifestSync.js +146 -0
  32. package/dist/core/preparation/evmManifestSync.js.map +1 -0
  33. package/dist/core/preparation/index.d.ts +40 -2
  34. package/dist/core/preparation/index.d.ts.map +1 -1
  35. package/dist/core/preparation/index.js +3 -3
  36. package/dist/core/preparation/index.js.map +1 -1
  37. package/dist/core/preparation/manifest.d.ts +15 -3
  38. package/dist/core/preparation/manifest.d.ts.map +1 -1
  39. package/dist/core/preparation/manifest.js +21 -26
  40. package/dist/core/preparation/manifest.js.map +1 -1
  41. package/dist/core/preparation/normalize.d.ts.map +1 -1
  42. package/dist/core/preparation/normalize.js +14 -9
  43. package/dist/core/preparation/normalize.js.map +1 -1
  44. package/dist/core/preparation/types.d.ts +7 -2
  45. package/dist/core/preparation/types.d.ts.map +1 -1
  46. package/dist/custody/hardhat-runtime.d.ts.map +1 -1
  47. package/dist/custody/hardhat-runtime.js +2 -0
  48. package/dist/custody/hardhat-runtime.js.map +1 -1
  49. package/dist/custody/hardhat.d.ts +1 -0
  50. package/dist/custody/hardhat.d.ts.map +1 -1
  51. package/dist/custody/hardhat.js +1 -0
  52. package/dist/custody/hardhat.js.map +1 -1
  53. package/dist/custody/index.d.ts +1 -0
  54. package/dist/custody/index.d.ts.map +1 -1
  55. package/dist/custody/index.js +1 -0
  56. package/dist/custody/index.js.map +1 -1
  57. package/dist/custody/provider-wait.d.ts +13 -0
  58. package/dist/custody/provider-wait.d.ts.map +1 -0
  59. package/dist/custody/provider-wait.js +78 -0
  60. package/dist/custody/provider-wait.js.map +1 -0
  61. package/dist/delivery/policy.d.ts +6 -0
  62. package/dist/delivery/policy.d.ts.map +1 -0
  63. package/dist/delivery/policy.js +24 -0
  64. package/dist/delivery/policy.js.map +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +5 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/sync/index.d.ts +15 -0
  69. package/dist/sync/index.d.ts.map +1 -1
  70. package/dist/sync/index.js +8 -0
  71. package/dist/sync/index.js.map +1 -1
  72. package/dist/workflow/index.d.ts +6 -1
  73. package/dist/workflow/index.d.ts.map +1 -1
  74. package/dist/workflow/index.js +4 -0
  75. package/dist/workflow/index.js.map +1 -1
  76. package/dist-cjs/core/BytecodeChecker.js +526 -0
  77. package/dist-cjs/core/BytecodeChecker.js.map +1 -0
  78. package/dist-cjs/core/legacyProxyArtifact.js +42 -0
  79. package/dist-cjs/core/legacyProxyArtifact.js.map +1 -0
  80. package/dist-cjs/core/preparation/artifacts.js +11 -4
  81. package/dist-cjs/core/preparation/artifacts.js.map +1 -1
  82. package/dist-cjs/core/preparation/evm.js +105 -32
  83. package/dist-cjs/core/preparation/evm.js.map +1 -1
  84. package/dist-cjs/core/preparation/evmManifestSync.js +155 -0
  85. package/dist-cjs/core/preparation/evmManifestSync.js.map +1 -0
  86. package/dist-cjs/core/preparation/index.js +3 -3
  87. package/dist-cjs/core/preparation/index.js.map +1 -1
  88. package/dist-cjs/core/preparation/manifest.js +23 -28
  89. package/dist-cjs/core/preparation/manifest.js.map +1 -1
  90. package/dist-cjs/core/preparation/normalize.js +14 -9
  91. package/dist-cjs/core/preparation/normalize.js.map +1 -1
  92. package/dist-cjs/custody/hardhat-runtime.js +2 -0
  93. package/dist-cjs/custody/hardhat-runtime.js.map +1 -1
  94. package/dist-cjs/custody/hardhat.js +3 -1
  95. package/dist-cjs/custody/hardhat.js.map +1 -1
  96. package/dist-cjs/custody/index.js +3 -1
  97. package/dist-cjs/custody/index.js.map +1 -1
  98. package/dist-cjs/custody/provider-wait.js +81 -0
  99. package/dist-cjs/custody/provider-wait.js.map +1 -0
  100. package/dist-cjs/delivery/policy.js +29 -0
  101. package/dist-cjs/delivery/policy.js.map +1 -0
  102. package/dist-cjs/sync/index.js +8 -0
  103. package/dist-cjs/sync/index.js.map +1 -1
  104. package/dist-cjs/workflow/index.js +12 -1
  105. package/dist-cjs/workflow/index.js.map +1 -1
  106. package/dist-runtime/config/hardhatAdapters.d.ts +2 -0
  107. package/dist-runtime/config/hardhatAdapters.js +8 -0
  108. package/dist-runtime/config/hardhatAdapters.js.map +1 -1
  109. package/dist-runtime/config/networks.d.ts +25 -1
  110. package/dist-runtime/config/networks.js +8 -2
  111. package/dist-runtime/config/networks.js.map +1 -1
  112. package/dist-runtime/config/openzeppelin.d.ts +2 -1
  113. package/dist-runtime/config/openzeppelin.js +2 -19
  114. package/dist-runtime/config/openzeppelin.js.map +1 -1
  115. package/dist-runtime/delivery/abi.d.ts +14 -0
  116. package/dist-runtime/delivery/abi.js +161 -0
  117. package/dist-runtime/delivery/abi.js.map +1 -0
  118. package/dist-runtime/delivery/aggregate-bootstrap.d.ts +12 -0
  119. package/dist-runtime/delivery/aggregate-bootstrap.js +40 -0
  120. package/dist-runtime/delivery/aggregate-bootstrap.js.map +1 -0
  121. package/dist-runtime/delivery/aggregate-channel.d.ts +28 -0
  122. package/dist-runtime/delivery/aggregate-channel.js +155 -0
  123. package/dist-runtime/delivery/aggregate-channel.js.map +1 -0
  124. package/dist-runtime/delivery/aggregate-inputs.d.ts +168 -0
  125. package/dist-runtime/delivery/aggregate-inputs.js +57 -0
  126. package/dist-runtime/delivery/aggregate-inputs.js.map +1 -0
  127. package/dist-runtime/delivery/aggregate-source.d.ts +25 -0
  128. package/dist-runtime/delivery/aggregate-source.js +79 -0
  129. package/dist-runtime/delivery/aggregate-source.js.map +1 -0
  130. package/dist-runtime/delivery/aggregate-worker.d.ts +1 -0
  131. package/dist-runtime/delivery/aggregate-worker.js +191 -0
  132. package/dist-runtime/delivery/aggregate-worker.js.map +1 -0
  133. package/dist-runtime/delivery/aggregate.d.ts +51 -0
  134. package/dist-runtime/delivery/aggregate.js +190 -0
  135. package/dist-runtime/delivery/aggregate.js.map +1 -0
  136. package/dist-runtime/delivery/bindings.d.ts +21 -0
  137. package/dist-runtime/delivery/bindings.js +53 -0
  138. package/dist-runtime/delivery/bindings.js.map +1 -0
  139. package/dist-runtime/delivery/check-code.d.ts +19 -0
  140. package/dist-runtime/delivery/check-code.js +63 -0
  141. package/dist-runtime/delivery/check-code.js.map +1 -0
  142. package/dist-runtime/delivery/closure-format.d.ts +77 -0
  143. package/dist-runtime/delivery/closure-format.js +225 -0
  144. package/dist-runtime/delivery/closure-format.js.map +1 -0
  145. package/dist-runtime/delivery/codec-pin.d.ts +2 -0
  146. package/dist-runtime/delivery/codec-pin.js +7 -0
  147. package/dist-runtime/delivery/codec-pin.js.map +1 -0
  148. package/dist-runtime/delivery/codec.d.ts +19 -0
  149. package/dist-runtime/delivery/codec.js +73 -0
  150. package/dist-runtime/delivery/codec.js.map +1 -0
  151. package/dist-runtime/delivery/compiler-dependency-pins.d.ts +7 -0
  152. package/dist-runtime/delivery/compiler-dependency-pins.js +1689 -0
  153. package/dist-runtime/delivery/compiler-dependency-pins.js.map +1 -0
  154. package/dist-runtime/delivery/compiler-files.d.ts +40 -0
  155. package/dist-runtime/delivery/compiler-files.js +220 -0
  156. package/dist-runtime/delivery/compiler-files.js.map +1 -0
  157. package/dist-runtime/delivery/compiler-io.d.ts +2 -0
  158. package/dist-runtime/delivery/compiler-io.js +13 -0
  159. package/dist-runtime/delivery/compiler-io.js.map +1 -0
  160. package/dist-runtime/delivery/compiler-pins.d.ts +10 -0
  161. package/dist-runtime/delivery/compiler-pins.js +147 -0
  162. package/dist-runtime/delivery/compiler-pins.js.map +1 -0
  163. package/dist-runtime/delivery/compiler.d.ts +188 -0
  164. package/dist-runtime/delivery/compiler.js +850 -0
  165. package/dist-runtime/delivery/compiler.js.map +1 -0
  166. package/dist-runtime/delivery/config.d.ts +48 -0
  167. package/dist-runtime/delivery/config.js +99 -0
  168. package/dist-runtime/delivery/config.js.map +1 -0
  169. package/dist-runtime/delivery/configuration-definition.d.ts +22 -0
  170. package/dist-runtime/delivery/configuration-definition.js +316 -0
  171. package/dist-runtime/delivery/configuration-definition.js.map +1 -0
  172. package/dist-runtime/delivery/configuration-hre.d.ts +17 -0
  173. package/dist-runtime/delivery/configuration-hre.js +198 -0
  174. package/dist-runtime/delivery/configuration-hre.js.map +1 -0
  175. package/dist-runtime/delivery/configuration-runtime.d.ts +36 -0
  176. package/dist-runtime/delivery/configuration-runtime.js +248 -0
  177. package/dist-runtime/delivery/configuration-runtime.js.map +1 -0
  178. package/dist-runtime/delivery/configuration.d.ts +35 -0
  179. package/dist-runtime/delivery/configuration.js +83 -0
  180. package/dist-runtime/delivery/configuration.js.map +1 -0
  181. package/dist-runtime/delivery/create2.d.ts +3 -0
  182. package/dist-runtime/delivery/create2.js +48 -0
  183. package/dist-runtime/delivery/create2.js.map +1 -0
  184. package/dist-runtime/delivery/custom-closure.d.ts +27 -0
  185. package/dist-runtime/delivery/custom-closure.js +818 -0
  186. package/dist-runtime/delivery/custom-closure.js.map +1 -0
  187. package/dist-runtime/delivery/custom-format.d.ts +35 -0
  188. package/dist-runtime/delivery/custom-format.js +383 -0
  189. package/dist-runtime/delivery/custom-format.js.map +1 -0
  190. package/dist-runtime/delivery/custom.d.ts +32 -0
  191. package/dist-runtime/delivery/custom.js +158 -0
  192. package/dist-runtime/delivery/custom.js.map +1 -0
  193. package/dist-runtime/delivery/data.d.ts +7 -0
  194. package/dist-runtime/delivery/data.js +86 -0
  195. package/dist-runtime/delivery/data.js.map +1 -0
  196. package/dist-runtime/delivery/development.d.ts +91 -0
  197. package/dist-runtime/delivery/development.js +395 -0
  198. package/dist-runtime/delivery/development.js.map +1 -0
  199. package/dist-runtime/delivery/engine.d.ts +9 -0
  200. package/dist-runtime/delivery/engine.js +23 -0
  201. package/dist-runtime/delivery/engine.js.map +1 -0
  202. package/dist-runtime/delivery/eoa-observation.d.ts +43 -0
  203. package/dist-runtime/delivery/eoa-observation.js +145 -0
  204. package/dist-runtime/delivery/eoa-observation.js.map +1 -0
  205. package/dist-runtime/delivery/eoa-signed.d.ts +2 -0
  206. package/dist-runtime/delivery/eoa-signed.js +74 -0
  207. package/dist-runtime/delivery/eoa-signed.js.map +1 -0
  208. package/dist-runtime/delivery/eoa.d.ts +81 -0
  209. package/dist-runtime/delivery/eoa.js +274 -0
  210. package/dist-runtime/delivery/eoa.js.map +1 -0
  211. package/dist-runtime/delivery/execution-db.d.ts +20 -0
  212. package/dist-runtime/delivery/execution-db.js +153 -0
  213. package/dist-runtime/delivery/execution-db.js.map +1 -0
  214. package/dist-runtime/delivery/execution-files.d.ts +9 -0
  215. package/dist-runtime/delivery/execution-files.js +138 -0
  216. package/dist-runtime/delivery/execution-files.js.map +1 -0
  217. package/dist-runtime/delivery/execution-model.d.ts +56 -0
  218. package/dist-runtime/delivery/execution-model.js +66 -0
  219. package/dist-runtime/delivery/execution-model.js.map +1 -0
  220. package/dist-runtime/delivery/execution-store.d.ts +48 -0
  221. package/dist-runtime/delivery/execution-store.js +361 -0
  222. package/dist-runtime/delivery/execution-store.js.map +1 -0
  223. package/dist-runtime/delivery/existing-code.d.ts +37 -0
  224. package/dist-runtime/delivery/existing-code.js +75 -0
  225. package/dist-runtime/delivery/existing-code.js.map +1 -0
  226. package/dist-runtime/delivery/export.d.ts +51 -0
  227. package/dist-runtime/delivery/export.js +69 -0
  228. package/dist-runtime/delivery/export.js.map +1 -0
  229. package/dist-runtime/delivery/forkAudit.d.ts +119 -0
  230. package/dist-runtime/delivery/forkAudit.js +473 -0
  231. package/dist-runtime/delivery/forkAudit.js.map +1 -0
  232. package/dist-runtime/delivery/hardhat.d.ts +3 -0
  233. package/dist-runtime/delivery/hardhat.js +45 -0
  234. package/dist-runtime/delivery/hardhat.js.map +1 -0
  235. package/dist-runtime/delivery/history-registration.d.ts +2 -0
  236. package/dist-runtime/delivery/history-registration.js +17 -0
  237. package/dist-runtime/delivery/history-registration.js.map +1 -0
  238. package/dist-runtime/delivery/identities.d.ts +22 -0
  239. package/dist-runtime/delivery/identities.js +97 -0
  240. package/dist-runtime/delivery/identities.js.map +1 -0
  241. package/dist-runtime/delivery/input-files.d.ts +5 -0
  242. package/dist-runtime/delivery/input-files.js +70 -0
  243. package/dist-runtime/delivery/input-files.js.map +1 -0
  244. package/dist-runtime/delivery/inputs.d.ts +62 -0
  245. package/dist-runtime/delivery/inputs.js +187 -0
  246. package/dist-runtime/delivery/inputs.js.map +1 -0
  247. package/dist-runtime/delivery/journal.d.ts +35 -0
  248. package/dist-runtime/delivery/journal.js +270 -0
  249. package/dist-runtime/delivery/journal.js.map +1 -0
  250. package/dist-runtime/delivery/manifest.d.ts +14 -0
  251. package/dist-runtime/delivery/manifest.js +68 -0
  252. package/dist-runtime/delivery/manifest.js.map +1 -0
  253. package/dist-runtime/delivery/materialization.d.ts +20 -0
  254. package/dist-runtime/delivery/materialization.js +138 -0
  255. package/dist-runtime/delivery/materialization.js.map +1 -0
  256. package/dist-runtime/delivery/observations.d.ts +31 -0
  257. package/dist-runtime/delivery/observations.js +38 -0
  258. package/dist-runtime/delivery/observations.js.map +1 -0
  259. package/dist-runtime/delivery/parameters.d.ts +53 -0
  260. package/dist-runtime/delivery/parameters.js +257 -0
  261. package/dist-runtime/delivery/parameters.js.map +1 -0
  262. package/dist-runtime/delivery/pending.d.ts +70 -0
  263. package/dist-runtime/delivery/pending.js +99 -0
  264. package/dist-runtime/delivery/pending.js.map +1 -0
  265. package/dist-runtime/delivery/plan.d.ts +50 -0
  266. package/dist-runtime/delivery/plan.js +209 -0
  267. package/dist-runtime/delivery/plan.js.map +1 -0
  268. package/dist-runtime/delivery/planning.d.ts +81 -0
  269. package/dist-runtime/delivery/planning.js +302 -0
  270. package/dist-runtime/delivery/planning.js.map +1 -0
  271. package/dist-runtime/delivery/policy.d.ts +4 -0
  272. package/dist-runtime/delivery/policy.js +9 -0
  273. package/dist-runtime/delivery/policy.js.map +1 -0
  274. package/dist-runtime/delivery/preparation.d.ts +6 -0
  275. package/dist-runtime/delivery/preparation.js +158 -0
  276. package/dist-runtime/delivery/preparation.js.map +1 -0
  277. package/dist-runtime/delivery/production-environment.d.ts +2 -0
  278. package/dist-runtime/delivery/production-environment.js +12 -0
  279. package/dist-runtime/delivery/production-environment.js.map +1 -0
  280. package/dist-runtime/delivery/production-finalization.d.ts +86 -0
  281. package/dist-runtime/delivery/production-finalization.js +278 -0
  282. package/dist-runtime/delivery/production-finalization.js.map +1 -0
  283. package/dist-runtime/delivery/production.d.ts +461 -0
  284. package/dist-runtime/delivery/production.js +396 -0
  285. package/dist-runtime/delivery/production.js.map +1 -0
  286. package/dist-runtime/delivery/project-files.d.ts +8 -0
  287. package/dist-runtime/delivery/project-files.js +82 -0
  288. package/dist-runtime/delivery/project-files.js.map +1 -0
  289. package/dist-runtime/delivery/project.d.ts +15 -0
  290. package/dist-runtime/delivery/project.js +157 -0
  291. package/dist-runtime/delivery/project.js.map +1 -0
  292. package/dist-runtime/delivery/protocol.d.ts +49 -0
  293. package/dist-runtime/delivery/protocol.js +112 -0
  294. package/dist-runtime/delivery/protocol.js.map +1 -0
  295. package/dist-runtime/delivery/references.d.ts +19 -0
  296. package/dist-runtime/delivery/references.js +84 -0
  297. package/dist-runtime/delivery/references.js.map +1 -0
  298. package/dist-runtime/delivery/release-graph.d.ts +93 -0
  299. package/dist-runtime/delivery/release-graph.js +106 -0
  300. package/dist-runtime/delivery/release-graph.js.map +1 -0
  301. package/dist-runtime/delivery/release-history-capture.d.ts +7 -0
  302. package/dist-runtime/delivery/release-history-capture.js +76 -0
  303. package/dist-runtime/delivery/release-history-capture.js.map +1 -0
  304. package/dist-runtime/delivery/release-history.d.ts +43 -0
  305. package/dist-runtime/delivery/release-history.js +246 -0
  306. package/dist-runtime/delivery/release-history.js.map +1 -0
  307. package/dist-runtime/delivery/release.d.ts +172 -0
  308. package/dist-runtime/delivery/release.js +209 -0
  309. package/dist-runtime/delivery/release.js.map +1 -0
  310. package/dist-runtime/delivery/safe-manifest.d.ts +9 -0
  311. package/dist-runtime/delivery/safe-manifest.js +13 -0
  312. package/dist-runtime/delivery/safe-manifest.js.map +1 -0
  313. package/dist-runtime/delivery/safe-observation.d.ts +30 -0
  314. package/dist-runtime/delivery/safe-observation.js +487 -0
  315. package/dist-runtime/delivery/safe-observation.js.map +1 -0
  316. package/dist-runtime/delivery/safe-prepare.d.ts +13 -0
  317. package/dist-runtime/delivery/safe-prepare.js +81 -0
  318. package/dist-runtime/delivery/safe-prepare.js.map +1 -0
  319. package/dist-runtime/delivery/safe.d.ts +91 -0
  320. package/dist-runtime/delivery/safe.js +243 -0
  321. package/dist-runtime/delivery/safe.js.map +1 -0
  322. package/dist-runtime/delivery/same-fork-baseline.d.ts +8 -0
  323. package/dist-runtime/delivery/same-fork-baseline.js +20 -0
  324. package/dist-runtime/delivery/same-fork-baseline.js.map +1 -0
  325. package/dist-runtime/delivery/setup.d.ts +31 -0
  326. package/dist-runtime/delivery/setup.js +215 -0
  327. package/dist-runtime/delivery/setup.js.map +1 -0
  328. package/dist-runtime/delivery/source.d.ts +41 -0
  329. package/dist-runtime/delivery/source.js +137 -0
  330. package/dist-runtime/delivery/source.js.map +1 -0
  331. package/dist-runtime/delivery/target-fields.d.ts +2 -0
  332. package/dist-runtime/delivery/target-fields.js +11 -0
  333. package/dist-runtime/delivery/target-fields.js.map +1 -0
  334. package/dist-runtime/delivery/validation.d.ts +9 -0
  335. package/dist-runtime/delivery/validation.js +150 -0
  336. package/dist-runtime/delivery/validation.js.map +1 -0
  337. package/dist-runtime/delivery/verification.d.ts +16 -0
  338. package/dist-runtime/delivery/verification.js +65 -0
  339. package/dist-runtime/delivery/verification.js.map +1 -0
  340. package/dist-runtime/migrate.js +1 -0
  341. package/dist-runtime/migrate.js.map +1 -1
  342. package/dist-runtime/miner/binary.d.ts +2 -0
  343. package/dist-runtime/miner/binary.js +54 -0
  344. package/dist-runtime/miner/binary.js.map +1 -0
  345. package/dist-runtime/miner/cli.d.ts +1 -0
  346. package/dist-runtime/miner/cli.js +131 -0
  347. package/dist-runtime/miner/cli.js.map +1 -0
  348. package/dist-runtime/miner/index.d.ts +5 -0
  349. package/dist-runtime/miner/index.js +13 -0
  350. package/dist-runtime/miner/index.js.map +1 -0
  351. package/dist-runtime/miner/request.d.ts +7 -0
  352. package/dist-runtime/miner/request.js +73 -0
  353. package/dist-runtime/miner/request.js.map +1 -0
  354. package/dist-runtime/miner/runner.d.ts +2 -0
  355. package/dist-runtime/miner/runner.js +131 -0
  356. package/dist-runtime/miner/runner.js.map +1 -0
  357. package/dist-runtime/miner/types.d.ts +89 -0
  358. package/dist-runtime/miner/types.js +3 -0
  359. package/dist-runtime/miner/types.js.map +1 -0
  360. package/dist-runtime/miner/verify.d.ts +2 -0
  361. package/dist-runtime/miner/verify.js +75 -0
  362. package/dist-runtime/miner/verify.js.map +1 -0
  363. package/dist-runtime/runtime-identity.json +2 -2
  364. package/dist-runtime/vendor/plan-codec/index.cjs +820 -0
  365. package/dist-runtime/vendor/plan-codec/index.d.cts +32 -0
  366. package/dist-runtime/vendor/plan-codec/provenance.json +24 -0
  367. package/dist-runtime/workflow/engine.d.ts +14 -0
  368. package/dist-runtime/workflow/engine.js +160 -0
  369. package/dist-runtime/workflow/engine.js.map +1 -0
  370. package/dist-runtime/workflow/lib/authority.d.ts +6 -3
  371. package/dist-runtime/workflow/lib/authority.js.map +1 -1
  372. package/dist-runtime/workflow/lib/calls.d.ts +1 -1
  373. package/dist-runtime/workflow/lib/calls.js +43 -34
  374. package/dist-runtime/workflow/lib/calls.js.map +1 -1
  375. package/dist-runtime/workflow/lib/canonicalData.d.ts +8 -0
  376. package/dist-runtime/workflow/lib/canonicalData.js +68 -0
  377. package/dist-runtime/workflow/lib/canonicalData.js.map +1 -0
  378. package/dist-runtime/workflow/lib/config.d.ts +3 -1
  379. package/dist-runtime/workflow/lib/config.js.map +1 -1
  380. package/dist-runtime/workflow/lib/context.d.ts +76 -0
  381. package/dist-runtime/workflow/lib/context.js +3 -0
  382. package/dist-runtime/workflow/lib/context.js.map +1 -0
  383. package/dist-runtime/workflow/lib/controlledMulticallAbi.d.ts +2 -0
  384. package/dist-runtime/workflow/lib/controlledMulticallAbi.js +10 -0
  385. package/dist-runtime/workflow/lib/controlledMulticallAbi.js.map +1 -0
  386. package/dist-runtime/workflow/lib/create2.d.ts +1 -1
  387. package/dist-runtime/workflow/lib/create2.js +9 -12
  388. package/dist-runtime/workflow/lib/create2.js.map +1 -1
  389. package/dist-runtime/workflow/lib/deployments.d.ts +5 -5
  390. package/dist-runtime/workflow/lib/deployments.js +5 -13
  391. package/dist-runtime/workflow/lib/deployments.js.map +1 -1
  392. package/dist-runtime/workflow/lib/evidencePorts.d.ts +55 -0
  393. package/dist-runtime/workflow/lib/evidencePorts.js +3 -0
  394. package/dist-runtime/workflow/lib/evidencePorts.js.map +1 -0
  395. package/dist-runtime/workflow/lib/executionPlan.d.ts +4 -42
  396. package/dist-runtime/workflow/lib/executionPlan.js +15 -210
  397. package/dist-runtime/workflow/lib/executionPlan.js.map +1 -1
  398. package/dist-runtime/workflow/lib/gateTool.d.ts +6 -2
  399. package/dist-runtime/workflow/lib/gateTool.js +20 -10
  400. package/dist-runtime/workflow/lib/gateTool.js.map +1 -1
  401. package/dist-runtime/workflow/lib/gateToolSync.d.ts +1 -1
  402. package/dist-runtime/workflow/lib/gateToolSync.js +3 -2
  403. package/dist-runtime/workflow/lib/gateToolSync.js.map +1 -1
  404. package/dist-runtime/workflow/lib/operationNames.d.ts +3 -0
  405. package/dist-runtime/workflow/lib/operationNames.js +34 -0
  406. package/dist-runtime/workflow/lib/operationNames.js.map +1 -0
  407. package/dist-runtime/workflow/lib/parameters.d.ts +1 -1
  408. package/dist-runtime/workflow/lib/parameters.js +9 -24
  409. package/dist-runtime/workflow/lib/parameters.js.map +1 -1
  410. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js +18 -52
  411. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js.map +1 -1
  412. package/dist-runtime/workflow/lib/pendingUupsBinding.d.ts +42 -0
  413. package/dist-runtime/workflow/lib/pendingUupsBinding.js +39 -0
  414. package/dist-runtime/workflow/lib/pendingUupsBinding.js.map +1 -0
  415. package/dist-runtime/workflow/lib/plan.d.ts +55 -0
  416. package/dist-runtime/workflow/lib/plan.js +324 -0
  417. package/dist-runtime/workflow/lib/plan.js.map +1 -0
  418. package/dist-runtime/workflow/lib/planCli.d.ts +14 -0
  419. package/dist-runtime/workflow/lib/planCli.js +279 -0
  420. package/dist-runtime/workflow/lib/planCli.js.map +1 -0
  421. package/dist-runtime/workflow/lib/preparationEvidence.d.ts +4 -0
  422. package/dist-runtime/workflow/lib/preparationEvidence.js +19 -0
  423. package/dist-runtime/workflow/lib/preparationEvidence.js.map +1 -0
  424. package/dist-runtime/workflow/lib/proxy.d.ts +3 -2
  425. package/dist-runtime/workflow/lib/proxy.js +3 -4
  426. package/dist-runtime/workflow/lib/proxy.js.map +1 -1
  427. package/dist-runtime/workflow/lib/runtime.d.ts +6 -0
  428. package/dist-runtime/workflow/lib/runtime.js +48 -0
  429. package/dist-runtime/workflow/lib/runtime.js.map +1 -0
  430. package/dist-runtime/workflow/lib/signer.d.ts +3 -2
  431. package/dist-runtime/workflow/lib/signer.js +18 -18
  432. package/dist-runtime/workflow/lib/signer.js.map +1 -1
  433. package/dist-runtime/workflow/lib/simulation.d.ts +13 -6
  434. package/dist-runtime/workflow/lib/simulation.js +39 -31
  435. package/dist-runtime/workflow/lib/simulation.js.map +1 -1
  436. package/dist-runtime/workflow/lib/state.js +3 -3
  437. package/dist-runtime/workflow/lib/state.js.map +1 -1
  438. package/dist-runtime/workflow/lib/staticValidation.d.ts +28 -0
  439. package/dist-runtime/workflow/lib/staticValidation.js +54 -10
  440. package/dist-runtime/workflow/lib/staticValidation.js.map +1 -1
  441. package/dist-runtime/workflow/lib/transactionPlanner.d.ts +62 -0
  442. package/dist-runtime/workflow/lib/transactionPlanner.js +258 -0
  443. package/dist-runtime/workflow/lib/transactionPlanner.js.map +1 -0
  444. package/dist-runtime/workflow/lib/typedValue.d.ts +3 -0
  445. package/dist-runtime/workflow/lib/typedValue.js +76 -0
  446. package/dist-runtime/workflow/lib/typedValue.js.map +1 -0
  447. package/dist-runtime/workflow/lib/validation.d.ts +23 -0
  448. package/dist-runtime/workflow/lib/validation.js +15 -0
  449. package/dist-runtime/workflow/lib/validation.js.map +1 -0
  450. package/dist-runtime/workflow/planAdd.d.ts +1 -0
  451. package/dist-runtime/workflow/planAdd.js +11 -0
  452. package/dist-runtime/workflow/planAdd.js.map +1 -0
  453. package/dist-runtime/workflow/planRead.d.ts +1 -0
  454. package/dist-runtime/workflow/planRead.js +11 -0
  455. package/dist-runtime/workflow/planRead.js.map +1 -0
  456. package/dist-runtime/workflow/planStatus.d.ts +1 -0
  457. package/dist-runtime/workflow/planStatus.js +11 -0
  458. package/dist-runtime/workflow/planStatus.js.map +1 -0
  459. package/dist-runtime/workflow/planWrite.d.ts +1 -0
  460. package/dist-runtime/workflow/planWrite.js +11 -0
  461. package/dist-runtime/workflow/planWrite.js.map +1 -0
  462. package/dist-runtime/workflow/run.d.ts +1 -40
  463. package/dist-runtime/workflow/run.js +68 -136
  464. package/dist-runtime/workflow/run.js.map +1 -1
  465. package/dist-runtime/workflow/staticValidate.js +8 -3
  466. package/dist-runtime/workflow/staticValidate.js.map +1 -1
  467. package/dist-runtime/workflow/steps/call.d.ts +1 -1
  468. package/dist-runtime/workflow/steps/check.d.ts +1 -1
  469. package/dist-runtime/workflow/steps/custom.d.ts +1 -1
  470. package/dist-runtime/workflow/steps/deploy.d.ts +1 -1
  471. package/dist-runtime/workflow/steps/deploy.js +58 -55
  472. package/dist-runtime/workflow/steps/deploy.js.map +1 -1
  473. package/dist-runtime/workflow/steps/upgrade.d.ts +1 -1
  474. package/dist-runtime/workflow/steps/upgrade.js +63 -41
  475. package/dist-runtime/workflow/steps/upgrade.js.map +1 -1
  476. package/dist-runtime/workflow/steps/view.d.ts +1 -1
  477. package/docs/compiler-qualification.md +32 -0
  478. package/docs/configuration-runtime-observation.md +29 -0
  479. package/docs/create2-miner.md +100 -0
  480. package/docs/delivery-aggregate.md +27 -0
  481. package/docs/delivery-custom-input-closure.md +51 -0
  482. package/docs/delivery-development.md +32 -0
  483. package/docs/delivery-eoa.md +46 -0
  484. package/docs/delivery-evm-manifest.md +20 -0
  485. package/docs/delivery-execution-store.md +33 -0
  486. package/docs/delivery-inputs.md +46 -0
  487. package/docs/delivery-parameters.md +65 -0
  488. package/docs/delivery-planning.md +140 -0
  489. package/docs/delivery-release.md +65 -0
  490. package/docs/delivery-safe.md +72 -0
  491. package/docs/delivery-setup.md +146 -0
  492. package/docs/delivery-source.md +67 -0
  493. package/docs/direct-package-acceptance.md +20 -0
  494. package/docs/external-infrastructure-acceptance.md +33 -0
  495. package/docs/network-runtime-acceptance.md +18 -0
  496. package/docs/plans/2026-09-09-workflow-extraction.md +16 -0
  497. package/docs/superpowers/plans/2026-07-22-manifest-bootstrap-transaction.md +50 -0
  498. package/docs/superpowers/plans/2026-07-22-manifest-review-remediation.md +49 -0
  499. package/docs/superpowers/plans/2026-08-17-custody-hardhat-signers.md +227 -0
  500. package/docs/superpowers/plans/2026-09-09-remove-template-infrastructure-contracts.md +11 -0
  501. package/docs/superpowers/plans/2026-09-24-scheme-aware-static-validation.md +193 -0
  502. package/docs/superpowers/plans/2026-10-28-create2-miner.md +82 -0
  503. package/docs/workflow-reference.md +1181 -0
  504. package/docs/workflow-runtime-acceptance.md +17 -0
  505. package/docs/workflow-runtime.md +56 -0
  506. package/package.json +134 -9
  507. package/resources/create2/LICENSE +21 -0
  508. package/resources/create2/README.md +9 -0
  509. package/resources/create2/darwin-arm64/smartflow_miner +0 -0
  510. package/resources/create2/darwin-x64/smartflow_miner +0 -0
  511. package/resources/create2/manifest.json +27 -0
  512. package/runtime/config/hardhatAdapters.ts +8 -0
  513. package/runtime/config/networks.ts +20 -11
  514. package/runtime/config/openzeppelin.ts +3 -21
  515. package/runtime/delivery/abi.ts +225 -0
  516. package/runtime/delivery/aggregate-bootstrap.ts +29 -0
  517. package/runtime/delivery/aggregate-channel.ts +85 -0
  518. package/runtime/delivery/aggregate-inputs.ts +39 -0
  519. package/runtime/delivery/aggregate-source.ts +53 -0
  520. package/runtime/delivery/aggregate-worker.ts +133 -0
  521. package/runtime/delivery/aggregate.ts +139 -0
  522. package/runtime/delivery/bindings.ts +37 -0
  523. package/runtime/delivery/check-code.ts +38 -0
  524. package/runtime/delivery/closure-format.ts +350 -0
  525. package/runtime/delivery/codec-pin.ts +3 -0
  526. package/runtime/delivery/codec.ts +50 -0
  527. package/runtime/delivery/compiler-dependency-pins.ts +1685 -0
  528. package/runtime/delivery/compiler-files.ts +179 -0
  529. package/runtime/delivery/compiler-io.ts +10 -0
  530. package/runtime/delivery/compiler-pins.ts +143 -0
  531. package/runtime/delivery/compiler.ts +700 -0
  532. package/runtime/delivery/config.ts +93 -0
  533. package/runtime/delivery/configuration-definition.ts +133 -0
  534. package/runtime/delivery/configuration-hre.ts +130 -0
  535. package/runtime/delivery/configuration-runtime.ts +163 -0
  536. package/runtime/delivery/configuration.ts +64 -0
  537. package/runtime/delivery/create2.ts +57 -0
  538. package/runtime/delivery/custom-closure.ts +993 -0
  539. package/runtime/delivery/custom-format.ts +464 -0
  540. package/runtime/delivery/custom.ts +219 -0
  541. package/runtime/delivery/data.ts +94 -0
  542. package/runtime/delivery/development.ts +262 -0
  543. package/runtime/delivery/engine.ts +29 -0
  544. package/runtime/delivery/eoa-observation.ts +106 -0
  545. package/runtime/delivery/eoa-signed.ts +55 -0
  546. package/runtime/delivery/eoa.ts +288 -0
  547. package/runtime/delivery/execution-db.ts +131 -0
  548. package/runtime/delivery/execution-files.ts +135 -0
  549. package/runtime/delivery/execution-model.ts +102 -0
  550. package/runtime/delivery/execution-store.ts +411 -0
  551. package/runtime/delivery/existing-code.ts +44 -0
  552. package/runtime/delivery/export.ts +99 -0
  553. package/runtime/delivery/forkAudit.ts +620 -0
  554. package/runtime/delivery/hardhat.ts +38 -0
  555. package/runtime/delivery/history-registration.ts +10 -0
  556. package/runtime/delivery/identities.ts +132 -0
  557. package/runtime/delivery/input-files.ts +46 -0
  558. package/runtime/delivery/inputs.ts +197 -0
  559. package/runtime/delivery/journal.ts +201 -0
  560. package/runtime/delivery/manifest.ts +54 -0
  561. package/runtime/delivery/materialization.ts +53 -0
  562. package/runtime/delivery/observations.ts +60 -0
  563. package/runtime/delivery/parameters.ts +349 -0
  564. package/runtime/delivery/pending.ts +98 -0
  565. package/runtime/delivery/plan.ts +337 -0
  566. package/runtime/delivery/planning.ts +397 -0
  567. package/runtime/delivery/policy.ts +9 -0
  568. package/runtime/delivery/preparation.ts +224 -0
  569. package/runtime/delivery/production-environment.ts +6 -0
  570. package/runtime/delivery/production-finalization.ts +172 -0
  571. package/runtime/delivery/production.ts +375 -0
  572. package/runtime/delivery/project-files.ts +58 -0
  573. package/runtime/delivery/project.ts +117 -0
  574. package/runtime/delivery/protocol.ts +94 -0
  575. package/runtime/delivery/references.ts +106 -0
  576. package/runtime/delivery/release-graph.ts +49 -0
  577. package/runtime/delivery/release-history-capture.ts +32 -0
  578. package/runtime/delivery/release-history.ts +120 -0
  579. package/runtime/delivery/release.ts +128 -0
  580. package/runtime/delivery/safe-manifest.ts +11 -0
  581. package/runtime/delivery/safe-observation.ts +626 -0
  582. package/runtime/delivery/safe-prepare.ts +101 -0
  583. package/runtime/delivery/safe.ts +344 -0
  584. package/runtime/delivery/same-fork-baseline.ts +16 -0
  585. package/runtime/delivery/setup.ts +172 -0
  586. package/runtime/delivery/source.ts +130 -0
  587. package/runtime/delivery/target-fields.ts +7 -0
  588. package/runtime/delivery/validation.ts +247 -0
  589. package/runtime/delivery/verification.ts +47 -0
  590. package/runtime/migrate.ts +1 -0
  591. package/runtime/miner/binary.ts +41 -0
  592. package/runtime/miner/cli.ts +87 -0
  593. package/runtime/miner/index.ts +5 -0
  594. package/runtime/miner/request.ts +54 -0
  595. package/runtime/miner/runner.ts +90 -0
  596. package/runtime/miner/types.ts +71 -0
  597. package/runtime/miner/verify.ts +61 -0
  598. package/runtime/vendor/plan-codec/index.cjs +820 -0
  599. package/runtime/vendor/plan-codec/index.d.cts +32 -0
  600. package/runtime/vendor/plan-codec/provenance.json +24 -0
  601. package/runtime/workflow/engine.ts +174 -0
  602. package/runtime/workflow/lib/authority.ts +3 -3
  603. package/runtime/workflow/lib/calls.ts +46 -37
  604. package/runtime/workflow/lib/canonicalData.ts +45 -0
  605. package/runtime/workflow/lib/config.ts +1 -1
  606. package/runtime/workflow/lib/context.ts +76 -0
  607. package/runtime/workflow/lib/controlledMulticallAbi.ts +6 -0
  608. package/runtime/workflow/lib/create2.ts +10 -12
  609. package/runtime/workflow/lib/deployments.ts +6 -14
  610. package/runtime/workflow/lib/evidencePorts.ts +20 -0
  611. package/runtime/workflow/lib/executionPlan.ts +17 -268
  612. package/runtime/workflow/lib/gateTool.ts +20 -8
  613. package/runtime/workflow/lib/gateToolSync.ts +3 -3
  614. package/runtime/workflow/lib/operationNames.ts +32 -0
  615. package/runtime/workflow/lib/parameters.ts +7 -23
  616. package/runtime/workflow/lib/pendingDeploymentReuse.ts +4 -56
  617. package/runtime/workflow/lib/pendingUupsBinding.ts +43 -0
  618. package/runtime/workflow/lib/plan.ts +334 -0
  619. package/runtime/workflow/lib/planCli.ts +279 -0
  620. package/runtime/workflow/lib/preparationEvidence.ts +14 -0
  621. package/runtime/workflow/lib/proxy.ts +5 -3
  622. package/runtime/workflow/lib/runtime.ts +46 -0
  623. package/runtime/workflow/lib/signer.ts +8 -5
  624. package/runtime/workflow/lib/simulation.ts +41 -17
  625. package/runtime/workflow/lib/state.ts +3 -3
  626. package/runtime/workflow/lib/staticValidation.ts +92 -11
  627. package/runtime/workflow/lib/transactionPlanner.ts +314 -0
  628. package/runtime/workflow/lib/typedValue.ts +46 -0
  629. package/runtime/workflow/lib/validation.ts +50 -0
  630. package/runtime/workflow/planAdd.ts +8 -0
  631. package/runtime/workflow/planRead.ts +8 -0
  632. package/runtime/workflow/planStatus.ts +8 -0
  633. package/runtime/workflow/planWrite.ts +8 -0
  634. package/runtime/workflow/run.ts +41 -174
  635. package/runtime/workflow/staticValidate.ts +8 -3
  636. package/runtime/workflow/steps/call.ts +1 -1
  637. package/runtime/workflow/steps/check.ts +1 -1
  638. package/runtime/workflow/steps/custom.ts +1 -1
  639. package/runtime/workflow/steps/deploy.ts +59 -59
  640. package/runtime/workflow/steps/upgrade.ts +71 -47
  641. package/runtime/workflow/steps/view.ts +1 -1
@@ -0,0 +1,993 @@
1
+ import { closureRuntimeOptions, parseCustomInputClosure, type HostAdapter, type ClosureFile, type ClosureEdge, type ClosurePackage, type CustomInputClosure } from "./closure-format";
2
+ export { parseCustomInputClosure, type ClosureFile, type ClosureEdge, type ClosurePackage, type CustomInputClosure } from "./closure-format";
3
+ /** Bounded deterministic CJS input collector. Supported-code validation, not a hostile-code sandbox. */
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+ import vm from "node:vm";
7
+ import { spawnSync } from "node:child_process";
8
+ import { createHash } from "node:crypto";
9
+ import ts from "typescript";
10
+ import { confinedFile, stat } from "./project-files";
11
+ import { strictData } from "./data";
12
+ import { parseInputDocument } from './input-files';
13
+ import { portablePath } from "./protocol";
14
+ import {
15
+ canonicalJson,
16
+ deepFreeze,
17
+ semanticHash,
18
+ } from "../workflow/lib/canonicalData";
19
+
20
+ const hash = (bytes: Buffer | string) =>
21
+ createHash("sha256").update(bytes).digest("hex");
22
+ const portable = (name: string) => name.split(path.sep).join("/");
23
+ const compare = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0);
24
+ const extensions = [".ts", ".cts", ".js", ".cjs", ".json"];
25
+ const policy = "gate-custom-cjs@1" as const;
26
+ /** Validate before normalization; only the supplied project root and its realpath are aliases. */
27
+ export function customBusinessRoot(root: string, businessRoot: string): string {
28
+ if (
29
+ typeof businessRoot !== "string" ||
30
+ !path.isAbsolute(businessRoot) ||
31
+ businessRoot.includes("\\") ||
32
+ businessRoot.split(path.sep).some((part) => part === "." || part === "..")
33
+ )
34
+ throw new Error("Unsafe custom business root directory");
35
+ const canonicalRoot = fs.realpathSync(root);
36
+ const base = path.resolve(businessRoot);
37
+ const alias = [path.resolve(root), canonicalRoot].find(
38
+ (candidate) => base === candidate || base.startsWith(candidate + path.sep)
39
+ );
40
+ if (!alias)
41
+ throw new Error("Custom business root must be confined to the project");
42
+ const relative = portable(path.relative(alias, base));
43
+ // A not-yet-created task directory is valid when the script uses no file ports.
44
+ return relative
45
+ ? confinedFile(canonicalRoot, relative, "directory")
46
+ : canonicalRoot;
47
+ }
48
+ interface Captured {
49
+ identity: ClosureFile;
50
+ bytes: Buffer;
51
+ emitted?: string;
52
+ }
53
+ const runtimeOptions: ts.CompilerOptions = closureRuntimeOptions;
54
+ const ambient = new Set([
55
+ "process",
56
+ "global",
57
+ "globalThis",
58
+ "window",
59
+ "self",
60
+ "document",
61
+ "Deno",
62
+ "Bun",
63
+ "Date",
64
+ "performance",
65
+ "crypto",
66
+ "fetch",
67
+ "WebSocket",
68
+ "XMLHttpRequest",
69
+ "Worker",
70
+ "SharedArrayBuffer",
71
+ "Atomics",
72
+ "Buffer",
73
+ "console",
74
+ "setTimeout",
75
+ "setInterval",
76
+ "setImmediate",
77
+ "queueMicrotask",
78
+ "eval",
79
+ "Function",
80
+ "AsyncFunction",
81
+ "WebAssembly",
82
+ "createRequire",
83
+ "__dirname",
84
+ "__filename",
85
+ "Intl",
86
+ "Reflect",
87
+ "Proxy",
88
+ "WeakRef",
89
+ "FinalizationRegistry",
90
+ ]);
91
+ const forbiddenMembers = new Set([
92
+ "constructor",
93
+ "__proto__",
94
+ "getPrototypeOf",
95
+ "setPrototypeOf",
96
+ "getOwnPropertyDescriptor",
97
+ "getOwnPropertyDescriptors",
98
+ "random",
99
+ "stack",
100
+ "captureStackTrace",
101
+ "prepareStackTrace",
102
+ ]);
103
+ /** Same restrictions for business ports and project imports: config/provenance is a separate future projection. */
104
+ export function assertBusinessInput(
105
+ relative: string,
106
+ packageCode = false
107
+ ): void {
108
+ portablePath(relative, "business input path");
109
+ if (/[*?\[\]{}]/.test(relative))
110
+ throw new Error("Unsupported directory/glob business input");
111
+ if (
112
+ relative
113
+ .split("/")
114
+ .some(
115
+ (segment) =>
116
+ /^(?:\.env.*|\.npmrc(?:\..*)?|\.yarnrc(?:\..*)?|\.git|\.ssh|\.aws|\.openzeppelin(?:\..*)?|keys?|keystores?|credentials?|secrets?|wallets?|results?|reports?|status|releases?|candidates?|handoffs?|manifests?)(?:\..*)?$/i.test(
117
+ segment
118
+ ) ||
119
+ /^(?:contractInfo|deploymentInfo|state|release|pending|handoff|manifest|status|private[-_]?keys?|package-lock|npm-shrinkwrap|yarn\.lock|pnpm-lock|deploy(?:ment)?[-_.]?(?:config|settings)|\.gate-template|hardhat\.config|foundry)(?:\..*)?$/i.test(
120
+ segment
121
+ ) ||
122
+ /\.(?:pem|key|p12|pfx)$/i.test(segment) ||
123
+ (!packageCode &&
124
+ /^(?:artifacts?|cache|dist(?:-.*)?|node_modules|config|configs|deployments?)(?:\..*)?$/i.test(
125
+ segment
126
+ ))
127
+ )
128
+ )
129
+ throw new Error(
130
+ "Business input cannot access sensitive, generated-state or private config paths"
131
+ );
132
+ }
133
+ function packageName(specifier: string): string {
134
+ const parts = specifier.split("/");
135
+ return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
136
+ }
137
+ function propertyText(node: ts.Node): string {
138
+ if (ts.isComputedPropertyName(node)) return propertyText(node.expression);
139
+ return ts.isIdentifier(node) ||
140
+ ts.isStringLiteral(node) ||
141
+ ts.isNumericLiteral(node)
142
+ ? node.text
143
+ : "";
144
+ }
145
+ function staticEdges(source: string, name: string): string[] {
146
+ const ast = ts.createSourceFile(
147
+ name,
148
+ source,
149
+ ts.ScriptTarget.Latest,
150
+ true,
151
+ name.endsWith(".ts") || name.endsWith(".cts")
152
+ ? ts.ScriptKind.TS
153
+ : ts.ScriptKind.JS
154
+ );
155
+ if (
156
+ (ast as ts.SourceFile & { parseDiagnostics: readonly ts.Diagnostic[] })
157
+ .parseDiagnostics.length
158
+ )
159
+ throw new Error(`Unsupported module syntax: ${name}`);
160
+ const edges = new Set<string>();
161
+ const literal = (node: ts.Node | undefined) => {
162
+ if (!node || !ts.isStringLiteral(node))
163
+ throw new Error(`Unsupported nonliteral loader: ${name}`);
164
+ edges.add(node.text);
165
+ };
166
+ const visit = (node: ts.Node): void => {
167
+ // Transpile-only type edges are deliberately absent from the runtime graph.
168
+ if (
169
+ ts.isTypeNode(node) ||
170
+ ts.isInterfaceDeclaration(node) ||
171
+ ts.isTypeAliasDeclaration(node)
172
+ )
173
+ return;
174
+ if (ts.isImportDeclaration(node)) {
175
+ const clause = node.importClause;
176
+ if (
177
+ clause?.isTypeOnly ||
178
+ (clause &&
179
+ !clause.name &&
180
+ clause.namedBindings &&
181
+ ts.isNamedImports(clause.namedBindings) &&
182
+ clause.namedBindings.elements.every((e) => e.isTypeOnly))
183
+ )
184
+ return;
185
+ literal(node.moduleSpecifier);
186
+ return;
187
+ }
188
+ if (ts.isExportDeclaration(node)) {
189
+ if (
190
+ node.isTypeOnly ||
191
+ (node.exportClause &&
192
+ ts.isNamedExports(node.exportClause) &&
193
+ node.exportClause.elements.length > 0 &&
194
+ node.exportClause.elements.every((e) => e.isTypeOnly))
195
+ )
196
+ return;
197
+ if (node.moduleSpecifier) literal(node.moduleSpecifier);
198
+ return;
199
+ }
200
+ if (ts.isImportEqualsDeclaration(node)) {
201
+ if (node.isTypeOnly) return;
202
+ if (!ts.isExternalModuleReference(node.moduleReference))
203
+ throw new Error(`Unsupported import alias: ${name}`);
204
+ literal(node.moduleReference.expression);
205
+ return;
206
+ }
207
+ if (
208
+ ts.isCallExpression(node) &&
209
+ node.expression.kind === ts.SyntaxKind.ImportKeyword
210
+ )
211
+ throw new Error(`Unsupported runtime import loader: ${name}`);
212
+ if (ts.isIdentifier(node)) {
213
+ if (ambient.has(node.text))
214
+ throw new Error(`Unsupported ambient capability ${node.text}: ${name}`);
215
+ if (node.text === "require") {
216
+ const p = node.parent;
217
+ if (
218
+ !ts.isCallExpression(p) ||
219
+ p.expression !== node ||
220
+ p.arguments.length !== 1
221
+ )
222
+ throw new Error(`Unsupported require loader access: ${name}`);
223
+ literal(p.arguments[0]);
224
+ }
225
+ if (
226
+ node.text === "module" &&
227
+ !(
228
+ ts.isPropertyAccessExpression(node.parent) &&
229
+ node.parent.expression === node &&
230
+ node.parent.name.text === "exports"
231
+ )
232
+ )
233
+ throw new Error(`Unsupported module loader access: ${name}`);
234
+ }
235
+ if (
236
+ (ts.isElementAccessExpression(node) &&
237
+ !ts.isStringLiteral(node.argumentExpression) &&
238
+ !ts.isNumericLiteral(node.argumentExpression)) ||
239
+ (ts.isComputedPropertyName(node) &&
240
+ ((!ts.isStringLiteral(node.expression) &&
241
+ !ts.isNumericLiteral(node.expression)) ||
242
+ forbiddenMembers.has(propertyText(node)))) ||
243
+ (ts.isBindingElement(node) &&
244
+ forbiddenMembers.has(propertyText(node.propertyName ?? node.name)))
245
+ )
246
+ throw new Error(`Unsupported dynamic reflective access: ${name}`);
247
+ if (
248
+ (ts.isPropertyAccessExpression(node) &&
249
+ forbiddenMembers.has(node.name.text)) ||
250
+ (ts.isElementAccessExpression(node) &&
251
+ node.argumentExpression &&
252
+ ts.isStringLiteral(node.argumentExpression) &&
253
+ forbiddenMembers.has(node.argumentExpression.text))
254
+ )
255
+ throw new Error(`Unsupported reflective or ambient access: ${name}`);
256
+ ts.forEachChild(node, visit);
257
+ };
258
+ visit(ast);
259
+ return [...edges].sort();
260
+ }
261
+
262
+ /** A fresh Node process avoids require.resolve's path and package-json caches during drift checks. */
263
+ function nodeResolve(
264
+ root: string,
265
+ importer: string,
266
+ specifier: string
267
+ ): string {
268
+ const output = spawnSync(
269
+ process.execPath,
270
+ [
271
+ "--preserve-symlinks",
272
+ "-e",
273
+ `const fs=require('node:fs'),{createRequire}=require('node:module');const q=JSON.parse(fs.readFileSync(0,'utf8'));try{process.stdout.write(createRequire(q.importer).resolve(q.specifier))}catch{process.exitCode=1}`,
274
+ ],
275
+ {
276
+ cwd: root,
277
+ env: {},
278
+ input: JSON.stringify({ importer, specifier }),
279
+ encoding: "utf8",
280
+ timeout: 10000,
281
+ maxBuffer: 1024 * 1024,
282
+ }
283
+ );
284
+ if (output.status !== 0 || !path.isAbsolute(output.stdout))
285
+ throw new Error(
286
+ "Unsupported ambient package or missing Node CJS resolution"
287
+ );
288
+ return output.stdout;
289
+ }
290
+ function validateHost(root: string): CustomInputClosure["hostAdapter"] {
291
+ if (
292
+ process.env.NODE_PATH ||
293
+ process.env.NODE_OPTIONS ||
294
+ Object.keys(process.env).some((k) => k.startsWith("TS_NODE_"))
295
+ )
296
+ throw new Error("Unsupported ambient loader environment");
297
+ const args = process.execArgv;
298
+ // Node's test runner may pass only test-related switches, which do not install loaders.
299
+ const relevant = args.filter((a) => !/^--test(?:=|$|-)/.test(a));
300
+ if (!relevant.length)
301
+ return { kind: "isolated-cjs", preload: null, packages: [] };
302
+ if (
303
+ relevant.length !== 2 ||
304
+ !["-r", "--require"].includes(relevant[0]) ||
305
+ relevant[1] !== "ts-node/register"
306
+ )
307
+ throw new Error("Unsupported preload, loader or conditions");
308
+ try {
309
+ const packages: HostAdapter["packages"] = [];
310
+ const lock = JSON.parse(
311
+ fs.readFileSync(confinedFile(root, "package-lock.json"), "utf8")
312
+ );
313
+ for (const [name, version] of [
314
+ ["ts-node", "10.9.2"],
315
+ ["hardhat", "2.26.3"],
316
+ ]) {
317
+ const bytes = fs.readFileSync(
318
+ confinedFile(root, `node_modules/${name}/package.json`)
319
+ );
320
+ const metadata = JSON.parse(bytes.toString("utf8"));
321
+ const locked = lock.packages?.[`node_modules/${name}`];
322
+ if (
323
+ ![2, 3].includes(lock.lockfileVersion) ||
324
+ metadata.name !== name ||
325
+ metadata.version !== version ||
326
+ locked?.version !== version ||
327
+ locked?.link
328
+ )
329
+ throw new Error();
330
+ packages.push({ name, version, metadataDigest: hash(bytes) });
331
+ }
332
+ const actual = nodeResolve(
333
+ root,
334
+ path.join(root, "package.json"),
335
+ "ts-node/register"
336
+ );
337
+ if (
338
+ actual !== confinedFile(root, "node_modules/ts-node/register/index.js") ||
339
+ !require.cache[actual]?.loaded
340
+ )
341
+ throw new Error();
342
+ if (
343
+ process.env.HARDHAT_TSCONFIG &&
344
+ path.resolve(process.env.HARDHAT_TSCONFIG) !==
345
+ path.join(root, "tsconfig.json")
346
+ )
347
+ throw new Error();
348
+ return {
349
+ kind: "hardhat-2.26.3-ts-node-10.9.2",
350
+ preload: {
351
+ path: "node_modules/ts-node/register/index.js",
352
+ digest: hash(fs.readFileSync(actual)),
353
+ },
354
+ packages,
355
+ };
356
+ } catch {
357
+ throw new Error(
358
+ "Unsupported pinned Hardhat preload adapter identity/location"
359
+ );
360
+ }
361
+ }
362
+
363
+ export class CustomModuleClosure {
364
+ readonly #root: string;
365
+ readonly #inputRoot: string;
366
+ readonly #files = new Map<string, Captured>();
367
+ readonly #edges = new Map<string, ClosureEdge>();
368
+ readonly #packages = new Map<string, ClosurePackage>();
369
+ readonly #roots = new Set<string>();
370
+ #failure: Error | undefined;
371
+ readonly #absent = new Set<string>();
372
+ readonly #cache = new Map<string, { exports: unknown }>();
373
+ readonly #context = vm.createContext(Object.create(null), {
374
+ codeGeneration: { strings: false, wasm: false },
375
+ });
376
+ readonly #realm: { object: object; array: object };
377
+ readonly #options: ts.CompilerOptions = { ...runtimeOptions };
378
+ readonly #adapter: CustomInputClosure["hostAdapter"];
379
+ #config: string | null = null;
380
+ constructor(root: string) {
381
+ if (ts.version !== "5.9.3")
382
+ throw new Error("Unsupported custom TypeScript compiler version");
383
+ this.#inputRoot = path.resolve(root);
384
+ this.#root = fs.realpathSync(root);
385
+ this.#adapter = validateHost(this.#root);
386
+ this.#realm = vm.runInContext(
387
+ "({object:Object.prototype,array:Array.prototype})",
388
+ this.#context
389
+ );
390
+ vm.runInContext(
391
+ 'Object.defineProperty(Math,"random",{value:undefined});Object.freeze(Math);',
392
+ this.#context
393
+ );
394
+ this.#readConfig();
395
+ }
396
+ #relative(file: string): string {
397
+ const relative = portable(path.relative(this.#root, file));
398
+ portablePath(relative, "confined module path");
399
+ return relative;
400
+ }
401
+ #file(relative: string): string {
402
+ return confinedFile(this.#root, relative);
403
+ }
404
+ #capture(relative: string, kind: ClosureFile["kind"]): Captured {
405
+ const bytes = fs.readFileSync(this.#file(relative));
406
+ const previous = this.#files.get(relative);
407
+ if (previous) {
408
+ if (hash(bytes) !== previous.identity.digest)
409
+ throw new Error(`Custom input changed during session: ${relative}`);
410
+ if (
411
+ kind === "module" ||
412
+ kind === "json" ||
413
+ (kind === "config" && previous.identity.kind === "metadata")
414
+ )
415
+ previous.identity.kind = kind;
416
+ return previous;
417
+ }
418
+ const captured: Captured = {
419
+ identity: {
420
+ path: relative,
421
+ kind,
422
+ digest: hash(bytes),
423
+ emittedDigest: null,
424
+ },
425
+ bytes,
426
+ };
427
+ this.#files.set(relative, captured);
428
+ return captured;
429
+ }
430
+ #metadata(relative: string): Record<string, unknown> {
431
+ try {
432
+ return strictData(
433
+ JSON.parse(this.#capture(relative, "metadata").bytes.toString("utf8"))
434
+ );
435
+ } catch {
436
+ throw new Error("Invalid package metadata");
437
+ }
438
+ }
439
+ #sourceFormat(relative: string): void {
440
+ let dir = path.posix.dirname(relative);
441
+ while (true) {
442
+ const name = dir === "." ? "package.json" : `${dir}/package.json`;
443
+ if (stat(this.#file(name))) {
444
+ const metadata = this.#metadata(name);
445
+ if (
446
+ (relative.endsWith(".js") || relative.endsWith(".ts")) &&
447
+ metadata.type === "module"
448
+ )
449
+ throw new Error("Unsupported native ESM source format");
450
+ break;
451
+ }
452
+ this.#absent.add(name);
453
+ if (dir === ".") break;
454
+ dir = path.posix.dirname(dir);
455
+ }
456
+ }
457
+ #packageFor(relative: string): string | null {
458
+ const parts = relative.split("/");
459
+ const i = parts.lastIndexOf("node_modules");
460
+ if (i < 0) return null;
461
+ const count = parts[i + 1]?.startsWith("@") ? 3 : 2;
462
+ if (parts.length <= i + count)
463
+ throw new Error("Invalid package runtime path");
464
+ return parts.slice(0, i + count).join("/");
465
+ }
466
+ #payload(location: string): ClosurePackage["payload"] {
467
+ const entries: ClosurePackage["payload"] = [];
468
+ const walk = (dir: string) => {
469
+ for (const name of fs
470
+ .readdirSync(
471
+ confinedFile(
472
+ this.#root,
473
+ `${location}${dir ? "/" + dir : ""}`,
474
+ "directory"
475
+ )
476
+ )
477
+ .sort()) {
478
+ if (name === "node_modules") continue; // Independently resolved nested packages; never merge identities.
479
+ const relative = dir ? `${dir}/${name}` : name;
480
+ const info = stat(path.join(this.#root, location, relative))!;
481
+ if (info.isSymbolicLink())
482
+ throw new Error("Unsafe symlink in package payload");
483
+ if (info.isDirectory()) walk(relative);
484
+ else {
485
+ const file = this.#file(`${location}/${relative}`);
486
+ if (name.endsWith(".node"))
487
+ throw new Error("Unsupported native package payload");
488
+ entries.push({ path: relative, digest: hash(fs.readFileSync(file)) });
489
+ }
490
+ }
491
+ };
492
+ walk("");
493
+ return entries.sort((a, b) => compare(a.path, b.path));
494
+ }
495
+ #package(location: string): ClosurePackage {
496
+ const metadata = this.#metadata(`${location}/package.json`);
497
+ let lock: Record<string, any>;
498
+ try {
499
+ lock = strictData(
500
+ JSON.parse(fs.readFileSync(this.#file("package-lock.json"), "utf8"))
501
+ );
502
+ } catch {
503
+ throw new Error("Custom packages require a local npm lock v2/v3");
504
+ }
505
+ if (
506
+ ![2, 3].includes(lock.lockfileVersion) ||
507
+ !lock.packages ||
508
+ typeof lock.packages !== "object"
509
+ )
510
+ throw new Error("Unsupported npm lock");
511
+ const entry = Object.getOwnPropertyDescriptor(
512
+ lock.packages,
513
+ location
514
+ )?.value;
515
+ const installedName = location
516
+ .split("/node_modules/")
517
+ .at(-1)!
518
+ .replace(/^node_modules\//, "");
519
+ if (
520
+ !entry ||
521
+ entry.link ||
522
+ entry.extraneous ||
523
+ typeof metadata.name !== "string" ||
524
+ metadata.name !== installedName ||
525
+ (entry.name !== undefined && entry.name !== metadata.name) ||
526
+ entry.version !== metadata.version ||
527
+ typeof metadata.version !== "string" ||
528
+ !/^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(metadata.version)
529
+ )
530
+ throw new Error(
531
+ "Package lock identity/version mismatch or extraneous package"
532
+ );
533
+ if (
534
+ typeof entry.integrity !== "string" ||
535
+ !/^sha(?:256|384|512)-[A-Za-z0-9+/]+={0,2}$/.test(entry.integrity) ||
536
+ Buffer.from(entry.integrity.split("-")[1], "base64").length !==
537
+ Number(entry.integrity.slice(3).split("-")[0]) / 8 ||
538
+ typeof entry.resolved !== "string"
539
+ )
540
+ throw new Error("Package requires locked source integrity");
541
+ const tarball = /^file:.*\.tgz$/.test(entry.resolved);
542
+ if (!tarball && !/^https?:\/\//.test(entry.resolved))
543
+ throw new Error(
544
+ "Unsupported package source: directory/workspace links are not supported"
545
+ );
546
+ const resolution = Object.fromEntries(
547
+ ["type", "main", "exports", "imports"]
548
+ .filter((k) => Object.hasOwn(metadata, k))
549
+ .map((k) => [k, metadata[k]])
550
+ );
551
+ const payload = this.#payload(location);
552
+ const result: ClosurePackage = {
553
+ lockLocation: location,
554
+ name: metadata.name,
555
+ version: metadata.version,
556
+ integrity: entry.integrity,
557
+ // Never serialize URLs or local tarball paths; installed payload and tarball SRI are separate identities.
558
+ source: {
559
+ kind: tarball ? "tarball" : "registry",
560
+ identity: tarball ? hash(entry.integrity) : hash(entry.resolved),
561
+ },
562
+ metadataDigest: this.#files.get(`${location}/package.json`)!.identity
563
+ .digest,
564
+ resolution,
565
+ payload,
566
+ payloadDigest: semanticHash(payload),
567
+ };
568
+ const previous = this.#packages.get(location);
569
+ if (previous && canonicalJson(previous) !== canonicalJson(result))
570
+ throw new Error(`Package payload/lock drift: ${location}`);
571
+ this.#packages.set(location, result);
572
+ return result;
573
+ }
574
+ #resolve(
575
+ importer: string,
576
+ specifier: string,
577
+ kind: ClosureEdge["kind"]
578
+ ): string {
579
+ if (
580
+ !specifier ||
581
+ specifier.includes("\\") ||
582
+ specifier.startsWith("#") ||
583
+ path.isAbsolute(specifier) ||
584
+ /^[a-zA-Z][a-zA-Z\d+.-]*:/.test(specifier)
585
+ )
586
+ throw new Error("Unsupported loader specifier");
587
+ if (specifier.startsWith(".")) {
588
+ const base = this.#relative(
589
+ path.resolve(this.#root, path.posix.dirname(importer), specifier)
590
+ );
591
+ const importerPackage = this.#packageFor(importer);
592
+ assertBusinessInput(base, !!importerPackage);
593
+ if (importerPackage) {
594
+ const selected = this.#relative(
595
+ nodeResolve(this.#root, path.join(this.#root, importer), specifier)
596
+ );
597
+ const location = this.#packageFor(selected);
598
+ if (!location)
599
+ throw new Error("Unsupported package relative resolution escape");
600
+ this.#file(selected);
601
+ this.#package(location);
602
+ return selected;
603
+ }
604
+ const candidates = path.posix.extname(base)
605
+ ? [base]
606
+ : [
607
+ base,
608
+ ...extensions.map((ext) => base + ext),
609
+ ...extensions.map((ext) => `${base}/index${ext}`),
610
+ ];
611
+ const present = candidates.filter((name) => {
612
+ const info = stat(path.join(this.#root, name));
613
+ if (!info) return false;
614
+ if (info.isDirectory()) {
615
+ confinedFile(this.#root, name, "directory");
616
+ return false;
617
+ }
618
+ this.#file(name);
619
+ return info.isFile();
620
+ });
621
+ if (present.length !== 1)
622
+ throw new Error(`Missing or ambiguous runtime target: ${importer}`);
623
+ return present[0];
624
+ }
625
+ if (
626
+ specifier.split("/").some((p) => !p || p === "." || p === "..") ||
627
+ !/^(@[A-Za-z0-9._-]+\/)?[A-Za-z0-9_-][A-Za-z0-9._-]*(\/.*)?$/.test(
628
+ specifier
629
+ )
630
+ )
631
+ throw new Error("Unsupported package specifier");
632
+ const selected = this.#relative(
633
+ nodeResolve(this.#root, path.join(this.#root, importer), specifier)
634
+ );
635
+ const location = this.#packageFor(selected);
636
+ if (!location || !selected.startsWith(location + "/"))
637
+ throw new Error("Unsupported ancestor/global package resolution");
638
+ this.#file(selected);
639
+ const metadata = this.#package(location);
640
+ if (metadata.name !== packageName(specifier))
641
+ throw new Error("Package resolution identity mismatch");
642
+ if (
643
+ kind === "runtime" &&
644
+ (selected.endsWith(".mjs") ||
645
+ selected.endsWith(".node") ||
646
+ (selected.endsWith(".js") && metadata.resolution.type === "module"))
647
+ )
648
+ throw new Error("Unsupported native ESM or addon package");
649
+ return selected;
650
+ }
651
+ #edge(
652
+ importer: string,
653
+ specifier: string,
654
+ kind: ClosureEdge["kind"]
655
+ ): string {
656
+ const target = this.#resolve(importer, specifier, kind);
657
+ const key = canonicalJson([importer, specifier, kind]);
658
+ const previous = this.#edges.get(key);
659
+ if (previous && previous.target !== target)
660
+ throw new Error("Custom resolution drift");
661
+ this.#edges.set(key, { importer, specifier, target, kind });
662
+ return target;
663
+ }
664
+ #readConfig(): void {
665
+ const rootConfig = "tsconfig.json";
666
+ const active = new Set<string>();
667
+ const read = (name: string): Record<string, unknown> => {
668
+ assertBusinessInput(name, true);
669
+ const location = this.#packageFor(name);
670
+ if (location) this.#package(location);
671
+ if (active.has(name))
672
+ throw new Error("Unsupported tsconfig extends cycle");
673
+ active.add(name);
674
+ const raw = ts.parseConfigFileTextToJson(
675
+ name,
676
+ this.#capture(name, "config").bytes.toString("utf8")
677
+ );
678
+ if (raw.error) throw new Error("Invalid tsconfig JSONC");
679
+ const value = strictData(raw.config) as Record<string, any>;
680
+ if (Object.hasOwn(value, "ts-node") || Object.hasOwn(value, "plugins"))
681
+ throw new Error("Unsupported tsconfig loader hooks");
682
+ let inherited: Record<string, unknown> = {};
683
+ if (value.extends !== undefined) {
684
+ if (typeof value.extends !== "string")
685
+ throw new Error("Unsupported tsconfig extends");
686
+ const spec = value.extends;
687
+ const parent = spec.startsWith(".")
688
+ ? this.#relative(
689
+ path.resolve(
690
+ this.#root,
691
+ path.posix.dirname(name),
692
+ spec.endsWith(".json") ? spec : spec + ".json"
693
+ )
694
+ )
695
+ : this.#edge(name, spec, "config");
696
+ if (spec.startsWith(".")) {
697
+ this.#edges.set(canonicalJson([name, spec, "config"]), {
698
+ importer: name,
699
+ specifier: spec,
700
+ target: parent,
701
+ kind: "config",
702
+ });
703
+ }
704
+ inherited = read(parent);
705
+ }
706
+ const options = value.compilerOptions ?? {};
707
+ if (!options || typeof options !== "object" || Array.isArray(options))
708
+ throw new Error("Invalid compiler options");
709
+ for (const key of [
710
+ "baseUrl",
711
+ "paths",
712
+ "rootDirs",
713
+ "plugins",
714
+ "customConditions",
715
+ "moduleSuffixes",
716
+ "outFile",
717
+ "jsx",
718
+ "jsxFactory",
719
+ "jsxImportSource",
720
+ "experimentalDecorators",
721
+ "emitDecoratorMetadata",
722
+ "importHelpers",
723
+ "noResolve",
724
+ ])
725
+ if (Object.hasOwn(options, key))
726
+ throw new Error(`Unsupported runtime compiler option/alias: ${key}`);
727
+ active.delete(name);
728
+ return { ...inherited, ...options };
729
+ };
730
+ if (stat(this.#file(rootConfig))) {
731
+ this.#config = rootConfig;
732
+ const options = read(rootConfig);
733
+ const parsed = ts.convertCompilerOptionsFromJson(options, ".");
734
+ if (parsed.errors.length)
735
+ throw new Error("Unsupported or invalid tsconfig options");
736
+ if (
737
+ parsed.options.module !== undefined &&
738
+ ![
739
+ ts.ModuleKind.CommonJS,
740
+ ts.ModuleKind.Node16,
741
+ ts.ModuleKind.NodeNext,
742
+ ].includes(parsed.options.module)
743
+ )
744
+ throw new Error("Unsupported runtime module option");
745
+ if (parsed.options.target !== undefined)
746
+ this.#options.target = parsed.options.target;
747
+ if (parsed.options.esModuleInterop !== undefined)
748
+ this.#options.esModuleInterop = parsed.options.esModuleInterop;
749
+ if (parsed.options.useDefineForClassFields !== undefined)
750
+ this.#options.useDefineForClassFields =
751
+ parsed.options.useDefineForClassFields;
752
+ } else this.#absent.add(rootConfig);
753
+ }
754
+ #collect(relative: string): void {
755
+ if (
756
+ this.#files.get(relative)?.identity.kind === "module" ||
757
+ this.#files.get(relative)?.identity.kind === "json"
758
+ )
759
+ return;
760
+ const location = this.#packageFor(relative);
761
+ assertBusinessInput(
762
+ location ? relative.slice(location.length + 1) : relative,
763
+ !!location
764
+ );
765
+ if (location) this.#package(location);
766
+ const ext = path.posix.extname(relative);
767
+ if (!extensions.includes(ext) || /\.d\.(?:ts|cts)$/.test(relative))
768
+ throw new Error("Unsupported runtime module extension");
769
+ if (location && [".ts", ".cts"].includes(ext))
770
+ throw new Error("Unsupported package TypeScript runtime adapter");
771
+ this.#sourceFormat(relative);
772
+ const captured = this.#capture(
773
+ relative,
774
+ ext === ".json" ? "json" : "module"
775
+ );
776
+ if (ext === ".json") {
777
+ parseInputDocument(captured.bytes, 'json');
778
+ return;
779
+ }
780
+ const dependencies = staticEdges(captured.bytes.toString("utf8"), relative);
781
+ const emitted = ts.transpileModule(captured.bytes.toString("utf8"), {
782
+ compilerOptions: this.#options,
783
+ fileName: relative,
784
+ reportDiagnostics: true,
785
+ });
786
+ if (
787
+ emitted.diagnostics?.some(
788
+ (d) => d.category === ts.DiagnosticCategory.Error
789
+ )
790
+ )
791
+ throw new Error(`Unsupported transpilation: ${relative}`);
792
+ captured.emitted = emitted.outputText;
793
+ captured.identity.emittedDigest = hash(emitted.outputText);
794
+ for (const specifier of dependencies)
795
+ this.#collect(this.#edge(relative, specifier, "runtime"));
796
+ }
797
+ #load(relative: string): any {
798
+ const previous = this.#cache.get(relative);
799
+ if (previous) return previous.exports; // Node CJS cycle semantics: publish partial exports before evaluation.
800
+ const captured = this.#files.get(relative)!;
801
+ const module = { exports: {} as unknown };
802
+ this.#cache.set(relative, module);
803
+ try {
804
+ if (captured.identity.kind === "json")
805
+ module.exports = deepFreeze(
806
+ parseInputDocument(captured.bytes, 'json')
807
+ );
808
+ else {
809
+ const ownedRequire = (specifier: string) => {
810
+ const edge = this.#edges.get(
811
+ canonicalJson([relative, specifier, "runtime"])
812
+ );
813
+ if (!edge) throw new Error("Unsupported uncaptured loader access");
814
+ return this.#load(edge.target);
815
+ };
816
+ const wrapper = new vm.Script(
817
+ `(function(exports,module,require){"use strict";\n${captured.emitted}\n})`,
818
+ { filename: relative }
819
+ ).runInContext(this.#context);
820
+ wrapper(module.exports, module, ownedRequire);
821
+ }
822
+ return module.exports;
823
+ } catch (error) {
824
+ // CJS retries failed initializers, retaining any successfully loaded dependencies.
825
+ this.#cache.delete(relative);
826
+ throw error;
827
+ }
828
+ }
829
+ /** Normalize only this collector's own VM prototypes; never invoke getters or toJSON. */
830
+ normalize(raw: unknown): unknown {
831
+ const active = new Set<object>();
832
+ const visit = (value: unknown): unknown => {
833
+ if (
834
+ value === null ||
835
+ typeof value === "string" ||
836
+ typeof value === "boolean" ||
837
+ (typeof value === "number" && Number.isSafeInteger(value))
838
+ )
839
+ return value;
840
+ if (
841
+ !value ||
842
+ typeof value !== "object" ||
843
+ active.has(value) ||
844
+ Object.getOwnPropertySymbols(value).length
845
+ )
846
+ throw new Error("Custom result requires acyclic own JSON data");
847
+ const array = Array.isArray(value),
848
+ proto = Object.getPrototypeOf(value);
849
+ if (
850
+ !(
851
+ array
852
+ ? [this.#realm.array, Array.prototype]
853
+ : [this.#realm.object, Object.prototype, null]
854
+ ).includes(proto)
855
+ )
856
+ throw new Error("Custom result requires plain own data");
857
+ const keys = Object.getOwnPropertyNames(value);
858
+ if (
859
+ array &&
860
+ (keys.length !== value.length + 1 ||
861
+ keys.some(
862
+ (k) =>
863
+ k !== "length" &&
864
+ (!/^(0|[1-9][0-9]*)$/.test(k) || Number(k) >= value.length)
865
+ ))
866
+ )
867
+ throw new Error("Custom result requires dense own array data");
868
+ active.add(value);
869
+ const out: Record<string, unknown> | unknown[] = array ? [] : {};
870
+ for (const key of keys) {
871
+ if (array && key === "length") continue;
872
+ const d = Object.getOwnPropertyDescriptor(value, key)!;
873
+ if (!d.enumerable || !("value" in d))
874
+ throw new Error("Custom result requires enumerable own data");
875
+ Object.defineProperty(out, key, {
876
+ value: visit(d.value),
877
+ enumerable: true,
878
+ writable: true,
879
+ configurable: true,
880
+ });
881
+ }
882
+ active.delete(value);
883
+ return out;
884
+ };
885
+ return strictData(visit(raw));
886
+ }
887
+ #readsClosed=false;
888
+ closeReads(): void {this.#readsClosed=true;}
889
+ load(relative: string): {
890
+ module: any;
891
+ identity: { path: string; digest: string };
892
+ } {
893
+ try {
894
+ if(this.#readsClosed)throw new Error("Custom input reads closed");
895
+ portablePath(relative, "custom module");
896
+ this.assertUnchanged();
897
+ this.#collect(relative);
898
+ this.#roots.add(relative);
899
+ return {
900
+ module: this.#load(relative),
901
+ identity: {
902
+ path: relative,
903
+ digest: this.#files.get(relative)!.identity.digest,
904
+ },
905
+ };
906
+ } catch (error) {
907
+ this.#failure =
908
+ error instanceof Error
909
+ ? error
910
+ : new Error("Unsupported module evaluation");
911
+ throw error;
912
+ }
913
+ }
914
+ readData(root: string, relative: string): { bytes: Buffer; path: string } {
915
+ if(this.#readsClosed)throw new Error("Custom input reads closed");
916
+ assertBusinessInput(relative);
917
+ const base = customBusinessRoot(this.#inputRoot, root);
918
+ const name = portable(path.relative(this.#root, path.join(base, relative)));
919
+ portablePath(name, "business input");
920
+ assertBusinessInput(name);
921
+ return {
922
+ bytes: Buffer.from(this.#capture(name, "data").bytes),
923
+ path: name,
924
+ };
925
+ }
926
+ assertUnchanged(): void {
927
+ if (this.#failure)
928
+ throw new Error(
929
+ `Custom closure collection failed: ${this.#failure.message}`
930
+ );
931
+ if (
932
+ canonicalJson(validateHost(this.#root)) !== canonicalJson(this.#adapter)
933
+ )
934
+ throw new Error("Host loader adapter drift");
935
+ for (const name of this.#absent)
936
+ if (stat(this.#file(name)))
937
+ throw new Error(`Custom resolution metadata changed: ${name}`);
938
+ for (const [name, value] of this.#files)
939
+ if (hash(fs.readFileSync(this.#file(name))) !== value.identity.digest)
940
+ throw new Error(`Custom input drift: ${name}`);
941
+ for (const edge of this.#edges.values()) {
942
+ const selected =
943
+ edge.kind === "config" && edge.specifier.startsWith(".")
944
+ ? this.#relative(
945
+ path.resolve(
946
+ this.#root,
947
+ path.posix.dirname(edge.importer),
948
+ edge.specifier.endsWith(".json")
949
+ ? edge.specifier
950
+ : edge.specifier + ".json"
951
+ )
952
+ )
953
+ : this.#resolve(edge.importer, edge.specifier, edge.kind);
954
+ if (selected !== edge.target)
955
+ throw new Error("Custom resolution changed during session");
956
+ }
957
+ for (const location of this.#packages.keys()) this.#package(location);
958
+ }
959
+ seal(): CustomInputClosure {
960
+ this.assertUnchanged();
961
+ const body = {
962
+ version: 1 as const,
963
+ policy,
964
+ roots: [...this.#roots].sort(),
965
+ files: [...this.#files.values()]
966
+ .map((f) => ({ ...f.identity }))
967
+ .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0)),
968
+ edges: [...this.#edges.values()].sort((a, b) =>
969
+ compare(canonicalJson(a), canonicalJson(b))
970
+ ),
971
+ packages: [...this.#packages.values()].sort((a, b) =>
972
+ compare(a.lockLocation, b.lockLocation)
973
+ ),
974
+ compiler: {
975
+ version: ts.version,
976
+ options: { ...this.#options },
977
+ config: this.#config,
978
+ },
979
+ hostAdapter: this.#adapter,
980
+ resolver: {
981
+ policy: "node-default-cjs" as const,
982
+ version: process.versions.node,
983
+ flags: ["--preserve-symlinks"],
984
+ environment: "empty" as const,
985
+ },
986
+ };
987
+ return deepFreeze({ ...body, closureHash: semanticHash(body) });
988
+ }
989
+ }
990
+
991
+ Object.freeze(CustomModuleClosure.prototype);
992
+
993
+ /** Pure structural parser; only collector-owned sessions establish collection authority. */