movehat 0.1.9 → 0.2.1

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 (445) hide show
  1. package/README.md +132 -279
  2. package/dist/__tests__/deployContract.test.d.ts +2 -0
  3. package/dist/__tests__/deployContract.test.d.ts.map +1 -0
  4. package/dist/__tests__/deployContract.test.js +368 -0
  5. package/dist/__tests__/deployContract.test.js.map +1 -0
  6. package/dist/__tests__/errors.test.d.ts +2 -0
  7. package/dist/__tests__/errors.test.d.ts.map +1 -0
  8. package/dist/__tests__/errors.test.js +46 -0
  9. package/dist/__tests__/errors.test.js.map +1 -0
  10. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +24 -0
  11. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/sigint-deploy-harness.js +82 -0
  13. package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -0
  14. package/dist/__tests__/fork/api.test.d.ts +2 -0
  15. package/dist/__tests__/fork/api.test.d.ts.map +1 -0
  16. package/dist/__tests__/fork/api.test.js +110 -0
  17. package/dist/__tests__/fork/api.test.js.map +1 -0
  18. package/dist/__tests__/harness/Harness.createLive.test.d.ts +2 -0
  19. package/dist/__tests__/harness/Harness.createLive.test.d.ts.map +1 -0
  20. package/dist/__tests__/harness/Harness.createLive.test.js +53 -0
  21. package/dist/__tests__/harness/Harness.createLive.test.js.map +1 -0
  22. package/dist/__tests__/harness/Harness.proxy.test.d.ts +2 -0
  23. package/dist/__tests__/harness/Harness.proxy.test.d.ts.map +1 -0
  24. package/dist/__tests__/harness/Harness.proxy.test.js +89 -0
  25. package/dist/__tests__/harness/Harness.proxy.test.js.map +1 -0
  26. package/dist/__tests__/harness/_fixture.d.ts +54 -0
  27. package/dist/__tests__/harness/_fixture.d.ts.map +1 -0
  28. package/dist/__tests__/harness/_fixture.js +69 -0
  29. package/dist/__tests__/harness/_fixture.js.map +1 -0
  30. package/dist/__tests__/harness/codeObject.deploy.test.d.ts +2 -0
  31. package/dist/__tests__/harness/codeObject.deploy.test.d.ts.map +1 -0
  32. package/dist/__tests__/harness/codeObject.deploy.test.js +288 -0
  33. package/dist/__tests__/harness/codeObject.deploy.test.js.map +1 -0
  34. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts +2 -0
  35. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts.map +1 -0
  36. package/dist/__tests__/harness/codeObject.upgrade.test.js +138 -0
  37. package/dist/__tests__/harness/codeObject.upgrade.test.js.map +1 -0
  38. package/dist/__tests__/harness/script.test.d.ts +2 -0
  39. package/dist/__tests__/harness/script.test.d.ts.map +1 -0
  40. package/dist/__tests__/harness/script.test.js +219 -0
  41. package/dist/__tests__/harness/script.test.js.map +1 -0
  42. package/dist/__tests__/harness/view.test.d.ts +2 -0
  43. package/dist/__tests__/harness/view.test.d.ts.map +1 -0
  44. package/dist/__tests__/harness/view.test.js +92 -0
  45. package/dist/__tests__/harness/view.test.js.map +1 -0
  46. package/dist/__tests__/runtime.test.d.ts +2 -0
  47. package/dist/__tests__/runtime.test.d.ts.map +1 -0
  48. package/dist/__tests__/runtime.test.js +141 -0
  49. package/dist/__tests__/runtime.test.js.map +1 -0
  50. package/dist/cli.js +2 -1
  51. package/dist/cli.js.map +1 -1
  52. package/dist/commands/__tests__/compile.test.d.ts +2 -0
  53. package/dist/commands/__tests__/compile.test.d.ts.map +1 -0
  54. package/dist/commands/__tests__/compile.test.js +351 -0
  55. package/dist/commands/__tests__/compile.test.js.map +1 -0
  56. package/dist/commands/__tests__/init.test.d.ts +2 -0
  57. package/dist/commands/__tests__/init.test.d.ts.map +1 -0
  58. package/dist/commands/__tests__/init.test.js +101 -0
  59. package/dist/commands/__tests__/init.test.js.map +1 -0
  60. package/dist/commands/__tests__/run.test.d.ts +2 -0
  61. package/dist/commands/__tests__/run.test.d.ts.map +1 -0
  62. package/dist/commands/__tests__/run.test.js +166 -0
  63. package/dist/commands/__tests__/run.test.js.map +1 -0
  64. package/dist/commands/__tests__/test-move.test.d.ts +2 -0
  65. package/dist/commands/__tests__/test-move.test.d.ts.map +1 -0
  66. package/dist/commands/__tests__/test-move.test.js +59 -0
  67. package/dist/commands/__tests__/test-move.test.js.map +1 -0
  68. package/dist/commands/__tests__/test.test.d.ts +2 -0
  69. package/dist/commands/__tests__/test.test.d.ts.map +1 -0
  70. package/dist/commands/__tests__/test.test.js +168 -0
  71. package/dist/commands/__tests__/test.test.js.map +1 -0
  72. package/dist/commands/__tests__/update.test.d.ts +2 -0
  73. package/dist/commands/__tests__/update.test.d.ts.map +1 -0
  74. package/dist/commands/__tests__/update.test.js +176 -0
  75. package/dist/commands/__tests__/update.test.js.map +1 -0
  76. package/dist/commands/compile.d.ts +7 -1
  77. package/dist/commands/compile.d.ts.map +1 -1
  78. package/dist/commands/compile.js +150 -33
  79. package/dist/commands/compile.js.map +1 -1
  80. package/dist/commands/fork/__tests__/create.test.d.ts +2 -0
  81. package/dist/commands/fork/__tests__/create.test.d.ts.map +1 -0
  82. package/dist/commands/fork/__tests__/create.test.js +108 -0
  83. package/dist/commands/fork/__tests__/create.test.js.map +1 -0
  84. package/dist/commands/fork/__tests__/fund.test.d.ts +2 -0
  85. package/dist/commands/fork/__tests__/fund.test.d.ts.map +1 -0
  86. package/dist/commands/fork/__tests__/fund.test.js +72 -0
  87. package/dist/commands/fork/__tests__/fund.test.js.map +1 -0
  88. package/dist/commands/fork/__tests__/list.test.d.ts +2 -0
  89. package/dist/commands/fork/__tests__/list.test.d.ts.map +1 -0
  90. package/dist/commands/fork/__tests__/list.test.js +119 -0
  91. package/dist/commands/fork/__tests__/list.test.js.map +1 -0
  92. package/dist/commands/fork/__tests__/serve.test.d.ts +2 -0
  93. package/dist/commands/fork/__tests__/serve.test.d.ts.map +1 -0
  94. package/dist/commands/fork/__tests__/serve.test.js +97 -0
  95. package/dist/commands/fork/__tests__/serve.test.js.map +1 -0
  96. package/dist/commands/fork/__tests__/view-resource.test.d.ts +2 -0
  97. package/dist/commands/fork/__tests__/view-resource.test.d.ts.map +1 -0
  98. package/dist/commands/fork/__tests__/view-resource.test.js +77 -0
  99. package/dist/commands/fork/__tests__/view-resource.test.js.map +1 -0
  100. package/dist/commands/fork/create.d.ts +1 -1
  101. package/dist/commands/fork/create.d.ts.map +1 -1
  102. package/dist/commands/fork/create.js +3 -2
  103. package/dist/commands/fork/create.js.map +1 -1
  104. package/dist/commands/fork/fund.d.ts.map +1 -1
  105. package/dist/commands/fork/fund.js +15 -8
  106. package/dist/commands/fork/fund.js.map +1 -1
  107. package/dist/commands/fork/list.d.ts.map +1 -1
  108. package/dist/commands/fork/list.js +2 -1
  109. package/dist/commands/fork/list.js.map +1 -1
  110. package/dist/commands/fork/serve.d.ts +1 -0
  111. package/dist/commands/fork/serve.d.ts.map +1 -1
  112. package/dist/commands/fork/serve.js +4 -2
  113. package/dist/commands/fork/serve.js.map +1 -1
  114. package/dist/commands/fork/view-resource.d.ts.map +1 -1
  115. package/dist/commands/fork/view-resource.js +10 -5
  116. package/dist/commands/fork/view-resource.js.map +1 -1
  117. package/dist/commands/run.d.ts +15 -0
  118. package/dist/commands/run.d.ts.map +1 -1
  119. package/dist/commands/run.js +50 -27
  120. package/dist/commands/run.js.map +1 -1
  121. package/dist/commands/test-move.d.ts.map +1 -1
  122. package/dist/commands/test-move.js +3 -2
  123. package/dist/commands/test-move.js.map +1 -1
  124. package/dist/commands/test.js +52 -46
  125. package/dist/commands/test.js.map +1 -1
  126. package/dist/commands/update.d.ts.map +1 -1
  127. package/dist/commands/update.js +15 -13
  128. package/dist/commands/update.js.map +1 -1
  129. package/dist/core/AccountManager.d.ts +1 -4
  130. package/dist/core/AccountManager.d.ts.map +1 -1
  131. package/dist/core/AccountManager.js +20 -12
  132. package/dist/core/AccountManager.js.map +1 -1
  133. package/dist/core/Publisher.d.ts +26 -0
  134. package/dist/core/Publisher.d.ts.map +1 -0
  135. package/dist/core/Publisher.js +240 -0
  136. package/dist/core/Publisher.js.map +1 -0
  137. package/dist/core/__tests__/AccountManager.test.d.ts +2 -0
  138. package/dist/core/__tests__/AccountManager.test.d.ts.map +1 -0
  139. package/dist/core/__tests__/AccountManager.test.js +239 -0
  140. package/dist/core/__tests__/AccountManager.test.js.map +1 -0
  141. package/dist/core/__tests__/config.test.d.ts +2 -0
  142. package/dist/core/__tests__/config.test.d.ts.map +1 -0
  143. package/dist/core/__tests__/config.test.js +311 -0
  144. package/dist/core/__tests__/config.test.js.map +1 -0
  145. package/dist/core/__tests__/deployments.test.d.ts +2 -0
  146. package/dist/core/__tests__/deployments.test.d.ts.map +1 -0
  147. package/dist/core/__tests__/deployments.test.js +201 -0
  148. package/dist/core/__tests__/deployments.test.js.map +1 -0
  149. package/dist/core/__tests__/shell.test.d.ts +2 -0
  150. package/dist/core/__tests__/shell.test.d.ts.map +1 -0
  151. package/dist/core/__tests__/shell.test.js +107 -0
  152. package/dist/core/__tests__/shell.test.js.map +1 -0
  153. package/dist/core/config.d.ts +13 -1
  154. package/dist/core/config.d.ts.map +1 -1
  155. package/dist/core/config.js +80 -11
  156. package/dist/core/config.js.map +1 -1
  157. package/dist/core/contract.d.ts +1 -4
  158. package/dist/core/contract.d.ts.map +1 -1
  159. package/dist/core/contract.js +15 -7
  160. package/dist/core/contract.js.map +1 -1
  161. package/dist/core/deployments.d.ts +2 -8
  162. package/dist/core/deployments.d.ts.map +1 -1
  163. package/dist/core/deployments.js +8 -18
  164. package/dist/core/deployments.js.map +1 -1
  165. package/dist/core/movementProfile.d.ts +34 -0
  166. package/dist/core/movementProfile.d.ts.map +1 -0
  167. package/dist/core/movementProfile.js +150 -0
  168. package/dist/core/movementProfile.js.map +1 -0
  169. package/dist/core/shell.d.ts +23 -7
  170. package/dist/core/shell.d.ts.map +1 -1
  171. package/dist/core/shell.js +32 -14
  172. package/dist/core/shell.js.map +1 -1
  173. package/dist/errors.d.ts +35 -0
  174. package/dist/errors.d.ts.map +1 -1
  175. package/dist/errors.js +54 -0
  176. package/dist/errors.js.map +1 -1
  177. package/dist/fork/__tests__/manager.test.d.ts +2 -0
  178. package/dist/fork/__tests__/manager.test.d.ts.map +1 -0
  179. package/dist/fork/__tests__/manager.test.js +309 -0
  180. package/dist/fork/__tests__/manager.test.js.map +1 -0
  181. package/dist/fork/__tests__/server.test.d.ts +2 -0
  182. package/dist/fork/__tests__/server.test.d.ts.map +1 -0
  183. package/dist/fork/__tests__/server.test.js +54 -0
  184. package/dist/fork/__tests__/server.test.js.map +1 -0
  185. package/dist/fork/__tests__/storage.test.d.ts +2 -0
  186. package/dist/fork/__tests__/storage.test.d.ts.map +1 -0
  187. package/dist/fork/__tests__/storage.test.js +222 -0
  188. package/dist/fork/__tests__/storage.test.js.map +1 -0
  189. package/dist/fork/__tests__/test.test.d.ts +2 -0
  190. package/dist/fork/__tests__/test.test.d.ts.map +1 -0
  191. package/dist/fork/__tests__/test.test.js +81 -0
  192. package/dist/fork/__tests__/test.test.js.map +1 -0
  193. package/dist/fork/api.d.ts +14 -3
  194. package/dist/fork/api.d.ts.map +1 -1
  195. package/dist/fork/api.js +25 -14
  196. package/dist/fork/api.js.map +1 -1
  197. package/dist/fork/manager.d.ts +23 -29
  198. package/dist/fork/manager.d.ts.map +1 -1
  199. package/dist/fork/manager.js +79 -76
  200. package/dist/fork/manager.js.map +1 -1
  201. package/dist/fork/server.d.ts +11 -3
  202. package/dist/fork/server.d.ts.map +1 -1
  203. package/dist/fork/server.js +45 -13
  204. package/dist/fork/server.js.map +1 -1
  205. package/dist/fork/storage.d.ts +4 -4
  206. package/dist/fork/storage.d.ts.map +1 -1
  207. package/dist/fork/storage.js +7 -9
  208. package/dist/fork/storage.js.map +1 -1
  209. package/dist/fork/test.d.ts +12 -4
  210. package/dist/fork/test.d.ts.map +1 -1
  211. package/dist/fork/test.js +36 -27
  212. package/dist/fork/test.js.map +1 -1
  213. package/dist/harness/Harness.d.ts +118 -0
  214. package/dist/harness/Harness.d.ts.map +1 -0
  215. package/dist/harness/Harness.js +187 -0
  216. package/dist/harness/Harness.js.map +1 -0
  217. package/dist/harness/codeObject.d.ts +31 -0
  218. package/dist/harness/codeObject.d.ts.map +1 -0
  219. package/dist/harness/codeObject.js +267 -0
  220. package/dist/harness/codeObject.js.map +1 -0
  221. package/dist/harness/errors.d.ts +14 -0
  222. package/dist/harness/errors.d.ts.map +1 -0
  223. package/dist/harness/errors.js +22 -0
  224. package/dist/harness/errors.js.map +1 -0
  225. package/dist/harness/index.d.ts +4 -0
  226. package/dist/harness/index.d.ts.map +1 -0
  227. package/dist/harness/index.js +3 -0
  228. package/dist/harness/index.js.map +1 -0
  229. package/dist/harness/proxy.d.ts +7 -0
  230. package/dist/harness/proxy.d.ts.map +1 -0
  231. package/dist/harness/proxy.js +36 -0
  232. package/dist/harness/proxy.js.map +1 -0
  233. package/dist/harness/script.d.ts +21 -0
  234. package/dist/harness/script.d.ts.map +1 -0
  235. package/dist/harness/script.js +155 -0
  236. package/dist/harness/script.js.map +1 -0
  237. package/dist/harness/view.d.ts +22 -0
  238. package/dist/harness/view.d.ts.map +1 -0
  239. package/dist/harness/view.js +28 -0
  240. package/dist/harness/view.js.map +1 -0
  241. package/dist/helpers/__tests__/semver-utils.test.d.ts +2 -0
  242. package/dist/helpers/__tests__/semver-utils.test.d.ts.map +1 -0
  243. package/dist/helpers/__tests__/semver-utils.test.js +103 -0
  244. package/dist/helpers/__tests__/semver-utils.test.js.map +1 -0
  245. package/dist/helpers/index.d.ts +3 -2
  246. package/dist/helpers/index.d.ts.map +1 -1
  247. package/dist/helpers/index.js +2 -2
  248. package/dist/helpers/index.js.map +1 -1
  249. package/dist/helpers/move-tests.d.ts +3 -3
  250. package/dist/helpers/move-tests.d.ts.map +1 -1
  251. package/dist/helpers/move-tests.js +21 -20
  252. package/dist/helpers/move-tests.js.map +1 -1
  253. package/dist/helpers/npm-registry.d.ts.map +1 -1
  254. package/dist/helpers/npm-registry.js +1 -3
  255. package/dist/helpers/npm-registry.js.map +1 -1
  256. package/dist/helpers/semver-utils.d.ts.map +1 -1
  257. package/dist/helpers/semver-utils.js +4 -3
  258. package/dist/helpers/semver-utils.js.map +1 -1
  259. package/dist/helpers/setup.d.ts.map +1 -1
  260. package/dist/helpers/setup.js +6 -4
  261. package/dist/helpers/setup.js.map +1 -1
  262. package/dist/helpers/setupLocalTesting.d.ts +31 -27
  263. package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
  264. package/dist/helpers/setupLocalTesting.js +179 -180
  265. package/dist/helpers/setupLocalTesting.js.map +1 -1
  266. package/dist/helpers/testFixtures.d.ts +19 -53
  267. package/dist/helpers/testFixtures.d.ts.map +1 -1
  268. package/dist/helpers/testFixtures.js +89 -107
  269. package/dist/helpers/testFixtures.js.map +1 -1
  270. package/dist/index.d.ts +4 -2
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +6 -3
  273. package/dist/index.js.map +1 -1
  274. package/dist/node/LocalNodeManager.d.ts +9 -1
  275. package/dist/node/LocalNodeManager.d.ts.map +1 -1
  276. package/dist/node/LocalNodeManager.js +75 -58
  277. package/dist/node/LocalNodeManager.js.map +1 -1
  278. package/dist/node/__tests__/LocalNodeManager.test.d.ts +2 -0
  279. package/dist/node/__tests__/LocalNodeManager.test.d.ts.map +1 -0
  280. package/dist/node/__tests__/LocalNodeManager.test.js +349 -0
  281. package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -0
  282. package/dist/runtime.d.ts +12 -15
  283. package/dist/runtime.d.ts.map +1 -1
  284. package/dist/runtime.js +26 -239
  285. package/dist/runtime.js.map +1 -1
  286. package/dist/templates/README.md +1 -1
  287. package/dist/templates/movehat.config.ts +10 -0
  288. package/dist/templates/package.json +2 -1
  289. package/dist/templates/scripts/deploy-counter.ts +46 -38
  290. package/dist/templates/tests/Counter.test.ts +39 -51
  291. package/dist/templates/types/movehat.d.ts +6 -9
  292. package/dist/types/config.d.ts +8 -0
  293. package/dist/types/config.d.ts.map +1 -1
  294. package/dist/types/fork.d.ts +7 -1
  295. package/dist/types/fork.d.ts.map +1 -1
  296. package/dist/types/harness.d.ts +166 -0
  297. package/dist/types/harness.d.ts.map +1 -0
  298. package/dist/types/harness.js +2 -0
  299. package/dist/types/harness.js.map +1 -0
  300. package/dist/types/runtime.d.ts +7 -1
  301. package/dist/types/runtime.d.ts.map +1 -1
  302. package/dist/ui/__tests__/colors.test.d.ts +2 -0
  303. package/dist/ui/__tests__/colors.test.d.ts.map +1 -0
  304. package/dist/ui/__tests__/colors.test.js +127 -0
  305. package/dist/ui/__tests__/colors.test.js.map +1 -0
  306. package/dist/ui/colors.d.ts.map +1 -1
  307. package/dist/ui/colors.js +6 -2
  308. package/dist/ui/colors.js.map +1 -1
  309. package/dist/ui/logger.d.ts +17 -0
  310. package/dist/ui/logger.d.ts.map +1 -1
  311. package/dist/ui/logger.js +22 -0
  312. package/dist/ui/logger.js.map +1 -1
  313. package/dist/ui/symbols.d.ts +1 -0
  314. package/dist/ui/symbols.d.ts.map +1 -1
  315. package/dist/ui/symbols.js +7 -1
  316. package/dist/ui/symbols.js.map +1 -1
  317. package/dist/utils/__tests__/address.test.d.ts +2 -0
  318. package/dist/utils/__tests__/address.test.d.ts.map +1 -0
  319. package/dist/utils/__tests__/address.test.js +70 -0
  320. package/dist/utils/__tests__/address.test.js.map +1 -0
  321. package/dist/utils/__tests__/childProcessAdapter.test.d.ts +2 -0
  322. package/dist/utils/__tests__/childProcessAdapter.test.d.ts.map +1 -0
  323. package/dist/utils/__tests__/childProcessAdapter.test.js +217 -0
  324. package/dist/utils/__tests__/childProcessAdapter.test.js.map +1 -0
  325. package/dist/utils/__tests__/runCli.test.d.ts +2 -0
  326. package/dist/utils/__tests__/runCli.test.d.ts.map +1 -0
  327. package/dist/utils/__tests__/runCli.test.js +187 -0
  328. package/dist/utils/__tests__/runCli.test.js.map +1 -0
  329. package/dist/utils/address.d.ts +29 -0
  330. package/dist/utils/address.d.ts.map +1 -0
  331. package/dist/utils/address.js +48 -0
  332. package/dist/utils/address.js.map +1 -0
  333. package/dist/utils/childProcessAdapter.d.ts +93 -0
  334. package/dist/utils/childProcessAdapter.d.ts.map +1 -0
  335. package/dist/utils/childProcessAdapter.js +108 -0
  336. package/dist/utils/childProcessAdapter.js.map +1 -0
  337. package/dist/utils/parseCliOutput.d.ts +20 -0
  338. package/dist/utils/parseCliOutput.d.ts.map +1 -0
  339. package/dist/utils/parseCliOutput.js +26 -0
  340. package/dist/utils/parseCliOutput.js.map +1 -0
  341. package/dist/utils/redact.d.ts +15 -0
  342. package/dist/utils/redact.d.ts.map +1 -0
  343. package/dist/utils/redact.js +24 -0
  344. package/dist/utils/redact.js.map +1 -0
  345. package/dist/utils/runCli.d.ts +24 -0
  346. package/dist/utils/runCli.d.ts.map +1 -0
  347. package/dist/utils/runCli.js +37 -0
  348. package/dist/utils/runCli.js.map +1 -0
  349. package/package.json +15 -4
  350. package/src/__tests__/deployContract.test.ts +429 -0
  351. package/src/__tests__/errors.test.ts +84 -0
  352. package/src/__tests__/fixtures/sigint-deploy-harness.ts +95 -0
  353. package/src/__tests__/fork/api.test.ts +143 -0
  354. package/src/__tests__/harness/Harness.createLive.test.ts +57 -0
  355. package/src/__tests__/harness/Harness.proxy.test.ts +111 -0
  356. package/src/__tests__/harness/_fixture.ts +131 -0
  357. package/src/__tests__/harness/codeObject.deploy.test.ts +319 -0
  358. package/src/__tests__/harness/codeObject.upgrade.test.ts +156 -0
  359. package/src/__tests__/harness/script.test.ts +245 -0
  360. package/src/__tests__/harness/view.test.ts +104 -0
  361. package/src/__tests__/runtime.test.ts +182 -0
  362. package/src/cli.ts +2 -1
  363. package/src/commands/__tests__/compile.test.ts +407 -0
  364. package/src/commands/__tests__/init.test.ts +125 -0
  365. package/src/commands/__tests__/run.test.ts +192 -0
  366. package/src/commands/__tests__/test-move.test.ts +81 -0
  367. package/src/commands/__tests__/test.test.ts +204 -0
  368. package/src/commands/__tests__/update.test.ts +223 -0
  369. package/src/commands/compile.ts +168 -32
  370. package/src/commands/fork/__tests__/create.test.ts +132 -0
  371. package/src/commands/fork/__tests__/fund.test.ts +104 -0
  372. package/src/commands/fork/__tests__/list.test.ts +139 -0
  373. package/src/commands/fork/__tests__/serve.test.ts +121 -0
  374. package/src/commands/fork/__tests__/view-resource.test.ts +101 -0
  375. package/src/commands/fork/create.ts +4 -3
  376. package/src/commands/fork/fund.ts +16 -9
  377. package/src/commands/fork/list.ts +3 -2
  378. package/src/commands/fork/serve.ts +6 -3
  379. package/src/commands/fork/view-resource.ts +11 -6
  380. package/src/commands/run.ts +54 -28
  381. package/src/commands/test-move.ts +4 -3
  382. package/src/commands/test.ts +56 -44
  383. package/src/commands/update.ts +19 -16
  384. package/src/core/AccountManager.ts +23 -22
  385. package/src/core/Publisher.ts +314 -0
  386. package/src/core/__tests__/AccountManager.test.ts +290 -0
  387. package/src/core/__tests__/config.test.ts +377 -0
  388. package/src/core/__tests__/deployments.test.ts +247 -0
  389. package/src/core/__tests__/shell.test.ts +138 -0
  390. package/src/core/config.ts +96 -12
  391. package/src/core/contract.ts +13 -7
  392. package/src/core/deployments.ts +13 -23
  393. package/src/core/movementProfile.ts +179 -0
  394. package/src/core/shell.ts +34 -14
  395. package/src/errors.ts +60 -0
  396. package/src/fork/__tests__/manager.test.ts +385 -0
  397. package/src/fork/__tests__/server.test.ts +65 -0
  398. package/src/fork/__tests__/storage.test.ts +281 -0
  399. package/src/fork/__tests__/test.test.ts +97 -0
  400. package/src/fork/api.ts +28 -14
  401. package/src/fork/manager.ts +88 -83
  402. package/src/fork/server.ts +53 -19
  403. package/src/fork/storage.ts +12 -15
  404. package/src/fork/test.ts +57 -32
  405. package/src/harness/Harness.ts +222 -0
  406. package/src/harness/codeObject.ts +384 -0
  407. package/src/harness/errors.ts +22 -0
  408. package/src/harness/index.ts +3 -0
  409. package/src/harness/proxy.ts +40 -0
  410. package/src/harness/script.ts +196 -0
  411. package/src/harness/view.ts +34 -0
  412. package/src/helpers/__tests__/semver-utils.test.ts +121 -0
  413. package/src/helpers/index.ts +2 -8
  414. package/src/helpers/move-tests.ts +27 -23
  415. package/src/helpers/npm-registry.ts +4 -3
  416. package/src/helpers/semver-utils.ts +4 -3
  417. package/src/helpers/setup.ts +6 -4
  418. package/src/helpers/setupLocalTesting.ts +218 -200
  419. package/src/helpers/testFixtures.ts +106 -118
  420. package/src/index.ts +8 -3
  421. package/src/node/LocalNodeManager.ts +87 -62
  422. package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
  423. package/src/runtime.ts +28 -288
  424. package/src/templates/README.md +1 -1
  425. package/src/templates/movehat.config.ts +10 -0
  426. package/src/templates/package.json +2 -1
  427. package/src/templates/scripts/deploy-counter.ts +46 -38
  428. package/src/templates/tests/Counter.test.ts +39 -51
  429. package/src/templates/types/movehat.d.ts +6 -9
  430. package/src/types/config.ts +8 -0
  431. package/src/types/fork.ts +7 -1
  432. package/src/types/harness.ts +182 -0
  433. package/src/types/runtime.ts +11 -3
  434. package/src/ui/__tests__/colors.test.ts +156 -0
  435. package/src/ui/colors.ts +5 -2
  436. package/src/ui/logger.ts +22 -0
  437. package/src/ui/symbols.ts +7 -1
  438. package/src/utils/__tests__/address.test.ts +93 -0
  439. package/src/utils/__tests__/childProcessAdapter.test.ts +266 -0
  440. package/src/utils/__tests__/runCli.test.ts +240 -0
  441. package/src/utils/address.ts +52 -0
  442. package/src/utils/childProcessAdapter.ts +214 -0
  443. package/src/utils/parseCliOutput.ts +27 -0
  444. package/src/utils/redact.ts +24 -0
  445. package/src/utils/runCli.ts +64 -0
@@ -6,11 +6,33 @@ import { ForkManager } from "../fork/manager.js";
6
6
  import { ForkServer } from "../fork/server.js";
7
7
  import { LocalNodeManager } from "../node/LocalNodeManager.js";
8
8
  import { AccountManager } from "../core/AccountManager.js";
9
+ import { logger } from "../ui/index.js";
9
10
  import type { LocalTestOptions } from "../types/config.js";
10
11
 
11
- let currentForkServer: ForkServer | null = null;
12
- let currentForkManager: ForkManager | null = null;
13
- let currentLocalNode: LocalNodeManager | null = null;
12
+ /**
13
+ * Context returned by {@link setupLocalTesting}.
14
+ *
15
+ * Replaces the module-scoped singletons that previously tracked the
16
+ * "current" local node / fork server / fork manager. Each invocation now
17
+ * owns its own handles, so two parallel `setupLocalTesting` calls in the
18
+ * same process do not trample each other.
19
+ *
20
+ * @public The `runtime` and `teardown` fields are the supported surface.
21
+ * `localNode`, `forkServer`, and `forkManager` are exposed for
22
+ * escape hatches (e.g. mid-test `forkManager.resetState()`) but
23
+ * their concrete shapes are `@internal`.
24
+ */
25
+ export interface LocalTestingContext {
26
+ runtime: MovehatRuntime;
27
+ /** @internal */
28
+ localNode?: LocalNodeManager;
29
+ /** @internal */
30
+ forkServer?: ForkServer;
31
+ /** @internal */
32
+ forkManager?: ForkManager;
33
+ /** Stop the local node and/or fork server owned by this context. */
34
+ teardown: () => Promise<void>;
35
+ }
14
36
 
15
37
  /**
16
38
  * Setup a local testing environment with either a local node or fork server
@@ -31,42 +53,65 @@ let currentLocalNode: LocalNodeManager | null = null;
31
53
  * 5. Returns runtime for reading data
32
54
  *
33
55
  * @param options Configuration options for local testing
34
- * @returns MovehatRuntime configured for local testing
56
+ * @returns LocalTestingContext with runtime and a teardown closure
35
57
  *
36
58
  * @example
37
59
  * ```typescript
38
60
  * // Local node mode (default) - Full blockchain, can deploy
39
- * const mh = await setupLocalTesting({
61
+ * const ctx = await setupLocalTesting({
40
62
  * mode: 'local-node',
41
63
  * accountLabels: ['alice', 'bob'],
42
- * autoDeploy: ['counter'], // āœ… Works!
43
- * });
44
- *
45
- * // Fork mode - Fast, read-only
46
- * const mh = await setupLocalTesting({
47
- * mode: 'fork',
48
- * accountLabels: ['alice', 'bob'],
49
- * autoDeploy: ['counter'], // āŒ Won't work (fork can't deploy)
64
+ * autoDeploy: ['counter'], // works
50
65
  * });
66
+ * // ...use ctx.runtime...
67
+ * await ctx.teardown();
51
68
  * ```
52
69
  */
53
70
  export async function setupLocalTesting(
54
71
  options: LocalTestOptions = {}
55
- ): Promise<MovehatRuntime> {
56
- // Default options
57
- const mode = options.mode || 'local-node'; // Default to local node
58
- const autoFund = options.autoFund !== false; // default true
59
- const defaultBalance = options.defaultBalance || 100_000_000; // 100 APT
72
+ ): Promise<LocalTestingContext> {
73
+ const mode = options.mode || 'local-node';
74
+ const autoFund = options.autoFund !== false;
75
+ const defaultBalance = options.defaultBalance || 100_000_000;
60
76
  const accountLabels = options.accountLabels || ["deployer", "alice", "bob"];
61
77
 
62
- console.log(`\nšŸ”§ Setting up local testing environment...`);
63
- console.log(` Mode: ${mode}`);
64
- console.log(` Accounts: ${accountLabels.join(", ")}\n`);
78
+ logger.newline();
79
+ logger.step("Setting up local testing environment...");
80
+ logger.plain(` Mode: ${mode}`);
81
+ logger.plain(` Accounts: ${accountLabels.join(", ")}`);
82
+ logger.newline();
65
83
 
66
84
  if (mode === 'local-node') {
67
- return await setupWithLocalNode(options, accountLabels, autoFund, defaultBalance);
85
+ const { runtime, localNode } = await setupWithLocalNode(
86
+ options, accountLabels, autoFund, defaultBalance
87
+ );
88
+ return {
89
+ runtime,
90
+ localNode,
91
+ teardown: async () => {
92
+ logger.newline();
93
+ logger.step("Stopping local testing environment...");
94
+ await localNode.stop();
95
+ logger.success("Environment stopped");
96
+ logger.newline();
97
+ },
98
+ };
68
99
  } else {
69
- return await setupWithFork(options, accountLabels, autoFund, defaultBalance);
100
+ const { runtime, forkServer, forkManager } = await setupWithFork(
101
+ options, accountLabels, autoFund, defaultBalance
102
+ );
103
+ return {
104
+ runtime,
105
+ forkServer,
106
+ forkManager,
107
+ teardown: async () => {
108
+ logger.newline();
109
+ logger.step("Stopping local testing environment...");
110
+ await forkServer.stop();
111
+ logger.success("Environment stopped");
112
+ logger.newline();
113
+ },
114
+ };
70
115
  }
71
116
  }
72
117
 
@@ -78,15 +123,14 @@ async function setupWithLocalNode(
78
123
  accountLabels: readonly string[],
79
124
  autoFund: boolean,
80
125
  defaultBalance: number
81
- ): Promise<MovehatRuntime> {
126
+ ): Promise<{ runtime: MovehatRuntime; localNode: LocalNodeManager }> {
82
127
  const nodeTestDir = options.nodeTestDir || join(process.cwd(), ".movehat", "local-node");
83
- const nodeForceRestart = options.nodeForceRestart !== false; // default true
128
+ const nodeForceRestart = options.nodeForceRestart !== false;
84
129
  const nodeFaucetPort = options.nodeFaucetPort || 8081;
85
130
  const nodeApiPort = options.nodeApiPort || 8080;
86
131
  const nodeReadyPort = options.nodeReadyPort || 8070;
87
132
  const nodeSilent = options.nodeSilent ?? false;
88
133
 
89
- // 1. Start local node
90
134
  const localNode = new LocalNodeManager({
91
135
  testDir: nodeTestDir,
92
136
  forceRestart: nodeForceRestart,
@@ -96,88 +140,96 @@ async function setupWithLocalNode(
96
140
  silent: nodeSilent,
97
141
  });
98
142
 
99
- currentLocalNode = localNode;
100
-
101
143
  const nodeInfo = await localNode.start();
102
144
 
103
- // 2. Generate accounts with AccountManager
104
- console.log(`šŸ‘„ Generating ${accountLabels.length} test accounts...`);
105
- const accounts = AccountManager.createBatch(accountLabels);
106
-
107
- for (const [label, account] of Object.entries(accounts)) {
108
- console.log(` ${label}: ${account.accountAddress.toString()}`);
109
- }
110
- console.log();
145
+ // Once the node is up, every later step (account creation, funding,
146
+ // runtime init, autoDeploy) is fallible. If any of them throws we
147
+ // must stop the node we just started — otherwise the child process
148
+ // leaks and port 8080 stays bound until the OS reaps it (manifests as
149
+ // "Movement command failed" on the next test:example run).
150
+ try {
151
+ logger.step(`Generating ${accountLabels.length} test accounts...`);
152
+ const accounts = AccountManager.createBatch(accountLabels);
153
+
154
+ for (const [label, account] of Object.entries(accounts)) {
155
+ logger.plain(` ${label}: ${account.accountAddress.toString()}`);
156
+ }
157
+ logger.newline();
111
158
 
112
- // 3. Fund accounts from local faucet
113
- if (autoFund) {
114
- const accountsList = Object.values(accounts);
115
- await localNode.fundAccounts(accountsList, defaultBalance);
116
- }
159
+ if (autoFund) {
160
+ const accountsList = Object.values(accounts);
161
+ await localNode.fundAccounts(accountsList, defaultBalance);
162
+ }
117
163
 
118
- // 4. Initialize runtime pointing to local node
119
- console.log(`āš™ļø Initializing runtime for local network...`);
164
+ logger.step("Initializing runtime for local network...");
120
165
 
121
- const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
166
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
122
167
 
123
- if (!deployerPrivateKey) {
124
- throw new Error("Failed to get deployer private key");
125
- }
168
+ if (!deployerPrivateKey) {
169
+ throw new Error("Failed to get deployer private key");
170
+ }
126
171
 
127
- const runtime = await initRuntime({
128
- network: "local",
129
- configOverride: {
130
- networks: {
131
- local: {
132
- url: `${nodeInfo.rpcUrl}/v1`,
133
- chainId: "local",
172
+ const runtime = await initRuntime({
173
+ network: "local",
174
+ configOverride: {
175
+ networks: {
176
+ local: {
177
+ url: `${nodeInfo.rpcUrl}/v1`,
178
+ chainId: "local",
179
+ },
134
180
  },
181
+ accounts: [deployerPrivateKey],
135
182
  },
136
- accounts: [deployerPrivateKey],
137
- },
138
- });
139
-
140
- console.log(`āœ“ Runtime initialized\n`);
141
-
142
- // 5. Auto-deploy modules if specified
143
- if (options.autoDeploy && options.autoDeploy.length > 0) {
144
- console.log(`šŸ“¦ Auto-deploying ${options.autoDeploy.length} module(s)...`);
145
-
146
- // Force redeploy in local-node mode (for testing)
147
- const previousRedeploy = process.env.MH_CLI_REDEPLOY;
148
- process.env.MH_CLI_REDEPLOY = 'true';
149
-
150
- try {
151
- for (const moduleName of options.autoDeploy) {
152
- try {
153
- console.log(` Deploying ${moduleName}...`);
154
- await runtime.deployContract(moduleName);
155
- console.log(` āœ“ ${moduleName} deployed`);
156
- } catch (error: any) {
157
- console.error(` āœ— Failed to deploy ${moduleName}: ${error.message}`);
158
- throw error;
183
+ });
184
+
185
+ logger.success("Runtime initialized");
186
+ logger.newline();
187
+
188
+ if (options.autoDeploy && options.autoDeploy.length > 0) {
189
+ logger.step(`Auto-deploying ${options.autoDeploy.length} module(s)...`);
190
+
191
+ const previousRedeploy = process.env.MH_CLI_REDEPLOY;
192
+ process.env.MH_CLI_REDEPLOY = 'true';
193
+
194
+ try {
195
+ for (const moduleName of options.autoDeploy) {
196
+ try {
197
+ logger.plain(` Deploying ${moduleName}...`);
198
+ await runtime.deployContract(moduleName);
199
+ logger.success(`${moduleName} deployed`, 2);
200
+ } catch (error) {
201
+ const msg = error instanceof Error ? error.message : String(error);
202
+ logger.error(`Failed to deploy ${moduleName}: ${msg}`, 2);
203
+ throw error;
204
+ }
205
+ }
206
+ } finally {
207
+ if (previousRedeploy === undefined) {
208
+ delete process.env.MH_CLI_REDEPLOY;
209
+ } else {
210
+ process.env.MH_CLI_REDEPLOY = previousRedeploy;
159
211
  }
160
212
  }
161
- } finally {
162
- // Restore previous value
163
- if (previousRedeploy === undefined) {
164
- delete process.env.MH_CLI_REDEPLOY;
165
- } else {
166
- process.env.MH_CLI_REDEPLOY = previousRedeploy;
167
- }
213
+
214
+ logger.newline();
168
215
  }
169
216
 
170
- console.log();
217
+ logger.success("Local testing environment ready!");
218
+ logger.newline();
219
+ logger.plain(` Mode: local-node`);
220
+ logger.plain(` RPC: ${nodeInfo.rpcUrl}/v1`);
221
+ logger.plain(` Faucet: ${nodeInfo.faucetUrl}`);
222
+ logger.plain(` Accounts: ${Array.from(accountLabels).join(", ")}`);
223
+ logger.plain(` Balance per account: ${defaultBalance / 100_000_000} APT`);
224
+ logger.newline();
225
+
226
+ return { runtime, localNode };
227
+ } catch (error) {
228
+ // Best-effort cleanup. Swallow the stop() error so the original
229
+ // setup failure surfaces unchanged.
230
+ await localNode.stop().catch(() => {});
231
+ throw error;
171
232
  }
172
-
173
- console.log(`āœ… Local testing environment ready!\n`);
174
- console.log(` Mode: local-node`);
175
- console.log(` RPC: ${nodeInfo.rpcUrl}/v1`);
176
- console.log(` Faucet: ${nodeInfo.faucetUrl}`);
177
- console.log(` Accounts: ${Array.from(accountLabels).join(", ")}`);
178
- console.log(` Balance per account: ${defaultBalance / 100_000_000} APT\n`);
179
-
180
- return runtime;
181
233
  }
182
234
 
183
235
  /**
@@ -188,148 +240,114 @@ async function setupWithFork(
188
240
  accountLabels: readonly string[],
189
241
  autoFund: boolean,
190
242
  defaultBalance: number
191
- ): Promise<MovehatRuntime> {
243
+ ): Promise<{ runtime: MovehatRuntime; forkServer: ForkServer; forkManager: ForkManager }> {
192
244
  const forkNetwork = options.forkNetwork || "testnet";
193
245
  const forkName = options.forkName || "test-local";
194
246
  const forkPort = options.forkPort || 8080;
195
- const forkResetState = options.forkResetState !== false; // default true
247
+ const forkResetState = options.forkResetState !== false;
196
248
 
197
- console.log(` Fork network: ${forkNetwork}`);
198
- console.log(` Fork name: ${forkName}`);
199
- console.log(` Server port: ${forkPort}\n`);
249
+ logger.plain(` Fork network: ${forkNetwork}`);
250
+ logger.plain(` Fork name: ${forkName}`);
251
+ logger.plain(` Server port: ${forkPort}`);
252
+ logger.newline();
200
253
 
201
- // Warn about auto-deploy in fork mode
202
254
  if (options.autoDeploy && options.autoDeploy.length > 0) {
203
- console.warn(`āš ļø WARNING: Auto-deploy doesn't work in fork mode (read-only).`);
204
- console.warn(` Switch to 'local-node' mode for deployment support.\n`);
255
+ logger.warning("Auto-deploy doesn't work in fork mode (read-only).");
256
+ logger.plain(" Switch to 'local-node' mode for deployment support.");
257
+ logger.newline();
205
258
  }
206
259
 
207
- // 1. Setup fork
208
260
  const forkPath = join(process.cwd(), ".movehat", "forks", forkName);
209
261
  const forkManager = new ForkManager(forkPath);
210
- currentForkManager = forkManager;
211
262
 
212
263
  const forkExists = existsSync(join(forkPath, "metadata.json"));
213
264
 
214
265
  if (!forkExists) {
215
- console.log(`šŸ“ø Creating fork from ${forkNetwork}...`);
266
+ logger.step(`Creating fork from ${forkNetwork}...`);
216
267
  const testnetRpc = "https://testnet.movementnetwork.xyz/v1";
217
- await forkManager.initialize(testnetRpc, forkNetwork);
218
- console.log(`āœ“ Fork created at ${forkPath}\n`);
268
+ await forkManager.initialize(testnetRpc, forkNetwork, options.forkApiKey);
269
+ logger.success(`Fork created at ${forkPath}`);
270
+ logger.newline();
219
271
  } else {
220
- console.log(`āœ“ Loading existing fork from ${forkPath}`);
272
+ logger.success(`Loading existing fork from ${forkPath}`);
273
+ // setApiKey BEFORE load() so the reconstructed MovementApiClient
274
+ // picks up the header. load() rebuilds the client using current
275
+ // apiKey state.
276
+ if (options.forkApiKey !== undefined) {
277
+ forkManager.setApiKey(options.forkApiKey);
278
+ }
221
279
  forkManager.load();
222
280
 
223
281
  if (forkResetState) {
224
- console.log(`šŸ”„ Resetting fork state...`);
282
+ logger.step("Resetting fork state...");
225
283
  await forkManager.resetState();
226
284
  }
227
285
 
228
- console.log();
286
+ logger.newline();
229
287
  }
230
288
 
231
- // 2. Start fork server
232
- console.log(`šŸš€ Starting fork server on port ${forkPort}...`);
289
+ logger.step(`Starting fork server on port ${forkPort}...`);
233
290
  const forkServer = new ForkServer(forkPath, forkPort);
234
- currentForkServer = forkServer;
235
291
 
236
292
  await forkServer.start();
237
- console.log(`āœ“ Fork server running at http://localhost:${forkPort}\n`);
293
+ logger.success(`Fork server running at http://localhost:${forkPort}`);
294
+ logger.newline();
238
295
 
239
- await new Promise((resolve) => setTimeout(resolve, 500));
296
+ // Same cleanup-on-failure pattern as setupWithLocalNode: once the
297
+ // fork server is listening, any later throw must stop the server or
298
+ // we leak the listener.
299
+ try {
300
+ await new Promise((resolve) => setTimeout(resolve, 500));
240
301
 
241
- // 3. Generate accounts
242
- console.log(`šŸ‘„ Generating ${accountLabels.length} test accounts...`);
243
- const accounts = AccountManager.createBatch(accountLabels);
302
+ logger.step(`Generating ${accountLabels.length} test accounts...`);
303
+ const accounts = AccountManager.createBatch(accountLabels);
244
304
 
245
- for (const [label, account] of Object.entries(accounts)) {
246
- console.log(` ${label}: ${account.accountAddress.toString()}`);
247
- }
248
- console.log();
305
+ for (const [label, account] of Object.entries(accounts)) {
306
+ logger.plain(` ${label}: ${account.accountAddress.toString()}`);
307
+ }
308
+ logger.newline();
249
309
 
250
- // 4. Fund accounts in fork
251
- if (autoFund) {
252
- const addresses = Object.values(accounts).map((acc) =>
253
- acc.accountAddress.toString()
254
- );
255
- await forkManager.fundMultipleAccounts(addresses, defaultBalance);
256
- }
310
+ if (autoFund) {
311
+ const addresses = Object.values(accounts).map((acc) =>
312
+ acc.accountAddress.toString()
313
+ );
314
+ await forkManager.fundMultipleAccounts(addresses, defaultBalance);
315
+ }
257
316
 
258
- // 5. Initialize runtime pointing to fork
259
- console.log(`āš™ļø Initializing runtime for local network...`);
317
+ logger.step("Initializing runtime for local network...");
260
318
 
261
- const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
319
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
262
320
 
263
- if (!deployerPrivateKey) {
264
- throw new Error("Failed to get deployer private key");
265
- }
321
+ if (!deployerPrivateKey) {
322
+ throw new Error("Failed to get deployer private key");
323
+ }
266
324
 
267
- const runtime = await initRuntime({
268
- network: "local",
269
- configOverride: {
270
- networks: {
271
- local: {
272
- url: `http://localhost:${forkPort}/v1`,
273
- chainId: "local",
325
+ const runtime = await initRuntime({
326
+ network: "local",
327
+ configOverride: {
328
+ networks: {
329
+ local: {
330
+ url: `http://localhost:${forkPort}/v1`,
331
+ chainId: "local",
332
+ },
274
333
  },
334
+ accounts: [deployerPrivateKey],
275
335
  },
276
- accounts: [deployerPrivateKey],
277
- },
278
- });
279
-
280
- console.log(`āœ“ Runtime initialized\n`);
281
- console.log(`āœ… Local testing environment ready!\n`);
282
- console.log(` Mode: fork (read-only)`);
283
- console.log(` RPC: http://localhost:${forkPort}/v1`);
284
- console.log(` Accounts: ${Array.from(accountLabels).join(", ")}`);
285
- console.log(` Balance per account: ${defaultBalance / 100_000_000} APT\n`);
286
-
287
- return runtime;
288
- }
289
-
290
- /**
291
- * Stop the local testing environment (cleanup)
292
- */
293
- export async function stopLocalTesting(): Promise<void> {
294
- console.log(`\nšŸ›‘ Stopping local testing environment...`);
295
-
296
- // Stop local node if running
297
- if (currentLocalNode) {
298
- await currentLocalNode.stop();
299
- currentLocalNode = null;
300
- }
301
-
302
- // Stop fork server if running
303
- if (currentForkServer) {
304
- await currentForkServer.stop();
305
- currentForkServer = null;
306
- currentForkManager = null;
307
- }
308
-
309
- console.log(`āœ“ Environment stopped\n`);
310
- }
311
-
312
- /**
313
- * Get the current fork manager (if fork mode is active)
314
- */
315
- export function getCurrentForkManager(): ForkManager | null {
316
- return currentForkManager;
317
- }
318
-
319
- /**
320
- * Get the current local node (if local node mode is active)
321
- */
322
- export function getCurrentLocalNode(): LocalNodeManager | null {
323
- return currentLocalNode;
324
- }
325
-
326
- /**
327
- * Reset fork state to initial snapshot (fork mode only)
328
- */
329
- export async function resetForkState(): Promise<void> {
330
- if (currentForkManager) {
331
- await currentForkManager.resetState();
332
- } else {
333
- console.warn("Warning: No active fork manager to reset");
336
+ });
337
+
338
+ logger.success("Runtime initialized");
339
+ logger.newline();
340
+ logger.success("Local testing environment ready!");
341
+ logger.newline();
342
+ logger.plain(` Mode: fork (read-only)`);
343
+ logger.plain(` RPC: http://localhost:${forkPort}/v1`);
344
+ logger.plain(` Accounts: ${Array.from(accountLabels).join(", ")}`);
345
+ logger.plain(` Balance per account: ${defaultBalance / 100_000_000} APT`);
346
+ logger.newline();
347
+
348
+ return { runtime, forkServer, forkManager };
349
+ } catch (error) {
350
+ await forkServer.stop().catch(() => {});
351
+ throw error;
334
352
  }
335
353
  }