moonwall 1.0.0-dev.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 (301) hide show
  1. package/LICENSE +681 -0
  2. package/README.md +54 -0
  3. package/config_schema.json +811 -0
  4. package/dist/api/constants/accounts.d.ts +36 -0
  5. package/dist/api/constants/accounts.d.ts.map +1 -0
  6. package/dist/api/constants/accounts.js +67 -0
  7. package/dist/api/constants/chain.d.ts +134 -0
  8. package/dist/api/constants/chain.d.ts.map +1 -0
  9. package/dist/api/constants/chain.js +149 -0
  10. package/dist/api/constants/index.d.ts +4 -0
  11. package/dist/api/constants/index.d.ts.map +1 -0
  12. package/dist/api/constants/index.js +3 -0
  13. package/dist/api/constants/smartContract.d.ts +29 -0
  14. package/dist/api/constants/smartContract.d.ts.map +1 -0
  15. package/dist/api/constants/smartContract.js +118 -0
  16. package/dist/api/testing/blocks.d.ts +59 -0
  17. package/dist/api/testing/blocks.d.ts.map +1 -0
  18. package/dist/api/testing/blocks.js +147 -0
  19. package/dist/api/testing/contracts.d.ts +5 -0
  20. package/dist/api/testing/contracts.d.ts.map +1 -0
  21. package/dist/api/testing/contracts.js +32 -0
  22. package/dist/api/testing/ethers.d.ts +3 -0
  23. package/dist/api/testing/ethers.d.ts.map +1 -0
  24. package/dist/api/testing/ethers.js +38 -0
  25. package/dist/api/testing/events.d.ts +12 -0
  26. package/dist/api/testing/events.d.ts.map +1 -0
  27. package/dist/api/testing/events.js +23 -0
  28. package/dist/api/testing/extrinsics.d.ts +5 -0
  29. package/dist/api/testing/extrinsics.d.ts.map +1 -0
  30. package/dist/api/testing/extrinsics.js +10 -0
  31. package/dist/api/testing/index.d.ts +9 -0
  32. package/dist/api/testing/index.d.ts.map +1 -0
  33. package/dist/api/testing/index.js +8 -0
  34. package/dist/api/testing/jumping.d.ts +8 -0
  35. package/dist/api/testing/jumping.d.ts.map +1 -0
  36. package/dist/api/testing/jumping.js +78 -0
  37. package/dist/api/testing/providers.d.ts +18 -0
  38. package/dist/api/testing/providers.d.ts.map +1 -0
  39. package/dist/api/testing/providers.js +34 -0
  40. package/dist/api/testing/viem.d.ts +139 -0
  41. package/dist/api/testing/viem.d.ts.map +1 -0
  42. package/dist/api/testing/viem.js +247 -0
  43. package/dist/api/types/config.d.ts +609 -0
  44. package/dist/api/types/config.d.ts.map +1 -0
  45. package/dist/api/types/config.js +1 -0
  46. package/dist/api/types/context.d.ts +125 -0
  47. package/dist/api/types/context.d.ts.map +1 -0
  48. package/dist/api/types/context.js +1 -0
  49. package/dist/api/types/contracts.d.ts +66 -0
  50. package/dist/api/types/contracts.d.ts.map +1 -0
  51. package/dist/api/types/contracts.js +1 -0
  52. package/dist/api/types/eth.d.ts +3 -0
  53. package/dist/api/types/eth.d.ts.map +1 -0
  54. package/dist/api/types/eth.js +1 -0
  55. package/dist/api/types/foundations.d.ts +11 -0
  56. package/dist/api/types/foundations.d.ts.map +1 -0
  57. package/dist/api/types/foundations.js +1 -0
  58. package/dist/api/types/helpers.d.ts +7 -0
  59. package/dist/api/types/helpers.d.ts.map +1 -0
  60. package/dist/api/types/helpers.js +1 -0
  61. package/dist/api/types/index.d.ts +8 -0
  62. package/dist/api/types/index.d.ts.map +1 -0
  63. package/dist/api/types/index.js +7 -0
  64. package/dist/api/types/runner.d.ts +490 -0
  65. package/dist/api/types/runner.d.ts.map +1 -0
  66. package/dist/api/types/runner.js +1 -0
  67. package/dist/cli/cmds/components/LogViewer.d.ts +17 -0
  68. package/dist/cli/cmds/components/LogViewer.d.ts.map +1 -0
  69. package/dist/cli/cmds/components/LogViewer.js +171 -0
  70. package/dist/cli/cmds/entrypoint.d.ts +6 -0
  71. package/dist/cli/cmds/entrypoint.d.ts.map +1 -0
  72. package/dist/cli/cmds/entrypoint.js +192 -0
  73. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts +2 -0
  74. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts.map +1 -0
  75. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.js +117 -0
  76. package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts +2 -0
  77. package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts.map +1 -0
  78. package/dist/cli/cmds/interactiveCmds/devIntCmds.js +103 -0
  79. package/dist/cli/cmds/interactiveCmds/index.d.ts +4 -0
  80. package/dist/cli/cmds/interactiveCmds/index.d.ts.map +1 -0
  81. package/dist/cli/cmds/interactiveCmds/index.js +3 -0
  82. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts +2 -0
  83. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts.map +1 -0
  84. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.js +32 -0
  85. package/dist/cli/cmds/main.d.ts +2 -0
  86. package/dist/cli/cmds/main.d.ts.map +1 -0
  87. package/dist/cli/cmds/main.js +336 -0
  88. package/dist/cli/cmds/runNetwork.d.ts +3 -0
  89. package/dist/cli/cmds/runNetwork.d.ts.map +1 -0
  90. package/dist/cli/cmds/runNetwork.js +292 -0
  91. package/dist/cli/cmds/runTests.d.ts +12 -0
  92. package/dist/cli/cmds/runTests.d.ts.map +1 -0
  93. package/dist/cli/cmds/runTests.js +257 -0
  94. package/dist/cli/internal/cmdFunctions/downloader.d.ts +4 -0
  95. package/dist/cli/internal/cmdFunctions/downloader.d.ts.map +1 -0
  96. package/dist/cli/internal/cmdFunctions/downloader.js +49 -0
  97. package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts +10 -0
  98. package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts.map +1 -0
  99. package/dist/cli/internal/cmdFunctions/fetchArtifact.js +145 -0
  100. package/dist/cli/internal/cmdFunctions/index.d.ts +5 -0
  101. package/dist/cli/internal/cmdFunctions/index.d.ts.map +1 -0
  102. package/dist/cli/internal/cmdFunctions/index.js +4 -0
  103. package/dist/cli/internal/cmdFunctions/initialisation.d.ts +20 -0
  104. package/dist/cli/internal/cmdFunctions/initialisation.d.ts.map +1 -0
  105. package/dist/cli/internal/cmdFunctions/initialisation.js +150 -0
  106. package/dist/cli/internal/cmdFunctions/tempLogs.d.ts +3 -0
  107. package/dist/cli/internal/cmdFunctions/tempLogs.d.ts.map +1 -0
  108. package/dist/cli/internal/cmdFunctions/tempLogs.js +37 -0
  109. package/dist/cli/internal/commandParsers.d.ts +59 -0
  110. package/dist/cli/internal/commandParsers.d.ts.map +1 -0
  111. package/dist/cli/internal/commandParsers.js +305 -0
  112. package/dist/cli/internal/deriveTestIds.d.ts +8 -0
  113. package/dist/cli/internal/deriveTestIds.d.ts.map +1 -0
  114. package/dist/cli/internal/deriveTestIds.js +123 -0
  115. package/dist/cli/internal/effect/index.d.ts +6 -0
  116. package/dist/cli/internal/effect/index.d.ts.map +1 -0
  117. package/dist/cli/internal/effect/index.js +5 -0
  118. package/dist/cli/internal/fileCheckers.d.ts +11 -0
  119. package/dist/cli/internal/fileCheckers.d.ts.map +1 -0
  120. package/dist/cli/internal/fileCheckers.js +165 -0
  121. package/dist/cli/internal/foundations/index.d.ts +4 -0
  122. package/dist/cli/internal/foundations/index.d.ts.map +1 -0
  123. package/dist/cli/internal/foundations/index.js +4 -0
  124. package/dist/cli/internal/index.d.ts +12 -0
  125. package/dist/cli/internal/index.d.ts.map +1 -0
  126. package/dist/cli/internal/index.js +11 -0
  127. package/dist/cli/internal/launcherCommon.d.ts +4 -0
  128. package/dist/cli/internal/launcherCommon.d.ts.map +1 -0
  129. package/dist/cli/internal/launcherCommon.js +130 -0
  130. package/dist/cli/internal/localNode.d.ts +16 -0
  131. package/dist/cli/internal/localNode.d.ts.map +1 -0
  132. package/dist/cli/internal/localNode.js +362 -0
  133. package/dist/cli/internal/logging.d.ts +2 -0
  134. package/dist/cli/internal/logging.d.ts.map +1 -0
  135. package/dist/cli/internal/logging.js +26 -0
  136. package/dist/cli/internal/node.d.ts +33 -0
  137. package/dist/cli/internal/node.d.ts.map +1 -0
  138. package/dist/cli/internal/node.js +228 -0
  139. package/dist/cli/internal/processHelpers.d.ts +17 -0
  140. package/dist/cli/internal/processHelpers.d.ts.map +1 -0
  141. package/dist/cli/internal/processHelpers.js +56 -0
  142. package/dist/cli/internal/providerFactories.d.ts +48 -0
  143. package/dist/cli/internal/providerFactories.d.ts.map +1 -0
  144. package/dist/cli/internal/providerFactories.js +442 -0
  145. package/dist/cli/internal/testIdParser.d.ts +34 -0
  146. package/dist/cli/internal/testIdParser.d.ts.map +1 -0
  147. package/dist/cli/internal/testIdParser.js +167 -0
  148. package/dist/cli/lib/binariesHelpers.d.ts +15 -0
  149. package/dist/cli/lib/binariesHelpers.d.ts.map +1 -0
  150. package/dist/cli/lib/binariesHelpers.js +99 -0
  151. package/dist/cli/lib/configReader.d.ts +8 -0
  152. package/dist/cli/lib/configReader.d.ts.map +1 -0
  153. package/dist/cli/lib/configReader.js +115 -0
  154. package/dist/cli/lib/contractFunctions.d.ts +2 -0
  155. package/dist/cli/lib/contractFunctions.d.ts.map +1 -0
  156. package/dist/cli/lib/contractFunctions.js +2 -0
  157. package/dist/cli/lib/globalContext.d.ts +46 -0
  158. package/dist/cli/lib/globalContext.d.ts.map +1 -0
  159. package/dist/cli/lib/globalContext.js +710 -0
  160. package/dist/cli/lib/governanceProcedures.d.ts +27 -0
  161. package/dist/cli/lib/governanceProcedures.d.ts.map +1 -0
  162. package/dist/cli/lib/governanceProcedures.js +458 -0
  163. package/dist/cli/lib/handlers/index.d.ts +5 -0
  164. package/dist/cli/lib/handlers/index.d.ts.map +1 -0
  165. package/dist/cli/lib/handlers/index.js +5 -0
  166. package/dist/cli/lib/repoDefinitions/index.d.ts +6 -0
  167. package/dist/cli/lib/repoDefinitions/index.d.ts.map +1 -0
  168. package/dist/cli/lib/repoDefinitions/index.js +21 -0
  169. package/dist/cli/lib/repoDefinitions/moonbeam.d.ts +4 -0
  170. package/dist/cli/lib/repoDefinitions/moonbeam.d.ts.map +1 -0
  171. package/dist/cli/lib/repoDefinitions/moonbeam.js +30 -0
  172. package/dist/cli/lib/repoDefinitions/polkadot.d.ts +4 -0
  173. package/dist/cli/lib/repoDefinitions/polkadot.d.ts.map +1 -0
  174. package/dist/cli/lib/repoDefinitions/polkadot.js +11 -0
  175. package/dist/cli/lib/repoDefinitions/tanssi.d.ts +4 -0
  176. package/dist/cli/lib/repoDefinitions/tanssi.d.ts.map +1 -0
  177. package/dist/cli/lib/repoDefinitions/tanssi.js +14 -0
  178. package/dist/cli/lib/rpcFunctions.d.ts +2 -0
  179. package/dist/cli/lib/rpcFunctions.d.ts.map +1 -0
  180. package/dist/cli/lib/rpcFunctions.js +26 -0
  181. package/dist/cli/lib/runnerContext.d.ts +32 -0
  182. package/dist/cli/lib/runnerContext.d.ts.map +1 -0
  183. package/dist/cli/lib/runnerContext.js +156 -0
  184. package/dist/cli/lib/shardManager.d.ts +40 -0
  185. package/dist/cli/lib/shardManager.d.ts.map +1 -0
  186. package/dist/cli/lib/shardManager.js +80 -0
  187. package/dist/cli/lib/upgradeProcedures.d.ts +5 -0
  188. package/dist/cli/lib/upgradeProcedures.d.ts.map +1 -0
  189. package/dist/cli/lib/upgradeProcedures.js +221 -0
  190. package/dist/cli.d.ts +4 -0
  191. package/dist/cli.d.ts.map +1 -0
  192. package/dist/cli.js +3 -0
  193. package/dist/contracts/contractInteraction.d.ts +17 -0
  194. package/dist/contracts/contractInteraction.d.ts.map +1 -0
  195. package/dist/contracts/contractInteraction.js +170 -0
  196. package/dist/contracts/index.d.ts +2 -0
  197. package/dist/contracts/index.d.ts.map +1 -0
  198. package/dist/contracts/index.js +1 -0
  199. package/dist/foundations/chopsticks/handler.d.ts +3 -0
  200. package/dist/foundations/chopsticks/handler.d.ts.map +1 -0
  201. package/dist/foundations/chopsticks/handler.js +93 -0
  202. package/dist/foundations/chopsticks/helpers.d.ts +27 -0
  203. package/dist/foundations/chopsticks/helpers.d.ts.map +1 -0
  204. package/dist/foundations/chopsticks/helpers.js +133 -0
  205. package/dist/foundations/dev/handler.d.ts +3 -0
  206. package/dist/foundations/dev/handler.d.ts.map +1 -0
  207. package/dist/foundations/dev/handler.js +136 -0
  208. package/dist/foundations/dev/helpers.d.ts +27 -0
  209. package/dist/foundations/dev/helpers.d.ts.map +1 -0
  210. package/dist/foundations/dev/helpers.js +161 -0
  211. package/dist/foundations/read-only/handler.d.ts +3 -0
  212. package/dist/foundations/read-only/handler.d.ts.map +1 -0
  213. package/dist/foundations/read-only/handler.js +32 -0
  214. package/dist/foundations/zombie/handler.d.ts +3 -0
  215. package/dist/foundations/zombie/handler.d.ts.map +1 -0
  216. package/dist/foundations/zombie/handler.js +92 -0
  217. package/dist/foundations/zombie/helpers.d.ts +16 -0
  218. package/dist/foundations/zombie/helpers.d.ts.map +1 -0
  219. package/dist/foundations/zombie/helpers.js +97 -0
  220. package/dist/index.d.ts +17 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +47 -0
  223. package/dist/internal/common.d.ts +3 -0
  224. package/dist/internal/common.d.ts.map +1 -0
  225. package/dist/internal/common.js +41 -0
  226. package/dist/internal/index.d.ts +4 -0
  227. package/dist/internal/index.d.ts.map +1 -0
  228. package/dist/internal/index.js +3 -0
  229. package/dist/internal/logger.d.ts +24 -0
  230. package/dist/internal/logger.d.ts.map +1 -0
  231. package/dist/internal/logger.js +66 -0
  232. package/dist/internal/logging.d.ts +7 -0
  233. package/dist/internal/logging.d.ts.map +1 -0
  234. package/dist/internal/logging.js +36 -0
  235. package/dist/moondebug.d.ts +3 -0
  236. package/dist/moondebug.d.ts.map +1 -0
  237. package/dist/moondebug.js +2 -0
  238. package/dist/services/cache/FileLock.d.ts +11 -0
  239. package/dist/services/cache/FileLock.d.ts.map +1 -0
  240. package/dist/services/cache/FileLock.js +68 -0
  241. package/dist/services/cache/StartupCacheService.d.ts +23 -0
  242. package/dist/services/cache/StartupCacheService.d.ts.map +1 -0
  243. package/dist/services/cache/StartupCacheService.js +159 -0
  244. package/dist/services/cache/index.d.ts +3 -0
  245. package/dist/services/cache/index.d.ts.map +1 -0
  246. package/dist/services/cache/index.js +2 -0
  247. package/dist/services/chopsticks/ChopsticksMultiChain.d.ts +158 -0
  248. package/dist/services/chopsticks/ChopsticksMultiChain.d.ts.map +1 -0
  249. package/dist/services/chopsticks/ChopsticksMultiChain.js +282 -0
  250. package/dist/services/chopsticks/ChopsticksService.d.ts +313 -0
  251. package/dist/services/chopsticks/ChopsticksService.d.ts.map +1 -0
  252. package/dist/services/chopsticks/ChopsticksService.js +77 -0
  253. package/dist/services/chopsticks/chopsticksConfigParser.d.ts +40 -0
  254. package/dist/services/chopsticks/chopsticksConfigParser.d.ts.map +1 -0
  255. package/dist/services/chopsticks/chopsticksConfigParser.js +201 -0
  256. package/dist/services/chopsticks/index.d.ts +5 -0
  257. package/dist/services/chopsticks/index.d.ts.map +1 -0
  258. package/dist/services/chopsticks/index.js +4 -0
  259. package/dist/services/chopsticks/launchChopsticksEffect.d.ts +225 -0
  260. package/dist/services/chopsticks/launchChopsticksEffect.d.ts.map +1 -0
  261. package/dist/services/chopsticks/launchChopsticksEffect.js +623 -0
  262. package/dist/services/config/configAccessors.d.ts +41 -0
  263. package/dist/services/config/configAccessors.d.ts.map +1 -0
  264. package/dist/services/config/configAccessors.js +149 -0
  265. package/dist/services/config/index.d.ts +2 -0
  266. package/dist/services/config/index.d.ts.map +1 -0
  267. package/dist/services/config/index.js +1 -0
  268. package/dist/services/errors.d.ts +72 -0
  269. package/dist/services/errors.d.ts.map +1 -0
  270. package/dist/services/errors.js +31 -0
  271. package/dist/services/index.d.ts +7 -0
  272. package/dist/services/index.d.ts.map +1 -0
  273. package/dist/services/index.js +6 -0
  274. package/dist/services/network/NodeReadinessService.d.ts +35 -0
  275. package/dist/services/network/NodeReadinessService.d.ts.map +1 -0
  276. package/dist/services/network/NodeReadinessService.js +120 -0
  277. package/dist/services/network/PortDiscoveryService.d.ts +22 -0
  278. package/dist/services/network/PortDiscoveryService.d.ts.map +1 -0
  279. package/dist/services/network/PortDiscoveryService.js +77 -0
  280. package/dist/services/network/RpcPortDiscoveryService.d.ts +25 -0
  281. package/dist/services/network/RpcPortDiscoveryService.d.ts.map +1 -0
  282. package/dist/services/network/RpcPortDiscoveryService.js +136 -0
  283. package/dist/services/network/index.d.ts +4 -0
  284. package/dist/services/network/index.d.ts.map +1 -0
  285. package/dist/services/network/index.js +3 -0
  286. package/dist/services/process/ProcessManagerService.d.ts +49 -0
  287. package/dist/services/process/ProcessManagerService.d.ts.map +1 -0
  288. package/dist/services/process/ProcessManagerService.js +162 -0
  289. package/dist/services/process/index.d.ts +3 -0
  290. package/dist/services/process/index.d.ts.map +1 -0
  291. package/dist/services/process/index.js +2 -0
  292. package/dist/services/process/launchNodeEffect.d.ts +40 -0
  293. package/dist/services/process/launchNodeEffect.d.ts.map +1 -0
  294. package/dist/services/process/launchNodeEffect.js +86 -0
  295. package/dist/util/functions/index.d.ts +3 -0
  296. package/dist/util/functions/index.d.ts.map +1 -0
  297. package/dist/util/functions/index.js +4 -0
  298. package/dist/util/index.d.ts +4 -0
  299. package/dist/util/index.d.ts.map +1 -0
  300. package/dist/util/index.js +2 -0
  301. package/package.json +157 -0
@@ -0,0 +1,171 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from "react";
3
+ import { Box, Text, useInput, useApp } from "ink";
4
+ import fs from "node:fs";
5
+ import { executeTests } from "../runTests.js";
6
+ export const LogViewer = ({ env, logFilePath, onExit, onNextLog, onPrevLog, zombieInfo, }) => {
7
+ const [lines, setLines] = useState([]);
8
+ const [paused, setPaused] = useState(false);
9
+ const [scrollOffset, setScrollOffset] = useState(0);
10
+ const [testing, setTesting] = useState(false);
11
+ const [grepMode, setGrepMode] = useState(false);
12
+ const [grepInput, setGrepInput] = useState(process.env.MOON_GREP ?? "");
13
+ const [testOutput, setTestOutput] = useState([]);
14
+ const [testRun, setTestRun] = useState(null);
15
+ const { exit } = useApp();
16
+ const terminalRows = process.stdout.rows ?? 24;
17
+ const terminalCols = process.stdout.columns ?? 80;
18
+ const showTestPanel = testing || testOutput.length > 0 || testRun !== null;
19
+ const testPanelHeight = showTestPanel
20
+ ? Math.min(10, Math.max(5, Math.floor(terminalRows / 3)))
21
+ : 0;
22
+ const logPanelHeight = terminalRows - testPanelHeight - (grepMode ? 5 : 4);
23
+ const visibleLines = Math.max(3, logPanelHeight);
24
+ const testOutputLines = Math.max(1, testPanelHeight - 3);
25
+ const readLogFile = useCallback(() => {
26
+ if (paused || !fs.existsSync(logFilePath))
27
+ return;
28
+ try {
29
+ const content = fs.readFileSync(logFilePath, "utf-8");
30
+ setLines(content.split("\n").filter((l) => l.trim()));
31
+ }
32
+ catch {
33
+ // File may be temporarily unavailable
34
+ }
35
+ }, [logFilePath, paused]);
36
+ useEffect(() => {
37
+ readLogFile();
38
+ if (paused)
39
+ return;
40
+ fs.watchFile(logFilePath, { interval: 100 }, readLogFile);
41
+ return () => {
42
+ fs.unwatchFile(logFilePath);
43
+ };
44
+ }, [logFilePath, paused, readLogFile]);
45
+ // Hide cursor
46
+ useEffect(() => {
47
+ process.stdout.write("\x1B[?25l");
48
+ return () => {
49
+ process.stdout.write("\x1B[?25h");
50
+ };
51
+ }, []);
52
+ const runTests = useCallback(async (pattern) => {
53
+ if (testing)
54
+ return;
55
+ setTesting(true);
56
+ setTestOutput([]);
57
+ setTestRun({ pattern, done: false });
58
+ process.env.MOON_RECYCLE = "true";
59
+ if (pattern) {
60
+ process.env.MOON_GREP = pattern;
61
+ }
62
+ try {
63
+ await executeTests(env, {
64
+ testNamePattern: pattern,
65
+ silent: true,
66
+ subDirectory: process.env.MOON_SUBDIR,
67
+ reporters: ["dot"],
68
+ onConsoleLog: (log) => {
69
+ if (log.includes("has multiple versions"))
70
+ return false;
71
+ setTestOutput((prev) => [...prev.slice(-50), log]);
72
+ return false;
73
+ },
74
+ });
75
+ }
76
+ catch {
77
+ // Test failures are expected
78
+ }
79
+ finally {
80
+ setTesting(false);
81
+ setTestRun((prev) => (prev ? { ...prev, done: true } : null));
82
+ }
83
+ }, [env, testing]);
84
+ useInput((input, key) => {
85
+ // Grep mode input handling
86
+ if (grepMode) {
87
+ if (key.escape) {
88
+ setGrepMode(false);
89
+ return;
90
+ }
91
+ if (key.return) {
92
+ const pattern = grepInput.trim();
93
+ if (pattern) {
94
+ setGrepMode(false);
95
+ runTests(pattern);
96
+ }
97
+ return;
98
+ }
99
+ if (key.backspace || key.delete) {
100
+ setGrepInput((prev) => prev.slice(0, -1));
101
+ return;
102
+ }
103
+ if (input && !key.ctrl && !key.meta) {
104
+ setGrepInput((prev) => prev + input);
105
+ }
106
+ return;
107
+ }
108
+ // Normal mode
109
+ if (input === "q") {
110
+ fs.unwatchFile(logFilePath);
111
+ onExit();
112
+ exit();
113
+ return;
114
+ }
115
+ if (input === "p") {
116
+ setPaused(true);
117
+ }
118
+ if (input === "r") {
119
+ setPaused(false);
120
+ setScrollOffset(0);
121
+ }
122
+ if (input === "t" && !testing) {
123
+ runTests();
124
+ }
125
+ if (input === "T" && !testing) {
126
+ setGrepMode(true);
127
+ }
128
+ if (input === "c") {
129
+ setTestOutput([]);
130
+ setTestRun(null);
131
+ }
132
+ const maxOffset = Math.max(0, lines.length - visibleLines);
133
+ if (key.pageUp) {
134
+ setScrollOffset((prev) => Math.min(prev + visibleLines, maxOffset));
135
+ }
136
+ if (key.pageDown) {
137
+ setScrollOffset((prev) => Math.max(prev - visibleLines, 0));
138
+ }
139
+ if (input === "g") {
140
+ setScrollOffset(maxOffset);
141
+ }
142
+ if (input === "G") {
143
+ setScrollOffset(0);
144
+ }
145
+ if (input === "," && onNextLog) {
146
+ fs.unwatchFile(logFilePath);
147
+ onNextLog();
148
+ exit();
149
+ }
150
+ if (input === "." && onPrevLog) {
151
+ fs.unwatchFile(logFilePath);
152
+ onPrevLog();
153
+ exit();
154
+ }
155
+ });
156
+ const startIndex = Math.max(0, lines.length - visibleLines - scrollOffset);
157
+ const visible = lines.slice(startIndex, startIndex + visibleLines);
158
+ const shortPath = logFilePath.split("/").slice(-2).join("/");
159
+ const visibleTestOutput = testOutput.slice(-testOutputLines);
160
+ const getLineColor = (line) => {
161
+ if (/error|panic|fail/i.test(line))
162
+ return "red";
163
+ if (/warn/i.test(line))
164
+ return "yellow";
165
+ return "white";
166
+ };
167
+ const truncate = (text, maxLen) => {
168
+ return text.length > maxLen ? `${text.slice(0, maxLen - 1)}…` : text;
169
+ };
170
+ return (_jsxs(Box, { flexDirection: "column", height: terminalRows, children: [_jsxs(Box, { borderStyle: "single", borderColor: paused ? "yellow" : "green", paddingX: 1, children: [_jsx(Text, { color: paused ? "yellow" : "green", bold: true, children: paused ? "PAUSED" : "LIVE" }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: shortPath }), _jsx(Text, { children: " " }), _jsxs(Text, { dimColor: true, children: ["(", lines.length, " lines)"] }), zombieInfo && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { color: "cyan", children: ["[", zombieInfo.currentNode, " ", zombieInfo.position, "/", zombieInfo.total, "]"] })] })), scrollOffset > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { color: "yellow", children: ["\u2191", scrollOffset] })] }))] }), _jsxs(Box, { flexDirection: "column", height: visibleLines, paddingX: 1, children: [visible.map((line, i) => (_jsx(Text, { color: getLineColor(line), wrap: "truncate", children: truncate(line, terminalCols - 4) }, startIndex + i))), visible.length === 0 && _jsx(Text, { dimColor: true, children: "Waiting for logs..." })] }), showTestPanel && (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: testing ? "magenta" : "blue", children: [_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: testing ? "magenta" : "blue", bold: true, children: testing ? "TESTING..." : "TESTS" }), testRun && (_jsxs(_Fragment, { children: [testRun.done && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(Text, { color: "green", children: "done" })] })), testRun.pattern && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { dimColor: true, children: ["(", testRun.pattern, ")"] })] }))] }))] }), _jsx(Box, { flexDirection: "column", height: testOutputLines, paddingX: 1, overflow: "hidden", children: visibleTestOutput.map((line, i) => (_jsx(Text, { wrap: "truncate", dimColor: true, children: truncate(line, terminalCols - 4) }, i))) })] })), grepMode ? (_jsxs(Box, { paddingX: 1, borderStyle: "single", borderColor: "cyan", children: [_jsx(Text, { color: "cyan", children: "Grep pattern: " }), _jsx(Text, { children: grepInput }), _jsx(Text, { color: "cyan", children: "\u258B" }), _jsx(Text, { dimColor: true, children: " (Enter=run, Esc=cancel)" })] })) : (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { dimColor: true, children: ["q:quit t:test T:grep", showTestPanel && " c:clear", " p:pause r:resume g:top G:bottom PgUp/PgDn", onNextLog && " ,/.:node"] }) }))] }));
171
+ };
@@ -0,0 +1,6 @@
1
+ export type RunCommandArgs = {
2
+ envName: string;
3
+ GrepTest?: string;
4
+ subDirectory?: string;
5
+ };
6
+ //# sourceMappingURL=entrypoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/entrypoint.ts"],"names":[],"mappings":"AAkDA,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
@@ -0,0 +1,192 @@
1
+ import dotenv from "dotenv";
2
+ import yargs from "yargs";
3
+ import { hideBin } from "yargs/helpers";
4
+ import { fetchArtifact, deriveTestIds, generateConfig, } from "../internal/index.js";
5
+ import { main } from "./main.js";
6
+ import { runNetworkCmd } from "./runNetwork.js";
7
+ import { testCmd } from "./runTests.js";
8
+ import { configSetup } from "../lib/configReader.js";
9
+ dotenv.config({
10
+ quiet: true,
11
+ });
12
+ function handleCursor() {
13
+ const hideCursor = "\x1B[?25l";
14
+ const showCursor = "\x1B[?25h";
15
+ process.stdout.write(hideCursor);
16
+ process.on("exit", () => {
17
+ process.stdout.write(showCursor);
18
+ });
19
+ process.on("SIGINT", async () => {
20
+ process.stdout.write(showCursor);
21
+ global.MOONWALL_TERMINATION_REASON = "cancelled by user";
22
+ // Import dynamically to avoid circular dependency
23
+ const { MoonwallContext } = await import("../lib/globalContext.js");
24
+ await MoonwallContext.destroy("cancelled by user");
25
+ process.exit(130); // Standard exit code for SIGINT
26
+ });
27
+ process.on("SIGTERM", async () => {
28
+ process.stdout.write(showCursor);
29
+ global.MOONWALL_TERMINATION_REASON = "terminated by system";
30
+ // Import dynamically to avoid circular dependency
31
+ const { MoonwallContext } = await import("../lib/globalContext.js");
32
+ await MoonwallContext.destroy("terminated by system");
33
+ process.exit(143); // Standard exit code for SIGTERM
34
+ });
35
+ }
36
+ handleCursor();
37
+ configSetup(process.argv);
38
+ yargs(hideBin(process.argv))
39
+ .wrap(null)
40
+ .usage("Usage: $0")
41
+ .version("2.0.0")
42
+ .options({
43
+ configFile: {
44
+ type: "string",
45
+ alias: "c",
46
+ description: "path to MoonwallConfig file",
47
+ default: "moonwall.config.json",
48
+ },
49
+ })
50
+ .command("init", "Run tests for a given Environment", (yargs) => yargs.option("acceptAllDefaults", {
51
+ type: "boolean",
52
+ description: "Accept all defaults",
53
+ alias: "A",
54
+ }), async (argv) => {
55
+ await generateConfig(argv);
56
+ })
57
+ .command("download <bin> [ver] [path]", "Download x86 artifact from GitHub", (yargs) => {
58
+ return yargs
59
+ .positional("bin", {
60
+ describe: "Name of artifact to download\n[ moonbeam | polkadot | *-runtime ]",
61
+ type: "string",
62
+ })
63
+ .positional("ver", {
64
+ describe: "Artifact version to download",
65
+ type: "string",
66
+ default: "latest",
67
+ })
68
+ .positional("path", {
69
+ describe: "Path where to save artifacts",
70
+ type: "string",
71
+ default: "./",
72
+ })
73
+ .option("overwrite", {
74
+ describe: "If file exists, should it be overwritten?",
75
+ type: "boolean",
76
+ alias: "d",
77
+ default: false,
78
+ })
79
+ .option("output-name", {
80
+ describe: "Rename downloaded file to this name",
81
+ alias: "o",
82
+ type: "string",
83
+ });
84
+ }, async (argv) => {
85
+ await fetchArtifact(argv);
86
+ })
87
+ .command("test <envName> [GrepTest]", "Run tests for a given Environment", (yargs) => {
88
+ return yargs
89
+ .positional("envName", {
90
+ describe: "Network environment to run tests against",
91
+ array: true,
92
+ string: true,
93
+ })
94
+ .positional("GrepTest", {
95
+ type: "string",
96
+ description: "Pattern to grep test ID/Description to run",
97
+ })
98
+ .option("subDirectory", {
99
+ describe: "Additional sub-directory filter for test suites",
100
+ alias: "d",
101
+ type: "string",
102
+ })
103
+ .option("testShard", {
104
+ describe: "Test Shard info for CI",
105
+ alias: "ts",
106
+ type: "string",
107
+ })
108
+ .option("update", {
109
+ describe: "Update all snapshots",
110
+ alias: "u",
111
+ type: "boolean",
112
+ })
113
+ .option("vitestArgPassthrough", {
114
+ describe: "Arguments to pass directly to Vitest (space-delimited)",
115
+ alias: "vitest",
116
+ type: "string",
117
+ });
118
+ }, async (args) => {
119
+ if (args.envName) {
120
+ process.env.MOON_RUN_SCRIPTS = "true";
121
+ if (!(await testCmd(args.envName.toString(), {
122
+ testNamePattern: args.GrepTest,
123
+ subDirectory: args.subDirectory,
124
+ shard: args.testShard,
125
+ update: args.update,
126
+ vitestPassthroughArgs: args.vitestArgPassthrough?.split(" "),
127
+ }))) {
128
+ process.exitCode = 1;
129
+ }
130
+ }
131
+ else {
132
+ console.log("❌ No environment specified");
133
+ console.log(`👉 Run 'pnpm moonwall --help' for more information`);
134
+ process.exitCode = 1;
135
+ }
136
+ })
137
+ .command("run <envName> [GrepTest]", "Start new network found in global config", (yargs) => {
138
+ return yargs
139
+ .positional("envName", {
140
+ describe: "Network environment to start. Must be defined in the global config file.",
141
+ type: "string",
142
+ })
143
+ .positional("GrepTest", {
144
+ type: "string",
145
+ description: "Pattern to grep test ID/Description to run",
146
+ })
147
+ .option("subDirectory", {
148
+ describe: "Additional sub-directory filter for test suites",
149
+ alias: "d",
150
+ type: "string",
151
+ });
152
+ }, async (argv) => {
153
+ process.env.MOON_RUN_SCRIPTS = "true";
154
+ await runNetworkCmd(argv);
155
+ })
156
+ .command("derive <suitesRootDir>", "Derive test IDs based on positional order in the directory tree", (yargs) => {
157
+ return yargs
158
+ .positional("suitesRootDir", {
159
+ describe: "Root directory of the suites",
160
+ type: "string",
161
+ })
162
+ .option("prefixPhrase", {
163
+ describe: "Root phrase to generate prefixes from (e.g. DEV)",
164
+ alias: "p",
165
+ type: "string",
166
+ })
167
+ .option("singlePrefix", {
168
+ describe: "Use a single prefix for all suites, instead of deriving from folder names",
169
+ alias: "l",
170
+ default: false,
171
+ type: "boolean",
172
+ });
173
+ }, async ({ suitesRootDir, prefixPhrase, singlePrefix }) => {
174
+ await deriveTestIds({
175
+ rootDir: suitesRootDir,
176
+ prefixPhrase,
177
+ singlePrefix,
178
+ });
179
+ })
180
+ .demandCommand(1)
181
+ .fail(async (msg) => {
182
+ console.log(msg);
183
+ await main();
184
+ })
185
+ .help("h")
186
+ .alias("h", "help")
187
+ .parseAsync()
188
+ .then(async () => {
189
+ if (process.env.MOON_EXIT) {
190
+ process.exit();
191
+ }
192
+ });
@@ -0,0 +1,2 @@
1
+ export declare function resolveChopsticksInteractiveCmdChoice(): Promise<void>;
2
+ //# sourceMappingURL=chopsticksIntCmds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chopsticksIntCmds.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/interactiveCmds/chopsticksIntCmds.ts"],"names":[],"mappings":"AAqBA,wBAAsB,qCAAqC,kBAgJ1D"}
@@ -0,0 +1,117 @@
1
+ import { promises as fsPromises } from "node:fs";
2
+ import { parse } from "yaml";
3
+ import { getEnvironmentFromConfig } from "../../lib/configReader.js";
4
+ import { MoonwallContext } from "../../lib/globalContext.js";
5
+ import { jumpBlocksChopsticks, jumpRoundsChopsticks, jumpToRoundChopsticks, } from "../../../util/index.js";
6
+ import { number, select, Separator } from "@inquirer/prompts";
7
+ import assert from "node:assert";
8
+ export async function resolveChopsticksInteractiveCmdChoice() {
9
+ const config = getEnvironmentFromConfig();
10
+ if (config.foundation.type !== "chopsticks") {
11
+ throw new Error("Only chopsticks is supported, this is a bug please raise an issue.");
12
+ }
13
+ const isMultiChain = config.foundation.launchSpec.length > 1;
14
+ const promptNode = async () => {
15
+ if (config.foundation.type !== "chopsticks") {
16
+ throw new Error("Only chopsticks is supported, this is a bug please raise an issue.");
17
+ }
18
+ const nodes = config.foundation.launchSpec.map(({ name }) => name);
19
+ const name = await select({
20
+ choices: nodes,
21
+ message: "Which network would you like to interact with? ",
22
+ });
23
+ return name;
24
+ };
25
+ const nodeSelected = isMultiChain ? await promptNode() : config.foundation.launchSpec[0].name;
26
+ const ctx = await (await MoonwallContext.getContext()).connectEnvironment();
27
+ const provider = ctx.providers.find((a) => a.type === "polkadotJs" && a.name === nodeSelected);
28
+ if (!provider) {
29
+ throw new Error(`Provider ${nodeSelected} not found. Verify moonwall config has matching pair of launchSpec and Connection names.`);
30
+ }
31
+ const api = provider.api;
32
+ const ports = await Promise.all(config.foundation.launchSpec
33
+ .filter(({ name }) => name === nodeSelected)
34
+ .map(async ({ configPath }) => {
35
+ const yaml = parse((await fsPromises.readFile(configPath)).toString());
36
+ return yaml.port || "8000";
37
+ }));
38
+ const port = Number.parseInt(ports[0], 10);
39
+ const choices = [
40
+ { name: "🆗 Create Block", value: "createblock" },
41
+ { name: "➡️ Create N Blocks", value: "createNBlocks" },
42
+ ];
43
+ const containsPallet = (polkadotJsApi, palletName) => {
44
+ const metadata = polkadotJsApi.runtimeMetadata.asLatest;
45
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === palletName);
46
+ return systemPalletIndex !== -1;
47
+ };
48
+ if (containsPallet(api, "ParachainStaking")) {
49
+ choices.push(...[
50
+ { name: "🔼 Jump To Round", value: "jumpToRound" },
51
+ { name: "⏫ Jump N Rounds", value: "jumpRounds" },
52
+ ]);
53
+ }
54
+ choices.push(...[new Separator(), { name: "🔙 Go Back", value: "back" }]);
55
+ const cmd = await select({
56
+ choices,
57
+ message: "What command would you like to run? ",
58
+ default: "createBlock",
59
+ });
60
+ switch (cmd) {
61
+ case "createblock":
62
+ try {
63
+ await jumpBlocksChopsticks(port, 1);
64
+ }
65
+ catch (e) {
66
+ console.error(e.message);
67
+ }
68
+ break;
69
+ case "createNBlocks": {
70
+ try {
71
+ const nBlocks = await number({
72
+ message: "How many blocks? ",
73
+ });
74
+ assert(typeof nBlocks === "number", "Number must be a number");
75
+ assert(nBlocks > 0, "Number must be greater than 0");
76
+ await jumpBlocksChopsticks(port, nBlocks);
77
+ }
78
+ catch (e) {
79
+ console.error(e.message);
80
+ }
81
+ break;
82
+ }
83
+ case "jumpToRound": {
84
+ try {
85
+ const round = await number({
86
+ message: "Which round to jump to (in future)? ",
87
+ });
88
+ assert(typeof round === "number", "Number must be a number");
89
+ assert(round > 0, "Number must be greater than 0");
90
+ console.log("💤 This may take a while....");
91
+ await jumpToRoundChopsticks(api, port, round);
92
+ }
93
+ catch (e) {
94
+ console.error(e.message);
95
+ }
96
+ break;
97
+ }
98
+ case "jumpRounds": {
99
+ try {
100
+ const rounds = await number({
101
+ message: "How many rounds? ",
102
+ });
103
+ assert(typeof rounds === "number", "Number must be a number");
104
+ assert(rounds > 0, "Number must be greater than 0");
105
+ console.log("💤 This may take a while....");
106
+ await jumpRoundsChopsticks(api, port, rounds);
107
+ }
108
+ catch (e) {
109
+ console.error(e.message);
110
+ }
111
+ break;
112
+ }
113
+ case "back":
114
+ break;
115
+ }
116
+ return;
117
+ }
@@ -0,0 +1,2 @@
1
+ export declare function resolveDevInteractiveCmdChoice(): Promise<void>;
2
+ //# sourceMappingURL=devIntCmds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devIntCmds.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/interactiveCmds/devIntCmds.ts"],"names":[],"mappings":"AAMA,wBAAsB,8BAA8B,kBAwHnD"}
@@ -0,0 +1,103 @@
1
+ import { MoonwallContext } from "../../lib/globalContext.js";
2
+ import { jumpRoundsDev, jumpToRoundDev } from "../../../util/index.js";
3
+ import { Separator, rawlist, number } from "@inquirer/prompts";
4
+ import assert from "node:assert";
5
+ export async function resolveDevInteractiveCmdChoice() {
6
+ const ctx = await (await MoonwallContext.getContext()).connectEnvironment();
7
+ const prov = ctx.providers.find((a) => a.type === "polkadotJs");
8
+ if (!prov) {
9
+ throw new Error("Provider not found. This is a bug, please raise an issue.");
10
+ }
11
+ const api = prov.api;
12
+ const choices = [
13
+ { name: "🆗 Create Block", value: "createblock" },
14
+ { name: "🆕 Create Unfinalized Block", value: "createUnfinalizedBlock" },
15
+ { name: "➡️ Create N Blocks", value: "createNBlocks" },
16
+ ];
17
+ const containsPallet = (polkadotJsApi, palletName) => {
18
+ const metadata = polkadotJsApi.runtimeMetadata.asLatest;
19
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === palletName);
20
+ return systemPalletIndex !== -1;
21
+ };
22
+ if (containsPallet(api, "ParachainStaking")) {
23
+ choices.push(...[
24
+ { name: "🔼 Jump To Round", value: "jumpToRound" },
25
+ { name: "⏫ Jump N Rounds", value: "jumpRounds" },
26
+ ]);
27
+ }
28
+ choices.push(...[new Separator(), { name: "🔙 Go Back", value: "back" }]);
29
+ const choice = await rawlist({
30
+ choices,
31
+ message: "What command would you like to run? ",
32
+ });
33
+ switch (choice) {
34
+ case "createblock":
35
+ try {
36
+ await api.rpc.engine.createBlock(true, true);
37
+ }
38
+ catch (e) {
39
+ console.error(e);
40
+ }
41
+ break;
42
+ case "createUnfinalizedBlock":
43
+ try {
44
+ await api.rpc.engine.createBlock(true, false);
45
+ }
46
+ catch (e) {
47
+ console.error(e);
48
+ }
49
+ break;
50
+ case "createNBlocks": {
51
+ try {
52
+ const result = await number({
53
+ message: "How many blocks? ",
54
+ });
55
+ assert(typeof result === "number", "result should be a number");
56
+ assert(result > 0, "result should be greater than 0");
57
+ const executeSequentially = async (remaining) => {
58
+ if (remaining === 0) {
59
+ return;
60
+ }
61
+ await api.rpc.engine.createBlock(true, true);
62
+ await executeSequentially(remaining - 1);
63
+ };
64
+ await executeSequentially(result);
65
+ }
66
+ catch (e) {
67
+ console.error(e);
68
+ }
69
+ break;
70
+ }
71
+ case "jumpToRound": {
72
+ try {
73
+ const round = await number({
74
+ message: "Which round to jump to (in future)? ",
75
+ });
76
+ assert(typeof round === "number", "round should be a number");
77
+ assert(round > 0, "round should be greater than 0");
78
+ await jumpToRoundDev(api, round);
79
+ }
80
+ catch (e) {
81
+ console.error(e);
82
+ }
83
+ break;
84
+ }
85
+ case "jumpRounds": {
86
+ try {
87
+ const rounds = await number({
88
+ message: "How many rounds? ",
89
+ });
90
+ assert(typeof rounds === "number", "rounds should be a number");
91
+ assert(rounds > 0, "rounds should be greater than 0");
92
+ await jumpRoundsDev(api, rounds);
93
+ }
94
+ catch (e) {
95
+ console.error(e);
96
+ }
97
+ break;
98
+ }
99
+ case "back":
100
+ break;
101
+ }
102
+ return;
103
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./chopsticksIntCmds.js";
2
+ export * from "./devIntCmds.js";
3
+ export * from "./zombieIntCmds.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/interactiveCmds/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,gCAAgC;AAChC,mCAAmC"}
@@ -0,0 +1,3 @@
1
+ export * from "./chopsticksIntCmds.js";
2
+ export * from "./devIntCmds.js";
3
+ export * from "./zombieIntCmds.js";
@@ -0,0 +1,2 @@
1
+ export declare function resolveZombieInteractiveCmdChoice(): Promise<void>;
2
+ //# sourceMappingURL=zombieIntCmds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zombieIntCmds.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/interactiveCmds/zombieIntCmds.ts"],"names":[],"mappings":"AAGA,wBAAsB,iCAAiC,kBA+BtD"}
@@ -0,0 +1,32 @@
1
+ import { sendIpcMessage } from "../../internal/foundations/index.js";
2
+ import { input, select, Separator } from "@inquirer/prompts";
3
+ export async function resolveZombieInteractiveCmdChoice() {
4
+ const cmd = await select({
5
+ choices: [
6
+ { name: "♻️ Restart Node", value: "restart" },
7
+ { name: "🗡️ Kill Node", value: "kill" },
8
+ new Separator(),
9
+ { name: "🔙 Go Back", value: "back" },
10
+ ],
11
+ message: "What command would you like to run? ",
12
+ default: "back",
13
+ });
14
+ if (cmd === "back") {
15
+ return;
16
+ }
17
+ const whichNode = await input({
18
+ message: `Which node would you like to ${cmd}? `,
19
+ });
20
+ try {
21
+ await sendIpcMessage({
22
+ cmd: cmd,
23
+ nodeName: whichNode,
24
+ text: `Running ${cmd} on ${whichNode}`,
25
+ });
26
+ }
27
+ catch (e) {
28
+ console.error("Error: ");
29
+ console.error(e.message);
30
+ }
31
+ return;
32
+ }
@@ -0,0 +1,2 @@
1
+ export declare function main(): Promise<void>;
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/main.ts"],"names":[],"mappings":"AAkCA,wBAAsB,IAAI,kBAWzB"}