@wasmsoft/fantastic 1.0.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 (456) hide show
  1. package/README.md +65 -0
  2. package/bin/run.js +27 -0
  3. package/bin/supervisor.js +65 -0
  4. package/dist/acquire/central-url.d.ts +9 -0
  5. package/dist/acquire/central-url.d.ts.map +1 -0
  6. package/dist/acquire/central-url.js +74 -0
  7. package/dist/acquire/central-url.js.map +1 -0
  8. package/dist/acquire/code.d.ts +21 -0
  9. package/dist/acquire/code.d.ts.map +1 -0
  10. package/dist/acquire/code.js +66 -0
  11. package/dist/acquire/code.js.map +1 -0
  12. package/dist/acquire/compatibility.d.ts +18 -0
  13. package/dist/acquire/compatibility.d.ts.map +1 -0
  14. package/dist/acquire/compatibility.js +36 -0
  15. package/dist/acquire/compatibility.js.map +1 -0
  16. package/dist/acquire/fetch.d.ts +26 -0
  17. package/dist/acquire/fetch.d.ts.map +1 -0
  18. package/dist/acquire/fetch.js +72 -0
  19. package/dist/acquire/fetch.js.map +1 -0
  20. package/dist/acquire/latest.d.ts +24 -0
  21. package/dist/acquire/latest.d.ts.map +1 -0
  22. package/dist/acquire/latest.js +95 -0
  23. package/dist/acquire/latest.js.map +1 -0
  24. package/dist/backup/archive.d.ts +26 -0
  25. package/dist/backup/archive.d.ts.map +1 -0
  26. package/dist/backup/archive.js +123 -0
  27. package/dist/backup/archive.js.map +1 -0
  28. package/dist/backup/restore.d.ts +46 -0
  29. package/dist/backup/restore.d.ts.map +1 -0
  30. package/dist/backup/restore.js +164 -0
  31. package/dist/backup/restore.js.map +1 -0
  32. package/dist/base-command.d.ts +54 -0
  33. package/dist/base-command.d.ts.map +1 -0
  34. package/dist/base-command.js +120 -0
  35. package/dist/base-command.js.map +1 -0
  36. package/dist/bundle-format/index.d.ts +6 -0
  37. package/dist/bundle-format/index.d.ts.map +1 -0
  38. package/dist/bundle-format/index.js +36 -0
  39. package/dist/bundle-format/index.js.map +1 -0
  40. package/dist/commands/activate.d.ts +15 -0
  41. package/dist/commands/activate.d.ts.map +1 -0
  42. package/dist/commands/activate.js +139 -0
  43. package/dist/commands/activate.js.map +1 -0
  44. package/dist/commands/backup.d.ts +11 -0
  45. package/dist/commands/backup.d.ts.map +1 -0
  46. package/dist/commands/backup.js +75 -0
  47. package/dist/commands/backup.js.map +1 -0
  48. package/dist/commands/config/get.d.ts +10 -0
  49. package/dist/commands/config/get.d.ts.map +1 -0
  50. package/dist/commands/config/get.js +33 -0
  51. package/dist/commands/config/get.js.map +1 -0
  52. package/dist/commands/config/list.d.ts +7 -0
  53. package/dist/commands/config/list.d.ts.map +1 -0
  54. package/dist/commands/config/list.js +43 -0
  55. package/dist/commands/config/list.js.map +1 -0
  56. package/dist/commands/config/set.d.ts +11 -0
  57. package/dist/commands/config/set.d.ts.map +1 -0
  58. package/dist/commands/config/set.js +56 -0
  59. package/dist/commands/config/set.js.map +1 -0
  60. package/dist/commands/db/migrate.d.ts +10 -0
  61. package/dist/commands/db/migrate.d.ts.map +1 -0
  62. package/dist/commands/db/migrate.js +67 -0
  63. package/dist/commands/db/migrate.js.map +1 -0
  64. package/dist/commands/dev.d.ts +19 -0
  65. package/dist/commands/dev.d.ts.map +1 -0
  66. package/dist/commands/dev.js +149 -0
  67. package/dist/commands/dev.js.map +1 -0
  68. package/dist/commands/doctor.d.ts +11 -0
  69. package/dist/commands/doctor.d.ts.map +1 -0
  70. package/dist/commands/doctor.js +75 -0
  71. package/dist/commands/doctor.js.map +1 -0
  72. package/dist/commands/health.d.ts +12 -0
  73. package/dist/commands/health.d.ts.map +1 -0
  74. package/dist/commands/health.js +109 -0
  75. package/dist/commands/health.js.map +1 -0
  76. package/dist/commands/install.d.ts +60 -0
  77. package/dist/commands/install.d.ts.map +1 -0
  78. package/dist/commands/install.js +486 -0
  79. package/dist/commands/install.js.map +1 -0
  80. package/dist/commands/iptv/snapshot.d.ts +10 -0
  81. package/dist/commands/iptv/snapshot.d.ts.map +1 -0
  82. package/dist/commands/iptv/snapshot.js +55 -0
  83. package/dist/commands/iptv/snapshot.js.map +1 -0
  84. package/dist/commands/library/drives.d.ts +7 -0
  85. package/dist/commands/library/drives.d.ts.map +1 -0
  86. package/dist/commands/library/drives.js +71 -0
  87. package/dist/commands/library/drives.js.map +1 -0
  88. package/dist/commands/library/relink.d.ts +10 -0
  89. package/dist/commands/library/relink.d.ts.map +1 -0
  90. package/dist/commands/library/relink.js +72 -0
  91. package/dist/commands/library/relink.js.map +1 -0
  92. package/dist/commands/library/scan.d.ts +16 -0
  93. package/dist/commands/library/scan.d.ts.map +1 -0
  94. package/dist/commands/library/scan.js +87 -0
  95. package/dist/commands/library/scan.js.map +1 -0
  96. package/dist/commands/library/sections.d.ts +7 -0
  97. package/dist/commands/library/sections.d.ts.map +1 -0
  98. package/dist/commands/library/sections.js +33 -0
  99. package/dist/commands/library/sections.js.map +1 -0
  100. package/dist/commands/library/status.d.ts +7 -0
  101. package/dist/commands/library/status.d.ts.map +1 -0
  102. package/dist/commands/library/status.js +37 -0
  103. package/dist/commands/library/status.js.map +1 -0
  104. package/dist/commands/list.d.ts +7 -0
  105. package/dist/commands/list.d.ts.map +1 -0
  106. package/dist/commands/list.js +73 -0
  107. package/dist/commands/list.js.map +1 -0
  108. package/dist/commands/live/channels.d.ts +10 -0
  109. package/dist/commands/live/channels.d.ts.map +1 -0
  110. package/dist/commands/live/channels.js +55 -0
  111. package/dist/commands/live/channels.js.map +1 -0
  112. package/dist/commands/live/test.d.ts +15 -0
  113. package/dist/commands/live/test.d.ts.map +1 -0
  114. package/dist/commands/live/test.js +116 -0
  115. package/dist/commands/live/test.js.map +1 -0
  116. package/dist/commands/logs.d.ts +16 -0
  117. package/dist/commands/logs.d.ts.map +1 -0
  118. package/dist/commands/logs.js +77 -0
  119. package/dist/commands/logs.js.map +1 -0
  120. package/dist/commands/migrate-cli.d.ts +11 -0
  121. package/dist/commands/migrate-cli.d.ts.map +1 -0
  122. package/dist/commands/migrate-cli.js +116 -0
  123. package/dist/commands/migrate-cli.js.map +1 -0
  124. package/dist/commands/owner/reset.d.ts +7 -0
  125. package/dist/commands/owner/reset.d.ts.map +1 -0
  126. package/dist/commands/owner/reset.js +74 -0
  127. package/dist/commands/owner/reset.js.map +1 -0
  128. package/dist/commands/restart.d.ts +11 -0
  129. package/dist/commands/restart.d.ts.map +1 -0
  130. package/dist/commands/restart.js +53 -0
  131. package/dist/commands/restart.js.map +1 -0
  132. package/dist/commands/restore.d.ts +17 -0
  133. package/dist/commands/restore.d.ts.map +1 -0
  134. package/dist/commands/restore.js +148 -0
  135. package/dist/commands/restore.js.map +1 -0
  136. package/dist/commands/self-update.d.ts +10 -0
  137. package/dist/commands/self-update.d.ts.map +1 -0
  138. package/dist/commands/self-update.js +98 -0
  139. package/dist/commands/self-update.js.map +1 -0
  140. package/dist/commands/setup.d.ts +19 -0
  141. package/dist/commands/setup.d.ts.map +1 -0
  142. package/dist/commands/setup.js +111 -0
  143. package/dist/commands/setup.js.map +1 -0
  144. package/dist/commands/shell.d.ts +118 -0
  145. package/dist/commands/shell.d.ts.map +1 -0
  146. package/dist/commands/shell.js +415 -0
  147. package/dist/commands/shell.js.map +1 -0
  148. package/dist/commands/start.d.ts +12 -0
  149. package/dist/commands/start.d.ts.map +1 -0
  150. package/dist/commands/start.js +108 -0
  151. package/dist/commands/start.js.map +1 -0
  152. package/dist/commands/status.d.ts +8 -0
  153. package/dist/commands/status.d.ts.map +1 -0
  154. package/dist/commands/status.js +115 -0
  155. package/dist/commands/status.js.map +1 -0
  156. package/dist/commands/stop.d.ts +11 -0
  157. package/dist/commands/stop.d.ts.map +1 -0
  158. package/dist/commands/stop.js +45 -0
  159. package/dist/commands/stop.js.map +1 -0
  160. package/dist/commands/stream/cancel.d.ts +13 -0
  161. package/dist/commands/stream/cancel.d.ts.map +1 -0
  162. package/dist/commands/stream/cancel.js +31 -0
  163. package/dist/commands/stream/cancel.js.map +1 -0
  164. package/dist/commands/stream/encoders.d.ts +7 -0
  165. package/dist/commands/stream/encoders.d.ts.map +1 -0
  166. package/dist/commands/stream/encoders.js +42 -0
  167. package/dist/commands/stream/encoders.js.map +1 -0
  168. package/dist/commands/stream/queue.d.ts +7 -0
  169. package/dist/commands/stream/queue.d.ts.map +1 -0
  170. package/dist/commands/stream/queue.js +52 -0
  171. package/dist/commands/stream/queue.js.map +1 -0
  172. package/dist/commands/stream/sessions.d.ts +7 -0
  173. package/dist/commands/stream/sessions.d.ts.map +1 -0
  174. package/dist/commands/stream/sessions.js +44 -0
  175. package/dist/commands/stream/sessions.js.map +1 -0
  176. package/dist/commands/uninstall.d.ts +23 -0
  177. package/dist/commands/uninstall.d.ts.map +1 -0
  178. package/dist/commands/uninstall.js +290 -0
  179. package/dist/commands/uninstall.js.map +1 -0
  180. package/dist/commands/update.d.ts +21 -0
  181. package/dist/commands/update.d.ts.map +1 -0
  182. package/dist/commands/update.js +290 -0
  183. package/dist/commands/update.js.map +1 -0
  184. package/dist/commands/watch.d.ts +10 -0
  185. package/dist/commands/watch.d.ts.map +1 -0
  186. package/dist/commands/watch.js +38 -0
  187. package/dist/commands/watch.js.map +1 -0
  188. package/dist/config/local-config.d.ts +22 -0
  189. package/dist/config/local-config.d.ts.map +1 -0
  190. package/dist/config/local-config.js +79 -0
  191. package/dist/config/local-config.js.map +1 -0
  192. package/dist/core-scripts/run.d.ts +22 -0
  193. package/dist/core-scripts/run.d.ts.map +1 -0
  194. package/dist/core-scripts/run.js +65 -0
  195. package/dist/core-scripts/run.js.map +1 -0
  196. package/dist/doctor/check.types.d.ts +51 -0
  197. package/dist/doctor/check.types.d.ts.map +1 -0
  198. package/dist/doctor/check.types.js +14 -0
  199. package/dist/doctor/check.types.js.map +1 -0
  200. package/dist/doctor/checks/core.check.d.ts +11 -0
  201. package/dist/doctor/checks/core.check.d.ts.map +1 -0
  202. package/dist/doctor/checks/core.check.js +104 -0
  203. package/dist/doctor/checks/core.check.js.map +1 -0
  204. package/dist/doctor/checks/data.check.d.ts +11 -0
  205. package/dist/doctor/checks/data.check.d.ts.map +1 -0
  206. package/dist/doctor/checks/data.check.js +70 -0
  207. package/dist/doctor/checks/data.check.js.map +1 -0
  208. package/dist/doctor/checks/environment.check.d.ts +6 -0
  209. package/dist/doctor/checks/environment.check.d.ts.map +1 -0
  210. package/dist/doctor/checks/environment.check.js +70 -0
  211. package/dist/doctor/checks/environment.check.js.map +1 -0
  212. package/dist/doctor/checks/integrity.check.d.ts +4 -0
  213. package/dist/doctor/checks/integrity.check.d.ts.map +1 -0
  214. package/dist/doctor/checks/integrity.check.js +89 -0
  215. package/dist/doctor/checks/integrity.check.js.map +1 -0
  216. package/dist/doctor/checks/isolation.check.d.ts +49 -0
  217. package/dist/doctor/checks/isolation.check.d.ts.map +1 -0
  218. package/dist/doctor/checks/isolation.check.js +220 -0
  219. package/dist/doctor/checks/isolation.check.js.map +1 -0
  220. package/dist/doctor/checks/licence.check.d.ts +8 -0
  221. package/dist/doctor/checks/licence.check.d.ts.map +1 -0
  222. package/dist/doctor/checks/licence.check.js +172 -0
  223. package/dist/doctor/checks/licence.check.js.map +1 -0
  224. package/dist/doctor/checks/ports.check.d.ts +4 -0
  225. package/dist/doctor/checks/ports.check.d.ts.map +1 -0
  226. package/dist/doctor/checks/ports.check.js +52 -0
  227. package/dist/doctor/checks/ports.check.js.map +1 -0
  228. package/dist/doctor/checks/supervisor.check.d.ts +19 -0
  229. package/dist/doctor/checks/supervisor.check.d.ts.map +1 -0
  230. package/dist/doctor/checks/supervisor.check.js +152 -0
  231. package/dist/doctor/checks/supervisor.check.js.map +1 -0
  232. package/dist/doctor/checks/tooling.check.d.ts +3 -0
  233. package/dist/doctor/checks/tooling.check.d.ts.map +1 -0
  234. package/dist/doctor/checks/tooling.check.js +43 -0
  235. package/dist/doctor/checks/tooling.check.js.map +1 -0
  236. package/dist/doctor/registry.d.ts +15 -0
  237. package/dist/doctor/registry.d.ts.map +1 -0
  238. package/dist/doctor/registry.js +53 -0
  239. package/dist/doctor/registry.js.map +1 -0
  240. package/dist/exit-codes.d.ts +18 -0
  241. package/dist/exit-codes.d.ts.map +1 -0
  242. package/dist/exit-codes.js +23 -0
  243. package/dist/exit-codes.js.map +1 -0
  244. package/dist/index.d.ts +2 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +16 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/logs/sink.d.ts +11 -0
  249. package/dist/logs/sink.d.ts.map +1 -0
  250. package/dist/logs/sink.js +73 -0
  251. package/dist/logs/sink.js.map +1 -0
  252. package/dist/logs/tail.d.ts +17 -0
  253. package/dist/logs/tail.d.ts.map +1 -0
  254. package/dist/logs/tail.js +98 -0
  255. package/dist/logs/tail.js.map +1 -0
  256. package/dist/packaging/boot-task.d.ts +56 -0
  257. package/dist/packaging/boot-task.d.ts.map +1 -0
  258. package/dist/packaging/boot-task.js +151 -0
  259. package/dist/packaging/boot-task.js.map +1 -0
  260. package/dist/packaging/install.d.ts +154 -0
  261. package/dist/packaging/install.d.ts.map +1 -0
  262. package/dist/packaging/install.js +381 -0
  263. package/dist/packaging/install.js.map +1 -0
  264. package/dist/packaging/layout.d.ts +153 -0
  265. package/dist/packaging/layout.d.ts.map +1 -0
  266. package/dist/packaging/layout.js +168 -0
  267. package/dist/packaging/layout.js.map +1 -0
  268. package/dist/packaging/machine-path.d.ts +52 -0
  269. package/dist/packaging/machine-path.d.ts.map +1 -0
  270. package/dist/packaging/machine-path.js +237 -0
  271. package/dist/packaging/machine-path.js.map +1 -0
  272. package/dist/packaging/manifest.d.ts +37 -0
  273. package/dist/packaging/manifest.d.ts.map +1 -0
  274. package/dist/packaging/manifest.js +115 -0
  275. package/dist/packaging/manifest.js.map +1 -0
  276. package/dist/packaging/shims.d.ts +31 -0
  277. package/dist/packaging/shims.d.ts.map +1 -0
  278. package/dist/packaging/shims.js +165 -0
  279. package/dist/packaging/shims.js.map +1 -0
  280. package/dist/probes/internal-paths.d.ts +35 -0
  281. package/dist/probes/internal-paths.d.ts.map +1 -0
  282. package/dist/probes/internal-paths.js +58 -0
  283. package/dist/probes/internal-paths.js.map +1 -0
  284. package/dist/probes/internal.client.d.ts +54 -0
  285. package/dist/probes/internal.client.d.ts.map +1 -0
  286. package/dist/probes/internal.client.js +123 -0
  287. package/dist/probes/internal.client.js.map +1 -0
  288. package/dist/probes/port.probe.d.ts +21 -0
  289. package/dist/probes/port.probe.d.ts.map +1 -0
  290. package/dist/probes/port.probe.js +42 -0
  291. package/dist/probes/port.probe.js.map +1 -0
  292. package/dist/probes/service.probe.d.ts +29 -0
  293. package/dist/probes/service.probe.d.ts.map +1 -0
  294. package/dist/probes/service.probe.js +65 -0
  295. package/dist/probes/service.probe.js.map +1 -0
  296. package/dist/profiles/appliance.profile.d.ts +20 -0
  297. package/dist/profiles/appliance.profile.d.ts.map +1 -0
  298. package/dist/profiles/appliance.profile.js +137 -0
  299. package/dist/profiles/appliance.profile.js.map +1 -0
  300. package/dist/profiles/dev.profile.d.ts +22 -0
  301. package/dist/profiles/dev.profile.d.ts.map +1 -0
  302. package/dist/profiles/dev.profile.js +104 -0
  303. package/dist/profiles/dev.profile.js.map +1 -0
  304. package/dist/profiles/resolve.d.ts +37 -0
  305. package/dist/profiles/resolve.d.ts.map +1 -0
  306. package/dist/profiles/resolve.js +198 -0
  307. package/dist/profiles/resolve.js.map +1 -0
  308. package/dist/profiles/types.d.ts +57 -0
  309. package/dist/profiles/types.d.ts.map +1 -0
  310. package/dist/profiles/types.js +15 -0
  311. package/dist/profiles/types.js.map +1 -0
  312. package/dist/registry/local-registry.d.ts +79 -0
  313. package/dist/registry/local-registry.d.ts.map +1 -0
  314. package/dist/registry/local-registry.js +252 -0
  315. package/dist/registry/local-registry.js.map +1 -0
  316. package/dist/render/banner.d.ts +13 -0
  317. package/dist/render/banner.d.ts.map +1 -0
  318. package/dist/render/banner.js +83 -0
  319. package/dist/render/banner.js.map +1 -0
  320. package/dist/render/boot.render.d.ts +123 -0
  321. package/dist/render/boot.render.d.ts.map +1 -0
  322. package/dist/render/boot.render.js +288 -0
  323. package/dist/render/boot.render.js.map +1 -0
  324. package/dist/render/brand.d.ts +16 -0
  325. package/dist/render/brand.d.ts.map +1 -0
  326. package/dist/render/brand.js +22 -0
  327. package/dist/render/brand.js.map +1 -0
  328. package/dist/render/doctor.render.d.ts +12 -0
  329. package/dist/render/doctor.render.d.ts.map +1 -0
  330. package/dist/render/doctor.render.js +95 -0
  331. package/dist/render/doctor.render.js.map +1 -0
  332. package/dist/render/json.d.ts +29 -0
  333. package/dist/render/json.d.ts.map +1 -0
  334. package/dist/render/json.js +19 -0
  335. package/dist/render/json.js.map +1 -0
  336. package/dist/render/licence.render.d.ts +10 -0
  337. package/dist/render/licence.render.d.ts.map +1 -0
  338. package/dist/render/licence.render.js +167 -0
  339. package/dist/render/licence.render.js.map +1 -0
  340. package/dist/render/status.render.d.ts +6 -0
  341. package/dist/render/status.render.d.ts.map +1 -0
  342. package/dist/render/status.render.js +52 -0
  343. package/dist/render/status.render.js.map +1 -0
  344. package/dist/render/theme.d.ts +66 -0
  345. package/dist/render/theme.d.ts.map +1 -0
  346. package/dist/render/theme.js +89 -0
  347. package/dist/render/theme.js.map +1 -0
  348. package/dist/runtime-guard.d.ts +19 -0
  349. package/dist/runtime-guard.d.ts.map +1 -0
  350. package/dist/runtime-guard.js +57 -0
  351. package/dist/runtime-guard.js.map +1 -0
  352. package/dist/shell/input-mode.d.ts +25 -0
  353. package/dist/shell/input-mode.d.ts.map +1 -0
  354. package/dist/shell/input-mode.js +17 -0
  355. package/dist/shell/input-mode.js.map +1 -0
  356. package/dist/shell/parse-line.d.ts +6 -0
  357. package/dist/shell/parse-line.d.ts.map +1 -0
  358. package/dist/shell/parse-line.js +62 -0
  359. package/dist/shell/parse-line.js.map +1 -0
  360. package/dist/shell/suggestions.d.ts +14 -0
  361. package/dist/shell/suggestions.d.ts.map +1 -0
  362. package/dist/shell/suggestions.js +35 -0
  363. package/dist/shell/suggestions.js.map +1 -0
  364. package/dist/supervisor/dependencies.d.ts +2 -0
  365. package/dist/supervisor/dependencies.d.ts.map +1 -0
  366. package/dist/supervisor/dependencies.js +38 -0
  367. package/dist/supervisor/dependencies.js.map +1 -0
  368. package/dist/supervisor/entry.d.ts +36 -0
  369. package/dist/supervisor/entry.d.ts.map +1 -0
  370. package/dist/supervisor/entry.js +171 -0
  371. package/dist/supervisor/entry.js.map +1 -0
  372. package/dist/supervisor/inspect.d.ts +17 -0
  373. package/dist/supervisor/inspect.d.ts.map +1 -0
  374. package/dist/supervisor/inspect.js +39 -0
  375. package/dist/supervisor/inspect.js.map +1 -0
  376. package/dist/supervisor/invocation.d.ts +27 -0
  377. package/dist/supervisor/invocation.d.ts.map +1 -0
  378. package/dist/supervisor/invocation.js +33 -0
  379. package/dist/supervisor/invocation.js.map +1 -0
  380. package/dist/supervisor/monitor.d.ts +63 -0
  381. package/dist/supervisor/monitor.d.ts.map +1 -0
  382. package/dist/supervisor/monitor.js +141 -0
  383. package/dist/supervisor/monitor.js.map +1 -0
  384. package/dist/supervisor/orchestrator.d.ts +52 -0
  385. package/dist/supervisor/orchestrator.d.ts.map +1 -0
  386. package/dist/supervisor/orchestrator.js +154 -0
  387. package/dist/supervisor/orchestrator.js.map +1 -0
  388. package/dist/supervisor/pidfile.d.ts +21 -0
  389. package/dist/supervisor/pidfile.d.ts.map +1 -0
  390. package/dist/supervisor/pidfile.js +39 -0
  391. package/dist/supervisor/pidfile.js.map +1 -0
  392. package/dist/supervisor/process-identity.d.ts +19 -0
  393. package/dist/supervisor/process-identity.d.ts.map +1 -0
  394. package/dist/supervisor/process-identity.js +51 -0
  395. package/dist/supervisor/process-identity.js.map +1 -0
  396. package/dist/supervisor/readiness.d.ts +17 -0
  397. package/dist/supervisor/readiness.d.ts.map +1 -0
  398. package/dist/supervisor/readiness.js +52 -0
  399. package/dist/supervisor/readiness.js.map +1 -0
  400. package/dist/supervisor/restart-consumer.d.ts +37 -0
  401. package/dist/supervisor/restart-consumer.d.ts.map +1 -0
  402. package/dist/supervisor/restart-consumer.js +119 -0
  403. package/dist/supervisor/restart-consumer.js.map +1 -0
  404. package/dist/supervisor/runner.d.ts +2 -0
  405. package/dist/supervisor/runner.d.ts.map +1 -0
  406. package/dist/supervisor/runner.js +118 -0
  407. package/dist/supervisor/runner.js.map +1 -0
  408. package/dist/supervisor/schedule-timer.d.ts +38 -0
  409. package/dist/supervisor/schedule-timer.d.ts.map +1 -0
  410. package/dist/supervisor/schedule-timer.js +148 -0
  411. package/dist/supervisor/schedule-timer.js.map +1 -0
  412. package/dist/supervisor/spawn.d.ts +18 -0
  413. package/dist/supervisor/spawn.d.ts.map +1 -0
  414. package/dist/supervisor/spawn.js +119 -0
  415. package/dist/supervisor/spawn.js.map +1 -0
  416. package/dist/supervisor/state-files.d.ts +33 -0
  417. package/dist/supervisor/state-files.d.ts.map +1 -0
  418. package/dist/supervisor/state-files.js +110 -0
  419. package/dist/supervisor/state-files.js.map +1 -0
  420. package/dist/supervisor/tree-kill.d.ts +14 -0
  421. package/dist/supervisor/tree-kill.d.ts.map +1 -0
  422. package/dist/supervisor/tree-kill.js +82 -0
  423. package/dist/supervisor/tree-kill.js.map +1 -0
  424. package/dist/ui/health-panel.d.ts +8 -0
  425. package/dist/ui/health-panel.d.ts.map +1 -0
  426. package/dist/ui/health-panel.js +91 -0
  427. package/dist/ui/health-panel.js.map +1 -0
  428. package/dist/updating/apply.d.ts +50 -0
  429. package/dist/updating/apply.d.ts.map +1 -0
  430. package/dist/updating/apply.js +172 -0
  431. package/dist/updating/apply.js.map +1 -0
  432. package/dist/updating/download.d.ts +44 -0
  433. package/dist/updating/download.d.ts.map +1 -0
  434. package/dist/updating/download.js +144 -0
  435. package/dist/updating/download.js.map +1 -0
  436. package/dist/updating/rollback.d.ts +33 -0
  437. package/dist/updating/rollback.d.ts.map +1 -0
  438. package/dist/updating/rollback.js +54 -0
  439. package/dist/updating/rollback.js.map +1 -0
  440. package/dist/updating/self.d.ts +16 -0
  441. package/dist/updating/self.d.ts.map +1 -0
  442. package/dist/updating/self.js +50 -0
  443. package/dist/updating/self.js.map +1 -0
  444. package/dist/updating/verify.d.ts +25 -0
  445. package/dist/updating/verify.d.ts.map +1 -0
  446. package/dist/updating/verify.js +51 -0
  447. package/dist/updating/verify.js.map +1 -0
  448. package/dist/updating/versions.d.ts +31 -0
  449. package/dist/updating/versions.d.ts.map +1 -0
  450. package/dist/updating/versions.js +78 -0
  451. package/dist/updating/versions.js.map +1 -0
  452. package/dist/version.d.ts +4 -0
  453. package/dist/version.d.ts.map +1 -0
  454. package/dist/version.js +29 -0
  455. package/dist/version.js.map +1 -0
  456. package/package.json +106 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,iGAAiG;AACjG,mDAAmD;AACnD,+FAA+F;AAC/F,gGAAgG;AAChG,mFAAmF;AAEnF,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY;IACZ,EAAE,EAAE,CAAC;IACL,oCAAoC;IACpC,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,KAAK,EAAE,CAAC;IACR,gDAAgD;IAChD,aAAa,EAAE,CAAC;IAChB,0EAA0E;IAC1E,WAAW,EAAE,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,CAAC;IACb,qFAAqF;IACrF,kBAAkB,EAAE,CAAC;CACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { VERSION } from "./version.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ // AR: مدخل المكتبة، لا مدخل الأمر. الأمر ‎fantastic‎ يدخل من ‎bin/run.js‎ عبر oclif؛ وهذا الملفّ
2
+ // هو ما يراه من يستورد الحزمة بدل أن يشغّلها — ومستهلكه الوحيد اليوم مستودع المنتج.
3
+ //
4
+ // **ولا يُصدَّر منه شيء ثقيل.** الاستيراد هنا يعني تحميل الوحدة عند كل ‎import‎، وأدوات
5
+ // الإصدار في مستودع المنتج لا تحتاج oclif ولا Ink ولا صَدَفة — تحتاج تعريف شكل الحزمة، وهو
6
+ // على مسارٍ فرعيٍّ خاصّ به (‎./bundle-format‎) لهذا السبب بالذات.
7
+ // EN: The library entry point, not the command's. The `fantastic` command enters through
8
+ // bin/run.js via oclif; this file is what someone importing the package rather than running it
9
+ // sees — and its only consumer today is the product repository.
10
+ //
11
+ // **Nothing heavy is exported from here.** An import means loading the module on every
12
+ // `import`, and the product repository's release tooling needs neither oclif nor Ink nor the
13
+ // shell — it needs the bundle-format definition, which lives on its own subpath
14
+ // (`./bundle-format`) for exactly that reason.
15
+ export { VERSION } from "./version.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wFAAwF;AACxF,EAAE;AACF,4FAA4F;AAC5F,+FAA+F;AAC/F,sEAAsE;AACtE,yFAAyF;AACzF,mGAAmG;AACnG,oEAAoE;AACpE,EAAE;AACF,2FAA2F;AAC3F,iGAAiG;AACjG,oFAAoF;AACpF,mDAAmD;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ServiceName } from "../profiles/types.js";
2
+ export declare function logFilePath(logDir: string, service: ServiceName): string;
3
+ /** يدوّر بالحجم: ‎core.log‎ ← ‎core.log.1‎ ← ‎core.log.2‎، ويُسقط الأقدم. */
4
+ export declare function rotateIfNeeded(logDir: string, service: ServiceName, maxBytes?: number): void;
5
+ /**
6
+ * يفتح ملف سجلّ الخدمة للإلحاق ويعيد واصفه. المتّصل مسؤول عن إغلاقه.
7
+ * يُدوَّر الملف قبل الفتح لأن التدوير أثناء الإمساك مستحيل.
8
+ */
9
+ export declare function openLogFd(logDir: string, service: ServiceName): number;
10
+ export declare function closeLogFd(fd: number): void;
11
+ //# sourceMappingURL=sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/logs/sink.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA2BxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAExE;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,SAAY,GAAG,IAAI,CAyB/F;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAItE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM3C"}
@@ -0,0 +1,73 @@
1
+ import { closeSync, existsSync, mkdirSync, openSync, renameSync, rmSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ // AR: مصرف السجلات. الحقيقة المقيسة: النواة تكتب على stdout فقط — ‎LOG_DIR‎ موجود في إعداداتها لكن
4
+ // لا مصرف ملفات موصول به. فالتقاط الـ CLI للمخرَج هو ما يجعل ‎fantastic logs‎ ممكنًا أصلًا.
5
+ //
6
+ // في الوضع المنفصل نمرّر واصف الملف مباشرةً إلى العملية بدل أن نعترض مخرجها: لو اعترضناه لتوقّف
7
+ // التسجيل لحظة خروج الـ CLI. وهذا أيضًا يُنتج ملفًا نظيفًا بلا رموز ANSI، لأن pino-pretty وchalk
8
+ // وVite تُعطّل التلوين تلقائيًا حين لا يكون المخرَج طرفية.
9
+ //
10
+ // المقايضة المعروفة: لا يمكن تدوير ملف مفتوح بواسطة العملية، فالتدوير يقع **عند الإطلاق** لا
11
+ // أثناء التشغيل. جلسة تطوير طويلة جدًا قد تتجاوز السقف حتى إعادة التشغيل التالية.
12
+ // EN: The log sink. The measured fact: the core writes to stdout only — LOG_DIR exists in its config
13
+ // but no file transport is wired to it. The CLI capturing that output is what makes
14
+ // `fantastic logs` possible at all.
15
+ //
16
+ // In detached mode we hand the file descriptor straight to the process instead of intercepting
17
+ // its output: intercepting would stop logging the moment the CLI exits. It also yields a clean
18
+ // file with no ANSI, because pino-pretty, chalk and Vite all disable colour when the output is
19
+ // not a terminal.
20
+ //
21
+ // The known trade-off: a file held open by the process cannot be rotated, so rotation happens
22
+ // **at launch**, not during a run. A very long dev session can exceed the cap until the next
23
+ // restart.
24
+ const MAX_BYTES = 5 * 1024 * 1024;
25
+ const MAX_FILES = 3;
26
+ export function logFilePath(logDir, service) {
27
+ return join(logDir, `${service}.log`);
28
+ }
29
+ /** يدوّر بالحجم: ‎core.log‎ ← ‎core.log.1‎ ← ‎core.log.2‎، ويُسقط الأقدم. */
30
+ export function rotateIfNeeded(logDir, service, maxBytes = MAX_BYTES) {
31
+ const path = logFilePath(logDir, service);
32
+ if (!existsSync(path))
33
+ return;
34
+ let size = 0;
35
+ try {
36
+ size = statSync(path).size;
37
+ }
38
+ catch {
39
+ return;
40
+ }
41
+ if (size < maxBytes)
42
+ return;
43
+ rmSync(`${path}.${MAX_FILES - 1}`, { force: true });
44
+ for (let index = MAX_FILES - 2; index >= 1; index -= 1) {
45
+ const from = `${path}.${index}`;
46
+ if (existsSync(from))
47
+ renameSync(from, `${path}.${index + 1}`);
48
+ }
49
+ try {
50
+ renameSync(path, `${path}.1`);
51
+ }
52
+ catch {
53
+ // الملف قد يكون ممسوكًا بعملية أخرى؛ نتركه ونكمل بدل أن نُفشل الإقلاع من أجل تدوير.
54
+ }
55
+ }
56
+ /**
57
+ * يفتح ملف سجلّ الخدمة للإلحاق ويعيد واصفه. المتّصل مسؤول عن إغلاقه.
58
+ * يُدوَّر الملف قبل الفتح لأن التدوير أثناء الإمساك مستحيل.
59
+ */
60
+ export function openLogFd(logDir, service) {
61
+ mkdirSync(logDir, { recursive: true });
62
+ rotateIfNeeded(logDir, service);
63
+ return openSync(logFilePath(logDir, service), "a");
64
+ }
65
+ export function closeLogFd(fd) {
66
+ try {
67
+ closeSync(fd);
68
+ }
69
+ catch {
70
+ // مغلق سلفًا.
71
+ }
72
+ }
73
+ //# sourceMappingURL=sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/logs/sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,mGAAmG;AACnG,gGAAgG;AAChG,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,+DAA+D;AAC/D,EAAE;AACF,iGAAiG;AACjG,sFAAsF;AACtF,qGAAqG;AACrG,wFAAwF;AACxF,wCAAwC;AACxC,EAAE;AACF,mGAAmG;AACnG,mGAAmG;AACnG,mGAAmG;AACnG,sBAAsB;AACtB,EAAE;AACF,kGAAkG;AAClG,iGAAiG;AACjG,eAAe;AAEf,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAoB;IAC9D,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAoB,EAAE,QAAQ,GAAG,SAAS;IACvF,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAE9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,IAAI,GAAG,QAAQ;QAAE,OAAO;IAE5B,MAAM,CAAC,GAAG,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,oFAAoF;IACtF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,OAAoB;IAC5D,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,IAAI,CAAC;QACH,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ServiceName } from "../profiles/types.js";
2
+ export declare function readTail(logDir: string, service: ServiceName, lines: number): string[];
3
+ export interface FollowOptions {
4
+ logDir: string;
5
+ services: ServiceName[];
6
+ onLine: (service: ServiceName, line: string) => void;
7
+ pollMs?: number;
8
+ }
9
+ export interface Follower {
10
+ stop: () => void;
11
+ }
12
+ /**
13
+ * يتابع ملفات السجلّ ويصدر الأسطر الجديدة بترتيب وصولها.
14
+ * الاستطلاع بالحجم لا ‎fs.watch‎: الأخير غير موثوق على ويندوز مع ملفات تكتبها عملية أخرى.
15
+ */
16
+ export declare function followLogs(options: FollowOptions): Follower;
17
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/logs/tail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAkBxD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAatF;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAkE3D"}
@@ -0,0 +1,98 @@
1
+ import { existsSync, openSync, readSync, closeSync, statSync, readFileSync } from "node:fs";
2
+ import stripAnsi from "strip-ansi";
3
+ import { logFilePath } from "./sink.js";
4
+ // AR: قراءة السجلات وتتبّعها. التجريد من ANSI يقع **عند القراءة** لا عند الكتابة: في الوضع المنفصل
5
+ // يكتب النظام مباشرةً إلى الملف بلا وسيط، فأدوات مثل tsc تسرّب رموز مسح الشاشة إلى الملف.
6
+ // التنظيف هنا يجعل الملف صالحًا للعرض دون أن نفقد التسجيل بعد خروج الـ CLI.
7
+ //
8
+ // ملاحظة صادقة عن الترتيب: أسطر Vite بلا طوابع زمنية، وطابع pino لا يحمل تاريخًا. فالدمج
9
+ // التاريخي عبر الخدمات ليس دقيقًا، ولذلك نعرض التاريخ **مقسّمًا بالخدمة** ونحصر الدمج الحقيقي
10
+ // في وضع المتابعة حيث يكون الترتيب ترتيب الوصول الفعلي.
11
+ // EN: Log reading and following. ANSI is stripped **on read**, not on write: in detached mode the OS
12
+ // writes straight to the file with nothing in between, so tools like tsc leak screen-clear codes
13
+ // into it. Cleaning here keeps the file presentable without losing capture after the CLI exits.
14
+ //
15
+ // An honest note on ordering: Vite's lines carry no timestamp and pino's carries no date, so
16
+ // cross-service historical merging cannot be accurate. History is therefore shown **grouped by
17
+ // service**, and true merging is confined to follow mode where the order is real arrival order.
18
+ export function readTail(logDir, service, lines) {
19
+ const path = logFilePath(logDir, service);
20
+ if (!existsSync(path))
21
+ return [];
22
+ try {
23
+ return readFileSync(path, "utf8")
24
+ .split(/\r?\n/)
25
+ .map((line) => stripAnsi(line).trimEnd())
26
+ .filter((line) => line.trim().length > 0)
27
+ .slice(-lines);
28
+ }
29
+ catch {
30
+ return [];
31
+ }
32
+ }
33
+ /**
34
+ * يتابع ملفات السجلّ ويصدر الأسطر الجديدة بترتيب وصولها.
35
+ * الاستطلاع بالحجم لا ‎fs.watch‎: الأخير غير موثوق على ويندوز مع ملفات تكتبها عملية أخرى.
36
+ */
37
+ export function followLogs(options) {
38
+ const { logDir, services, onLine, pollMs = 400 } = options;
39
+ // نبدأ من نهاية كل ملف: المتابعة تعني الجديد، والتاريخ له ‎-n‎.
40
+ const offsets = new Map();
41
+ const carry = new Map();
42
+ for (const service of services) {
43
+ const path = logFilePath(logDir, service);
44
+ offsets.set(service, existsSync(path) ? statSync(path).size : 0);
45
+ carry.set(service, "");
46
+ }
47
+ const drain = (service) => {
48
+ const path = logFilePath(logDir, service);
49
+ if (!existsSync(path))
50
+ return;
51
+ let size;
52
+ try {
53
+ size = statSync(path).size;
54
+ }
55
+ catch {
56
+ return;
57
+ }
58
+ const from = offsets.get(service) ?? 0;
59
+ // تقلّص الملف يعني تدويرًا: نعيد البدء من أوله بدل قراءة إزاحة لم تعد صالحة.
60
+ if (size < from) {
61
+ offsets.set(service, 0);
62
+ return;
63
+ }
64
+ if (size === from)
65
+ return;
66
+ const length = size - from;
67
+ const buffer = Buffer.alloc(length);
68
+ let fd;
69
+ try {
70
+ fd = openSync(path, "r");
71
+ readSync(fd, buffer, 0, length, from);
72
+ }
73
+ catch {
74
+ return;
75
+ }
76
+ finally {
77
+ if (fd !== undefined)
78
+ closeSync(fd);
79
+ }
80
+ offsets.set(service, size);
81
+ const text = (carry.get(service) ?? "") + buffer.toString("utf8");
82
+ const parts = text.split(/\r?\n/);
83
+ carry.set(service, parts.pop() ?? "");
84
+ for (const part of parts) {
85
+ const line = stripAnsi(part).trimEnd();
86
+ if (line.trim().length > 0)
87
+ onLine(service, line);
88
+ }
89
+ };
90
+ const timer = setInterval(() => {
91
+ for (const service of services)
92
+ drain(service);
93
+ }, pollMs);
94
+ return {
95
+ stop: () => clearInterval(timer),
96
+ };
97
+ }
98
+ //# sourceMappingURL=tail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/logs/tail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * AR: اسم المهمة. **ثابت واحد لأن التسجيل والحذف والاستعلام تكتبه ثلاثتها** — واسمٌ يختلف حرفًا بين
3
+ * التثبيت والإزالة يترك مهمةً يتيمة تحاول تشغيل مجلد محذوف عند كل إقلاع، إلى الأبد.
4
+ * EN: The task's name. **One constant because registration, removal and the query all write it** —
5
+ * and a name differing by a character between install and uninstall leaves an orphan task trying
6
+ * to launch a deleted folder on every boot, forever.
7
+ */
8
+ export declare const BOOT_TASK_NAME = "Fantastic Supervisor";
9
+ export interface BootTaskChange {
10
+ changed: boolean;
11
+ detail: string;
12
+ }
13
+ /**
14
+ * AR: ما يشغّله ويندوز عند الإقلاع: شيمة ‎bin\‎، بلا وسائط.
15
+ *
16
+ * كانت ‎"...\fantastic.cmd" watch‎ حتى ٠٢٦، حين كانت الشيمة تصل إلى الواجهة الكاملة فتحتاج أن
17
+ * تُسمّى لها الأمر. وقد خرجت الواجهة من الحزمة، وصارت الشيمة تصل إلى **المُشرِف وحده** — وهو
18
+ * لا يفعل شيئًا آخر ولا يقرأ وسائط. فكلمةٌ باقيةٌ هنا تُمرَّر إلى ملفٍّ يتجاهلها.
19
+ *
20
+ * **ولا تنادي المهمّةُ الواجهةَ العالمية بحال.** ‎npm i -g‎ على ويندوز يكتب في
21
+ * ‎%AppData%\Roaming\npm‎ الخاصّ بمن نفّذ التثبيت، وهذه المهمّة تعمل بحسابٍ آخر (‎SYSTEM‎
22
+ * غالبًا) وقد لا ترى ذلك المجلد أصلًا — بعد انقطاع كهرباء، بلا أحدٍ يقرأ رسالة الفشل.
23
+ * EN: What Windows runs at boot: the `bin\` shim, with no arguments.
24
+ *
25
+ * It was `"...\fantastic.cmd" watch` until 026, when the shim reached the full CLI and therefore
26
+ * had to be told which command to run. The CLI has left the bundle, and the shim now reaches
27
+ * **the supervisor alone** — which does nothing else and reads no arguments. A leftover word
28
+ * here would be forwarded to a file that ignores it.
29
+ *
30
+ * **And the task never calls the global CLI.** `npm i -g` on Windows writes into
31
+ * `%AppData%\Roaming\npm` belonging to whoever ran the install, while this task runs as another
32
+ * account (usually `SYSTEM`) that may not see that folder at all — after a power cut, with
33
+ * nobody there to read the failure.
34
+ */
35
+ export declare function bootTaskCommand(root: string): string;
36
+ /**
37
+ * AR: هل المهمة مسجَّلة **ومُفعَّلة**؟ الشرطان معًا: مهمة موجودة ومعطَّلة تجتاز ‎/Query‎ ولا تعمل
38
+ * أبدًا — وهي أسوأ من الغياب، لأنها تُعلن استعدادًا كاذبًا فتُتيح إطفاء الآلة.
39
+ * EN: Is the task registered **and enabled**? Both conditions: a present-but-disabled task passes
40
+ * `/Query` and never runs — which is worse than absence, because it announces a false readiness
41
+ * and so unlocks switching the machine off.
42
+ */
43
+ export declare function isBootTaskInstalled(): Promise<boolean>;
44
+ /**
45
+ * AR: يسجّل المهمة (أو يستبدلها بـ‎/F‎ فيكون التثبيت فوق تثبيت آمن التكرار). الفشل **لا يُفشل
46
+ * التثبيت**: النظام يعمل تمامًا، وما فات هو العودة التلقائية بعد انقطاع كهرباء — يُعلَن سطرًا
47
+ * ويُعرَض في ‎doctor‎، ولا يُمحى تثبيت سليم من أجله.
48
+ * EN: Registers the task (or replaces it with `/F`, so reinstalling over an install is idempotent).
49
+ * A failure **does not fail the install**: the system runs perfectly, and what was lost is the
50
+ * automatic return after a power cut — announced in a line and surfaced by `doctor`, not a
51
+ * reason to erase a sound installation.
52
+ */
53
+ export declare function registerBootTask(root: string): Promise<BootTaskChange>;
54
+ /** يزيل المهمة. ما يكتبه التثبيت تُزيله الإزالة، وإلّا بقيت مهمة تحاول تشغيل مجلد محذوف. */
55
+ export declare function removeBootTask(): Promise<BootTaskChange>;
56
+ //# sourceMappingURL=boot-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-task.d.ts","sourceRoot":"","sources":["../../src/packaging/boot-task.ts"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAWD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAe5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+B5E;AAED,4FAA4F;AAC5F,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAY9D"}
@@ -0,0 +1,151 @@
1
+ import { join } from "node:path";
2
+ import { execa } from "execa";
3
+ import { BUNDLE_DIRS, SHIM_FILES } from "./layout.js";
4
+ // AR: مهمة الإقلاع: كيف يعود الجهاز وحده بعد انقطاع الكهرباء (٠٢٠/R2، FR-012).
5
+ //
6
+ // **لماذا مهمة مجدولة لا خدمة ويندوز؟** الخدمة أنظف تشغيليًّا (‎sc‎، إعادة تلقائية، تبعيات)،
7
+ // لكنها تحتاج غلافًا خارجيًّا يحوّل عملية Node إلى خدمة — أي اعتمادية جديدة في منتج فخره أنه لا
8
+ // يطلب من الآلة شيئًا (٠١٧/٠١٨). والمهمة المجدولة موجودة في كل ويندوز، ولا تحتاج حزمة، وتعمل
9
+ // **قبل تسجيل الدخول**، وصلاحياتها هي نفسها التي يحملها المثبِّت أصلًا. وطبقة التسجيل هذه
10
+ // معزولة عمدًا: استبدالها بخدمة حقيقية يومًا لا يمسّ حلقة المشرف بسطر.
11
+ //
12
+ // **ولماذا ‎SYSTEM‎؟** لأن الجهاز في الاستراحة يُعاد تشغيله ولا يدخل إليه أحد. مهمةٌ مربوطة
13
+ // بحساب مستخدم لا تعمل حتى يُسجّل ذلك المستخدم دخوله — أي حتى يمرّ إنسان — وهو بالضبط ما بُنيت
14
+ // الميزة كلّها لإلغائه. واختصار المجلد ‎Startup‎ يفشل للسبب نفسه.
15
+ //
16
+ // **والنداء عبر الشيمة لا عبر ‎node.exe‎ مباشرة**: الشيمة تحسب مسار زمن التشغيل من موقعها، فتنجو
17
+ // المهمة من ترقيةٍ تغيّر بنية المجلدات تحتها ما دام ‎bin\fantastic.cmd‎ في مكانه.
18
+ //
19
+ // EN: The boot task: how the appliance comes back on its own after a power cut (020/R2, FR-012).
20
+ //
21
+ // **Why a scheduled task rather than a Windows service?** A service is operationally cleaner
22
+ // (`sc`, auto-restart, dependencies), but it needs an external wrapper to turn a Node process
23
+ // into one — a new dependency in a product whose pride is asking the machine for nothing
24
+ // (017/018). A scheduled task exists on every Windows, needs no package, runs **before logon**,
25
+ // and needs exactly the rights the installer already holds. This registration layer is isolated
26
+ // deliberately: swapping it for a real service one day touches not a line of the supervisor loop.
27
+ //
28
+ // **And why `SYSTEM`?** Because a rest-house appliance reboots with nobody signing in. A task
29
+ // bound to a user account does not run until that user logs on — that is, until a human walks
30
+ // past — which is the very thing this feature exists to abolish. A Startup-folder shortcut fails
31
+ // for the same reason.
32
+ //
33
+ // **And it is invoked through the shim rather than `node.exe` directly**: the shim computes the
34
+ // runtime's path from its own location, so the task survives an upgrade that reshapes the
35
+ // directories beneath it as long as `bin\fantastic.cmd` stays where it is.
36
+ /**
37
+ * AR: اسم المهمة. **ثابت واحد لأن التسجيل والحذف والاستعلام تكتبه ثلاثتها** — واسمٌ يختلف حرفًا بين
38
+ * التثبيت والإزالة يترك مهمةً يتيمة تحاول تشغيل مجلد محذوف عند كل إقلاع، إلى الأبد.
39
+ * EN: The task's name. **One constant because registration, removal and the query all write it** —
40
+ * and a name differing by a character between install and uninstall leaves an orphan task trying
41
+ * to launch a deleted folder on every boot, forever.
42
+ */
43
+ export const BOOT_TASK_NAME = "Fantastic Supervisor";
44
+ /**
45
+ * AR: ما يشغّله ويندوز عند الإقلاع: شيمة ‎bin\‎، بلا وسائط.
46
+ *
47
+ * كانت ‎"...\fantastic.cmd" watch‎ حتى ٠٢٦، حين كانت الشيمة تصل إلى الواجهة الكاملة فتحتاج أن
48
+ * تُسمّى لها الأمر. وقد خرجت الواجهة من الحزمة، وصارت الشيمة تصل إلى **المُشرِف وحده** — وهو
49
+ * لا يفعل شيئًا آخر ولا يقرأ وسائط. فكلمةٌ باقيةٌ هنا تُمرَّر إلى ملفٍّ يتجاهلها.
50
+ *
51
+ * **ولا تنادي المهمّةُ الواجهةَ العالمية بحال.** ‎npm i -g‎ على ويندوز يكتب في
52
+ * ‎%AppData%\Roaming\npm‎ الخاصّ بمن نفّذ التثبيت، وهذه المهمّة تعمل بحسابٍ آخر (‎SYSTEM‎
53
+ * غالبًا) وقد لا ترى ذلك المجلد أصلًا — بعد انقطاع كهرباء، بلا أحدٍ يقرأ رسالة الفشل.
54
+ * EN: What Windows runs at boot: the `bin\` shim, with no arguments.
55
+ *
56
+ * It was `"...\fantastic.cmd" watch` until 026, when the shim reached the full CLI and therefore
57
+ * had to be told which command to run. The CLI has left the bundle, and the shim now reaches
58
+ * **the supervisor alone** — which does nothing else and reads no arguments. A leftover word
59
+ * here would be forwarded to a file that ignores it.
60
+ *
61
+ * **And the task never calls the global CLI.** `npm i -g` on Windows writes into
62
+ * `%AppData%\Roaming\npm` belonging to whoever ran the install, while this task runs as another
63
+ * account (usually `SYSTEM`) that may not see that folder at all — after a power cut, with
64
+ * nobody there to read the failure.
65
+ */
66
+ export function bootTaskCommand(root) {
67
+ return `"${join(root, BUNDLE_DIRS.bin, SHIM_FILES.command)}"`;
68
+ }
69
+ async function schtasks(args) {
70
+ try {
71
+ const { stdout } = await execa("schtasks", args, { timeout: 20_000, windowsHide: true });
72
+ return { ok: true, output: stdout };
73
+ }
74
+ catch (error) {
75
+ return { ok: false, output: error instanceof Error ? error.message : String(error) };
76
+ }
77
+ }
78
+ /**
79
+ * AR: هل المهمة مسجَّلة **ومُفعَّلة**؟ الشرطان معًا: مهمة موجودة ومعطَّلة تجتاز ‎/Query‎ ولا تعمل
80
+ * أبدًا — وهي أسوأ من الغياب، لأنها تُعلن استعدادًا كاذبًا فتُتيح إطفاء الآلة.
81
+ * EN: Is the task registered **and enabled**? Both conditions: a present-but-disabled task passes
82
+ * `/Query` and never runs — which is worse than absence, because it announces a false readiness
83
+ * and so unlocks switching the machine off.
84
+ */
85
+ export async function isBootTaskInstalled() {
86
+ if (process.platform !== "win32")
87
+ return false;
88
+ // ‎/FO LIST‎ لا ‎/FO CSV‎: الأخير يُحوّل الحقول بحسب لغة ويندوز، وقائمةٌ بسطور «مفتاح: قيمة» أثبت.
89
+ const query = await schtasks(["/Query", "/TN", BOOT_TASK_NAME, "/FO", "LIST"]);
90
+ if (!query.ok)
91
+ return false;
92
+ // AR: **لا نطابق كلمة الحالة بلغتها.** ويندوز عربيّ يكتب «معطَّل» لا ‎Disabled‎، فمطابقة
93
+ // ‎"Ready"‎ كانت ستقول «غير مثبَّتة» على كل جهاز عميل. نبحث عن الصيغة المعطّلة وحدها بلغتيها،
94
+ // وما عداها يُعدّ صالحًا — والخطأ في هذا الاتجاه يُعرَض للمالك لا يُخفى عنه.
95
+ // EN: **We do not match the state word in its language.** An Arabic Windows writes «معطَّل», not
96
+ // `Disabled`, so matching `"Ready"` would have reported "not installed" on every customer
97
+ // machine. We look for the disabled form alone, in both languages, and treat anything else as
98
+ // usable — and an error in that direction is shown to the owner rather than hidden from him.
99
+ return !/\b(disabled)\b|معطّل|معطل/i.test(query.output);
100
+ }
101
+ /**
102
+ * AR: يسجّل المهمة (أو يستبدلها بـ‎/F‎ فيكون التثبيت فوق تثبيت آمن التكرار). الفشل **لا يُفشل
103
+ * التثبيت**: النظام يعمل تمامًا، وما فات هو العودة التلقائية بعد انقطاع كهرباء — يُعلَن سطرًا
104
+ * ويُعرَض في ‎doctor‎، ولا يُمحى تثبيت سليم من أجله.
105
+ * EN: Registers the task (or replaces it with `/F`, so reinstalling over an install is idempotent).
106
+ * A failure **does not fail the install**: the system runs perfectly, and what was lost is the
107
+ * automatic return after a power cut — announced in a line and surfaced by `doctor`, not a
108
+ * reason to erase a sound installation.
109
+ */
110
+ export async function registerBootTask(root) {
111
+ if (process.platform !== "win32") {
112
+ return { changed: false, detail: "not Windows — no boot task to register" };
113
+ }
114
+ const result = await schtasks([
115
+ "/Create",
116
+ "/TN",
117
+ BOOT_TASK_NAME,
118
+ "/TR",
119
+ bootTaskCommand(root),
120
+ "/SC",
121
+ "ONSTART",
122
+ "/RU",
123
+ "SYSTEM",
124
+ // ‎HIGHEST‎: المشرف يوقف عمليات ويشغّلها ويقرأ منافذ. مهمةٌ بأدنى امتياز تفشل عند أول ‎taskkill‎.
125
+ "/RL",
126
+ "HIGHEST",
127
+ "/F",
128
+ ]);
129
+ if (!result.ok) {
130
+ return {
131
+ changed: false,
132
+ detail: /denied|access/i.test(result.output)
133
+ ? "needs an administrator terminal — the appliance will not restart itself after a power cut"
134
+ : "could not be registered — the appliance will not restart itself after a power cut",
135
+ };
136
+ }
137
+ return { changed: true, detail: "registered to start at boot" };
138
+ }
139
+ /** يزيل المهمة. ما يكتبه التثبيت تُزيله الإزالة، وإلّا بقيت مهمة تحاول تشغيل مجلد محذوف. */
140
+ export async function removeBootTask() {
141
+ if (process.platform !== "win32")
142
+ return { changed: false, detail: "not Windows" };
143
+ if (!(await schtasks(["/Query", "/TN", BOOT_TASK_NAME])).ok) {
144
+ return { changed: false, detail: "was not registered" };
145
+ }
146
+ const result = await schtasks(["/Delete", "/TN", BOOT_TASK_NAME, "/F"]);
147
+ return result.ok
148
+ ? { changed: true, detail: "removed the boot task" }
149
+ : { changed: false, detail: "could not be removed — remove it by hand: schtasks /Delete /TN \"" + BOOT_TASK_NAME + "\" /F" };
150
+ }
151
+ //# sourceMappingURL=boot-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-task.js","sourceRoot":"","sources":["../../src/packaging/boot-task.ts"],"names":[],"mappings":"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"}