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
@@ -1,104 +1,102 @@
1
1
  // @ts-nocheck - This is a template file, dependencies are installed in user projects
2
2
  import { describe, it, before, after } from "mocha";
3
3
  import { expect } from "chai";
4
- import { setupTestFixture, teardownTestFixture, type TestFixture } from "movehat/helpers";
4
+ import { Harness, AccountManager } from "movehat";
5
5
 
6
6
  describe("Counter Contract", () => {
7
- let fixture: TestFixture<'counter'>;
7
+ let harness;
8
+ let counter;
9
+ let deployer, alice, bob;
8
10
 
9
11
  before(async function () {
10
12
  this.timeout(60000); // Allow time for local node startup + deployment
11
13
 
12
- // Setup local testing environment with auto-deployment
13
- // This will:
14
- // 1. Start a local Movement blockchain node
15
- // 2. Generate and fund test accounts from local faucet
16
- // 3. Auto-deploy the counter module
17
- // 4. Return everything ready to use
14
+ // Hardhat-style Harness primary public API since M2.
15
+ // createLocal spins up a Movement local node, funds the labeled
16
+ // accounts from the local faucet, and (via autoDeploy) builds +
17
+ // publishes the named modules so they're ready to use.
18
18
  //
19
- // By default uses 'local-node' mode (full blockchain)
20
- // For faster tests on existing state, pass { mode: 'fork' }
21
- //
22
- // Note: Use 'as const' for type inference
23
- fixture = await setupTestFixture(['counter'] as const, ['alice', 'bob']);
19
+ // The setupTestFixture helper still works if you prefer the older
20
+ // pattern; see `import { setupTestFixture } from "movehat/helpers"`.
21
+ harness = await Harness.createLocal({
22
+ accountLabels: ["deployer", "alice", "bob"],
23
+ autoDeploy: ["counter"],
24
+ });
25
+
26
+ const labeled = AccountManager.getLabeledAccounts();
27
+ deployer = labeled.deployer;
28
+ alice = labeled.alice;
29
+ bob = labeled.bob;
30
+
31
+ const counterAddr = harness.runtime.getDeploymentAddress("counter");
32
+ counter = harness.runtime.getContract(counterAddr, "counter");
24
33
 
25
34
  console.log(`\n✅ Testing on local blockchain`);
26
- console.log(` Deployer: ${fixture.accounts.deployer.accountAddress.toString()}`);
27
- console.log(` Alice: ${fixture.accounts.alice.accountAddress.toString()}`);
28
- console.log(` Bob: ${fixture.accounts.bob.accountAddress.toString()}\n`);
35
+ console.log(` Deployer: ${deployer.accountAddress.toString()}`);
36
+ console.log(` Alice: ${alice.accountAddress.toString()}`);
37
+ console.log(` Bob: ${bob.accountAddress.toString()}\n`);
29
38
  });
30
39
 
31
40
  describe("Counter functionality", () => {
32
- it("should initialize with value 0", async () => {
33
- const counter = fixture.contracts.counter; // Type-safe, no `!` needed
34
- const deployer = fixture.accounts.deployer;
41
+ it("should initialize counter for deployer", async () => {
42
+ // Initialize counter for deployer (required before get/increment)
43
+ const tx = await counter.call(deployer, "init", []);
44
+ console.log(` Init transaction: ${tx.hash}`);
35
45
 
36
- // Read counter value (returns string from view function)
37
- const value = await counter.view<string>("get", [
38
- deployer.accountAddress.toString()
39
- ]);
46
+ // Read counter value via harness.runViewFunction (new in M2)
47
+ const [value] = await harness.runViewFunction({
48
+ function: `${counter.moduleAddress}::counter::get`,
49
+ functionArguments: [deployer.accountAddress.toString()],
50
+ });
40
51
 
41
52
  console.log(` Counter value: ${value}`);
42
-
43
- // Assert the counter is 0 (note: values from view are strings)
44
53
  expect(parseInt(value)).to.equal(0);
45
54
  });
46
55
 
47
56
  it("should increment counter", async () => {
48
- const counter = fixture.contracts.counter;
49
- const deployer = fixture.accounts.deployer;
50
-
51
- // Increment the counter
52
57
  const tx = await counter.call(deployer, "increment", []);
53
58
  console.log(` Transaction: ${tx.hash}`);
54
59
 
55
- // Read new value
60
+ // counter.view is the shorter form when you already have the contract.
56
61
  const value = await counter.view<string>("get", [
57
- deployer.accountAddress.toString()
62
+ deployer.accountAddress.toString(),
58
63
  ]);
59
64
 
60
65
  console.log(` New counter value: ${value}`);
61
-
62
- // Should be 1 now
63
66
  expect(parseInt(value)).to.equal(1);
64
67
  });
65
68
 
66
- it("alice can also increment counter", async () => {
67
- const counter = fixture.contracts.counter;
68
- const alice = fixture.accounts.alice;
69
+ it("alice can initialize and increment her counter", async () => {
70
+ const initTx = await counter.call(alice, "init", []);
71
+ console.log(` Alice init transaction: ${initTx.hash}`);
69
72
 
70
- // Alice increments her own counter
71
73
  const tx = await counter.call(alice, "increment", []);
72
- console.log(` Alice's transaction: ${tx.hash}`);
74
+ console.log(` Alice's increment transaction: ${tx.hash}`);
73
75
 
74
- // Read counter value for Alice (each user has their own counter)
75
76
  const aliceValue = await counter.view<string>("get", [
76
- alice.accountAddress.toString()
77
+ alice.accountAddress.toString(),
77
78
  ]);
78
79
 
79
80
  console.log(` Alice's counter value: ${aliceValue}`);
80
81
  expect(parseInt(aliceValue)).to.equal(1);
81
82
 
82
- // Deployer's counter should still be 1 (unchanged)
83
83
  const deployerValue = await counter.view<string>("get", [
84
- fixture.accounts.deployer.accountAddress.toString()
84
+ deployer.accountAddress.toString(),
85
85
  ]);
86
86
 
87
87
  console.log(` Deployer's counter value: ${deployerValue}`);
88
88
  expect(parseInt(deployerValue)).to.equal(1);
89
89
  });
90
90
 
91
- it("bob can also increment the counter", async () => {
92
- const counter = fixture.contracts.counter;
93
- const bob = fixture.accounts.bob;
91
+ it("bob can initialize and increment his counter", async () => {
92
+ const initTx = await counter.call(bob, "init", []);
93
+ console.log(` Bob init transaction: ${initTx.hash}`);
94
94
 
95
- // Bob increments his own counter
96
95
  const tx = await counter.call(bob, "increment", []);
97
- console.log(` Bob's transaction: ${tx.hash}`);
96
+ console.log(` Bob's increment transaction: ${tx.hash}`);
98
97
 
99
- // Read counter value for Bob (each user has their own counter)
100
98
  const bobValue = await counter.view<string>("get", [
101
- bob.accountAddress.toString()
99
+ bob.accountAddress.toString(),
102
100
  ]);
103
101
 
104
102
  console.log(` Bob's counter value: ${bobValue}`);
@@ -107,7 +105,9 @@ describe("Counter Contract", () => {
107
105
  });
108
106
 
109
107
  after(async () => {
110
- // Cleanup: Stop local node and clear account pool
111
- await teardownTestFixture();
108
+ // harness.cleanup() stops the local node and poisons the harness —
109
+ // any further method call (other than cleanup itself) throws
110
+ // HarnessDisposedError synchronously.
111
+ await harness.cleanup();
112
112
  });
113
113
  });
@@ -50,16 +50,10 @@ declare module 'movehat' {
50
50
  createAccount: () => Account;
51
51
  getAccount: (privateKey: string) => Account;
52
52
  getAccountByIndex: (index: number) => Account;
53
- switchNetwork: (networkName: string) => Promise<void>;
53
+ switchNetwork: (networkName: string) => Promise<MovehatRuntime>;
54
54
  }
55
55
 
56
- export function getMovehat(): Promise<MovehatRuntime>;
57
56
  export function initRuntime(configOverride?: Partial<MovehatConfig>): Promise<MovehatRuntime>;
58
- export function getRuntime(): MovehatRuntime;
59
-
60
- export const mh: {
61
- readonly runtime: MovehatRuntime;
62
- };
63
57
  }
64
58
 
65
59
  declare module 'movehat/helpers' {
@@ -68,12 +62,15 @@ declare module 'movehat/helpers' {
68
62
  export interface TestEnvironment {
69
63
  aptos: Aptos;
70
64
  account: Account;
71
- config: any;
65
+ config: import('movehat').MovehatConfig;
72
66
  }
73
67
 
74
68
  export class MoveContract {
75
69
  constructor(aptos: Aptos, address: string, moduleName: string);
76
- call(sender: Account, functionName: string, args: any[]): Promise<any>;
70
+ // args: any[] mirrors the runtime declaration — Move entry-function
71
+ // arguments are heterogeneous primitives validated by the Aptos SDK
72
+ // at submit time.
73
+ call(sender: Account, functionName: string, args: any[]): Promise<TransactionResult>;
77
74
  view<T>(functionName: string, args: any[]): Promise<T>;
78
75
  }
79
76
 
@@ -51,6 +51,14 @@ export interface LocalTestOptions {
51
51
  forkName?: string;
52
52
  forkPort?: number;
53
53
  forkResetState?: boolean;
54
+ /**
55
+ * Optional API key sent as `Authorization: Bearer <key>` on every
56
+ * outgoing Movement API request made by the fork's
57
+ * `MovementApiClient`. Use for rate-limited public endpoints or
58
+ * auth-gated nodes. The key stays in process memory only — not
59
+ * persisted to the fork's on-disk metadata.
60
+ */
61
+ forkApiKey?: string;
54
62
  autoFund?: boolean;
55
63
  defaultBalance?: number;
56
64
  autoDeploy?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC"}
@@ -32,6 +32,12 @@ export interface AccountData {
32
32
  }
33
33
  export interface AccountResource {
34
34
  type: string;
35
- data: any;
35
+ /**
36
+ * Move resource payload — structurally a JSON-shaped object whose
37
+ * schema depends on the resource type (CoinStore, AggregatorSnapshot, etc).
38
+ * unknown forces callers to narrow before access; the boundary-validation
39
+ * follow-up of #57 will add per-resource type guards.
40
+ */
41
+ data: unknown;
36
42
  }
37
43
  //# sourceMappingURL=fork.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../../src/types/fork.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;CACX"}
1
+ {"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../../src/types/fork.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,IAAI,EAAE,OAAO,CAAC;CACf"}
@@ -0,0 +1,166 @@
1
+ import type { DeploymentInfo } from "../core/deployments.js";
2
+ import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
3
+ /**
4
+ * Options for `harness.deployCodeObject(options)`.
5
+ *
6
+ * Wraps `movement move deploy-object`. The Movement CLI derives the
7
+ * destination object address from the signing account; that address is
8
+ * bound to `moduleName` (passed as `--address-name`) at compile time.
9
+ * Callers retrieve the resulting object address via the returned
10
+ * `CodeObjectInfo.address`.
11
+ */
12
+ export interface DeployCodeObjectOptions {
13
+ /**
14
+ * Logical module identifier (the `name` part of `module addr::name`).
15
+ * Used as the persistence key (`deployments/{network}/{moduleName}.json`)
16
+ * and as the `name` arg you'd pass to `runtime.getContract(addr, name)`
17
+ * after deployment.
18
+ *
19
+ * If `addressName` is omitted, `moduleName` is also used as the CLI's
20
+ * `--address-name` flag (correct when the Move.toml's named address
21
+ * matches the module identifier). For packages where they differ —
22
+ * e.g. `module hello_blockchain::counter` (named address
23
+ * `hello_blockchain`, module `counter`) — set `addressName` explicitly.
24
+ */
25
+ moduleName: string;
26
+ /**
27
+ * Move.toml named address that the derived object address binds to
28
+ * at compile time (the `--address-name` flag of `move deploy-object`).
29
+ *
30
+ * Defaults to `moduleName`. Set this when the Move.toml's named
31
+ * address differs from the on-chain module identifier:
32
+ *
33
+ * ```ts
34
+ * // Move source: `module hello_blockchain::counter`
35
+ * // Move.toml: `[addresses] hello_blockchain = "_"`
36
+ * await harness.deployCodeObject({
37
+ * moduleName: "counter", // for getContract + save key
38
+ * addressName: "hello_blockchain", // for --address-name
39
+ * });
40
+ * ```
41
+ */
42
+ addressName?: string;
43
+ /**
44
+ * Extra named-address overrides merged on top of the addresses
45
+ * auto-detected from `<packageDir>/sources/**.move`. Values here win
46
+ * for the matching keys; auto-detected names not present here are
47
+ * still pinned to the deployer address (Publisher convention).
48
+ */
49
+ namedAddresses?: Record<string, string>;
50
+ /**
51
+ * Path to the Move package. Defaults to `config.moveDir` from the
52
+ * harness's runtime config (usually `./move`).
53
+ */
54
+ packageDir?: string;
55
+ /**
56
+ * Artifact set written into the on-chain package. Mirrors the CLI
57
+ * flag. Defaults to `'sparse'` (the Movement CLI default).
58
+ */
59
+ includedArtifacts?: "none" | "sparse" | "all";
60
+ /**
61
+ * Test-only override for the child-process adapter. Production callers
62
+ * leave this undefined so the default spawn-based adapter is used.
63
+ * @internal
64
+ */
65
+ adapter?: ChildProcessAdapter;
66
+ }
67
+ /**
68
+ * Options for `harness.upgradeCodeObject(options)`.
69
+ *
70
+ * Wraps `movement move upgrade-object`. The object must already exist
71
+ * on-chain at `objectAddress` and have been deployed previously (typically
72
+ * via `deployCodeObject`).
73
+ */
74
+ export interface UpgradeCodeObjectOptions extends DeployCodeObjectOptions {
75
+ /** Address of the existing code object to upgrade. Required. */
76
+ objectAddress: string;
77
+ }
78
+ /**
79
+ * Result of `deployCodeObject` / `upgradeCodeObject`.
80
+ *
81
+ * Today this is structurally identical to {@link DeploymentInfo} — the
82
+ * `address` field holds the derived **object address** (the value
83
+ * callers pass to `runtime.getContract(...)` to interact with the
84
+ * modules), and `deployer` is the signing account.
85
+ *
86
+ * The alias exists so future iterations can layer additional fields
87
+ * (e.g. an explicit `kind: 'code-object' | 'publish'` discriminator)
88
+ * without churning every callsite.
89
+ */
90
+ export type CodeObjectInfo = DeploymentInfo;
91
+ /**
92
+ * Options for `harness.runViewFunction(options)`.
93
+ *
94
+ * Delegates to the Aptos SDK's `aptos.view(...)` — no CLI invocation,
95
+ * no profile management. Works on `createLocal`, `createFork`, and
96
+ * `createLive` harnesses (view functions are read-only).
97
+ */
98
+ export interface RunViewFunctionOptions {
99
+ /**
100
+ * Fully qualified Move function id, e.g. `0xCAFE::counter::get`.
101
+ */
102
+ function: string;
103
+ /**
104
+ * Move type-tag arguments, e.g. `['0x1::aptos_coin::AptosCoin']`.
105
+ */
106
+ typeArguments?: string[];
107
+ /**
108
+ * Move function arguments. SDK-validated at the boundary; pass values
109
+ * matching the Move function signature (strings for `address`,
110
+ * numbers / bigints for `u8`-`u256`, booleans, etc.).
111
+ */
112
+ functionArguments?: unknown[];
113
+ }
114
+ /**
115
+ * Options for `harness.runMoveScript(options)`.
116
+ *
117
+ * Wraps `movement move run-script`. The CLI handles compilation
118
+ * inline when given a `.move` source; the user can also pass a
119
+ * pre-compiled `.mv` bytecode file.
120
+ *
121
+ * Not available on fork-mode harnesses (forks are read-only).
122
+ */
123
+ export interface RunMoveScriptOptions {
124
+ /**
125
+ * Path to the Move script. Extension determines the CLI flag:
126
+ * - `.move` → `--script-path` (CLI auto-compiles)
127
+ * - `.mv` → `--compiled-script-path` (user pre-compiled)
128
+ * Other extensions throw synchronously before any CLI call.
129
+ */
130
+ scriptPath: string;
131
+ /**
132
+ * CLI-formatted typed arguments. Movement CLI expects each arg
133
+ * prefixed by its Move type, e.g. `'address:0x1'`, `'u8:42'`,
134
+ * `'bool:true'`, `'string:hello'`. See
135
+ * `movement move run-script --help` for the full grammar.
136
+ */
137
+ args?: string[];
138
+ /**
139
+ * Type-tag arguments for generic scripts, e.g.
140
+ * `['0x1::aptos_coin::AptosCoin']`.
141
+ */
142
+ typeArgs?: string[];
143
+ /**
144
+ * Optional working directory for compilation. Most callers leave
145
+ * this undefined — the CLI uses the script's parent directory.
146
+ */
147
+ packageDir?: string;
148
+ /**
149
+ * Test-only override for the child-process adapter.
150
+ * @internal
151
+ */
152
+ adapter?: ChildProcessAdapter;
153
+ }
154
+ /**
155
+ * Result of `harness.runMoveScript`.
156
+ *
157
+ * Always carries `txHash` (parser throws if it can't extract one).
158
+ * `success` and `vmStatus` are best-effort: parsed from the CLI's
159
+ * JSON `Result` block when present, `undefined` if the parser misses.
160
+ */
161
+ export interface MoveScriptResult {
162
+ txHash: string;
163
+ success?: boolean;
164
+ vmStatus?: string;
165
+ }
166
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/types/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAE9C;;;;OAIG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/types/harness.ts"],"names":[],"mappings":""}
@@ -2,6 +2,7 @@ import { Aptos, Account } from "@aptos-labs/ts-sdk";
2
2
  import { MovehatConfig } from "./config.js";
3
3
  import { MoveContract } from "../core/contract.js";
4
4
  import { DeploymentInfo } from "../core/deployments.js";
5
+ import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
5
6
  export interface NetworkInfo {
6
7
  name: string;
7
8
  rpc: string;
@@ -16,6 +17,11 @@ export interface MovehatRuntime {
16
17
  getContract: (address: string, moduleName: string) => MoveContract;
17
18
  deployContract: (moduleName: string, options?: {
18
19
  packageDir?: string;
20
+ /**
21
+ * Override the child-process adapter. Test-only: production callers
22
+ * leave this undefined so the default spawn-based adapter is used.
23
+ */
24
+ adapter?: ChildProcessAdapter;
19
25
  }) => Promise<DeploymentInfo>;
20
26
  getDeployment: (moduleName: string) => DeploymentInfo | null;
21
27
  getDeployments: () => Record<string, DeploymentInfo>;
@@ -23,6 +29,6 @@ export interface MovehatRuntime {
23
29
  createAccount: () => Account;
24
30
  getAccount: (privateKey: string) => Account;
25
31
  getAccountByIndex: (index: number) => Account;
26
- switchNetwork: (networkName: string) => Promise<void>;
32
+ switchNetwork: (networkName: string) => Promise<MovehatRuntime>;
27
33
  }
28
34
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAE7B,MAAM,EAAE,aAAa,CAAC;IAGtB,OAAO,EAAE,WAAW,CAAC;IAGrB,KAAK,EAAE,KAAK,CAAC;IAGb,OAAO,EAAE,OAAO,CAAC;IAGjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,YAAY,CAAC;IAGnE,cAAc,EAAE,CACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,KACE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IAC7D,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrD,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAG5D,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAG9C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAE7B,MAAM,EAAE,aAAa,CAAC;IAGtB,OAAO,EAAE,WAAW,CAAC;IAGrB,KAAK,EAAE,KAAK,CAAC;IAGb,OAAO,EAAE,OAAO,CAAC;IAGjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,YAAY,CAAC;IAGnE,cAAc,EAAE,CACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;WAGG;QACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;KAC/B,KACE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IAC7D,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrD,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAG5D,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAK9C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACjE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=colors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.test.d.ts","sourceRoot":"","sources":["../../../src/ui/__tests__/colors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { shouldUseColor, colors, rgbToAnsi, applyGradient, gradients, } from '../colors.js';
3
+ describe('shouldUseColor', () => {
4
+ const originalEnv = process.env;
5
+ const originalIsTTY = process.stdout.isTTY;
6
+ beforeEach(() => {
7
+ process.env = { ...originalEnv };
8
+ delete process.env.NO_COLOR;
9
+ });
10
+ afterEach(() => {
11
+ process.env = originalEnv;
12
+ Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY });
13
+ });
14
+ it('should return true when TTY and NO_COLOR not set', () => {
15
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
16
+ delete process.env.NO_COLOR;
17
+ expect(shouldUseColor()).toBe(true);
18
+ });
19
+ it('should return false when NO_COLOR is set', () => {
20
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
21
+ process.env.NO_COLOR = '1';
22
+ expect(shouldUseColor()).toBe(false);
23
+ });
24
+ it('should return false when not TTY', () => {
25
+ Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true });
26
+ delete process.env.NO_COLOR;
27
+ expect(shouldUseColor()).toBe(false);
28
+ });
29
+ });
30
+ describe('rgbToAnsi', () => {
31
+ it('should generate correct ANSI escape code', () => {
32
+ expect(rgbToAnsi(255, 0, 0)).toBe('\x1b[38;2;255;0;0m');
33
+ expect(rgbToAnsi(0, 255, 0)).toBe('\x1b[38;2;0;255;0m');
34
+ expect(rgbToAnsi(0, 0, 255)).toBe('\x1b[38;2;0;0;255m');
35
+ expect(rgbToAnsi(128, 128, 128)).toBe('\x1b[38;2;128;128;128m');
36
+ });
37
+ it('should handle edge values', () => {
38
+ expect(rgbToAnsi(0, 0, 0)).toBe('\x1b[38;2;0;0;0m');
39
+ expect(rgbToAnsi(255, 255, 255)).toBe('\x1b[38;2;255;255;255m');
40
+ });
41
+ });
42
+ describe('applyGradient', () => {
43
+ const originalEnv = process.env;
44
+ const originalIsTTY = process.stdout.isTTY;
45
+ beforeEach(() => {
46
+ process.env = { ...originalEnv };
47
+ delete process.env.NO_COLOR;
48
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
49
+ });
50
+ afterEach(() => {
51
+ process.env = originalEnv;
52
+ Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY });
53
+ });
54
+ it('should apply gradient to text', () => {
55
+ const palette = [[255, 0, 0], [0, 255, 0]];
56
+ const result = applyGradient('AB', palette);
57
+ expect(result).toContain('\x1b[38;2;255;0;0m'); // Red for 'A'
58
+ expect(result).toContain('\x1b[38;2;0;255;0m'); // Green for 'B'
59
+ expect(result).toContain('A');
60
+ expect(result).toContain('B');
61
+ expect(result).toContain('\x1b[0m'); // Reset at end
62
+ });
63
+ it('should return plain text when colors disabled', () => {
64
+ process.env.NO_COLOR = '1';
65
+ const palette = [[255, 0, 0]];
66
+ const result = applyGradient('Hello', palette);
67
+ expect(result).toBe('Hello');
68
+ expect(result).not.toContain('\x1b');
69
+ });
70
+ it('should cycle through palette for long text', () => {
71
+ const palette = [[255, 0, 0], [0, 255, 0]];
72
+ const result = applyGradient('ABCD', palette);
73
+ // Should alternate: A=red, B=green, C=red, D=green
74
+ expect(result).toContain('A');
75
+ expect(result).toContain('B');
76
+ expect(result).toContain('C');
77
+ expect(result).toContain('D');
78
+ });
79
+ it('should handle offset parameter', () => {
80
+ const palette = [[255, 0, 0], [0, 255, 0]];
81
+ const result = applyGradient('AB', palette, 1);
82
+ // With offset 1: A=green, B=red
83
+ expect(result.indexOf('\x1b[38;2;0;255;0m')).toBeLessThan(result.indexOf('\x1b[38;2;255;0;0m'));
84
+ });
85
+ });
86
+ describe('gradients', () => {
87
+ it('should have movehat gradient with 5 colors', () => {
88
+ expect(gradients.movehat).toHaveLength(5);
89
+ gradients.movehat.forEach(([r, g, b]) => {
90
+ expect(r).toBeGreaterThanOrEqual(0);
91
+ expect(r).toBeLessThanOrEqual(255);
92
+ expect(g).toBeGreaterThanOrEqual(0);
93
+ expect(g).toBeLessThanOrEqual(255);
94
+ expect(b).toBeGreaterThanOrEqual(0);
95
+ expect(b).toBeLessThanOrEqual(255);
96
+ });
97
+ });
98
+ it('should have success gradient', () => {
99
+ expect(gradients.success).toBeDefined();
100
+ expect(gradients.success.length).toBeGreaterThan(0);
101
+ });
102
+ it('should have error gradient', () => {
103
+ expect(gradients.error).toBeDefined();
104
+ expect(gradients.error.length).toBeGreaterThan(0);
105
+ });
106
+ });
107
+ describe('colors object', () => {
108
+ it('should have all semantic color functions', () => {
109
+ expect(typeof colors.success).toBe('function');
110
+ expect(typeof colors.error).toBe('function');
111
+ expect(typeof colors.warning).toBe('function');
112
+ expect(typeof colors.info).toBe('function');
113
+ expect(typeof colors.primary).toBe('function');
114
+ expect(typeof colors.secondary).toBe('function');
115
+ expect(typeof colors.muted).toBe('function');
116
+ expect(typeof colors.dim).toBe('function');
117
+ expect(typeof colors.bold).toBe('function');
118
+ expect(typeof colors.brand).toBe('function');
119
+ expect(typeof colors.brandBright).toBe('function');
120
+ });
121
+ it('should return strings when called', () => {
122
+ expect(typeof colors.success('test')).toBe('string');
123
+ expect(typeof colors.error('test')).toBe('string');
124
+ expect(typeof colors.brand('test')).toBe('string');
125
+ });
126
+ });
127
+ //# sourceMappingURL=colors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.test.js","sourceRoot":"","sources":["../../../src/ui/__tests__/colors.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,OAEjC,CAAC;AAUF;;;GAGG;AACH,eAAO,MAAM,MAAM;mBARM,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;mBAAjB,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;mBAAjB,MAAM,KAAK,MAAM;qBAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;eAAjB,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;uBAAjB,MAAM,KAAK,MAAM;;8BAdtB,CAAC;;CA0CpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAE3D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EACZ,SAAS,GAAG,EAAE,EACd,SAAQ,MAAU,KACjB,MAUF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;OAGG;aAOE,GAAG,EAAE;IAEV;;;OAGG;aAKE,GAAG,EAAE;IAEV;;;OAGG;WAKE,GAAG,EAAE;CACX,CAAC"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,OAEjC,CAAC;AAUF;;;GAGG;AACH,eAAO,MAAM,MAAM;mBARM,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;mBAAjB,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;mBAAjB,MAAM,KAAK,MAAM;qBAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;eAAjB,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;uBAAjB,MAAM,KAAK,MAAM;;8BAdtB,CAAC;;CA0CpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAE3D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EACZ,SAAS,GAAG,EAAE,EACd,SAAQ,MAAU,KACjB,MAaF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;OAGG;aAOE,GAAG,EAAE;IAEV;;;OAGG;aAKE,GAAG,EAAE;IAEV;;;OAGG;WAKE,GAAG,EAAE;CACX,CAAC"}
package/dist/ui/colors.js CHANGED
@@ -69,8 +69,12 @@ export const applyGradient = (text, palette, offset = 0) => {
69
69
  let result = '';
70
70
  for (let i = 0; i < text.length; i++) {
71
71
  const colorIndex = (i + offset) % palette.length;
72
- const [r, g, b] = palette[colorIndex];
73
- result += `${rgbToAnsi(r, g, b)}${text[i]}`;
72
+ const color = palette[colorIndex];
73
+ const ch = text[i];
74
+ if (!color || ch === undefined)
75
+ continue;
76
+ const [r, g, b] = color;
77
+ result += `${rgbToAnsi(r, g, b)}${ch}`;
74
78
  }
75
79
  return result + '\x1b[0m';
76
80
  };