movehat 0.1.8 → 0.2.0

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 +2 -2
  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 +93 -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 -1
  130. package/dist/core/AccountManager.d.ts.map +1 -1
  131. package/dist/core/AccountManager.js +20 -7
  132. package/dist/core/AccountManager.js.map +1 -1
  133. package/dist/core/Publisher.d.ts +31 -0
  134. package/dist/core/Publisher.d.ts.map +1 -0
  135. package/dist/core/Publisher.js +248 -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 -1
  158. package/dist/core/contract.d.ts.map +1 -1
  159. package/dist/core/contract.js +15 -4
  160. package/dist/core/contract.js.map +1 -1
  161. package/dist/core/deployments.d.ts +2 -2
  162. package/dist/core/deployments.d.ts.map +1 -1
  163. package/dist/core/deployments.js +8 -6
  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 -9
  198. package/dist/fork/manager.d.ts.map +1 -1
  199. package/dist/fork/manager.js +79 -36
  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 +13 -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 +124 -0
  214. package/dist/harness/Harness.d.ts.map +1 -0
  215. package/dist/harness/Harness.js +193 -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 +271 -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 +10 -6
  261. package/dist/helpers/setup.js.map +1 -1
  262. package/dist/helpers/setupLocalTesting.d.ts +32 -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 +7 -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 +32 -241
  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 +51 -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 +33 -0
  330. package/dist/utils/address.d.ts.map +1 -0
  331. package/dist/utils/address.js +52 -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 +109 -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 +14 -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 +115 -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 -10
  385. package/src/core/Publisher.ts +322 -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 -4
  392. package/src/core/deployments.ts +13 -11
  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 -43
  402. package/src/fork/server.ts +53 -19
  403. package/src/fork/storage.ts +12 -15
  404. package/src/fork/test.ts +58 -32
  405. package/src/harness/Harness.ts +228 -0
  406. package/src/harness/codeObject.ts +388 -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 +9 -5
  418. package/src/helpers/setupLocalTesting.ts +219 -200
  419. package/src/helpers/testFixtures.ts +106 -118
  420. package/src/index.ts +9 -3
  421. package/src/node/LocalNodeManager.ts +87 -62
  422. package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
  423. package/src/runtime.ts +33 -289
  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 +51 -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 +56 -0
  442. package/src/utils/childProcessAdapter.ts +215 -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,34 @@ 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 considered `@internal` until the M5
24
+ * TypeDoc pass formalizes the public API.
25
+ */
26
+ export interface LocalTestingContext {
27
+ runtime: MovehatRuntime;
28
+ /** @internal */
29
+ localNode?: LocalNodeManager;
30
+ /** @internal */
31
+ forkServer?: ForkServer;
32
+ /** @internal */
33
+ forkManager?: ForkManager;
34
+ /** Stop the local node and/or fork server owned by this context. */
35
+ teardown: () => Promise<void>;
36
+ }
14
37
 
15
38
  /**
16
39
  * Setup a local testing environment with either a local node or fork server
@@ -31,42 +54,65 @@ let currentLocalNode: LocalNodeManager | null = null;
31
54
  * 5. Returns runtime for reading data
32
55
  *
33
56
  * @param options Configuration options for local testing
34
- * @returns MovehatRuntime configured for local testing
57
+ * @returns LocalTestingContext with runtime and a teardown closure
35
58
  *
36
59
  * @example
37
60
  * ```typescript
38
61
  * // Local node mode (default) - Full blockchain, can deploy
39
- * const mh = await setupLocalTesting({
62
+ * const ctx = await setupLocalTesting({
40
63
  * mode: 'local-node',
41
64
  * 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)
65
+ * autoDeploy: ['counter'], // works
50
66
  * });
67
+ * // ...use ctx.runtime...
68
+ * await ctx.teardown();
51
69
  * ```
52
70
  */
53
71
  export async function setupLocalTesting(
54
72
  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
73
+ ): Promise<LocalTestingContext> {
74
+ const mode = options.mode || 'local-node';
75
+ const autoFund = options.autoFund !== false;
76
+ const defaultBalance = options.defaultBalance || 100_000_000;
60
77
  const accountLabels = options.accountLabels || ["deployer", "alice", "bob"];
61
78
 
62
- console.log(`\nšŸ”§ Setting up local testing environment...`);
63
- console.log(` Mode: ${mode}`);
64
- console.log(` Accounts: ${accountLabels.join(", ")}\n`);
79
+ logger.newline();
80
+ logger.step("Setting up local testing environment...");
81
+ logger.plain(` Mode: ${mode}`);
82
+ logger.plain(` Accounts: ${accountLabels.join(", ")}`);
83
+ logger.newline();
65
84
 
66
85
  if (mode === 'local-node') {
67
- return await setupWithLocalNode(options, accountLabels, autoFund, defaultBalance);
86
+ const { runtime, localNode } = await setupWithLocalNode(
87
+ options, accountLabels, autoFund, defaultBalance
88
+ );
89
+ return {
90
+ runtime,
91
+ localNode,
92
+ teardown: async () => {
93
+ logger.newline();
94
+ logger.step("Stopping local testing environment...");
95
+ await localNode.stop();
96
+ logger.success("Environment stopped");
97
+ logger.newline();
98
+ },
99
+ };
68
100
  } else {
69
- return await setupWithFork(options, accountLabels, autoFund, defaultBalance);
101
+ const { runtime, forkServer, forkManager } = await setupWithFork(
102
+ options, accountLabels, autoFund, defaultBalance
103
+ );
104
+ return {
105
+ runtime,
106
+ forkServer,
107
+ forkManager,
108
+ teardown: async () => {
109
+ logger.newline();
110
+ logger.step("Stopping local testing environment...");
111
+ await forkServer.stop();
112
+ logger.success("Environment stopped");
113
+ logger.newline();
114
+ },
115
+ };
70
116
  }
71
117
  }
72
118
 
@@ -78,15 +124,14 @@ async function setupWithLocalNode(
78
124
  accountLabels: readonly string[],
79
125
  autoFund: boolean,
80
126
  defaultBalance: number
81
- ): Promise<MovehatRuntime> {
127
+ ): Promise<{ runtime: MovehatRuntime; localNode: LocalNodeManager }> {
82
128
  const nodeTestDir = options.nodeTestDir || join(process.cwd(), ".movehat", "local-node");
83
- const nodeForceRestart = options.nodeForceRestart !== false; // default true
129
+ const nodeForceRestart = options.nodeForceRestart !== false;
84
130
  const nodeFaucetPort = options.nodeFaucetPort || 8081;
85
131
  const nodeApiPort = options.nodeApiPort || 8080;
86
132
  const nodeReadyPort = options.nodeReadyPort || 8070;
87
133
  const nodeSilent = options.nodeSilent ?? false;
88
134
 
89
- // 1. Start local node
90
135
  const localNode = new LocalNodeManager({
91
136
  testDir: nodeTestDir,
92
137
  forceRestart: nodeForceRestart,
@@ -96,88 +141,96 @@ async function setupWithLocalNode(
96
141
  silent: nodeSilent,
97
142
  });
98
143
 
99
- currentLocalNode = localNode;
100
-
101
144
  const nodeInfo = await localNode.start();
102
145
 
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();
146
+ // Once the node is up, every later step (account creation, funding,
147
+ // runtime init, autoDeploy) is fallible. If any of them throws we
148
+ // must stop the node we just started — otherwise the child process
149
+ // leaks and port 8080 stays bound until the OS reaps it (manifests as
150
+ // "Movement command failed" on the next test:example run).
151
+ try {
152
+ logger.step(`Generating ${accountLabels.length} test accounts...`);
153
+ const accounts = AccountManager.createBatch(accountLabels);
154
+
155
+ for (const [label, account] of Object.entries(accounts)) {
156
+ logger.plain(` ${label}: ${account.accountAddress.toString()}`);
157
+ }
158
+ logger.newline();
111
159
 
112
- // 3. Fund accounts from local faucet
113
- if (autoFund) {
114
- const accountsList = Object.values(accounts);
115
- await localNode.fundAccounts(accountsList, defaultBalance);
116
- }
160
+ if (autoFund) {
161
+ const accountsList = Object.values(accounts);
162
+ await localNode.fundAccounts(accountsList, defaultBalance);
163
+ }
117
164
 
118
- // 4. Initialize runtime pointing to local node
119
- console.log(`āš™ļø Initializing runtime for local network...`);
165
+ logger.step("Initializing runtime for local network...");
120
166
 
121
- const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
167
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
122
168
 
123
- if (!deployerPrivateKey) {
124
- throw new Error("Failed to get deployer private key");
125
- }
169
+ if (!deployerPrivateKey) {
170
+ throw new Error("Failed to get deployer private key");
171
+ }
126
172
 
127
- const runtime = await initRuntime({
128
- network: "local",
129
- configOverride: {
130
- networks: {
131
- local: {
132
- url: `${nodeInfo.rpcUrl}/v1`,
133
- chainId: "local",
173
+ const runtime = await initRuntime({
174
+ network: "local",
175
+ configOverride: {
176
+ networks: {
177
+ local: {
178
+ url: `${nodeInfo.rpcUrl}/v1`,
179
+ chainId: "local",
180
+ },
134
181
  },
182
+ accounts: [deployerPrivateKey],
135
183
  },
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;
184
+ });
185
+
186
+ logger.success("Runtime initialized");
187
+ logger.newline();
188
+
189
+ if (options.autoDeploy && options.autoDeploy.length > 0) {
190
+ logger.step(`Auto-deploying ${options.autoDeploy.length} module(s)...`);
191
+
192
+ const previousRedeploy = process.env.MH_CLI_REDEPLOY;
193
+ process.env.MH_CLI_REDEPLOY = 'true';
194
+
195
+ try {
196
+ for (const moduleName of options.autoDeploy) {
197
+ try {
198
+ logger.plain(` Deploying ${moduleName}...`);
199
+ await runtime.deployContract(moduleName);
200
+ logger.success(`${moduleName} deployed`, 2);
201
+ } catch (error) {
202
+ const msg = error instanceof Error ? error.message : String(error);
203
+ logger.error(`Failed to deploy ${moduleName}: ${msg}`, 2);
204
+ throw error;
205
+ }
206
+ }
207
+ } finally {
208
+ if (previousRedeploy === undefined) {
209
+ delete process.env.MH_CLI_REDEPLOY;
210
+ } else {
211
+ process.env.MH_CLI_REDEPLOY = previousRedeploy;
159
212
  }
160
213
  }
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
- }
214
+
215
+ logger.newline();
168
216
  }
169
217
 
170
- console.log();
218
+ logger.success("Local testing environment ready!");
219
+ logger.newline();
220
+ logger.plain(` Mode: local-node`);
221
+ logger.plain(` RPC: ${nodeInfo.rpcUrl}/v1`);
222
+ logger.plain(` Faucet: ${nodeInfo.faucetUrl}`);
223
+ logger.plain(` Accounts: ${Array.from(accountLabels).join(", ")}`);
224
+ logger.plain(` Balance per account: ${defaultBalance / 100_000_000} APT`);
225
+ logger.newline();
226
+
227
+ return { runtime, localNode };
228
+ } catch (error) {
229
+ // Best-effort cleanup. Swallow the stop() error so the original
230
+ // setup failure surfaces unchanged.
231
+ await localNode.stop().catch(() => {});
232
+ throw error;
171
233
  }
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
234
  }
182
235
 
183
236
  /**
@@ -188,148 +241,114 @@ async function setupWithFork(
188
241
  accountLabels: readonly string[],
189
242
  autoFund: boolean,
190
243
  defaultBalance: number
191
- ): Promise<MovehatRuntime> {
244
+ ): Promise<{ runtime: MovehatRuntime; forkServer: ForkServer; forkManager: ForkManager }> {
192
245
  const forkNetwork = options.forkNetwork || "testnet";
193
246
  const forkName = options.forkName || "test-local";
194
247
  const forkPort = options.forkPort || 8080;
195
- const forkResetState = options.forkResetState !== false; // default true
248
+ const forkResetState = options.forkResetState !== false;
196
249
 
197
- console.log(` Fork network: ${forkNetwork}`);
198
- console.log(` Fork name: ${forkName}`);
199
- console.log(` Server port: ${forkPort}\n`);
250
+ logger.plain(` Fork network: ${forkNetwork}`);
251
+ logger.plain(` Fork name: ${forkName}`);
252
+ logger.plain(` Server port: ${forkPort}`);
253
+ logger.newline();
200
254
 
201
- // Warn about auto-deploy in fork mode
202
255
  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`);
256
+ logger.warning("Auto-deploy doesn't work in fork mode (read-only).");
257
+ logger.plain(" Switch to 'local-node' mode for deployment support.");
258
+ logger.newline();
205
259
  }
206
260
 
207
- // 1. Setup fork
208
261
  const forkPath = join(process.cwd(), ".movehat", "forks", forkName);
209
262
  const forkManager = new ForkManager(forkPath);
210
- currentForkManager = forkManager;
211
263
 
212
264
  const forkExists = existsSync(join(forkPath, "metadata.json"));
213
265
 
214
266
  if (!forkExists) {
215
- console.log(`šŸ“ø Creating fork from ${forkNetwork}...`);
267
+ logger.step(`Creating fork from ${forkNetwork}...`);
216
268
  const testnetRpc = "https://testnet.movementnetwork.xyz/v1";
217
- await forkManager.initialize(testnetRpc, forkNetwork);
218
- console.log(`āœ“ Fork created at ${forkPath}\n`);
269
+ await forkManager.initialize(testnetRpc, forkNetwork, options.forkApiKey);
270
+ logger.success(`Fork created at ${forkPath}`);
271
+ logger.newline();
219
272
  } else {
220
- console.log(`āœ“ Loading existing fork from ${forkPath}`);
273
+ logger.success(`Loading existing fork from ${forkPath}`);
274
+ // setApiKey BEFORE load() so the reconstructed MovementApiClient
275
+ // picks up the header. load() rebuilds the client using current
276
+ // apiKey state.
277
+ if (options.forkApiKey !== undefined) {
278
+ forkManager.setApiKey(options.forkApiKey);
279
+ }
221
280
  forkManager.load();
222
281
 
223
282
  if (forkResetState) {
224
- console.log(`šŸ”„ Resetting fork state...`);
283
+ logger.step("Resetting fork state...");
225
284
  await forkManager.resetState();
226
285
  }
227
286
 
228
- console.log();
287
+ logger.newline();
229
288
  }
230
289
 
231
- // 2. Start fork server
232
- console.log(`šŸš€ Starting fork server on port ${forkPort}...`);
290
+ logger.step(`Starting fork server on port ${forkPort}...`);
233
291
  const forkServer = new ForkServer(forkPath, forkPort);
234
- currentForkServer = forkServer;
235
292
 
236
293
  await forkServer.start();
237
- console.log(`āœ“ Fork server running at http://localhost:${forkPort}\n`);
294
+ logger.success(`Fork server running at http://localhost:${forkPort}`);
295
+ logger.newline();
238
296
 
239
- await new Promise((resolve) => setTimeout(resolve, 500));
297
+ // Same cleanup-on-failure pattern as setupWithLocalNode: once the
298
+ // fork server is listening, any later throw must stop the server or
299
+ // we leak the listener.
300
+ try {
301
+ await new Promise((resolve) => setTimeout(resolve, 500));
240
302
 
241
- // 3. Generate accounts
242
- console.log(`šŸ‘„ Generating ${accountLabels.length} test accounts...`);
243
- const accounts = AccountManager.createBatch(accountLabels);
303
+ logger.step(`Generating ${accountLabels.length} test accounts...`);
304
+ const accounts = AccountManager.createBatch(accountLabels);
244
305
 
245
- for (const [label, account] of Object.entries(accounts)) {
246
- console.log(` ${label}: ${account.accountAddress.toString()}`);
247
- }
248
- console.log();
306
+ for (const [label, account] of Object.entries(accounts)) {
307
+ logger.plain(` ${label}: ${account.accountAddress.toString()}`);
308
+ }
309
+ logger.newline();
249
310
 
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
- }
311
+ if (autoFund) {
312
+ const addresses = Object.values(accounts).map((acc) =>
313
+ acc.accountAddress.toString()
314
+ );
315
+ await forkManager.fundMultipleAccounts(addresses, defaultBalance);
316
+ }
257
317
 
258
- // 5. Initialize runtime pointing to fork
259
- console.log(`āš™ļø Initializing runtime for local network...`);
318
+ logger.step("Initializing runtime for local network...");
260
319
 
261
- const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
320
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
262
321
 
263
- if (!deployerPrivateKey) {
264
- throw new Error("Failed to get deployer private key");
265
- }
322
+ if (!deployerPrivateKey) {
323
+ throw new Error("Failed to get deployer private key");
324
+ }
266
325
 
267
- const runtime = await initRuntime({
268
- network: "local",
269
- configOverride: {
270
- networks: {
271
- local: {
272
- url: `http://localhost:${forkPort}/v1`,
273
- chainId: "local",
326
+ const runtime = await initRuntime({
327
+ network: "local",
328
+ configOverride: {
329
+ networks: {
330
+ local: {
331
+ url: `http://localhost:${forkPort}/v1`,
332
+ chainId: "local",
333
+ },
274
334
  },
335
+ accounts: [deployerPrivateKey],
275
336
  },
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");
337
+ });
338
+
339
+ logger.success("Runtime initialized");
340
+ logger.newline();
341
+ logger.success("Local testing environment ready!");
342
+ logger.newline();
343
+ logger.plain(` Mode: fork (read-only)`);
344
+ logger.plain(` RPC: http://localhost:${forkPort}/v1`);
345
+ logger.plain(` Accounts: ${Array.from(accountLabels).join(", ")}`);
346
+ logger.plain(` Balance per account: ${defaultBalance / 100_000_000} APT`);
347
+ logger.newline();
348
+
349
+ return { runtime, forkServer, forkManager };
350
+ } catch (error) {
351
+ await forkServer.stop().catch(() => {});
352
+ throw error;
334
353
  }
335
354
  }