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
@@ -0,0 +1,311 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { mkdtempSync, readFileSync, rmSync, utimesSync, writeFileSync, } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { loadUserConfig, resolveNetworkConfig, _resetConfigCache } from "../config.js";
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ const CONFIG_A = `export default {
9
+ defaultNetwork: "testnet",
10
+ networks: {
11
+ testnet: { url: "https://testnet.movementnetwork.xyz/v1", chainId: "testnet" }
12
+ }
13
+ };
14
+ `;
15
+ const CONFIG_B = `export default {
16
+ defaultNetwork: "mainnet",
17
+ networks: {
18
+ mainnet: { url: "https://mainnet.movementnetwork.xyz/v1", chainId: "mainnet" }
19
+ }
20
+ };
21
+ `;
22
+ describe("loadUserConfig — mtime cache (#81, #62)", () => {
23
+ let tmpCwd;
24
+ let origCwd;
25
+ beforeEach(() => {
26
+ _resetConfigCache();
27
+ origCwd = process.cwd();
28
+ tmpCwd = mkdtempSync(join(tmpdir(), "movehat-config-test-"));
29
+ process.chdir(tmpCwd);
30
+ });
31
+ afterEach(() => {
32
+ process.chdir(origCwd);
33
+ rmSync(tmpCwd, { recursive: true, force: true });
34
+ });
35
+ it("first call reads from disk", async () => {
36
+ writeFileSync(join(tmpCwd, "movehat.config.js"), CONFIG_A);
37
+ const config = await loadUserConfig();
38
+ expect(config.defaultNetwork).toBe("testnet");
39
+ expect(config.networks).toHaveProperty("testnet");
40
+ });
41
+ it("second call returns the same parsed object (cache hit)", async () => {
42
+ writeFileSync(join(tmpCwd, "movehat.config.js"), CONFIG_A);
43
+ const first = await loadUserConfig();
44
+ const second = await loadUserConfig();
45
+ // Reference equality proves we returned the cached object rather
46
+ // than re-importing and getting a structurally-equal copy.
47
+ expect(second).toBe(first);
48
+ });
49
+ it("mtime change invalidates the cache", async () => {
50
+ const path = join(tmpCwd, "movehat.config.js");
51
+ writeFileSync(path, CONFIG_A);
52
+ const first = await loadUserConfig();
53
+ expect(first.defaultNetwork).toBe("testnet");
54
+ // Rewrite + force an mtime far in the future so we don't depend on
55
+ // filesystem mtime resolution.
56
+ writeFileSync(path, CONFIG_B);
57
+ const future = new Date(Date.now() + 60_000);
58
+ utimesSync(path, future, future);
59
+ const second = await loadUserConfig();
60
+ expect(second).not.toBe(first);
61
+ expect(second.defaultNetwork).toBe("mainnet");
62
+ expect(second.networks).toHaveProperty("mainnet");
63
+ });
64
+ it("different cwds keep separate cache entries", async () => {
65
+ writeFileSync(join(tmpCwd, "movehat.config.js"), CONFIG_A);
66
+ const fromA = await loadUserConfig();
67
+ expect(fromA.defaultNetwork).toBe("testnet");
68
+ const tmpCwdB = mkdtempSync(join(tmpdir(), "movehat-config-test-b-"));
69
+ try {
70
+ process.chdir(tmpCwdB);
71
+ writeFileSync(join(tmpCwdB, "movehat.config.js"), CONFIG_B);
72
+ const fromB = await loadUserConfig();
73
+ expect(fromB.defaultNetwork).toBe("mainnet");
74
+ // Switching back to A returns A's cached entry, not B's — proves
75
+ // the cache is keyed by absolute path, not by something process-
76
+ // scoped like "the last value loaded".
77
+ process.chdir(tmpCwd);
78
+ const fromAagain = await loadUserConfig();
79
+ expect(fromAagain).toBe(fromA);
80
+ expect(fromAagain.defaultNetwork).toBe("testnet");
81
+ }
82
+ finally {
83
+ process.chdir(tmpCwd);
84
+ rmSync(tmpCwdB, { recursive: true, force: true });
85
+ }
86
+ });
87
+ it("source file no longer contains the `?t=` cache-bust (#62 regression guard)", () => {
88
+ const configSrc = readFileSync(join(__dirname, "..", "config.ts"), "utf-8");
89
+ expect(configSrc).not.toMatch(/\?t=['"]\s*\+\s*Date\.now/);
90
+ });
91
+ // Note: there's no direct behavioral test for `_resetConfigCache()`.
92
+ // The function is exercised in `beforeEach` above — if it didn't
93
+ // actually clear the in-memory map, tests 3 and 4 would leak state
94
+ // between each other and start failing. Its "test" is therefore the
95
+ // rest of this suite continuing to pass.
96
+ it("throws when no movehat.config.{ts,js} is present", async () => {
97
+ // tmpCwd is empty (no config written) — should reject with the
98
+ // 'Configuration file not found' message.
99
+ await expect(loadUserConfig()).rejects.toThrow(/Configuration file not found/);
100
+ });
101
+ it("rejects a config with empty `networks`", async () => {
102
+ writeFileSync(join(tmpCwd, "movehat.config.js"), `export default { networks: {} };
103
+ `);
104
+ await expect(loadUserConfig()).rejects.toThrow(/No networks defined/);
105
+ });
106
+ });
107
+ const TEST_KEY = "0x0000000000000000000000000000000000000000000000000000000000000001";
108
+ const baseUserConfig = (networks) => ({
109
+ networks,
110
+ });
111
+ describe("resolveNetworkConfig", () => {
112
+ const envSnapshot = {};
113
+ beforeEach(() => {
114
+ envSnapshot.PRIVATE_KEY = process.env.PRIVATE_KEY;
115
+ envSnapshot.MH_CLI_NETWORK = process.env.MH_CLI_NETWORK;
116
+ envSnapshot.MH_DEFAULT_NETWORK = process.env.MH_DEFAULT_NETWORK;
117
+ delete process.env.PRIVATE_KEY;
118
+ delete process.env.MH_CLI_NETWORK;
119
+ delete process.env.MH_DEFAULT_NETWORK;
120
+ });
121
+ afterEach(() => {
122
+ for (const [key, value] of Object.entries(envSnapshot)) {
123
+ if (value === undefined) {
124
+ delete process.env[key];
125
+ }
126
+ else {
127
+ process.env[key] = value;
128
+ }
129
+ }
130
+ });
131
+ it("uses the network passed as the argument over defaultNetwork", async () => {
132
+ const user = baseUserConfig({
133
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
134
+ b: { url: "https://b.example.com/v1", chainId: "b", accounts: [TEST_KEY] },
135
+ });
136
+ user.defaultNetwork = "a";
137
+ const resolved = await resolveNetworkConfig(user, "b");
138
+ expect(resolved.network).toBe("b");
139
+ expect(resolved.rpc).toBe("https://b.example.com/v1");
140
+ });
141
+ it("MH_CLI_NETWORK env var overrides defaultNetwork when no arg is passed", async () => {
142
+ process.env.MH_CLI_NETWORK = "b";
143
+ const user = baseUserConfig({
144
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
145
+ b: { url: "https://b.example.com/v1", chainId: "b", accounts: [TEST_KEY] },
146
+ });
147
+ user.defaultNetwork = "a";
148
+ const resolved = await resolveNetworkConfig(user);
149
+ expect(resolved.network).toBe("b");
150
+ });
151
+ it("MH_DEFAULT_NETWORK env var is the next-lower priority after MH_CLI_NETWORK", async () => {
152
+ process.env.MH_DEFAULT_NETWORK = "b";
153
+ const user = baseUserConfig({
154
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
155
+ b: { url: "https://b.example.com/v1", chainId: "b", accounts: [TEST_KEY] },
156
+ });
157
+ user.defaultNetwork = "a";
158
+ const resolved = await resolveNetworkConfig(user);
159
+ expect(resolved.network).toBe("b");
160
+ });
161
+ it("auto-generates a testnet config when 'testnet' is missing from user networks", async () => {
162
+ const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
163
+ const user = baseUserConfig({
164
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
165
+ });
166
+ const resolved = await resolveNetworkConfig(user, "testnet");
167
+ expect(resolved.network).toBe("testnet");
168
+ expect(resolved.rpc).toBe("https://testnet.movementnetwork.xyz/v1");
169
+ logSpy.mockRestore();
170
+ });
171
+ it("auto-generates a local config when 'local' is missing from user networks", async () => {
172
+ const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
173
+ const user = baseUserConfig({
174
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
175
+ });
176
+ const resolved = await resolveNetworkConfig(user, "local");
177
+ expect(resolved.network).toBe("local");
178
+ expect(resolved.rpc).toBe("http://localhost:8080/v1");
179
+ logSpy.mockRestore();
180
+ });
181
+ it("throws on a completely unknown network with a clear list of available ones", async () => {
182
+ const user = baseUserConfig({
183
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
184
+ });
185
+ await expect(resolveNetworkConfig(user, "nonexistent")).rejects.toThrow(/Network 'nonexistent' not found/);
186
+ });
187
+ it("falls back to PRIVATE_KEY env var when no accounts are configured anywhere", async () => {
188
+ process.env.PRIVATE_KEY = TEST_KEY;
189
+ const user = baseUserConfig({
190
+ a: { url: "https://a.example.com/v1", chainId: "a" },
191
+ });
192
+ const resolved = await resolveNetworkConfig(user, "a");
193
+ expect(resolved.privateKey).toBe(TEST_KEY);
194
+ expect(resolved.allAccounts).toEqual([TEST_KEY]);
195
+ });
196
+ it("auto-generates a deterministic test key for testnet when no accounts are anywhere", async () => {
197
+ const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
198
+ const user = baseUserConfig({
199
+ testnet: { url: "https://testnet.movementnetwork.xyz/v1", chainId: "testnet" },
200
+ });
201
+ const resolved = await resolveNetworkConfig(user, "testnet");
202
+ // The auto-generated key is the canonical Hardhat-style test key.
203
+ expect(resolved.privateKey).toBe("0x0000000000000000000000000000000000000000000000000000000000000001");
204
+ logSpy.mockRestore();
205
+ });
206
+ it("rejects a non-testnet/local network with no accounts (security gate)", async () => {
207
+ const user = baseUserConfig({
208
+ mainnet: { url: "https://mainnet.movementnetwork.xyz/v1", chainId: "mainnet" },
209
+ });
210
+ await expect(resolveNetworkConfig(user, "mainnet")).rejects.toThrow(/requires explicit account configuration/);
211
+ });
212
+ it("prefers network-specific accounts over global ones", async () => {
213
+ const user = {
214
+ accounts: ["0xglobal"],
215
+ networks: {
216
+ a: {
217
+ url: "https://a.example.com/v1",
218
+ chainId: "a",
219
+ accounts: [TEST_KEY],
220
+ },
221
+ },
222
+ };
223
+ const resolved = await resolveNetworkConfig(user, "a");
224
+ expect(resolved.privateKey).toBe(TEST_KEY);
225
+ });
226
+ it("falls back to global accounts when network has none", async () => {
227
+ const user = {
228
+ accounts: [TEST_KEY],
229
+ networks: {
230
+ a: { url: "https://a.example.com/v1", chainId: "a" },
231
+ },
232
+ };
233
+ const resolved = await resolveNetworkConfig(user, "a");
234
+ expect(resolved.privateKey).toBe(TEST_KEY);
235
+ });
236
+ it("merges named addresses, with network-specific overriding global", async () => {
237
+ const user = {
238
+ namedAddresses: { foo: "0xglobal", shared: "0xglobal" },
239
+ networks: {
240
+ a: {
241
+ url: "https://a.example.com/v1",
242
+ chainId: "a",
243
+ accounts: [TEST_KEY],
244
+ namedAddresses: { bar: "0xnet", shared: "0xnet" },
245
+ },
246
+ },
247
+ };
248
+ const resolved = await resolveNetworkConfig(user, "a");
249
+ expect(resolved.namedAddresses).toEqual({
250
+ foo: "0xglobal",
251
+ bar: "0xnet",
252
+ shared: "0xnet",
253
+ });
254
+ });
255
+ it("derives the on-chain account address from the resolved key", async () => {
256
+ const user = baseUserConfig({
257
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
258
+ });
259
+ const resolved = await resolveNetworkConfig(user, "a");
260
+ // The canonical Hardhat-style 0x...01 key derives to a well-known address.
261
+ expect(resolved.account).toMatch(/^0x[a-f0-9]+$/i);
262
+ expect(resolved.account.length).toBeGreaterThan(2);
263
+ });
264
+ it("returns account='' and warns when the configured key is malformed", async () => {
265
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
266
+ const user = baseUserConfig({
267
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: ["not-a-real-key"] },
268
+ });
269
+ const resolved = await resolveNetworkConfig(user, "a");
270
+ expect(resolved.account).toBe("");
271
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringMatching(/Could not derive account address/));
272
+ warnSpy.mockRestore();
273
+ });
274
+ it("strips the 'ed25519-priv-' prefix when deriving the account address", async () => {
275
+ const user = baseUserConfig({
276
+ a: {
277
+ url: "https://a.example.com/v1",
278
+ chainId: "a",
279
+ accounts: [`ed25519-priv-${TEST_KEY}`],
280
+ },
281
+ });
282
+ const resolved = await resolveNetworkConfig(user, "a");
283
+ // Same key, prefixed and unprefixed, should derive the same address.
284
+ const bareResolved = await resolveNetworkConfig(baseUserConfig({
285
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
286
+ }), "a");
287
+ expect(resolved.account).toBe(bareResolved.account);
288
+ });
289
+ it("uses profile='default' when networkConfig has no profile", async () => {
290
+ const user = baseUserConfig({
291
+ a: { url: "https://a.example.com/v1", chainId: "a", accounts: [TEST_KEY] },
292
+ });
293
+ const resolved = await resolveNetworkConfig(user, "a");
294
+ expect(resolved.profile).toBe("default");
295
+ });
296
+ it("respects networkConfig.profile when set", async () => {
297
+ const user = {
298
+ networks: {
299
+ a: {
300
+ url: "https://a.example.com/v1",
301
+ chainId: "a",
302
+ accounts: [TEST_KEY],
303
+ profile: "custom-profile",
304
+ },
305
+ },
306
+ };
307
+ const resolved = await resolveNetworkConfig(user, "a");
308
+ expect(resolved.profile).toBe("custom-profile");
309
+ });
310
+ });
311
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deployments.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/deployments.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,201 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { vol, fs as memfsFs } from 'memfs';
3
+ // Mock fs module
4
+ vi.mock('fs', () => ({
5
+ default: memfsFs,
6
+ ...memfsFs,
7
+ }));
8
+ // Import after mock
9
+ const { validateSafeName, saveDeployment, loadDeployment, getAllDeployments, getDeployedAddress, } = await import('../deployments.js');
10
+ describe('validateSafeName', () => {
11
+ it('should accept valid names', () => {
12
+ expect(() => validateSafeName('testnet', 'network')).not.toThrow();
13
+ expect(() => validateSafeName('counter', 'module')).not.toThrow();
14
+ expect(() => validateSafeName('my-module', 'module')).not.toThrow();
15
+ expect(() => validateSafeName('module_v2', 'module')).not.toThrow();
16
+ expect(() => validateSafeName('Module123', 'module')).not.toThrow();
17
+ });
18
+ it('should reject path traversal attempts', () => {
19
+ expect(() => validateSafeName('../etc/passwd', 'network')).toThrow('Path traversal');
20
+ expect(() => validateSafeName('..\\windows', 'network')).toThrow('Path traversal');
21
+ expect(() => validateSafeName('foo/../bar', 'module')).toThrow('Path traversal');
22
+ });
23
+ it('should reject slashes', () => {
24
+ expect(() => validateSafeName('path/to/file', 'network')).toThrow('Path traversal');
25
+ expect(() => validateSafeName('path\\to\\file', 'network')).toThrow('Path traversal');
26
+ });
27
+ it('should reject special characters', () => {
28
+ expect(() => validateSafeName('test;rm', 'module')).toThrow('Only alphanumeric');
29
+ expect(() => validateSafeName('test$var', 'module')).toThrow('Only alphanumeric');
30
+ expect(() => validateSafeName('test space', 'module')).toThrow('Only alphanumeric');
31
+ expect(() => validateSafeName('test.module', 'module')).toThrow('Only alphanumeric');
32
+ });
33
+ it('should reject hidden files (starting with dot)', () => {
34
+ expect(() => validateSafeName('.hidden', 'network')).toThrow('cannot start with a dot');
35
+ expect(() => validateSafeName('.gitignore', 'module')).toThrow('cannot start with a dot');
36
+ });
37
+ it('should reject empty strings', () => {
38
+ expect(() => validateSafeName('', 'network')).toThrow('must be a non-empty string');
39
+ });
40
+ it('should reject non-string input', () => {
41
+ expect(() => validateSafeName(null, 'network')).toThrow('must be a non-empty string');
42
+ expect(() => validateSafeName(undefined, 'module')).toThrow('must be a non-empty string');
43
+ });
44
+ it('should use correct type in error messages', () => {
45
+ expect(() => validateSafeName('bad name', 'network')).toThrow('Invalid network name');
46
+ expect(() => validateSafeName('bad name', 'module')).toThrow('Invalid module name');
47
+ });
48
+ });
49
+ describe('saveDeployment and loadDeployment', () => {
50
+ beforeEach(() => {
51
+ vol.reset();
52
+ // Create initial directory structure
53
+ vol.fromJSON({
54
+ '/project/.gitkeep': '',
55
+ });
56
+ // Mock process.cwd
57
+ vi.spyOn(process, 'cwd').mockReturnValue('/project');
58
+ });
59
+ afterEach(() => {
60
+ vol.reset();
61
+ vi.restoreAllMocks();
62
+ });
63
+ it('should save and load deployment', () => {
64
+ const deployment = {
65
+ address: '0x1234',
66
+ moduleName: 'counter',
67
+ network: 'testnet',
68
+ deployer: '0xabcd',
69
+ timestamp: 1704985623564,
70
+ txHash: '0x5678',
71
+ };
72
+ // Mock console.log to suppress output
73
+ vi.spyOn(console, 'log').mockImplementation(() => { });
74
+ saveDeployment(deployment);
75
+ const loaded = loadDeployment('testnet', 'counter');
76
+ expect(loaded).toEqual(deployment);
77
+ });
78
+ it('should return null for non-existent deployment', () => {
79
+ const loaded = loadDeployment('testnet', 'nonexistent');
80
+ expect(loaded).toBeNull();
81
+ });
82
+ it('should create directories if they do not exist', () => {
83
+ const deployment = {
84
+ address: '0x1234',
85
+ moduleName: 'token',
86
+ network: 'mainnet',
87
+ deployer: '0xabcd',
88
+ timestamp: Date.now(),
89
+ };
90
+ vi.spyOn(console, 'log').mockImplementation(() => { });
91
+ saveDeployment(deployment);
92
+ expect(vol.existsSync('/project/deployments')).toBe(true);
93
+ expect(vol.existsSync('/project/deployments/mainnet')).toBe(true);
94
+ });
95
+ it('should reject invalid network names when saving', () => {
96
+ const deployment = {
97
+ address: '0x1234',
98
+ moduleName: 'counter',
99
+ network: '../etc',
100
+ deployer: '0xabcd',
101
+ timestamp: Date.now(),
102
+ };
103
+ expect(() => saveDeployment(deployment)).toThrow('Path traversal');
104
+ });
105
+ it('should reject invalid module names when saving', () => {
106
+ const deployment = {
107
+ address: '0x1234',
108
+ moduleName: 'counter;rm -rf',
109
+ network: 'testnet',
110
+ deployer: '0xabcd',
111
+ timestamp: Date.now(),
112
+ };
113
+ expect(() => saveDeployment(deployment)).toThrow('Only alphanumeric');
114
+ });
115
+ });
116
+ describe('getAllDeployments', () => {
117
+ beforeEach(() => {
118
+ vol.reset();
119
+ vi.spyOn(process, 'cwd').mockReturnValue('/project');
120
+ });
121
+ afterEach(() => {
122
+ vol.reset();
123
+ vi.restoreAllMocks();
124
+ });
125
+ it('should return empty object for non-existent network', () => {
126
+ vol.fromJSON({
127
+ '/project/.gitkeep': '',
128
+ });
129
+ const deployments = getAllDeployments('nonexistent');
130
+ expect(deployments).toEqual({});
131
+ });
132
+ it('should return all deployments for a network', () => {
133
+ vol.fromJSON({
134
+ '/project/deployments/testnet/counter.json': JSON.stringify({
135
+ address: '0x1',
136
+ moduleName: 'counter',
137
+ network: 'testnet',
138
+ deployer: '0xd1',
139
+ timestamp: 1000,
140
+ }),
141
+ '/project/deployments/testnet/token.json': JSON.stringify({
142
+ address: '0x2',
143
+ moduleName: 'token',
144
+ network: 'testnet',
145
+ deployer: '0xd2',
146
+ timestamp: 2000,
147
+ }),
148
+ });
149
+ const deployments = getAllDeployments('testnet');
150
+ expect(Object.keys(deployments)).toHaveLength(2);
151
+ expect(deployments['counter']?.address).toBe('0x1');
152
+ expect(deployments['token']?.address).toBe('0x2');
153
+ });
154
+ it('should ignore non-JSON files', () => {
155
+ vol.fromJSON({
156
+ '/project/deployments/testnet/counter.json': JSON.stringify({
157
+ address: '0x1',
158
+ moduleName: 'counter',
159
+ network: 'testnet',
160
+ deployer: '0xd1',
161
+ timestamp: 1000,
162
+ }),
163
+ '/project/deployments/testnet/README.md': '# Readme',
164
+ '/project/deployments/testnet/.gitkeep': '',
165
+ });
166
+ const deployments = getAllDeployments('testnet');
167
+ expect(Object.keys(deployments)).toHaveLength(1);
168
+ expect(deployments['counter']).toBeDefined();
169
+ });
170
+ });
171
+ describe('getDeployedAddress', () => {
172
+ beforeEach(() => {
173
+ vol.reset();
174
+ vi.spyOn(process, 'cwd').mockReturnValue('/project');
175
+ });
176
+ afterEach(() => {
177
+ vol.reset();
178
+ vi.restoreAllMocks();
179
+ });
180
+ it('should return address for existing deployment', () => {
181
+ vol.fromJSON({
182
+ '/project/deployments/testnet/counter.json': JSON.stringify({
183
+ address: '0x1234abcd',
184
+ moduleName: 'counter',
185
+ network: 'testnet',
186
+ deployer: '0xd1',
187
+ timestamp: 1000,
188
+ }),
189
+ });
190
+ const address = getDeployedAddress('testnet', 'counter');
191
+ expect(address).toBe('0x1234abcd');
192
+ });
193
+ it('should return null for non-existent deployment', () => {
194
+ vol.fromJSON({
195
+ '/project/.gitkeep': '',
196
+ });
197
+ const address = getDeployedAddress('testnet', 'nonexistent');
198
+ expect(address).toBeNull();
199
+ });
200
+ });
201
+ //# sourceMappingURL=deployments.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/deployments.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/shell.test.ts"],"names":[],"mappings":""}