@warlock.js/core 4.8.1 → 4.9.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 (854) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/esm/application/app.d.mts +1 -1
  3. package/esm/application/app.d.mts.map +1 -1
  4. package/esm/application/app.mjs +1 -1
  5. package/esm/application/app.mjs.map +1 -1
  6. package/esm/application/application-config-types.d.mts +1 -1
  7. package/esm/application/application-config-types.d.mts.map +1 -1
  8. package/esm/application/application.d.mts +1 -1
  9. package/esm/application/application.d.mts.map +1 -1
  10. package/esm/application/application.mjs +1 -1
  11. package/esm/application/application.mjs.map +1 -1
  12. package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
  13. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  14. package/esm/benchmark/benchmark-snapshots.mjs +1 -1
  15. package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
  16. package/esm/benchmark/benchmark.d.mts +1 -1
  17. package/esm/benchmark/benchmark.d.mts.map +1 -1
  18. package/esm/benchmark/benchmark.mjs +1 -1
  19. package/esm/benchmark/benchmark.mjs.map +1 -1
  20. package/esm/benchmark/channels/console.channel.d.mts +1 -1
  21. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  22. package/esm/benchmark/channels/console.channel.mjs +1 -1
  23. package/esm/benchmark/channels/console.channel.mjs.map +1 -1
  24. package/esm/benchmark/channels/noop.channel.d.mts +1 -1
  25. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  26. package/esm/benchmark/channels/noop.channel.mjs +1 -1
  27. package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
  28. package/esm/benchmark/profiler.d.mts +1 -1
  29. package/esm/benchmark/profiler.d.mts.map +1 -1
  30. package/esm/benchmark/profiler.mjs +1 -1
  31. package/esm/benchmark/profiler.mjs.map +1 -1
  32. package/esm/benchmark/types.d.mts +1 -1
  33. package/esm/benchmark/types.d.mts.map +1 -1
  34. package/esm/bootstrap/setup.d.mts +1 -1
  35. package/esm/bootstrap/setup.d.mts.map +1 -1
  36. package/esm/bootstrap/setup.mjs +1 -1
  37. package/esm/bootstrap/setup.mjs.map +1 -1
  38. package/esm/bootstrap.d.mts +1 -1
  39. package/esm/bootstrap.d.mts.map +1 -1
  40. package/esm/bootstrap.mjs +1 -1
  41. package/esm/bootstrap.mjs.map +1 -1
  42. package/esm/cache/database-cache-driver.d.mts +1 -1
  43. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  44. package/esm/cache/database-cache-driver.mjs +1 -1
  45. package/esm/cache/database-cache-driver.mjs.map +1 -1
  46. package/esm/cache/index.mjs +1 -1
  47. package/esm/cache/index.mjs.map +1 -1
  48. package/esm/cli/cli-command.d.mts +1 -1
  49. package/esm/cli/cli-command.d.mts.map +1 -1
  50. package/esm/cli/cli-command.mjs +1 -1
  51. package/esm/cli/cli-command.mjs.map +1 -1
  52. package/esm/cli/cli-commands.manager.mjs +1 -1
  53. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  54. package/esm/cli/cli-commands.utils.mjs +1 -1
  55. package/esm/cli/cli-commands.utils.mjs.map +1 -1
  56. package/esm/cli/commands/add.command.mjs +1 -1
  57. package/esm/cli/commands/add.command.mjs.map +1 -1
  58. package/esm/cli/commands/build.command.mjs +1 -1
  59. package/esm/cli/commands/build.command.mjs.map +1 -1
  60. package/esm/cli/commands/create-database.command.mjs +1 -1
  61. package/esm/cli/commands/create-database.command.mjs.map +1 -1
  62. package/esm/cli/commands/dev-server.command.mjs +5 -4
  63. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  64. package/esm/cli/commands/doctor/checks/config.check.mjs +1 -1
  65. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
  66. package/esm/cli/commands/doctor/checks/connectors.check.mjs +1 -1
  67. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
  68. package/esm/cli/commands/doctor/checks/health.check.mjs +1 -1
  69. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
  70. package/esm/cli/commands/doctor/checks/index.mjs +1 -1
  71. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -1
  72. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -1
  73. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
  74. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +1 -1
  75. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
  76. package/esm/cli/commands/doctor/checks/routes.check.mjs +1 -1
  77. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
  78. package/esm/cli/commands/doctor/doctor-command.action.mjs +1 -1
  79. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  80. package/esm/cli/commands/doctor/format-report.mjs +1 -1
  81. package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
  82. package/esm/cli/commands/doctor/run-checks.mjs +1 -1
  83. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -1
  84. package/esm/cli/commands/doctor.command.mjs +1 -1
  85. package/esm/cli/commands/doctor.command.mjs.map +1 -1
  86. package/esm/cli/commands/drop-tables.command.mjs +1 -1
  87. package/esm/cli/commands/drop-tables.command.mjs.map +1 -1
  88. package/esm/cli/commands/generate/generate.command.mjs +1 -1
  89. package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
  90. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +1 -1
  91. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +1 -1
  92. package/esm/cli/commands/generate/generators/controller.generator.mjs +1 -1
  93. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  94. package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
  95. package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
  96. package/esm/cli/commands/generate/generators/model.generator.mjs +1 -1
  97. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  98. package/esm/cli/commands/generate/generators/module.generator.mjs +1 -1
  99. package/esm/cli/commands/generate/generators/module.generator.mjs.map +1 -1
  100. package/esm/cli/commands/generate/generators/repository.generator.mjs +1 -1
  101. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  102. package/esm/cli/commands/generate/generators/resource.generator.mjs +1 -1
  103. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  104. package/esm/cli/commands/generate/generators/service.generator.mjs +1 -1
  105. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  106. package/esm/cli/commands/generate/templates/stubs.mjs +1 -1
  107. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  108. package/esm/cli/commands/generate/utils/name-parser.mjs +1 -1
  109. package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
  110. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  111. package/esm/cli/commands/generate/utils/path-resolver.mjs.map +1 -1
  112. package/esm/cli/commands/generate/utils/prompt.mjs +1 -1
  113. package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
  114. package/esm/cli/commands/generate/utils/writer.mjs +1 -1
  115. package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
  116. package/esm/cli/commands/migrate.command.mjs +1 -1
  117. package/esm/cli/commands/migrate.command.mjs.map +1 -1
  118. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  119. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -1
  120. package/esm/cli/commands/routes/route-row.mjs +1 -1
  121. package/esm/cli/commands/routes/route-row.mjs.map +1 -1
  122. package/esm/cli/commands/routes/routes-command.action.mjs +1 -1
  123. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -1
  124. package/esm/cli/commands/routes.command.mjs +1 -1
  125. package/esm/cli/commands/routes.command.mjs.map +1 -1
  126. package/esm/cli/commands/seed.command.mjs +1 -1
  127. package/esm/cli/commands/seed.command.mjs.map +1 -1
  128. package/esm/cli/commands/start-production.command.mjs +2 -2
  129. package/esm/cli/commands/start-production.command.mjs.map +1 -1
  130. package/esm/cli/commands/storage-put.action.mjs +1 -1
  131. package/esm/cli/commands/storage-put.action.mjs.map +1 -1
  132. package/esm/cli/commands/storage-put.command.mjs +1 -1
  133. package/esm/cli/commands/storage-put.command.mjs.map +1 -1
  134. package/esm/cli/commands/typings-generator.command.mjs +1 -1
  135. package/esm/cli/commands/typings-generator.command.mjs.map +1 -1
  136. package/esm/cli/commands/update.command.mjs +30 -7
  137. package/esm/cli/commands/update.command.mjs.map +1 -1
  138. package/esm/cli/commands-loader.mjs +1 -1
  139. package/esm/cli/commands-loader.mjs.map +1 -1
  140. package/esm/cli/framework-cli-commands.mjs +1 -1
  141. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  142. package/esm/cli/parse-cli-args.mjs +1 -1
  143. package/esm/cli/parse-cli-args.mjs.map +1 -1
  144. package/esm/cli/start.mjs +1 -1
  145. package/esm/cli/start.mjs.map +1 -1
  146. package/esm/cli/string-similarity.mjs +1 -1
  147. package/esm/cli/string-similarity.mjs.map +1 -1
  148. package/esm/cli/types.d.mts +1 -1
  149. package/esm/cli/types.d.mts.map +1 -1
  150. package/esm/config/config-getter.d.mts +1 -1
  151. package/esm/config/config-getter.d.mts.map +1 -1
  152. package/esm/config/config-getter.mjs +1 -1
  153. package/esm/config/config-getter.mjs.map +1 -1
  154. package/esm/config/config-handlers.d.mts +1 -1
  155. package/esm/config/config-handlers.d.mts.map +1 -1
  156. package/esm/config/config-handlers.mjs +1 -1
  157. package/esm/config/config-handlers.mjs.map +1 -1
  158. package/esm/config/config-loader.d.mts +1 -1
  159. package/esm/config/config-loader.d.mts.map +1 -1
  160. package/esm/config/config-loader.mjs +1 -1
  161. package/esm/config/config-loader.mjs.map +1 -1
  162. package/esm/config/config-manager.mjs +1 -1
  163. package/esm/config/config-manager.mjs.map +1 -1
  164. package/esm/config/config-special-handlers.d.mts +1 -1
  165. package/esm/config/config-special-handlers.d.mts.map +1 -1
  166. package/esm/config/config-special-handlers.mjs +1 -1
  167. package/esm/config/config-special-handlers.mjs.map +1 -1
  168. package/esm/config/load-config-files.mjs +1 -1
  169. package/esm/config/load-config-files.mjs.map +1 -1
  170. package/esm/config/types.d.mts +1 -1
  171. package/esm/config/types.d.mts.map +1 -1
  172. package/esm/connectors/access-connector.d.mts +1 -1
  173. package/esm/connectors/access-connector.d.mts.map +1 -1
  174. package/esm/connectors/access-connector.mjs +1 -1
  175. package/esm/connectors/access-connector.mjs.map +1 -1
  176. package/esm/connectors/ai-connector.d.mts +1 -1
  177. package/esm/connectors/ai-connector.d.mts.map +1 -1
  178. package/esm/connectors/ai-connector.mjs +1 -1
  179. package/esm/connectors/ai-connector.mjs.map +1 -1
  180. package/esm/connectors/base-connector.d.mts +1 -1
  181. package/esm/connectors/base-connector.d.mts.map +1 -1
  182. package/esm/connectors/base-connector.mjs +1 -1
  183. package/esm/connectors/base-connector.mjs.map +1 -1
  184. package/esm/connectors/cache-connector.d.mts +1 -1
  185. package/esm/connectors/cache-connector.d.mts.map +1 -1
  186. package/esm/connectors/cache-connector.mjs +1 -1
  187. package/esm/connectors/cache-connector.mjs.map +1 -1
  188. package/esm/connectors/connectors-manager.d.mts +1 -1
  189. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  190. package/esm/connectors/connectors-manager.mjs +1 -1
  191. package/esm/connectors/connectors-manager.mjs.map +1 -1
  192. package/esm/connectors/database-connector.d.mts +1 -1
  193. package/esm/connectors/database-connector.d.mts.map +1 -1
  194. package/esm/connectors/database-connector.mjs +1 -1
  195. package/esm/connectors/database-connector.mjs.map +1 -1
  196. package/esm/connectors/herald-connector.d.mts +1 -1
  197. package/esm/connectors/herald-connector.d.mts.map +1 -1
  198. package/esm/connectors/herald-connector.mjs +1 -1
  199. package/esm/connectors/herald-connector.mjs.map +1 -1
  200. package/esm/connectors/http-connector.d.mts +1 -1
  201. package/esm/connectors/http-connector.d.mts.map +1 -1
  202. package/esm/connectors/http-connector.mjs +1 -1
  203. package/esm/connectors/http-connector.mjs.map +1 -1
  204. package/esm/connectors/logger-connector.d.mts +1 -1
  205. package/esm/connectors/logger-connector.d.mts.map +1 -1
  206. package/esm/connectors/logger-connector.mjs +1 -1
  207. package/esm/connectors/logger-connector.mjs.map +1 -1
  208. package/esm/connectors/mail-connector.d.mts +1 -1
  209. package/esm/connectors/mail-connector.d.mts.map +1 -1
  210. package/esm/connectors/mail-connector.mjs +1 -1
  211. package/esm/connectors/mail-connector.mjs.map +1 -1
  212. package/esm/connectors/notifications-connector.d.mts +1 -1
  213. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  214. package/esm/connectors/notifications-connector.mjs +1 -1
  215. package/esm/connectors/notifications-connector.mjs.map +1 -1
  216. package/esm/connectors/socket-connector.d.mts +1 -1
  217. package/esm/connectors/socket-connector.d.mts.map +1 -1
  218. package/esm/connectors/socket-connector.mjs +1 -1
  219. package/esm/connectors/socket-connector.mjs.map +1 -1
  220. package/esm/connectors/storage.connector.d.mts +1 -1
  221. package/esm/connectors/storage.connector.d.mts.map +1 -1
  222. package/esm/connectors/storage.connector.mjs +1 -1
  223. package/esm/connectors/storage.connector.mjs.map +1 -1
  224. package/esm/connectors/types.d.mts +1 -1
  225. package/esm/connectors/types.d.mts.map +1 -1
  226. package/esm/connectors/types.mjs +1 -1
  227. package/esm/connectors/types.mjs.map +1 -1
  228. package/esm/container/index.d.mts +1 -1
  229. package/esm/container/index.d.mts.map +1 -1
  230. package/esm/container/index.mjs +1 -1
  231. package/esm/container/index.mjs.map +1 -1
  232. package/esm/database/create-database-action.mjs +1 -1
  233. package/esm/database/create-database-action.mjs.map +1 -1
  234. package/esm/database/drop-tables-action.mjs +1 -1
  235. package/esm/database/drop-tables-action.mjs.map +1 -1
  236. package/esm/database/migrate-action.mjs +1 -1
  237. package/esm/database/migrate-action.mjs.map +1 -1
  238. package/esm/database/models/database-log/database-log.d.mts +1 -1
  239. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  240. package/esm/database/models/database-log/database-log.mjs +1 -1
  241. package/esm/database/models/database-log/database-log.mjs.map +1 -1
  242. package/esm/database/seed-command-action.mjs +1 -1
  243. package/esm/database/seed-command-action.mjs.map +1 -1
  244. package/esm/database/seeds/seed-records-table-migration.mjs +1 -1
  245. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -1
  246. package/esm/database/seeds/seeder.d.mts +1 -1
  247. package/esm/database/seeds/seeder.d.mts.map +1 -1
  248. package/esm/database/seeds/seeder.errors.d.mts +1 -1
  249. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  250. package/esm/database/seeds/seeder.errors.mjs +1 -1
  251. package/esm/database/seeds/seeder.errors.mjs.map +1 -1
  252. package/esm/database/seeds/seeder.mjs +1 -1
  253. package/esm/database/seeds/seeder.mjs.map +1 -1
  254. package/esm/database/seeds/seeders.manager.mjs +1 -1
  255. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  256. package/esm/database/seeds/seeds-table-migration.mjs +1 -1
  257. package/esm/database/seeds/seeds-table-migration.mjs.map +1 -1
  258. package/esm/database/seeds/types.d.mts +1 -1
  259. package/esm/database/seeds/types.d.mts.map +1 -1
  260. package/esm/database/seeds/utils.mjs +1 -1
  261. package/esm/database/seeds/utils.mjs.map +1 -1
  262. package/esm/database/utils.d.mts +1 -1
  263. package/esm/database/utils.d.mts.map +1 -1
  264. package/esm/database/utils.mjs +1 -1
  265. package/esm/database/utils.mjs.map +1 -1
  266. package/esm/dev-server/check-for-updates.mjs +91 -8
  267. package/esm/dev-server/check-for-updates.mjs.map +1 -1
  268. package/esm/dev-server/create-worker.mjs +1 -1
  269. package/esm/dev-server/create-worker.mjs.map +1 -1
  270. package/esm/dev-server/dependency-graph.d.mts +1 -1
  271. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  272. package/esm/dev-server/dependency-graph.mjs +1 -1
  273. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  274. package/esm/dev-server/dev-logger.mjs +1 -1
  275. package/esm/dev-server/dev-logger.mjs.map +1 -1
  276. package/esm/dev-server/development-server.mjs +32 -3
  277. package/esm/dev-server/development-server.mjs.map +1 -1
  278. package/esm/dev-server/events.mjs +1 -1
  279. package/esm/dev-server/events.mjs.map +1 -1
  280. package/esm/dev-server/file-event-handler.mjs +1 -1
  281. package/esm/dev-server/file-event-handler.mjs.map +1 -1
  282. package/esm/dev-server/file-manager.d.mts +1 -1
  283. package/esm/dev-server/file-manager.d.mts.map +1 -1
  284. package/esm/dev-server/file-manager.mjs +1 -1
  285. package/esm/dev-server/file-manager.mjs.map +1 -1
  286. package/esm/dev-server/file-operations.d.mts +1 -1
  287. package/esm/dev-server/file-operations.d.mts.map +1 -1
  288. package/esm/dev-server/file-operations.mjs +1 -1
  289. package/esm/dev-server/file-operations.mjs.map +1 -1
  290. package/esm/dev-server/files-orchestrator.d.mts +1 -1
  291. package/esm/dev-server/files-orchestrator.d.mts.map +1 -1
  292. package/esm/dev-server/files-orchestrator.mjs +1 -1
  293. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  294. package/esm/dev-server/files-watcher.d.mts +1 -1
  295. package/esm/dev-server/files-watcher.d.mts.map +1 -1
  296. package/esm/dev-server/files-watcher.mjs +1 -1
  297. package/esm/dev-server/files-watcher.mjs.map +1 -1
  298. package/esm/dev-server/flags.mjs +1 -1
  299. package/esm/dev-server/flags.mjs.map +1 -1
  300. package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts +1 -1
  301. package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts.map +1 -1
  302. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
  303. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
  304. package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts +1 -1
  305. package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts.map +1 -1
  306. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +1 -1
  307. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  308. package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts +1 -1
  309. package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts.map +1 -1
  310. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
  311. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  312. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +1 -1
  313. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  314. package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
  315. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  316. package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
  317. package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
  318. package/esm/dev-server/health-checker/files-healthcare.manager.d.mts +1 -1
  319. package/esm/dev-server/health-checker/files-healthcare.manager.d.mts.map +1 -1
  320. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -1
  321. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  322. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
  323. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
  324. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
  325. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  326. package/esm/dev-server/layer-executor.mjs +1 -1
  327. package/esm/dev-server/layer-executor.mjs.map +1 -1
  328. package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
  329. package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
  330. package/esm/dev-server/loader/hook-thread.d.mts +1 -1
  331. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  332. package/esm/dev-server/loader/hook-thread.mjs +1 -1
  333. package/esm/dev-server/loader/hook-thread.mjs.map +1 -1
  334. package/esm/dev-server/loader/load-hook.d.mts +1 -1
  335. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  336. package/esm/dev-server/loader/load-hook.mjs +1 -1
  337. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  338. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  339. package/esm/dev-server/loader/own-resolver.mjs.map +1 -1
  340. package/esm/dev-server/loader/register-loader.mjs +1 -1
  341. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  342. package/esm/dev-server/loader/resolve-capture.mjs +1 -1
  343. package/esm/dev-server/loader/resolve-capture.mjs.map +1 -1
  344. package/esm/dev-server/loader/resolve-hook.d.mts +1 -1
  345. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  346. package/esm/dev-server/loader/resolve-hook.mjs +1 -1
  347. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  348. package/esm/dev-server/loader/source-slug.mjs +1 -1
  349. package/esm/dev-server/loader/source-slug.mjs.map +1 -1
  350. package/esm/dev-server/loader/transpile-cache.mjs +1 -1
  351. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  352. package/esm/dev-server/loader/version-registry.mjs +1 -1
  353. package/esm/dev-server/loader/version-registry.mjs.map +1 -1
  354. package/esm/dev-server/manifest-manager.d.mts +1 -1
  355. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  356. package/esm/dev-server/manifest-manager.mjs +1 -1
  357. package/esm/dev-server/manifest-manager.mjs.map +1 -1
  358. package/esm/dev-server/module-loader.d.mts +1 -1
  359. package/esm/dev-server/module-loader.d.mts.map +1 -1
  360. package/esm/dev-server/module-loader.mjs +1 -1
  361. package/esm/dev-server/module-loader.mjs.map +1 -1
  362. package/esm/dev-server/package-json-manager.mjs +1 -1
  363. package/esm/dev-server/package-json-manager.mjs.map +1 -1
  364. package/esm/dev-server/parse-imports.mjs +1 -1
  365. package/esm/dev-server/parse-imports.mjs.map +1 -1
  366. package/esm/dev-server/path.mjs +1 -1
  367. package/esm/dev-server/path.mjs.map +1 -1
  368. package/esm/dev-server/register-dev-shortcuts.mjs +70 -0
  369. package/esm/dev-server/register-dev-shortcuts.mjs.map +1 -0
  370. package/esm/dev-server/restart-dev-server.mjs +36 -0
  371. package/esm/dev-server/restart-dev-server.mjs.map +1 -0
  372. package/esm/dev-server/shortcuts.mjs +121 -0
  373. package/esm/dev-server/shortcuts.mjs.map +1 -0
  374. package/esm/dev-server/special-files-collector.d.mts +1 -1
  375. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  376. package/esm/dev-server/special-files-collector.mjs +1 -1
  377. package/esm/dev-server/special-files-collector.mjs.map +1 -1
  378. package/esm/dev-server/start-development-server.mjs +3 -1
  379. package/esm/dev-server/start-development-server.mjs.map +1 -1
  380. package/esm/dev-server/supervisor.mjs +141 -0
  381. package/esm/dev-server/supervisor.mjs.map +1 -0
  382. package/esm/dev-server/tsconfig-manager.mjs +1 -1
  383. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  384. package/esm/dev-server/type-generator.mjs +1 -1
  385. package/esm/dev-server/type-generator.mjs.map +1 -1
  386. package/esm/dev-server/types.d.mts +1 -1
  387. package/esm/dev-server/types.d.mts.map +1 -1
  388. package/esm/dev-server/update-check-cache.mjs +53 -0
  389. package/esm/dev-server/update-check-cache.mjs.map +1 -0
  390. package/esm/dev-server/utils.mjs +1 -1
  391. package/esm/dev-server/utils.mjs.map +1 -1
  392. package/esm/encryption/encrypt.d.mts +1 -1
  393. package/esm/encryption/encrypt.d.mts.map +1 -1
  394. package/esm/encryption/encrypt.mjs +1 -1
  395. package/esm/encryption/encrypt.mjs.map +1 -1
  396. package/esm/encryption/hash.d.mts +1 -1
  397. package/esm/encryption/hash.d.mts.map +1 -1
  398. package/esm/encryption/hash.mjs +1 -1
  399. package/esm/encryption/hash.mjs.map +1 -1
  400. package/esm/encryption/password.d.mts +1 -1
  401. package/esm/encryption/password.d.mts.map +1 -1
  402. package/esm/encryption/password.mjs +1 -1
  403. package/esm/encryption/password.mjs.map +1 -1
  404. package/esm/encryption/types.d.mts +1 -1
  405. package/esm/encryption/types.d.mts.map +1 -1
  406. package/esm/generations/add-command.action.mjs +3 -13
  407. package/esm/generations/add-command.action.mjs.map +1 -1
  408. package/esm/generations/stubs.mjs +1 -1
  409. package/esm/generations/stubs.mjs.map +1 -1
  410. package/esm/http/config.d.mts +1 -1
  411. package/esm/http/config.d.mts.map +1 -1
  412. package/esm/http/config.mjs +1 -1
  413. package/esm/http/config.mjs.map +1 -1
  414. package/esm/http/context/request-context.d.mts +1 -1
  415. package/esm/http/context/request-context.d.mts.map +1 -1
  416. package/esm/http/context/request-context.mjs +1 -1
  417. package/esm/http/context/request-context.mjs.map +1 -1
  418. package/esm/http/createHttpApplication.d.mts +1 -1
  419. package/esm/http/createHttpApplication.d.mts.map +1 -1
  420. package/esm/http/createHttpApplication.mjs +1 -1
  421. package/esm/http/createHttpApplication.mjs.map +1 -1
  422. package/esm/http/database/RequestLog.d.mts +1 -1
  423. package/esm/http/database/RequestLog.d.mts.map +1 -1
  424. package/esm/http/database/RequestLog.mjs +1 -1
  425. package/esm/http/database/RequestLog.mjs.map +1 -1
  426. package/esm/http/error-codes.d.mts +1 -1
  427. package/esm/http/error-codes.d.mts.map +1 -1
  428. package/esm/http/error-codes.mjs +1 -1
  429. package/esm/http/error-codes.mjs.map +1 -1
  430. package/esm/http/errors/errors.d.mts +1 -1
  431. package/esm/http/errors/errors.d.mts.map +1 -1
  432. package/esm/http/errors/errors.mjs +1 -1
  433. package/esm/http/errors/errors.mjs.map +1 -1
  434. package/esm/http/events.d.mts +1 -1
  435. package/esm/http/events.d.mts.map +1 -1
  436. package/esm/http/events.mjs +1 -1
  437. package/esm/http/events.mjs.map +1 -1
  438. package/esm/http/health.d.mts +1 -1
  439. package/esm/http/health.d.mts.map +1 -1
  440. package/esm/http/health.mjs +1 -1
  441. package/esm/http/health.mjs.map +1 -1
  442. package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
  443. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  444. package/esm/http/middleware/cache-response-middleware.mjs +1 -1
  445. package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
  446. package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
  447. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  448. package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
  449. package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
  450. package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
  451. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  452. package/esm/http/middleware/idempotency.middleware.mjs +1 -1
  453. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  454. package/esm/http/middleware/inject-request-context.d.mts +1 -1
  455. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  456. package/esm/http/middleware/inject-request-context.mjs +1 -1
  457. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  458. package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
  459. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  460. package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
  461. package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
  462. package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
  463. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  464. package/esm/http/middleware/maintenance.middleware.mjs +1 -1
  465. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  466. package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
  467. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  468. package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
  469. package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
  470. package/esm/http/middleware/middleware-list.d.mts +1 -1
  471. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  472. package/esm/http/middleware/middleware-list.mjs +1 -1
  473. package/esm/http/middleware/middleware-list.mjs.map +1 -1
  474. package/esm/http/middleware/rate-limit.middleware.d.mts +1 -1
  475. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  476. package/esm/http/middleware/rate-limit.middleware.mjs +1 -1
  477. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  478. package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
  479. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  480. package/esm/http/middleware/utils/cidr-match.mjs +1 -1
  481. package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
  482. package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
  483. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  484. package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
  485. package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
  486. package/esm/http/middleware/utils/parse-size.d.mts +1 -1
  487. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  488. package/esm/http/middleware/utils/parse-size.mjs +1 -1
  489. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  490. package/esm/http/plugins.d.mts +1 -1
  491. package/esm/http/plugins.d.mts.map +1 -1
  492. package/esm/http/plugins.mjs +1 -1
  493. package/esm/http/plugins.mjs.map +1 -1
  494. package/esm/http/request-controller.d.mts +1 -1
  495. package/esm/http/request-controller.d.mts.map +1 -1
  496. package/esm/http/request-controller.mjs +1 -1
  497. package/esm/http/request-controller.mjs.map +1 -1
  498. package/esm/http/request.d.mts +1 -1
  499. package/esm/http/request.d.mts.map +1 -1
  500. package/esm/http/request.mjs +1 -1
  501. package/esm/http/request.mjs.map +1 -1
  502. package/esm/http/response.d.mts +1 -1
  503. package/esm/http/response.d.mts.map +1 -1
  504. package/esm/http/response.mjs +1 -1
  505. package/esm/http/response.mjs.map +1 -1
  506. package/esm/http/server.d.mts +1 -1
  507. package/esm/http/server.d.mts.map +1 -1
  508. package/esm/http/server.mjs +1 -1
  509. package/esm/http/server.mjs.map +1 -1
  510. package/esm/http/types.d.mts +1 -1
  511. package/esm/http/types.d.mts.map +1 -1
  512. package/esm/http/uploaded-file.d.mts +1 -1
  513. package/esm/http/uploaded-file.d.mts.map +1 -1
  514. package/esm/http/uploaded-file.mjs +1 -1
  515. package/esm/http/uploaded-file.mjs.map +1 -1
  516. package/esm/http/uploads-config.d.mts +1 -1
  517. package/esm/http/uploads-config.d.mts.map +1 -1
  518. package/esm/http/uploads-config.mjs +1 -1
  519. package/esm/http/uploads-config.mjs.map +1 -1
  520. package/esm/http/uploads-types.d.mts +1 -1
  521. package/esm/http/uploads-types.d.mts.map +1 -1
  522. package/esm/image/image.d.mts +1 -1
  523. package/esm/image/image.d.mts.map +1 -1
  524. package/esm/image/image.mjs +1 -1
  525. package/esm/image/image.mjs.map +1 -1
  526. package/esm/logger/logger.d.mts +1 -1
  527. package/esm/logger/logger.d.mts.map +1 -1
  528. package/esm/logger/logger.mjs +1 -1
  529. package/esm/logger/logger.mjs.map +1 -1
  530. package/esm/logger/types.d.mts +1 -1
  531. package/esm/logger/types.d.mts.map +1 -1
  532. package/esm/mail/config.d.mts +1 -1
  533. package/esm/mail/config.d.mts.map +1 -1
  534. package/esm/mail/config.mjs +1 -1
  535. package/esm/mail/config.mjs.map +1 -1
  536. package/esm/mail/events.d.mts +1 -1
  537. package/esm/mail/events.d.mts.map +1 -1
  538. package/esm/mail/events.mjs +1 -1
  539. package/esm/mail/events.mjs.map +1 -1
  540. package/esm/mail/mail.d.mts +1 -1
  541. package/esm/mail/mail.d.mts.map +1 -1
  542. package/esm/mail/mail.mjs +1 -1
  543. package/esm/mail/mail.mjs.map +1 -1
  544. package/esm/mail/mailer-pool.d.mts +1 -1
  545. package/esm/mail/mailer-pool.d.mts.map +1 -1
  546. package/esm/mail/mailer-pool.mjs +1 -1
  547. package/esm/mail/mailer-pool.mjs.map +1 -1
  548. package/esm/mail/react-mail.d.mts +1 -1
  549. package/esm/mail/react-mail.d.mts.map +1 -1
  550. package/esm/mail/react-mail.mjs +1 -1
  551. package/esm/mail/react-mail.mjs.map +1 -1
  552. package/esm/mail/send-mail.d.mts +1 -1
  553. package/esm/mail/send-mail.d.mts.map +1 -1
  554. package/esm/mail/send-mail.mjs +1 -1
  555. package/esm/mail/send-mail.mjs.map +1 -1
  556. package/esm/mail/test-mailbox.d.mts +1 -1
  557. package/esm/mail/test-mailbox.d.mts.map +1 -1
  558. package/esm/mail/test-mailbox.mjs +1 -1
  559. package/esm/mail/test-mailbox.mjs.map +1 -1
  560. package/esm/mail/types.d.mts +1 -1
  561. package/esm/mail/types.d.mts.map +1 -1
  562. package/esm/mail/types.mjs +1 -1
  563. package/esm/mail/types.mjs.map +1 -1
  564. package/esm/manifest/manifest-manager.mjs +1 -1
  565. package/esm/manifest/manifest-manager.mjs.map +1 -1
  566. package/esm/production/build-app-production.mjs +1 -1
  567. package/esm/production/build-app-production.mjs.map +1 -1
  568. package/esm/production/esbuild-plugins.mjs +1 -1
  569. package/esm/production/esbuild-plugins.mjs.map +1 -1
  570. package/esm/production/production-builder.mjs +1 -1
  571. package/esm/production/production-builder.mjs.map +1 -1
  572. package/esm/production/resolve-build-config.mjs +3 -2
  573. package/esm/production/resolve-build-config.mjs.map +1 -1
  574. package/esm/react/index.d.mts +1 -1
  575. package/esm/react/index.d.mts.map +1 -1
  576. package/esm/react/index.mjs +1 -1
  577. package/esm/react/index.mjs.map +1 -1
  578. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
  579. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  580. package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
  581. package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
  582. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
  583. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  584. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
  585. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  586. package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
  587. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  588. package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
  589. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  590. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
  591. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  592. package/esm/repositories/contracts/types.d.mts +1 -1
  593. package/esm/repositories/contracts/types.d.mts.map +1 -1
  594. package/esm/repositories/repository.manager.d.mts +1 -1
  595. package/esm/repositories/repository.manager.d.mts.map +1 -1
  596. package/esm/repositories/repository.manager.mjs +1 -1
  597. package/esm/repositories/repository.manager.mjs.map +1 -1
  598. package/esm/resource/define-resource.d.mts +1 -1
  599. package/esm/resource/define-resource.d.mts.map +1 -1
  600. package/esm/resource/define-resource.mjs +1 -1
  601. package/esm/resource/define-resource.mjs.map +1 -1
  602. package/esm/resource/register-resource.d.mts +1 -1
  603. package/esm/resource/register-resource.d.mts.map +1 -1
  604. package/esm/resource/register-resource.mjs +1 -1
  605. package/esm/resource/register-resource.mjs.map +1 -1
  606. package/esm/resource/resource-field-builder.d.mts +1 -1
  607. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  608. package/esm/resource/resource-field-builder.mjs +1 -1
  609. package/esm/resource/resource-field-builder.mjs.map +1 -1
  610. package/esm/resource/resource.d.mts +1 -1
  611. package/esm/resource/resource.d.mts.map +1 -1
  612. package/esm/resource/resource.mjs +1 -1
  613. package/esm/resource/resource.mjs.map +1 -1
  614. package/esm/resource/types.d.mts +1 -1
  615. package/esm/resource/types.d.mts.map +1 -1
  616. package/esm/restful/restful.d.mts +1 -1
  617. package/esm/restful/restful.d.mts.map +1 -1
  618. package/esm/restful/restful.mjs +1 -1
  619. package/esm/restful/restful.mjs.map +1 -1
  620. package/esm/router/route-builder.d.mts +1 -1
  621. package/esm/router/route-builder.d.mts.map +1 -1
  622. package/esm/router/route-builder.mjs +1 -1
  623. package/esm/router/route-builder.mjs.map +1 -1
  624. package/esm/router/route-registry.mjs +1 -1
  625. package/esm/router/route-registry.mjs.map +1 -1
  626. package/esm/router/router.d.mts +1 -1
  627. package/esm/router/router.d.mts.map +1 -1
  628. package/esm/router/router.mjs +1 -1
  629. package/esm/router/router.mjs.map +1 -1
  630. package/esm/router/types.d.mts +1 -1
  631. package/esm/router/types.d.mts.map +1 -1
  632. package/esm/socket/types.d.mts +1 -1
  633. package/esm/socket/types.d.mts.map +1 -1
  634. package/esm/socket/utils.d.mts +1 -1
  635. package/esm/socket/utils.d.mts.map +1 -1
  636. package/esm/socket/utils.mjs +1 -1
  637. package/esm/socket/utils.mjs.map +1 -1
  638. package/esm/storage/config.d.mts +1 -1
  639. package/esm/storage/config.d.mts.map +1 -1
  640. package/esm/storage/config.mjs +1 -1
  641. package/esm/storage/config.mjs.map +1 -1
  642. package/esm/storage/context/storage-driver-context.d.mts +1 -1
  643. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  644. package/esm/storage/context/storage-driver-context.mjs +1 -1
  645. package/esm/storage/context/storage-driver-context.mjs.map +1 -1
  646. package/esm/storage/drivers/cloud-driver.d.mts +1 -1
  647. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  648. package/esm/storage/drivers/cloud-driver.mjs +1 -1
  649. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  650. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
  651. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  652. package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
  653. package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
  654. package/esm/storage/drivers/local-driver.d.mts +1 -1
  655. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  656. package/esm/storage/drivers/local-driver.mjs +1 -1
  657. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  658. package/esm/storage/drivers/r2-driver.d.mts +1 -1
  659. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  660. package/esm/storage/drivers/r2-driver.mjs +1 -1
  661. package/esm/storage/drivers/r2-driver.mjs.map +1 -1
  662. package/esm/storage/drivers/s3-driver.d.mts +1 -1
  663. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  664. package/esm/storage/drivers/s3-driver.mjs +1 -1
  665. package/esm/storage/drivers/s3-driver.mjs.map +1 -1
  666. package/esm/storage/scoped-storage.d.mts +1 -1
  667. package/esm/storage/scoped-storage.d.mts.map +1 -1
  668. package/esm/storage/scoped-storage.mjs +1 -1
  669. package/esm/storage/scoped-storage.mjs.map +1 -1
  670. package/esm/storage/storage-file.d.mts +1 -1
  671. package/esm/storage/storage-file.d.mts.map +1 -1
  672. package/esm/storage/storage-file.mjs +1 -1
  673. package/esm/storage/storage-file.mjs.map +1 -1
  674. package/esm/storage/storage.d.mts +1 -1
  675. package/esm/storage/storage.d.mts.map +1 -1
  676. package/esm/storage/storage.mjs +1 -1
  677. package/esm/storage/storage.mjs.map +1 -1
  678. package/esm/storage/types.d.mts +1 -1
  679. package/esm/storage/types.d.mts.map +1 -1
  680. package/esm/storage/utils/contain-path.d.mts +1 -1
  681. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  682. package/esm/storage/utils/contain-path.mjs +1 -1
  683. package/esm/storage/utils/contain-path.mjs.map +1 -1
  684. package/esm/storage/utils/mime.d.mts +1 -1
  685. package/esm/storage/utils/mime.d.mts.map +1 -1
  686. package/esm/storage/utils/mime.mjs +1 -1
  687. package/esm/storage/utils/mime.mjs.map +1 -1
  688. package/esm/storage/utils/safe-fetch.d.mts +1 -1
  689. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  690. package/esm/storage/utils/safe-fetch.mjs +1 -1
  691. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  692. package/esm/storage/utils/storage-error.d.mts +1 -1
  693. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  694. package/esm/storage/utils/storage-error.mjs +1 -1
  695. package/esm/storage/utils/storage-error.mjs.map +1 -1
  696. package/esm/tests/start-http-development-server.d.mts +1 -1
  697. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  698. package/esm/tests/start-http-development-server.mjs +1 -1
  699. package/esm/tests/start-http-development-server.mjs.map +1 -1
  700. package/esm/tests/test-helpers.d.mts +1 -1
  701. package/esm/tests/test-helpers.d.mts.map +1 -1
  702. package/esm/tests/test-helpers.mjs +1 -1
  703. package/esm/tests/test-helpers.mjs.map +1 -1
  704. package/esm/tests/vitest-setup.d.mts +1 -1
  705. package/esm/tests/vitest-setup.d.mts.map +1 -1
  706. package/esm/tests/vitest-setup.mjs +1 -1
  707. package/esm/tests/vitest-setup.mjs.map +1 -1
  708. package/esm/updater/package-manager.mjs +47 -7
  709. package/esm/updater/package-manager.mjs.map +1 -1
  710. package/esm/updater/update-warlock-packages.mjs +63 -10
  711. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  712. package/esm/use-cases/types.d.mts +1 -1
  713. package/esm/use-cases/types.d.mts.map +1 -1
  714. package/esm/use-cases/use-case-broadcast.d.mts +1 -1
  715. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  716. package/esm/use-cases/use-case-broadcast.mjs +1 -1
  717. package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
  718. package/esm/use-cases/use-case-events.d.mts +1 -1
  719. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  720. package/esm/use-cases/use-case-events.mjs +1 -1
  721. package/esm/use-cases/use-case-events.mjs.map +1 -1
  722. package/esm/use-cases/use-case-pipeline.d.mts +1 -1
  723. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  724. package/esm/use-cases/use-case-pipeline.mjs +1 -1
  725. package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
  726. package/esm/use-cases/use-case.d.mts +1 -1
  727. package/esm/use-cases/use-case.d.mts.map +1 -1
  728. package/esm/use-cases/use-case.errors.d.mts +1 -1
  729. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  730. package/esm/use-cases/use-case.errors.mjs +1 -1
  731. package/esm/use-cases/use-case.errors.mjs.map +1 -1
  732. package/esm/use-cases/use-case.mjs +1 -1
  733. package/esm/use-cases/use-case.mjs.map +1 -1
  734. package/esm/use-cases/use-cases-registry.d.mts +1 -1
  735. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  736. package/esm/use-cases/use-cases-registry.mjs +1 -1
  737. package/esm/use-cases/use-cases-registry.mjs.map +1 -1
  738. package/esm/utils/app-log.d.mts +1 -1
  739. package/esm/utils/app-log.d.mts.map +1 -1
  740. package/esm/utils/app-log.mjs +1 -1
  741. package/esm/utils/app-log.mjs.map +1 -1
  742. package/esm/utils/database-log.d.mts +1 -1
  743. package/esm/utils/database-log.d.mts.map +1 -1
  744. package/esm/utils/database-log.mjs +1 -1
  745. package/esm/utils/database-log.mjs.map +1 -1
  746. package/esm/utils/environment.d.mts +1 -1
  747. package/esm/utils/environment.d.mts.map +1 -1
  748. package/esm/utils/environment.mjs +1 -1
  749. package/esm/utils/environment.mjs.map +1 -1
  750. package/esm/utils/framework-vesion.mjs +1 -1
  751. package/esm/utils/framework-vesion.mjs.map +1 -1
  752. package/esm/utils/get-localized.d.mts +1 -1
  753. package/esm/utils/get-localized.d.mts.map +1 -1
  754. package/esm/utils/get-localized.mjs +1 -1
  755. package/esm/utils/get-localized.mjs.map +1 -1
  756. package/esm/utils/npm-registry.d.mts +1 -1
  757. package/esm/utils/npm-registry.d.mts.map +1 -1
  758. package/esm/utils/npm-registry.mjs +1 -1
  759. package/esm/utils/npm-registry.mjs.map +1 -1
  760. package/esm/utils/paths.d.mts +1 -1
  761. package/esm/utils/paths.d.mts.map +1 -1
  762. package/esm/utils/paths.mjs +1 -1
  763. package/esm/utils/paths.mjs.map +1 -1
  764. package/esm/utils/promise-all-object.d.mts +1 -1
  765. package/esm/utils/promise-all-object.d.mts.map +1 -1
  766. package/esm/utils/promise-all-object.mjs +1 -1
  767. package/esm/utils/promise-all-object.mjs.map +1 -1
  768. package/esm/utils/queue.d.mts +1 -1
  769. package/esm/utils/queue.d.mts.map +1 -1
  770. package/esm/utils/queue.mjs +1 -1
  771. package/esm/utils/queue.mjs.map +1 -1
  772. package/esm/utils/sleep.d.mts +1 -1
  773. package/esm/utils/sleep.d.mts.map +1 -1
  774. package/esm/utils/sleep.mjs +1 -1
  775. package/esm/utils/sleep.mjs.map +1 -1
  776. package/esm/utils/sluggable.d.mts +1 -1
  777. package/esm/utils/sluggable.d.mts.map +1 -1
  778. package/esm/utils/sluggable.mjs +1 -1
  779. package/esm/utils/sluggable.mjs.map +1 -1
  780. package/esm/utils/to-json.d.mts +1 -1
  781. package/esm/utils/to-json.d.mts.map +1 -1
  782. package/esm/utils/to-json.mjs +1 -1
  783. package/esm/utils/to-json.mjs.map +1 -1
  784. package/esm/utils/types.d.mts +1 -1
  785. package/esm/utils/types.d.mts.map +1 -1
  786. package/esm/utils/urls.d.mts +1 -1
  787. package/esm/utils/urls.d.mts.map +1 -1
  788. package/esm/utils/urls.mjs +1 -1
  789. package/esm/utils/urls.mjs.map +1 -1
  790. package/esm/utils/version-compare.d.mts +1 -1
  791. package/esm/utils/version-compare.d.mts.map +1 -1
  792. package/esm/utils/version-compare.mjs +1 -1
  793. package/esm/utils/version-compare.mjs.map +1 -1
  794. package/esm/validation/database/exists-except-current-id.d.mts +1 -1
  795. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  796. package/esm/validation/database/exists-except-current-id.mjs +1 -1
  797. package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
  798. package/esm/validation/database/exists-except-current-user.d.mts +1 -1
  799. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  800. package/esm/validation/database/exists-except-current-user.mjs +1 -1
  801. package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
  802. package/esm/validation/database/types.d.mts +1 -1
  803. package/esm/validation/database/types.d.mts.map +1 -1
  804. package/esm/validation/database/unique-except-current-id.d.mts +1 -1
  805. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  806. package/esm/validation/database/unique-except-current-id.mjs +1 -1
  807. package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
  808. package/esm/validation/database/unique-except-current-user.d.mts +1 -1
  809. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  810. package/esm/validation/database/unique-except-current-user.mjs +1 -1
  811. package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
  812. package/esm/validation/file/file.d.mts +1 -1
  813. package/esm/validation/file/file.d.mts.map +1 -1
  814. package/esm/validation/file/file.mjs +1 -1
  815. package/esm/validation/file/file.mjs.map +1 -1
  816. package/esm/validation/init.mjs +1 -1
  817. package/esm/validation/init.mjs.map +1 -1
  818. package/esm/validation/plugins/database-plugin.mjs +1 -1
  819. package/esm/validation/plugins/database-plugin.mjs.map +1 -1
  820. package/esm/validation/plugins/file-plugin.mjs +1 -1
  821. package/esm/validation/plugins/file-plugin.mjs.map +1 -1
  822. package/esm/validation/plugins/localized-plugin.mjs +1 -1
  823. package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
  824. package/esm/validation/types.d.mts +1 -1
  825. package/esm/validation/types.d.mts.map +1 -1
  826. package/esm/validation/validateAll.mjs +1 -1
  827. package/esm/validation/validateAll.mjs.map +1 -1
  828. package/esm/validation/validators/file-validator.d.mts +1 -1
  829. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  830. package/esm/validation/validators/file-validator.mjs +1 -1
  831. package/esm/validation/validators/file-validator.mjs.map +1 -1
  832. package/esm/vite/lower-stage3-decorators.d.mts +1 -1
  833. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  834. package/esm/vite/lower-stage3-decorators.mjs +1 -1
  835. package/esm/vite/lower-stage3-decorators.mjs.map +1 -1
  836. package/esm/warlock-config/default-configurations.mjs +1 -1
  837. package/esm/warlock-config/default-configurations.mjs.map +1 -1
  838. package/esm/warlock-config/define-config.d.mts +1 -1
  839. package/esm/warlock-config/define-config.d.mts.map +1 -1
  840. package/esm/warlock-config/define-config.mjs +6 -2
  841. package/esm/warlock-config/define-config.mjs.map +1 -1
  842. package/esm/warlock-config/normalize-build-config.mjs +24 -0
  843. package/esm/warlock-config/normalize-build-config.mjs.map +1 -0
  844. package/esm/warlock-config/types.d.mts +21 -1
  845. package/esm/warlock-config/types.d.mts.map +1 -1
  846. package/esm/warlock-config/warlock-config.manager.d.mts +1 -1
  847. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  848. package/esm/warlock-config/warlock-config.manager.mjs +1 -1
  849. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  850. package/llms-full.txt +131 -13
  851. package/llms.txt +2 -2
  852. package/package.json +12 -12
  853. package/skills/run-app/SKILL.md +70 -7
  854. package/skills/update-packages/SKILL.md +61 -6
@@ -1 +1 @@
1
- {"version":3,"file":"cli-command.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/cli/cli-command.ts"],"sourcesContent":["import type {\n CLICommandAction,\n CLICommandOption,\n CLICommandOptions,\n CLICommandPreload,\n CLICommandSource,\n CommandActionData,\n ResolvedCLICommandOption,\n} from \"./types\";\n\nexport class CLICommand {\n /**\n * Command source\n */\n public commandSource?: CLICommandSource;\n\n /**\n * Command action\n */\n public commandAction?: CLICommandAction;\n\n /**\n * Command pre action\n * This will be executed before loading preloaders\n */\n public commandPreAction?: CLICommandAction;\n\n /**\n * Command preload\n */\n public commandPreload?: CLICommandPreload;\n\n /**\n * Command description\n */\n public commandDescription?: string;\n\n /**\n * Command options\n */\n public commandOptions: ResolvedCLICommandOption[] = [];\n\n /**\n * Command relative path\n * Available only for project commands\n * Auto injected by the framework itself\n */\n public commandRelativePath?: string;\n\n /**\n * Determine if the command is persistent\n */\n public isPersistent: boolean = false;\n\n /**\n * Command alias (short name)\n */\n public commandAlias?: string;\n\n /**\n * Constructor\n */\n public constructor(\n public name: string,\n description?: string,\n ) {\n if (description) {\n this.commandDescription = description;\n }\n\n return this;\n }\n\n /**\n * Add command source\n */\n public source(source: CLICommandSource): this {\n this.commandSource = source;\n return this;\n }\n\n /**\n * Set command description\n */\n public description(description: string): this {\n this.commandDescription = description;\n return this;\n }\n\n /**\n * Determine if the command is persistent\n */\n public persistent(isPersistent = true): this {\n this.isPersistent = isPersistent;\n return this;\n }\n\n /**\n * Set command alias (short name)\n * @example .alias(\"m\") for \"migrate\"\n */\n public alias(alias: string): this {\n this.commandAlias = alias;\n return this;\n }\n\n /**\n * Command action\n */\n public action(action: CLICommandAction): this {\n this.commandAction = action;\n return this;\n }\n\n /**\n * Command pre action\n * This will be executed before loading preloaders\n */\n public preAction(action: CLICommandAction): this {\n this.commandPreAction = action;\n return this;\n }\n\n /**\n * Add command options\n */\n public options(options: CLICommandOption[]): this {\n options.map((option) => this.option(option));\n\n return this;\n }\n\n /**\n * Add command relative path\n */\n public $relativePath(relativePath: string) {\n this.commandRelativePath = relativePath;\n return this;\n }\n\n /**\n * Add command option\n */\n public option(option: CLICommandOption): this;\n public option(name: string, description?: string, options?: Omit<CLICommandOption, \"name\">): this;\n public option(\n ...args: [CLICommandOption] | [string, string?, Omit<CLICommandOption, \"name\">?]\n ): this {\n let option: CLICommandOption;\n if (args.length === 1) {\n option = args[0] as CLICommandOption;\n } else {\n option = {\n text: args[0],\n description: args[1],\n ...args[2],\n name: \"\",\n };\n }\n\n this.commandOptions.push(this.parseOption(option));\n\n return this;\n }\n\n /**\n * Parse option name and alias if exists\n *\n * Supports formats:\n * - \"--port, -p\" → name: \"port\", alias: \"p\"\n * - \"-p, --port\" → name: \"port\", alias: \"p\"\n * - \"--port\" → name: \"port\", alias: undefined\n * - \"-p\" → name: \"p\", alias: undefined\n */\n protected parseOption(option: CLICommandOption): ResolvedCLICommandOption {\n const text = option.text.trim();\n\n // Split by comma to check for alias\n const parts = text.split(\",\").map((part) => part.trim());\n\n let name = \"\";\n let alias = \"\";\n\n if (parts.length === 1) {\n // Single option: \"--port\" or \"-p\"\n name = this.extractOptionName(parts[0]);\n } else if (parts.length === 2) {\n // Two options: \"--port, -p\" or \"-p, --port\"\n const first = parts[0];\n const second = parts[1];\n\n // Determine which is the long form (name) and which is short (alias)\n if (first.startsWith(\"--\")) {\n name = this.extractOptionName(first);\n alias = this.extractOptionName(second);\n } else {\n name = this.extractOptionName(second);\n alias = this.extractOptionName(first);\n }\n }\n\n if (alias === \"h\" || name === \"help\") {\n throw new Error(\"Help option is not allowed, it's reserved for displaying command help\");\n }\n\n return {\n ...option,\n name,\n alias,\n };\n }\n\n /**\n * Extract option name from text (removes -- or -)\n *\n * @example\n * extractOptionName(\"--port\") → \"port\"\n * extractOptionName(\"-p\") → \"p\"\n * extractOptionName(\"--port=3000\") → \"port\"\n */\n private extractOptionName(text: string): string {\n // Remove leading dashes\n let name = text.replace(/^-+/, \"\");\n\n // Remove value assignment if exists (e.g., \"--port=3000\" → \"port\")\n const equalIndex = name.indexOf(\"=\");\n if (equalIndex !== -1) {\n name = name.slice(0, equalIndex);\n }\n\n // Remove angle brackets if exists (e.g., \"--port <number>\" → \"port\")\n const spaceIndex = name.indexOf(\" \");\n if (spaceIndex !== -1) {\n name = name.slice(0, spaceIndex);\n }\n\n return name.trim();\n }\n\n /**\n * Command preload\n */\n public preload(options: CLICommandPreload) {\n this.commandPreload = options;\n return this;\n }\n\n /**\n * Execute the command\n */\n public async execute(data: CommandActionData) {\n if (!this.commandAction) {\n throw new Error(`Command \"${this.name}\" has no action defined`);\n }\n\n await this.commandAction(data);\n }\n}\n\nexport function command(options: CLICommandOptions) {\n const commandInstnace = new CLICommand(options.name, options.description);\n\n if (options.preload) {\n commandInstnace.preload(options.preload);\n }\n\n if (options.persistent) {\n commandInstnace.persistent(options.persistent);\n }\n\n if (options.alias) {\n commandInstnace.alias(options.alias);\n }\n\n commandInstnace.action(options.action);\n\n if (options.options) {\n commandInstnace.options(options.options);\n }\n\n if (options.preAction) {\n commandInstnace.preAction(options.preAction);\n }\n\n return commandInstnace;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli-command.mjs","names":[],"sources":["../../../../../../../core/src/cli/cli-command.ts"],"sourcesContent":["import type {\n CLICommandAction,\n CLICommandOption,\n CLICommandOptions,\n CLICommandPreload,\n CLICommandSource,\n CommandActionData,\n ResolvedCLICommandOption,\n} from \"./types\";\n\nexport class CLICommand {\n /**\n * Command source\n */\n public commandSource?: CLICommandSource;\n\n /**\n * Command action\n */\n public commandAction?: CLICommandAction;\n\n /**\n * Command pre action\n * This will be executed before loading preloaders\n */\n public commandPreAction?: CLICommandAction;\n\n /**\n * Command preload\n */\n public commandPreload?: CLICommandPreload;\n\n /**\n * Command description\n */\n public commandDescription?: string;\n\n /**\n * Command options\n */\n public commandOptions: ResolvedCLICommandOption[] = [];\n\n /**\n * Command relative path\n * Available only for project commands\n * Auto injected by the framework itself\n */\n public commandRelativePath?: string;\n\n /**\n * Determine if the command is persistent\n */\n public isPersistent: boolean = false;\n\n /**\n * Command alias (short name)\n */\n public commandAlias?: string;\n\n /**\n * Constructor\n */\n public constructor(\n public name: string,\n description?: string,\n ) {\n if (description) {\n this.commandDescription = description;\n }\n\n return this;\n }\n\n /**\n * Add command source\n */\n public source(source: CLICommandSource): this {\n this.commandSource = source;\n return this;\n }\n\n /**\n * Set command description\n */\n public description(description: string): this {\n this.commandDescription = description;\n return this;\n }\n\n /**\n * Determine if the command is persistent\n */\n public persistent(isPersistent = true): this {\n this.isPersistent = isPersistent;\n return this;\n }\n\n /**\n * Set command alias (short name)\n * @example .alias(\"m\") for \"migrate\"\n */\n public alias(alias: string): this {\n this.commandAlias = alias;\n return this;\n }\n\n /**\n * Command action\n */\n public action(action: CLICommandAction): this {\n this.commandAction = action;\n return this;\n }\n\n /**\n * Command pre action\n * This will be executed before loading preloaders\n */\n public preAction(action: CLICommandAction): this {\n this.commandPreAction = action;\n return this;\n }\n\n /**\n * Add command options\n */\n public options(options: CLICommandOption[]): this {\n options.map((option) => this.option(option));\n\n return this;\n }\n\n /**\n * Add command relative path\n */\n public $relativePath(relativePath: string) {\n this.commandRelativePath = relativePath;\n return this;\n }\n\n /**\n * Add command option\n */\n public option(option: CLICommandOption): this;\n public option(name: string, description?: string, options?: Omit<CLICommandOption, \"name\">): this;\n public option(\n ...args: [CLICommandOption] | [string, string?, Omit<CLICommandOption, \"name\">?]\n ): this {\n let option: CLICommandOption;\n if (args.length === 1) {\n option = args[0] as CLICommandOption;\n } else {\n option = {\n text: args[0],\n description: args[1],\n ...args[2],\n name: \"\",\n };\n }\n\n this.commandOptions.push(this.parseOption(option));\n\n return this;\n }\n\n /**\n * Parse option name and alias if exists\n *\n * Supports formats:\n * - \"--port, -p\" → name: \"port\", alias: \"p\"\n * - \"-p, --port\" → name: \"port\", alias: \"p\"\n * - \"--port\" → name: \"port\", alias: undefined\n * - \"-p\" → name: \"p\", alias: undefined\n */\n protected parseOption(option: CLICommandOption): ResolvedCLICommandOption {\n const text = option.text.trim();\n\n // Split by comma to check for alias\n const parts = text.split(\",\").map((part) => part.trim());\n\n let name = \"\";\n let alias = \"\";\n\n if (parts.length === 1) {\n // Single option: \"--port\" or \"-p\"\n name = this.extractOptionName(parts[0]);\n } else if (parts.length === 2) {\n // Two options: \"--port, -p\" or \"-p, --port\"\n const first = parts[0];\n const second = parts[1];\n\n // Determine which is the long form (name) and which is short (alias)\n if (first.startsWith(\"--\")) {\n name = this.extractOptionName(first);\n alias = this.extractOptionName(second);\n } else {\n name = this.extractOptionName(second);\n alias = this.extractOptionName(first);\n }\n }\n\n if (alias === \"h\" || name === \"help\") {\n throw new Error(\"Help option is not allowed, it's reserved for displaying command help\");\n }\n\n return {\n ...option,\n name,\n alias,\n };\n }\n\n /**\n * Extract option name from text (removes -- or -)\n *\n * @example\n * extractOptionName(\"--port\") → \"port\"\n * extractOptionName(\"-p\") → \"p\"\n * extractOptionName(\"--port=3000\") → \"port\"\n */\n private extractOptionName(text: string): string {\n // Remove leading dashes\n let name = text.replace(/^-+/, \"\");\n\n // Remove value assignment if exists (e.g., \"--port=3000\" → \"port\")\n const equalIndex = name.indexOf(\"=\");\n if (equalIndex !== -1) {\n name = name.slice(0, equalIndex);\n }\n\n // Remove angle brackets if exists (e.g., \"--port <number>\" → \"port\")\n const spaceIndex = name.indexOf(\" \");\n if (spaceIndex !== -1) {\n name = name.slice(0, spaceIndex);\n }\n\n return name.trim();\n }\n\n /**\n * Command preload\n */\n public preload(options: CLICommandPreload) {\n this.commandPreload = options;\n return this;\n }\n\n /**\n * Execute the command\n */\n public async execute(data: CommandActionData) {\n if (!this.commandAction) {\n throw new Error(`Command \"${this.name}\" has no action defined`);\n }\n\n await this.commandAction(data);\n }\n}\n\nexport function command(options: CLICommandOptions) {\n const commandInstnace = new CLICommand(options.name, options.description);\n\n if (options.preload) {\n commandInstnace.preload(options.preload);\n }\n\n if (options.persistent) {\n commandInstnace.persistent(options.persistent);\n }\n\n if (options.alias) {\n commandInstnace.alias(options.alias);\n }\n\n commandInstnace.action(options.action);\n\n if (options.options) {\n commandInstnace.options(options.options);\n }\n\n if (options.preAction) {\n commandInstnace.preAction(options.preAction);\n }\n\n return commandInstnace;\n}\n"],"mappings":"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"}
@@ -18,7 +18,7 @@ import { loadEnv } from "@mongez/dotenv";
18
18
  import { colors } from "@mongez/copper";
19
19
  import { fileExistsAsync } from "@warlock.js/fs";
20
20
 
21
- //#region ../@warlock.js/core/src/cli/cli-commands.manager.ts
21
+ //#region ../core/src/cli/cli-commands.manager.ts
22
22
  var CLICommandsManager = class {
23
23
  constructor() {
24
24
  this.commands = [];
@@ -1 +1 @@
1
- {"version":3,"file":"cli-commands.manager.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/cli/cli-commands.manager.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\r\nimport { loadEnv } from \"@mongez/dotenv\";\r\nimport { fileExistsAsync } from \"@warlock.js/fs\";\r\nimport { Application } from \"../application\";\r\nimport { bootstrap } from \"../bootstrap\";\r\nimport { loadConfigFiles } from \"../config/load-config-files\";\r\nimport { connectorsManager } from \"../connectors/connectors-manager\";\r\nimport { ConnectorLifecyclePhase } from \"../connectors/types\";\r\nimport { filesOrchestrator } from \"../dev-server/files-orchestrator\";\r\nimport { manifestManager } from \"../manifest/manifest-manager\";\r\nimport { appPath } from \"../utils\";\r\nimport { warlockConfigManager } from \"../warlock-config/warlock-config.manager\";\r\nimport { CLICommand } from \"./cli-command\";\r\nimport {\r\n displayBootError,\r\n displayCommandError,\r\n displayCommandHelp,\r\n displayCommandNotFound,\r\n displayCommandSuccess,\r\n displayExecutingCommand,\r\n displayHelp,\r\n displayMissingCommand,\r\n displayMissingOptions,\r\n displayWarlockVersionInTerminal,\r\n type HelpCommandInfo,\r\n isMatchingCommandName,\r\n} from \"./cli-commands.utils\";\r\nimport { cliCommandsLoader } from \"./commands-loader\";\r\nimport { frameworkCommands } from \"./framework-cli-commands\";\r\nimport { parseCliArgs } from \"./parse-cli-args\";\r\nimport { findSimilar } from \"./string-similarity\";\r\nimport { CommandActionData, ResolvedCLICommandOption } from \"./types\";\r\n\r\nexport class CLICommandsManager {\r\n /**\r\n * List of commands\r\n */\r\n public commands: CLICommand[] = [];\r\n\r\n /**\r\n * Commands map (name -> command)\r\n */\r\n public commandsMap: Map<string, CLICommand> = new Map();\r\n\r\n /**\r\n * Alias map (alias -> command name)\r\n */\r\n public aliasMap: Map<string, string> = new Map();\r\n\r\n /**\r\n * Register the given commands\r\n */\r\n public register(...commands: CLICommand[]): this {\r\n this.commands.push(...commands);\r\n\r\n commands.forEach((command) => {\r\n const commandKey = command.name.split(\" \")[0];\r\n\r\n manifestManager.addCommandToList(command.name, {\r\n relativePath: command.commandRelativePath,\r\n source: command.commandSource || \"project\",\r\n description: command.commandDescription,\r\n alias: command.commandAlias,\r\n options: command.commandOptions.length > 0 ? command.commandOptions : undefined,\r\n });\r\n\r\n this.commandsMap.set(commandKey, command);\r\n\r\n // Register alias if exists\r\n if (command.commandAlias) {\r\n this.aliasMap.set(command.commandAlias, commandKey);\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get command by name or alias\r\n */\r\n public getCommand(name: string): CLICommand | undefined {\r\n // First try direct lookup\r\n let command = this.commandsMap.get(name);\r\n if (command) return command;\r\n\r\n // Try alias lookup\r\n const realName = this.aliasMap.get(name);\r\n if (realName) {\r\n return this.commandsMap.get(realName);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Get all command names and aliases\r\n * Used for fuzzy matching suggestions\r\n */\r\n public getAllCommandNames(): string[] {\r\n const names: string[] = [];\r\n\r\n // Add all command names\r\n for (const name of this.commandsMap.keys()) {\r\n names.push(name);\r\n }\r\n\r\n // Add all aliases\r\n for (const alias of this.aliasMap.keys()) {\r\n names.push(alias);\r\n }\r\n\r\n // Also include cached commands from manifest\r\n const manifestCommands = manifestManager.commandsJson?.commands || {};\r\n for (const name of Object.keys(manifestCommands)) {\r\n const baseName = name.split(\" \")[0];\r\n if (!names.includes(baseName)) {\r\n names.push(baseName);\r\n }\r\n const alias = manifestCommands[name].alias;\r\n if (alias && !names.includes(alias)) {\r\n names.push(alias);\r\n }\r\n }\r\n\r\n return names;\r\n }\r\n\r\n /**\r\n * Start the cli manager\r\n */\r\n public async start() {\r\n const { name, options, args } = parseCliArgs(process.argv);\r\n\r\n if (options.noCache) {\r\n manifestManager.clearCommandsCache();\r\n // remove the commands.json file as wel\r\n await manifestManager.removeCommandsFile();\r\n }\r\n\r\n if (options.version || options.v) {\r\n await displayWarlockVersionInTerminal();\r\n process.exit(0);\r\n }\r\n\r\n // Try to load from manifest first (fastest path)\r\n await manifestManager.loadCommands();\r\n\r\n // Register framework commands first (needed for help)\r\n this.register(\r\n ...frameworkCommands.map((command) => {\r\n if (!command.commandSource) {\r\n command.commandSource = \"framework\";\r\n }\r\n return command;\r\n }),\r\n );\r\n\r\n const isHelpCommand = options.help || options.h;\r\n\r\n // Handle global help (no command)\r\n if (!name && isHelpCommand) {\r\n await this.showGlobalHelp();\r\n process.exit(0);\r\n }\r\n\r\n // Handle warm cache\r\n if (options.warmCache) {\r\n await this.warmCache();\r\n process.exit(0);\r\n }\r\n\r\n if (!name) {\r\n displayMissingCommand();\r\n process.exit(1);\r\n }\r\n\r\n const command = await this.lazyGetCommand(name);\r\n\r\n if (manifestManager.hasChanges) {\r\n await manifestManager.saveCommands();\r\n }\r\n\r\n if (!command) {\r\n // Find similar commands for suggestions\r\n const allCommandNames = this.getAllCommandNames();\r\n const suggestions = findSimilar(name, allCommandNames).map((s) => s.value);\r\n\r\n displayCommandNotFound(name, suggestions);\r\n process.exit(1);\r\n }\r\n\r\n // Handle command-specific help\r\n if (isHelpCommand) {\r\n displayCommandHelp({\r\n name: command.name,\r\n alias: command.commandAlias,\r\n description: command.commandDescription,\r\n options: command.commandOptions,\r\n });\r\n process.exit(0);\r\n }\r\n\r\n await this.execute(command, {\r\n options,\r\n args,\r\n });\r\n }\r\n\r\n /**\r\n * Show global help with all commands\r\n * Uses manifest if available for fast display\r\n */\r\n protected async showGlobalHelp() {\r\n if (\r\n manifestManager.isCommandLoaded &&\r\n Object.keys(manifestManager.commandsJson?.commands || {}).length > 0\r\n ) {\r\n // Use manifest directly - no need to load command files\r\n const helpCommands: HelpCommandInfo[] = Object.entries(\r\n manifestManager.commandsJson?.commands || {},\r\n ).map(([name, cmd]) => ({\r\n name,\r\n alias: cmd.alias,\r\n description: cmd.description,\r\n source: cmd.source,\r\n }));\r\n\r\n await displayHelp(helpCommands);\r\n return;\r\n }\r\n\r\n // Fallback: No manifest, build from registered commands\r\n // This happens on first run before warm-cache\r\n await this.loadPluginsCommands();\r\n\r\n const projectCommands = await cliCommandsLoader.scanAll();\r\n\r\n this.register(...projectCommands);\r\n\r\n await manifestManager.saveCommands();\r\n\r\n // Build help info from registered commands\r\n const helpCommands: HelpCommandInfo[] = this.commands.map((cmd) => ({\r\n name: cmd.name,\r\n alias: cmd.commandAlias,\r\n description: cmd.commandDescription,\r\n source: cmd.commandSource || \"project\",\r\n }));\r\n\r\n await displayHelp(helpCommands);\r\n }\r\n\r\n /**\r\n * Warm cache - scan all project commands and save to manifest\r\n */\r\n protected async warmCache() {\r\n console.log();\r\n console.log(` ${colors.cyan(\"›\")} Scanning project commands...`);\r\n\r\n const projectCommands = await cliCommandsLoader.scanAll();\r\n\r\n this.register(...projectCommands);\r\n\r\n await manifestManager.saveCommands();\r\n\r\n console.log(\r\n ` ${colors.green(\"✔\")} Cached ${colors.bold(String(projectCommands.length))} project commands`,\r\n );\r\n console.log();\r\n }\r\n\r\n /**\r\n * Load plugins commands\r\n */\r\n protected async loadPluginsCommands() {\r\n await warlockConfigManager.load();\r\n\r\n if (warlockConfigManager.isLoaded) {\r\n this.register(\r\n ...(warlockConfigManager.get(\"cli\")?.commands || []).map((command) => {\r\n if (!command.commandSource) {\r\n command.commandSource = \"plugin\";\r\n }\r\n return command;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Try to find the command based on the given command name or alias\r\n */\r\n protected async lazyGetCommand(name: string) {\r\n // first step, try to find it directly through current commands\r\n let command = this.getCommand(name);\r\n if (command) {\r\n return command;\r\n }\r\n\r\n // second step, try to find it through warlock config commands\r\n await this.loadPluginsCommands();\r\n\r\n command = this.getCommand(name);\r\n\r\n if (command) {\r\n return command;\r\n }\r\n\r\n // third step, try to find it through project commands\r\n await this.loadProjectCommands(name);\r\n\r\n command = this.getCommand(name);\r\n if (command) {\r\n return command;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Load project commands\r\n */\r\n protected async loadProjectCommands(name: string) {\r\n // first get the commands.json contents as an object\r\n const jsonCommandsFile = await manifestManager.loadCommands();\r\n\r\n if (jsonCommandsFile) {\r\n // Check by name or alias\r\n for (const fullCommandName in jsonCommandsFile.commands) {\r\n const cmdMeta = jsonCommandsFile.commands[fullCommandName];\r\n\r\n // Match by name or alias\r\n if (isMatchingCommandName(fullCommandName, name) || cmdMeta.alias === name) {\r\n const commandPath = cmdMeta.relativePath;\r\n if (commandPath) {\r\n const executedCommand = await cliCommandsLoader.load(commandPath);\r\n\r\n if (executedCommand) {\r\n executedCommand.$relativePath(commandPath);\r\n this.register(executedCommand);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const command = await cliCommandsLoader.locate(name);\r\n\r\n if (command) {\r\n this.register(command);\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Validate required options\r\n */\r\n protected validateOptions(\r\n command: CLICommand,\r\n options: Record<string, string | boolean | number>,\r\n ): ResolvedCLICommandOption[] {\r\n const missing: ResolvedCLICommandOption[] = [];\r\n\r\n command.commandOptions.forEach((opt) => {\r\n if (opt.required) {\r\n // Check if option is provided by name or alias\r\n const hasOption =\r\n options[opt.name] !== undefined || (opt.alias && options[opt.alias] !== undefined);\r\n if (!hasOption) {\r\n missing.push(opt);\r\n }\r\n }\r\n });\r\n\r\n return missing;\r\n }\r\n\r\n /**\r\n * Apply default values to options\r\n */\r\n protected applyDefaultOptions(\r\n command: CLICommand,\r\n options: Record<string, string | boolean | number>,\r\n ): Record<string, string | boolean | number> {\r\n const result = { ...options };\r\n\r\n command.commandOptions.forEach((opt) => {\r\n if (opt.defaultValue !== undefined) {\r\n const hasOption =\r\n result[opt.name] !== undefined || (opt.alias && result[opt.alias] !== undefined);\r\n if (!hasOption) {\r\n result[opt.name] = opt.defaultValue;\r\n }\r\n }\r\n\r\n if (opt.alias !== undefined && result[opt.alias] && result[opt.name] === undefined) {\r\n result[opt.name] = result[opt.alias];\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Execute the given command\r\n */\r\n public async execute(command: CLICommand, data: CommandActionData) {\r\n const startTime = Date.now();\r\n\r\n // Validate required options\r\n const missingOptions = this.validateOptions(command, data.options);\r\n if (missingOptions.length > 0) {\r\n displayMissingOptions(missingOptions);\r\n process.exit(1);\r\n }\r\n\r\n // Apply default values\r\n data.options = this.applyDefaultOptions(command, data.options);\r\n\r\n displayExecutingCommand(command.name);\r\n\r\n if (command.commandPreAction) {\r\n await command.commandPreAction(data);\r\n }\r\n\r\n // load preloaders\r\n if (command.commandPreload) {\r\n try {\r\n await this.loadPreloaders(command);\r\n } catch (error) {\r\n // A preload failure (a bad import in a config file, a connector that\r\n // throws on boot, a missing module export) happens BEFORE the command's\r\n // action runs — there is no run loop to recover into, so it is ALWAYS\r\n // fatal, persistent command (dev/start) or not. Surface the real cause\r\n // and the offending file, then exit. This MUST stay outside the\r\n // command-execute try/catch below: letting a preload rejection escape\r\n // turned `warlock dev` into a silent hang — the unhandled rejection slid\r\n // past while the already-started loader worker thread kept the process\r\n // alive, freezing just after the banner with no error printed.\r\n displayBootError(command.name, error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n try {\r\n await command.execute(data);\r\n\r\n if (!command.isPersistent) {\r\n displayCommandSuccess(command.name, Date.now() - startTime);\r\n\r\n process.exit(0);\r\n }\r\n } catch (error) {\r\n displayCommandError(command.name, error as Error);\r\n // Persistent commands (dev/start) own their startup-failure exits;\r\n // by the time an error reaches here they've already entered their\r\n // run loop, so it's a runtime error we log but don't crash on —\r\n // HMR or process supervisors can recover. Non-persistent\r\n // one-shot commands always exit on failure.\r\n if (!command.isPersistent) {\r\n process.exit(1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load preloaders\r\n */\r\n protected async loadPreloaders(command: CLICommand) {\r\n const preloaders = command.commandPreload || {};\r\n\r\n if (preloaders.runtimeStrategy) {\r\n Application.setRuntimeStrategy(preloaders.runtimeStrategy);\r\n }\r\n\r\n if (preloaders.environemnt) {\r\n Application.setEnvironment(preloaders.environemnt);\r\n }\r\n\r\n await warlockConfigManager.load();\r\n\r\n if (preloaders.config || preloaders.bootstrap || preloaders.prestart) {\r\n await filesOrchestrator.init();\r\n }\r\n\r\n if (preloaders.env && !preloaders.bootstrap) {\r\n await loadEnv();\r\n } else if (preloaders.bootstrap) {\r\n await bootstrap();\r\n\r\n if (await fileExistsAsync(appPath(\"bootstrap.ts\"))) {\r\n await filesOrchestrator.load(\"src/app/bootstrap.ts\");\r\n }\r\n }\r\n\r\n // Load configuration files\r\n if (preloaders.config) {\r\n await loadConfigFiles(preloaders.config);\r\n }\r\n\r\n if (preloaders.prestart) {\r\n if (await fileExistsAsync(appPath(\"prestart.ts\"))) {\r\n await filesOrchestrator.load(\"src/app/prestart.ts\");\r\n }\r\n }\r\n\r\n // Initialize connectors.\r\n // `connectors: true` only starts the early phase here — late-phase\r\n // connectors (http, socket) start after the command's action loads\r\n // app code. Explicit lists bypass phase splitting (caller knows\r\n // exactly which connectors they want).\r\n if (preloaders.connectors) {\r\n if (preloaders.connectors === true) {\r\n await connectorsManager.startPhase(ConnectorLifecyclePhase.Early);\r\n } else {\r\n await connectorsManager.start(preloaders.connectors);\r\n }\r\n }\r\n }\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli-commands.manager.mjs","names":[],"sources":["../../../../../../../core/src/cli/cli-commands.manager.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\r\nimport { loadEnv } from \"@mongez/dotenv\";\r\nimport { fileExistsAsync } from \"@warlock.js/fs\";\r\nimport { Application } from \"../application\";\r\nimport { bootstrap } from \"../bootstrap\";\r\nimport { loadConfigFiles } from \"../config/load-config-files\";\r\nimport { connectorsManager } from \"../connectors/connectors-manager\";\r\nimport { ConnectorLifecyclePhase } from \"../connectors/types\";\r\nimport { filesOrchestrator } from \"../dev-server/files-orchestrator\";\r\nimport { manifestManager } from \"../manifest/manifest-manager\";\r\nimport { appPath } from \"../utils\";\r\nimport { warlockConfigManager } from \"../warlock-config/warlock-config.manager\";\r\nimport { CLICommand } from \"./cli-command\";\r\nimport {\r\n displayBootError,\r\n displayCommandError,\r\n displayCommandHelp,\r\n displayCommandNotFound,\r\n displayCommandSuccess,\r\n displayExecutingCommand,\r\n displayHelp,\r\n displayMissingCommand,\r\n displayMissingOptions,\r\n displayWarlockVersionInTerminal,\r\n type HelpCommandInfo,\r\n isMatchingCommandName,\r\n} from \"./cli-commands.utils\";\r\nimport { cliCommandsLoader } from \"./commands-loader\";\r\nimport { frameworkCommands } from \"./framework-cli-commands\";\r\nimport { parseCliArgs } from \"./parse-cli-args\";\r\nimport { findSimilar } from \"./string-similarity\";\r\nimport { CommandActionData, ResolvedCLICommandOption } from \"./types\";\r\n\r\nexport class CLICommandsManager {\r\n /**\r\n * List of commands\r\n */\r\n public commands: CLICommand[] = [];\r\n\r\n /**\r\n * Commands map (name -> command)\r\n */\r\n public commandsMap: Map<string, CLICommand> = new Map();\r\n\r\n /**\r\n * Alias map (alias -> command name)\r\n */\r\n public aliasMap: Map<string, string> = new Map();\r\n\r\n /**\r\n * Register the given commands\r\n */\r\n public register(...commands: CLICommand[]): this {\r\n this.commands.push(...commands);\r\n\r\n commands.forEach((command) => {\r\n const commandKey = command.name.split(\" \")[0];\r\n\r\n manifestManager.addCommandToList(command.name, {\r\n relativePath: command.commandRelativePath,\r\n source: command.commandSource || \"project\",\r\n description: command.commandDescription,\r\n alias: command.commandAlias,\r\n options: command.commandOptions.length > 0 ? command.commandOptions : undefined,\r\n });\r\n\r\n this.commandsMap.set(commandKey, command);\r\n\r\n // Register alias if exists\r\n if (command.commandAlias) {\r\n this.aliasMap.set(command.commandAlias, commandKey);\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get command by name or alias\r\n */\r\n public getCommand(name: string): CLICommand | undefined {\r\n // First try direct lookup\r\n let command = this.commandsMap.get(name);\r\n if (command) return command;\r\n\r\n // Try alias lookup\r\n const realName = this.aliasMap.get(name);\r\n if (realName) {\r\n return this.commandsMap.get(realName);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Get all command names and aliases\r\n * Used for fuzzy matching suggestions\r\n */\r\n public getAllCommandNames(): string[] {\r\n const names: string[] = [];\r\n\r\n // Add all command names\r\n for (const name of this.commandsMap.keys()) {\r\n names.push(name);\r\n }\r\n\r\n // Add all aliases\r\n for (const alias of this.aliasMap.keys()) {\r\n names.push(alias);\r\n }\r\n\r\n // Also include cached commands from manifest\r\n const manifestCommands = manifestManager.commandsJson?.commands || {};\r\n for (const name of Object.keys(manifestCommands)) {\r\n const baseName = name.split(\" \")[0];\r\n if (!names.includes(baseName)) {\r\n names.push(baseName);\r\n }\r\n const alias = manifestCommands[name].alias;\r\n if (alias && !names.includes(alias)) {\r\n names.push(alias);\r\n }\r\n }\r\n\r\n return names;\r\n }\r\n\r\n /**\r\n * Start the cli manager\r\n */\r\n public async start() {\r\n const { name, options, args } = parseCliArgs(process.argv);\r\n\r\n if (options.noCache) {\r\n manifestManager.clearCommandsCache();\r\n // remove the commands.json file as wel\r\n await manifestManager.removeCommandsFile();\r\n }\r\n\r\n if (options.version || options.v) {\r\n await displayWarlockVersionInTerminal();\r\n process.exit(0);\r\n }\r\n\r\n // Try to load from manifest first (fastest path)\r\n await manifestManager.loadCommands();\r\n\r\n // Register framework commands first (needed for help)\r\n this.register(\r\n ...frameworkCommands.map((command) => {\r\n if (!command.commandSource) {\r\n command.commandSource = \"framework\";\r\n }\r\n return command;\r\n }),\r\n );\r\n\r\n const isHelpCommand = options.help || options.h;\r\n\r\n // Handle global help (no command)\r\n if (!name && isHelpCommand) {\r\n await this.showGlobalHelp();\r\n process.exit(0);\r\n }\r\n\r\n // Handle warm cache\r\n if (options.warmCache) {\r\n await this.warmCache();\r\n process.exit(0);\r\n }\r\n\r\n if (!name) {\r\n displayMissingCommand();\r\n process.exit(1);\r\n }\r\n\r\n const command = await this.lazyGetCommand(name);\r\n\r\n if (manifestManager.hasChanges) {\r\n await manifestManager.saveCommands();\r\n }\r\n\r\n if (!command) {\r\n // Find similar commands for suggestions\r\n const allCommandNames = this.getAllCommandNames();\r\n const suggestions = findSimilar(name, allCommandNames).map((s) => s.value);\r\n\r\n displayCommandNotFound(name, suggestions);\r\n process.exit(1);\r\n }\r\n\r\n // Handle command-specific help\r\n if (isHelpCommand) {\r\n displayCommandHelp({\r\n name: command.name,\r\n alias: command.commandAlias,\r\n description: command.commandDescription,\r\n options: command.commandOptions,\r\n });\r\n process.exit(0);\r\n }\r\n\r\n await this.execute(command, {\r\n options,\r\n args,\r\n });\r\n }\r\n\r\n /**\r\n * Show global help with all commands\r\n * Uses manifest if available for fast display\r\n */\r\n protected async showGlobalHelp() {\r\n if (\r\n manifestManager.isCommandLoaded &&\r\n Object.keys(manifestManager.commandsJson?.commands || {}).length > 0\r\n ) {\r\n // Use manifest directly - no need to load command files\r\n const helpCommands: HelpCommandInfo[] = Object.entries(\r\n manifestManager.commandsJson?.commands || {},\r\n ).map(([name, cmd]) => ({\r\n name,\r\n alias: cmd.alias,\r\n description: cmd.description,\r\n source: cmd.source,\r\n }));\r\n\r\n await displayHelp(helpCommands);\r\n return;\r\n }\r\n\r\n // Fallback: No manifest, build from registered commands\r\n // This happens on first run before warm-cache\r\n await this.loadPluginsCommands();\r\n\r\n const projectCommands = await cliCommandsLoader.scanAll();\r\n\r\n this.register(...projectCommands);\r\n\r\n await manifestManager.saveCommands();\r\n\r\n // Build help info from registered commands\r\n const helpCommands: HelpCommandInfo[] = this.commands.map((cmd) => ({\r\n name: cmd.name,\r\n alias: cmd.commandAlias,\r\n description: cmd.commandDescription,\r\n source: cmd.commandSource || \"project\",\r\n }));\r\n\r\n await displayHelp(helpCommands);\r\n }\r\n\r\n /**\r\n * Warm cache - scan all project commands and save to manifest\r\n */\r\n protected async warmCache() {\r\n console.log();\r\n console.log(` ${colors.cyan(\"›\")} Scanning project commands...`);\r\n\r\n const projectCommands = await cliCommandsLoader.scanAll();\r\n\r\n this.register(...projectCommands);\r\n\r\n await manifestManager.saveCommands();\r\n\r\n console.log(\r\n ` ${colors.green(\"✔\")} Cached ${colors.bold(String(projectCommands.length))} project commands`,\r\n );\r\n console.log();\r\n }\r\n\r\n /**\r\n * Load plugins commands\r\n */\r\n protected async loadPluginsCommands() {\r\n await warlockConfigManager.load();\r\n\r\n if (warlockConfigManager.isLoaded) {\r\n this.register(\r\n ...(warlockConfigManager.get(\"cli\")?.commands || []).map((command) => {\r\n if (!command.commandSource) {\r\n command.commandSource = \"plugin\";\r\n }\r\n return command;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Try to find the command based on the given command name or alias\r\n */\r\n protected async lazyGetCommand(name: string) {\r\n // first step, try to find it directly through current commands\r\n let command = this.getCommand(name);\r\n if (command) {\r\n return command;\r\n }\r\n\r\n // second step, try to find it through warlock config commands\r\n await this.loadPluginsCommands();\r\n\r\n command = this.getCommand(name);\r\n\r\n if (command) {\r\n return command;\r\n }\r\n\r\n // third step, try to find it through project commands\r\n await this.loadProjectCommands(name);\r\n\r\n command = this.getCommand(name);\r\n if (command) {\r\n return command;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Load project commands\r\n */\r\n protected async loadProjectCommands(name: string) {\r\n // first get the commands.json contents as an object\r\n const jsonCommandsFile = await manifestManager.loadCommands();\r\n\r\n if (jsonCommandsFile) {\r\n // Check by name or alias\r\n for (const fullCommandName in jsonCommandsFile.commands) {\r\n const cmdMeta = jsonCommandsFile.commands[fullCommandName];\r\n\r\n // Match by name or alias\r\n if (isMatchingCommandName(fullCommandName, name) || cmdMeta.alias === name) {\r\n const commandPath = cmdMeta.relativePath;\r\n if (commandPath) {\r\n const executedCommand = await cliCommandsLoader.load(commandPath);\r\n\r\n if (executedCommand) {\r\n executedCommand.$relativePath(commandPath);\r\n this.register(executedCommand);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const command = await cliCommandsLoader.locate(name);\r\n\r\n if (command) {\r\n this.register(command);\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Validate required options\r\n */\r\n protected validateOptions(\r\n command: CLICommand,\r\n options: Record<string, string | boolean | number>,\r\n ): ResolvedCLICommandOption[] {\r\n const missing: ResolvedCLICommandOption[] = [];\r\n\r\n command.commandOptions.forEach((opt) => {\r\n if (opt.required) {\r\n // Check if option is provided by name or alias\r\n const hasOption =\r\n options[opt.name] !== undefined || (opt.alias && options[opt.alias] !== undefined);\r\n if (!hasOption) {\r\n missing.push(opt);\r\n }\r\n }\r\n });\r\n\r\n return missing;\r\n }\r\n\r\n /**\r\n * Apply default values to options\r\n */\r\n protected applyDefaultOptions(\r\n command: CLICommand,\r\n options: Record<string, string | boolean | number>,\r\n ): Record<string, string | boolean | number> {\r\n const result = { ...options };\r\n\r\n command.commandOptions.forEach((opt) => {\r\n if (opt.defaultValue !== undefined) {\r\n const hasOption =\r\n result[opt.name] !== undefined || (opt.alias && result[opt.alias] !== undefined);\r\n if (!hasOption) {\r\n result[opt.name] = opt.defaultValue;\r\n }\r\n }\r\n\r\n if (opt.alias !== undefined && result[opt.alias] && result[opt.name] === undefined) {\r\n result[opt.name] = result[opt.alias];\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Execute the given command\r\n */\r\n public async execute(command: CLICommand, data: CommandActionData) {\r\n const startTime = Date.now();\r\n\r\n // Validate required options\r\n const missingOptions = this.validateOptions(command, data.options);\r\n if (missingOptions.length > 0) {\r\n displayMissingOptions(missingOptions);\r\n process.exit(1);\r\n }\r\n\r\n // Apply default values\r\n data.options = this.applyDefaultOptions(command, data.options);\r\n\r\n displayExecutingCommand(command.name);\r\n\r\n if (command.commandPreAction) {\r\n await command.commandPreAction(data);\r\n }\r\n\r\n // load preloaders\r\n if (command.commandPreload) {\r\n try {\r\n await this.loadPreloaders(command);\r\n } catch (error) {\r\n // A preload failure (a bad import in a config file, a connector that\r\n // throws on boot, a missing module export) happens BEFORE the command's\r\n // action runs — there is no run loop to recover into, so it is ALWAYS\r\n // fatal, persistent command (dev/start) or not. Surface the real cause\r\n // and the offending file, then exit. This MUST stay outside the\r\n // command-execute try/catch below: letting a preload rejection escape\r\n // turned `warlock dev` into a silent hang — the unhandled rejection slid\r\n // past while the already-started loader worker thread kept the process\r\n // alive, freezing just after the banner with no error printed.\r\n displayBootError(command.name, error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n try {\r\n await command.execute(data);\r\n\r\n if (!command.isPersistent) {\r\n displayCommandSuccess(command.name, Date.now() - startTime);\r\n\r\n process.exit(0);\r\n }\r\n } catch (error) {\r\n displayCommandError(command.name, error as Error);\r\n // Persistent commands (dev/start) own their startup-failure exits;\r\n // by the time an error reaches here they've already entered their\r\n // run loop, so it's a runtime error we log but don't crash on —\r\n // HMR or process supervisors can recover. Non-persistent\r\n // one-shot commands always exit on failure.\r\n if (!command.isPersistent) {\r\n process.exit(1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load preloaders\r\n */\r\n protected async loadPreloaders(command: CLICommand) {\r\n const preloaders = command.commandPreload || {};\r\n\r\n if (preloaders.runtimeStrategy) {\r\n Application.setRuntimeStrategy(preloaders.runtimeStrategy);\r\n }\r\n\r\n if (preloaders.environemnt) {\r\n Application.setEnvironment(preloaders.environemnt);\r\n }\r\n\r\n await warlockConfigManager.load();\r\n\r\n if (preloaders.config || preloaders.bootstrap || preloaders.prestart) {\r\n await filesOrchestrator.init();\r\n }\r\n\r\n if (preloaders.env && !preloaders.bootstrap) {\r\n await loadEnv();\r\n } else if (preloaders.bootstrap) {\r\n await bootstrap();\r\n\r\n if (await fileExistsAsync(appPath(\"bootstrap.ts\"))) {\r\n await filesOrchestrator.load(\"src/app/bootstrap.ts\");\r\n }\r\n }\r\n\r\n // Load configuration files\r\n if (preloaders.config) {\r\n await loadConfigFiles(preloaders.config);\r\n }\r\n\r\n if (preloaders.prestart) {\r\n if (await fileExistsAsync(appPath(\"prestart.ts\"))) {\r\n await filesOrchestrator.load(\"src/app/prestart.ts\");\r\n }\r\n }\r\n\r\n // Initialize connectors.\r\n // `connectors: true` only starts the early phase here — late-phase\r\n // connectors (http, socket) start after the command's action loads\r\n // app code. Explicit lists bypass phase splitting (caller knows\r\n // exactly which connectors they want).\r\n if (preloaders.connectors) {\r\n if (preloaders.connectors === true) {\r\n await connectorsManager.startPhase(ConnectorLifecyclePhase.Early);\r\n } else {\r\n await connectorsManager.start(preloaders.connectors);\r\n }\r\n }\r\n }\r\n}\r\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { getWarlockVersion } from "../utils/framework-vesion.mjs";
2
2
  import { colors } from "@mongez/copper";
3
3
 
4
- //#region ../@warlock.js/core/src/cli/cli-commands.utils.ts
4
+ //#region ../core/src/cli/cli-commands.utils.ts
5
5
  function isMatchingCommandName(commandName, targetingCommandName) {
6
6
  return commandName.split(" ")[0] === targetingCommandName;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-commands.utils.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/cli/cli-commands.utils.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport { Environment } from \"../utils\";\nimport { getWarlockVersion } from \"../utils/framework-vesion\";\n\nexport function isMatchingCommandName(commandName: string, targetingCommandName: string) {\n return commandName.split(\" \")[0] === targetingCommandName;\n}\n\n/**\n * Display the Warlock.js version banner\n */\nexport async function displayWarlockVersionInTerminal() {\n const version = await getWarlockVersion();\n console.log(`⚡ ${colors.bold(\"Warlock.js\")} ${colors.greenBright(`v${version}`)}`);\n}\n\ntype StartBannerOptions = {\n environment: Environment;\n};\n\nfunction getTextColorMethod(environment: Environment) {\n switch (environment) {\n case \"development\":\n return colors.yellowBright;\n case \"production\":\n return colors.greenBright;\n case \"test\":\n return colors.blueBright;\n default:\n return colors.whiteBright;\n }\n}\n\n/**\n * Display CLI startup banner\n */\nexport async function displayStartupBanner({ environment }: StartBannerOptions) {\n const version = await getWarlockVersion();\n const textColorMethod = getTextColorMethod(environment);\n console.log(` ⚡ ${colors.bold(textColorMethod(\"Warlock.js\"))} ${colors.dim(`v${version}`)}`);\n console.log();\n}\n\n/**\n * Display command execution header\n */\nexport function displayExecutingCommand(commandName: string) {\n console.log(` ${colors.cyan(\"›\")} Running ${colors.bold(colors.white(commandName))}...`);\n console.log();\n}\n\n/**\n * Display command not found error with optional suggestions\n */\nexport function displayCommandNotFound(commandName: string, suggestions?: string[]) {\n console.log();\n console.log(` ${colors.red(\"✖\")} Command ${colors.magenta(commandName)} not found`);\n\n if (suggestions && suggestions.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"Did you mean?\")}`);\n suggestions.forEach((suggestion) => {\n console.log(` ${colors.cyan(\"→\")} ${colors.white(suggestion)}`);\n });\n }\n\n console.log();\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock --help\")} ${colors.dim(\"to see available commands\")}`,\n );\n console.log();\n}\n\n/**\n * Display missing command error\n */\nexport function displayMissingCommand() {\n console.log();\n console.log(` ${colors.red(\"✖\")} No command specified`);\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock --help\")} ${colors.dim(\"to see available commands\")}`,\n );\n console.log();\n}\n\n/**\n * Display command success message\n */\nexport function displayCommandSuccess(commandName: string, durationMs?: number) {\n const duration = durationMs ? colors.dim(` (${durationMs}ms)`) : \"\";\n console.log();\n console.log(\n ` ${colors.green(\"✔\")} ${colors.bold(commandName)} completed successfully${duration}`,\n );\n console.log();\n}\n\n/**\n * Display command error message\n */\nexport function displayCommandError(commandName: string, error: Error) {\n console.log();\n console.log(` ${colors.red(\"✖\")} ${colors.bold(commandName)} failed`);\n console.log(` ${colors.dim(error.message)}`);\n console.log();\n}\n\n/**\n * Display a FATAL boot/preload failure and exit information.\n *\n * Preload failures — a bad import in a config file, a connector that throws\n * on startup, a missing module export — happen BEFORE the command's run loop\n * exists, so there is nothing to recover into: they are always fatal. Unlike\n * `displayCommandError`, this prints the full stack (not just `error.message`)\n * because the stack names the exact file + line of the offending import, which\n * is the single most useful clue when a config file pulls in a broken module.\n *\n * Surfacing this loudly is the difference between a clear error and a silent\n * hang: an unhandled preload rejection used to escape while the already-started\n * loader worker thread kept the process alive, leaving `warlock dev` frozen\n * just after the banner with no message at all.\n *\n * @example\n * // SyntaxError: The requested module '@warlock.js/cascade' does not\n * // provide an export named 'belongsTo'\n * // at src/app/.../permission.model.ts:2\n */\nexport function displayBootError(commandName: string, error: Error) {\n console.log();\n console.log(` ${colors.red(\"✖\")} ${colors.bold(commandName)} failed to start`);\n console.log(` ${colors.red(error.message)}`);\n if (error.stack) {\n console.log();\n console.log(colors.dim(error.stack));\n }\n console.log();\n}\n\n/**\n * Display missing required options error\n */\nexport function displayMissingOptions(options: { name: string; text: string }[]) {\n console.log();\n console.log(` ${colors.red(\"✖\")} Missing required options:`);\n options.forEach((opt) => {\n console.log(` ${colors.yellow(opt.text)} ${colors.dim(`(--${opt.name})`)}`);\n });\n console.log();\n}\n\n/**\n * Command info for help display\n */\nexport type HelpCommandInfo = {\n name: string;\n alias?: string;\n description?: string;\n source: \"framework\" | \"plugin\" | \"project\";\n};\n\n/**\n * Display global help with all commands grouped by source\n */\nexport async function displayHelp(commands: HelpCommandInfo[]) {\n const version = await getWarlockVersion();\n\n console.log();\n console.log(\n ` ⚡ ${colors.bold(colors.yellowBright(\"Warlock.js\"))} CLI ${colors.dim(`v${version}`)}`,\n );\n console.log();\n console.log(\n ` ${colors.bold(\"Usage:\")} ${colors.cyan(\"warlock\")} ${colors.dim(\"<command>\")} ${colors.dim(\"[options]\")}`,\n );\n console.log();\n\n // Group by source\n const grouped: Record<string, HelpCommandInfo[]> = {\n framework: [],\n plugin: [],\n project: [],\n };\n\n commands.forEach((cmd) => {\n grouped[cmd.source]?.push(cmd);\n });\n\n // Display each group\n const groupLabels: Record<string, string> = {\n framework: \"Framework Commands\",\n plugin: \"Plugin Commands\",\n project: \"Project Commands\",\n };\n\n for (const [source, cmds] of Object.entries(grouped)) {\n if (cmds.length === 0) continue;\n\n console.log(` ${colors.bold(colors.white(groupLabels[source]))}`);\n console.log();\n\n // Find max name length for alignment\n const maxLen = Math.max(...cmds.map((c) => c.name.length + (c.alias ? c.alias.length + 4 : 0)));\n\n cmds.forEach((cmd) => {\n const aliasStr = cmd.alias ? colors.dim(` (${cmd.alias})`) : \"\";\n const nameWithAlias = cmd.name + (cmd.alias ? ` (${cmd.alias})` : \"\");\n const padding = \" \".repeat(maxLen - nameWithAlias.length + 2);\n // const desc = cmd.description || colors.dim(\"No description\");\n const desc = cmd.description || \"\";\n console.log(` ${colors.cyan(cmd.name)}${aliasStr}${padding}${desc}`);\n });\n console.log();\n }\n\n // Display global flags\n console.log(` ${colors.bold(colors.white(\"Global Flags\"))}`);\n console.log();\n\n const globalFlags = [\n { flag: \"--help, -h\", description: \"Show help for a command\" },\n { flag: \"--version, -v\", description: \"Show Warlock version\" },\n { flag: \"--no-cache\", description: \"Force reload without cache\" },\n { flag: \"--warm-cache\", description: \"Pre-cache all project commands\" },\n ];\n\n const maxFlagLen = Math.max(...globalFlags.map((f) => f.flag.length));\n\n globalFlags.forEach(({ flag, description }) => {\n const padding = \" \".repeat(maxFlagLen - flag.length + 2);\n console.log(` ${colors.yellow(flag)}${padding}${description}`);\n });\n console.log();\n\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock <command> --help\")} ${colors.dim(\"for command-specific help\")}`,\n );\n console.log();\n}\n\n/**\n * Display help for a specific command\n */\nexport function displayCommandHelp(command: {\n name: string;\n alias?: string;\n description?: string;\n options?: { name: string; text: string; description?: string; required?: boolean }[];\n}) {\n console.log();\n console.log(\n ` ${colors.bold(colors.cyan(command.name))}${command.alias ? colors.dim(` (${command.alias})`) : \"\"}`,\n );\n\n if (command.description) {\n console.log(` ${command.description}`);\n }\n console.log();\n\n if (command.options && command.options.length > 0) {\n console.log(` ${colors.bold(\"Options:\")}`);\n console.log();\n\n const maxLen = Math.max(...command.options.map((o) => o.text.length));\n\n command.options.forEach((opt) => {\n const padding = \" \".repeat(maxLen - opt.text.length + 2);\n const required = opt.required ? colors.red(\" (required)\") : \"\";\n const desc = opt.description || \"\";\n console.log(` ${colors.green(opt.text)}${padding}${desc}${required}`);\n });\n console.log();\n } else {\n console.log(` ${colors.dim(\"No options available\")}`);\n console.log();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli-commands.utils.mjs","names":[],"sources":["../../../../../../../core/src/cli/cli-commands.utils.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport { Environment } from \"../utils\";\nimport { getWarlockVersion } from \"../utils/framework-vesion\";\n\nexport function isMatchingCommandName(commandName: string, targetingCommandName: string) {\n return commandName.split(\" \")[0] === targetingCommandName;\n}\n\n/**\n * Display the Warlock.js version banner\n */\nexport async function displayWarlockVersionInTerminal() {\n const version = await getWarlockVersion();\n console.log(`⚡ ${colors.bold(\"Warlock.js\")} ${colors.greenBright(`v${version}`)}`);\n}\n\ntype StartBannerOptions = {\n environment: Environment;\n};\n\nfunction getTextColorMethod(environment: Environment) {\n switch (environment) {\n case \"development\":\n return colors.yellowBright;\n case \"production\":\n return colors.greenBright;\n case \"test\":\n return colors.blueBright;\n default:\n return colors.whiteBright;\n }\n}\n\n/**\n * Display CLI startup banner\n */\nexport async function displayStartupBanner({ environment }: StartBannerOptions) {\n const version = await getWarlockVersion();\n const textColorMethod = getTextColorMethod(environment);\n console.log(` ⚡ ${colors.bold(textColorMethod(\"Warlock.js\"))} ${colors.dim(`v${version}`)}`);\n console.log();\n}\n\n/**\n * Display command execution header\n */\nexport function displayExecutingCommand(commandName: string) {\n console.log(` ${colors.cyan(\"›\")} Running ${colors.bold(colors.white(commandName))}...`);\n console.log();\n}\n\n/**\n * Display command not found error with optional suggestions\n */\nexport function displayCommandNotFound(commandName: string, suggestions?: string[]) {\n console.log();\n console.log(` ${colors.red(\"✖\")} Command ${colors.magenta(commandName)} not found`);\n\n if (suggestions && suggestions.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"Did you mean?\")}`);\n suggestions.forEach((suggestion) => {\n console.log(` ${colors.cyan(\"→\")} ${colors.white(suggestion)}`);\n });\n }\n\n console.log();\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock --help\")} ${colors.dim(\"to see available commands\")}`,\n );\n console.log();\n}\n\n/**\n * Display missing command error\n */\nexport function displayMissingCommand() {\n console.log();\n console.log(` ${colors.red(\"✖\")} No command specified`);\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock --help\")} ${colors.dim(\"to see available commands\")}`,\n );\n console.log();\n}\n\n/**\n * Display command success message\n */\nexport function displayCommandSuccess(commandName: string, durationMs?: number) {\n const duration = durationMs ? colors.dim(` (${durationMs}ms)`) : \"\";\n console.log();\n console.log(\n ` ${colors.green(\"✔\")} ${colors.bold(commandName)} completed successfully${duration}`,\n );\n console.log();\n}\n\n/**\n * Display command error message\n */\nexport function displayCommandError(commandName: string, error: Error) {\n console.log();\n console.log(` ${colors.red(\"✖\")} ${colors.bold(commandName)} failed`);\n console.log(` ${colors.dim(error.message)}`);\n console.log();\n}\n\n/**\n * Display a FATAL boot/preload failure and exit information.\n *\n * Preload failures — a bad import in a config file, a connector that throws\n * on startup, a missing module export — happen BEFORE the command's run loop\n * exists, so there is nothing to recover into: they are always fatal. Unlike\n * `displayCommandError`, this prints the full stack (not just `error.message`)\n * because the stack names the exact file + line of the offending import, which\n * is the single most useful clue when a config file pulls in a broken module.\n *\n * Surfacing this loudly is the difference between a clear error and a silent\n * hang: an unhandled preload rejection used to escape while the already-started\n * loader worker thread kept the process alive, leaving `warlock dev` frozen\n * just after the banner with no message at all.\n *\n * @example\n * // SyntaxError: The requested module '@warlock.js/cascade' does not\n * // provide an export named 'belongsTo'\n * // at src/app/.../permission.model.ts:2\n */\nexport function displayBootError(commandName: string, error: Error) {\n console.log();\n console.log(` ${colors.red(\"✖\")} ${colors.bold(commandName)} failed to start`);\n console.log(` ${colors.red(error.message)}`);\n if (error.stack) {\n console.log();\n console.log(colors.dim(error.stack));\n }\n console.log();\n}\n\n/**\n * Display missing required options error\n */\nexport function displayMissingOptions(options: { name: string; text: string }[]) {\n console.log();\n console.log(` ${colors.red(\"✖\")} Missing required options:`);\n options.forEach((opt) => {\n console.log(` ${colors.yellow(opt.text)} ${colors.dim(`(--${opt.name})`)}`);\n });\n console.log();\n}\n\n/**\n * Command info for help display\n */\nexport type HelpCommandInfo = {\n name: string;\n alias?: string;\n description?: string;\n source: \"framework\" | \"plugin\" | \"project\";\n};\n\n/**\n * Display global help with all commands grouped by source\n */\nexport async function displayHelp(commands: HelpCommandInfo[]) {\n const version = await getWarlockVersion();\n\n console.log();\n console.log(\n ` ⚡ ${colors.bold(colors.yellowBright(\"Warlock.js\"))} CLI ${colors.dim(`v${version}`)}`,\n );\n console.log();\n console.log(\n ` ${colors.bold(\"Usage:\")} ${colors.cyan(\"warlock\")} ${colors.dim(\"<command>\")} ${colors.dim(\"[options]\")}`,\n );\n console.log();\n\n // Group by source\n const grouped: Record<string, HelpCommandInfo[]> = {\n framework: [],\n plugin: [],\n project: [],\n };\n\n commands.forEach((cmd) => {\n grouped[cmd.source]?.push(cmd);\n });\n\n // Display each group\n const groupLabels: Record<string, string> = {\n framework: \"Framework Commands\",\n plugin: \"Plugin Commands\",\n project: \"Project Commands\",\n };\n\n for (const [source, cmds] of Object.entries(grouped)) {\n if (cmds.length === 0) continue;\n\n console.log(` ${colors.bold(colors.white(groupLabels[source]))}`);\n console.log();\n\n // Find max name length for alignment\n const maxLen = Math.max(...cmds.map((c) => c.name.length + (c.alias ? c.alias.length + 4 : 0)));\n\n cmds.forEach((cmd) => {\n const aliasStr = cmd.alias ? colors.dim(` (${cmd.alias})`) : \"\";\n const nameWithAlias = cmd.name + (cmd.alias ? ` (${cmd.alias})` : \"\");\n const padding = \" \".repeat(maxLen - nameWithAlias.length + 2);\n // const desc = cmd.description || colors.dim(\"No description\");\n const desc = cmd.description || \"\";\n console.log(` ${colors.cyan(cmd.name)}${aliasStr}${padding}${desc}`);\n });\n console.log();\n }\n\n // Display global flags\n console.log(` ${colors.bold(colors.white(\"Global Flags\"))}`);\n console.log();\n\n const globalFlags = [\n { flag: \"--help, -h\", description: \"Show help for a command\" },\n { flag: \"--version, -v\", description: \"Show Warlock version\" },\n { flag: \"--no-cache\", description: \"Force reload without cache\" },\n { flag: \"--warm-cache\", description: \"Pre-cache all project commands\" },\n ];\n\n const maxFlagLen = Math.max(...globalFlags.map((f) => f.flag.length));\n\n globalFlags.forEach(({ flag, description }) => {\n const padding = \" \".repeat(maxFlagLen - flag.length + 2);\n console.log(` ${colors.yellow(flag)}${padding}${description}`);\n });\n console.log();\n\n console.log(\n ` ${colors.dim(\"Run\")} ${colors.cyan(\"warlock <command> --help\")} ${colors.dim(\"for command-specific help\")}`,\n );\n console.log();\n}\n\n/**\n * Display help for a specific command\n */\nexport function displayCommandHelp(command: {\n name: string;\n alias?: string;\n description?: string;\n options?: { name: string; text: string; description?: string; required?: boolean }[];\n}) {\n console.log();\n console.log(\n ` ${colors.bold(colors.cyan(command.name))}${command.alias ? colors.dim(` (${command.alias})`) : \"\"}`,\n );\n\n if (command.description) {\n console.log(` ${command.description}`);\n }\n console.log();\n\n if (command.options && command.options.length > 0) {\n console.log(` ${colors.bold(\"Options:\")}`);\n console.log();\n\n const maxLen = Math.max(...command.options.map((o) => o.text.length));\n\n command.options.forEach((opt) => {\n const padding = \" \".repeat(maxLen - opt.text.length + 2);\n const required = opt.required ? colors.red(\" (required)\") : \"\";\n const desc = opt.description || \"\";\n console.log(` ${colors.green(opt.text)}${padding}${desc}${required}`);\n });\n console.log();\n } else {\n console.log(` ${colors.dim(\"No options available\")}`);\n console.log();\n }\n}\n"],"mappings":";;;;AAIA,SAAgB,sBAAsB,aAAqB,sBAA8B;CACvF,OAAO,YAAY,MAAM,GAAG,CAAC,CAAC,OAAO;AACvC;;;;AAKA,eAAsB,kCAAkC;CACtD,MAAM,UAAU,MAAM,kBAAkB;CACxC,QAAQ,IAAI,KAAK,OAAO,KAAK,YAAY,EAAE,GAAG,OAAO,YAAY,IAAI,SAAS,GAAG;AACnF;AAMA,SAAS,mBAAmB,aAA0B;CACpD,QAAQ,aAAR;EACE,KAAK,eACH,OAAO,OAAO;EAChB,KAAK,cACH,OAAO,OAAO;EAChB,KAAK,QACH,OAAO,OAAO;EAChB,SACE,OAAO,OAAO;CAClB;AACF;;;;AAKA,eAAsB,qBAAqB,EAAE,eAAmC;CAC9E,MAAM,UAAU,MAAM,kBAAkB;CACxC,MAAM,kBAAkB,mBAAmB,WAAW;CACtD,QAAQ,IAAI,OAAO,OAAO,KAAK,gBAAgB,YAAY,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,SAAS,GAAG;CAC5F,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,wBAAwB,aAAqB;CAC3D,QAAQ,IAAI,KAAK,OAAO,KAAK,GAAG,EAAE,WAAW,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC,EAAE,IAAI;CACxF,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,uBAAuB,aAAqB,aAAwB;CAClF,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,WAAW,OAAO,QAAQ,WAAW,EAAE,WAAW;CAEnF,IAAI,eAAe,YAAY,SAAS,GAAG;EACzC,QAAQ,IAAI;EACZ,QAAQ,IAAI,KAAK,OAAO,OAAO,eAAe,GAAG;EACjD,YAAY,SAAS,eAAe;GAClC,QAAQ,IAAI,OAAO,OAAO,KAAK,GAAG,EAAE,GAAG,OAAO,MAAM,UAAU,GAAG;EACnE,CAAC;CACH;CAEA,QAAQ,IAAI;CACZ,QAAQ,IACN,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,OAAO,KAAK,gBAAgB,EAAE,GAAG,OAAO,IAAI,2BAA2B,GACnG;CACA,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,wBAAwB;CACtC,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,sBAAsB;CACvD,QAAQ,IACN,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,OAAO,KAAK,gBAAgB,EAAE,GAAG,OAAO,IAAI,2BAA2B,GACnG;CACA,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,sBAAsB,aAAqB,YAAqB;CAC9E,MAAM,WAAW,aAAa,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI;CACjE,QAAQ,IAAI;CACZ,QAAQ,IACN,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,OAAO,KAAK,WAAW,EAAE,yBAAyB,UAC9E;CACA,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,oBAAoB,aAAqB,OAAc;CACrE,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,GAAG,OAAO,KAAK,WAAW,EAAE,QAAQ;CACrE,QAAQ,IAAI,KAAK,OAAO,IAAI,MAAM,OAAO,GAAG;CAC5C,QAAQ,IAAI;AACd;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,iBAAiB,aAAqB,OAAc;CAClE,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,GAAG,OAAO,KAAK,WAAW,EAAE,iBAAiB;CAC9E,QAAQ,IAAI,KAAK,OAAO,IAAI,MAAM,OAAO,GAAG;CAC5C,IAAI,MAAM,OAAO;EACf,QAAQ,IAAI;EACZ,QAAQ,IAAI,OAAO,IAAI,MAAM,KAAK,CAAC;CACrC;CACA,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,sBAAsB,SAA2C;CAC/E,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,2BAA2B;CAC5D,QAAQ,SAAS,QAAQ;EACvB,QAAQ,IAAI,QAAQ,OAAO,OAAO,IAAI,IAAI,EAAE,GAAG,OAAO,IAAI,MAAM,IAAI,KAAK,EAAE,GAAG;CAChF,CAAC;CACD,QAAQ,IAAI;AACd;;;;AAeA,eAAsB,YAAY,UAA6B;CAC7D,MAAM,UAAU,MAAM,kBAAkB;CAExC,QAAQ,IAAI;CACZ,QAAQ,IACN,OAAO,OAAO,KAAK,OAAO,aAAa,YAAY,CAAC,EAAE,OAAO,OAAO,IAAI,IAAI,SAAS,GACvF;CACA,QAAQ,IAAI;CACZ,QAAQ,IACN,KAAK,OAAO,KAAK,QAAQ,EAAE,GAAG,OAAO,KAAK,SAAS,EAAE,GAAG,OAAO,IAAI,WAAW,EAAE,GAAG,OAAO,IAAI,WAAW,GAC3G;CACA,QAAQ,IAAI;CAGZ,MAAM,UAA6C;EACjD,WAAW,CAAC;EACZ,QAAQ,CAAC;EACT,SAAS,CAAC;CACZ;CAEA,SAAS,SAAS,QAAQ;EACxB,QAAQ,IAAI,OAAO,EAAE,KAAK,GAAG;CAC/B,CAAC;CAGD,MAAM,cAAsC;EAC1C,WAAW;EACX,QAAQ;EACR,SAAS;CACX;CAEA,KAAK,MAAM,CAAC,QAAQ,SAAS,OAAO,QAAQ,OAAO,GAAG;EACpD,IAAI,KAAK,WAAW,GAAG;EAEvB,QAAQ,IAAI,KAAK,OAAO,KAAK,OAAO,MAAM,YAAY,OAAO,CAAC,GAAG;EACjE,QAAQ,IAAI;EAGZ,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,IAAI,EAAE,CAAC;EAE9F,KAAK,SAAS,QAAQ;GACpB,MAAM,WAAW,IAAI,QAAQ,OAAO,IAAI,KAAK,IAAI,MAAM,EAAE,IAAI;GAC7D,MAAM,gBAAgB,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,MAAM,KAAK;GAClE,MAAM,UAAU,IAAI,OAAO,SAAS,cAAc,SAAS,CAAC;GAE5D,MAAM,OAAO,IAAI,eAAe;GAChC,QAAQ,IAAI,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI,WAAW,UAAU,MAAM;EACxE,CAAC;EACD,QAAQ,IAAI;CACd;CAGA,QAAQ,IAAI,KAAK,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC,GAAG;CAC5D,QAAQ,IAAI;CAEZ,MAAM,cAAc;EAClB;GAAE,MAAM;GAAc,aAAa;EAA0B;EAC7D;GAAE,MAAM;GAAiB,aAAa;EAAuB;EAC7D;GAAE,MAAM;GAAc,aAAa;EAA6B;EAChE;GAAE,MAAM;GAAgB,aAAa;EAAiC;CACxE;CAEA,MAAM,aAAa,KAAK,IAAI,GAAG,YAAY,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC;CAEpE,YAAY,SAAS,EAAE,MAAM,kBAAkB;EAC7C,MAAM,UAAU,IAAI,OAAO,aAAa,KAAK,SAAS,CAAC;EACvD,QAAQ,IAAI,OAAO,OAAO,OAAO,IAAI,IAAI,UAAU,aAAa;CAClE,CAAC;CACD,QAAQ,IAAI;CAEZ,QAAQ,IACN,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,OAAO,KAAK,0BAA0B,EAAE,GAAG,OAAO,IAAI,2BAA2B,GAC7G;CACA,QAAQ,IAAI;AACd;;;;AAKA,SAAgB,mBAAmB,SAKhC;CACD,QAAQ,IAAI;CACZ,QAAQ,IACN,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ,QAAQ,OAAO,IAAI,KAAK,QAAQ,MAAM,EAAE,IAAI,IACpG;CAEA,IAAI,QAAQ,aACV,QAAQ,IAAI,KAAK,QAAQ,aAAa;CAExC,QAAQ,IAAI;CAEZ,IAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;EACjD,QAAQ,IAAI,KAAK,OAAO,KAAK,UAAU,GAAG;EAC1C,QAAQ,IAAI;EAEZ,MAAM,SAAS,KAAK,IAAI,GAAG,QAAQ,QAAQ,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC;EAEpE,QAAQ,QAAQ,SAAS,QAAQ;GAC/B,MAAM,UAAU,IAAI,OAAO,SAAS,IAAI,KAAK,SAAS,CAAC;GACvD,MAAM,WAAW,IAAI,WAAW,OAAO,IAAI,aAAa,IAAI;GAC5D,MAAM,OAAO,IAAI,eAAe;GAChC,QAAQ,IAAI,OAAO,OAAO,MAAM,IAAI,IAAI,IAAI,UAAU,OAAO,UAAU;EACzE,CAAC;EACD,QAAQ,IAAI;CACd,OAAO;EACL,QAAQ,IAAI,KAAK,OAAO,IAAI,sBAAsB,GAAG;EACrD,QAAQ,IAAI;CACd;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { command } from "../cli-command.mjs";
2
2
  import { addCommandAction } from "../../generations/add-command.action.mjs";
3
3
 
4
- //#region ../@warlock.js/core/src/cli/commands/add.command.ts
4
+ //#region ../core/src/cli/commands/add.command.ts
5
5
  const addCommand = command({
6
6
  name: "add <features...>",
7
7
  description: "Add new feature(s) to the project",
@@ -1 +1 @@
1
- {"version":3,"file":"add.command.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/cli/commands/add.command.ts"],"sourcesContent":["import { addCommandAction } from \"../../generations/add-command.action\";\r\nimport { command } from \"../cli-command\";\r\n\r\nexport const addCommand = command({\r\n name: \"add <features...>\",\r\n description: \"Add new feature(s) to the project\",\r\n action: addCommandAction,\r\n options: [\r\n {\r\n text: \"--package-manager -pm\",\r\n description: \"Package manager to use, if not passed, it will be detected automatically\",\r\n },\r\n {\r\n text: \"--list, -l\",\r\n description: \"List available features\",\r\n },\r\n {\r\n text: \"--no-install\",\r\n description:\r\n \"Record dependencies in package.json without installing them — still ejects configs, adds scripts, and runs setup hooks. Pass it last, after the feature list. Used by scaffolders that run a single install afterwards.\",\r\n },\r\n ],\r\n});\r\n"],"mappings":";;;;AAGA,MAAa,aAAa,QAAQ;CAChC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aACE;EACJ;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"add.command.mjs","names":[],"sources":["../../../../../../../../core/src/cli/commands/add.command.ts"],"sourcesContent":["import { addCommandAction } from \"../../generations/add-command.action\";\r\nimport { command } from \"../cli-command\";\r\n\r\nexport const addCommand = command({\r\n name: \"add <features...>\",\r\n description: \"Add new feature(s) to the project\",\r\n action: addCommandAction,\r\n options: [\r\n {\r\n text: \"--package-manager -pm\",\r\n description: \"Package manager to use, if not passed, it will be detected automatically\",\r\n },\r\n {\r\n text: \"--list, -l\",\r\n description: \"List available features\",\r\n },\r\n {\r\n text: \"--no-install\",\r\n description:\r\n \"Record dependencies in package.json without installing them — still ejects configs, adds scripts, and runs setup hooks. Pass it last, after the feature list. Used by scaffolders that run a single install afterwards.\",\r\n },\r\n ],\r\n});\r\n"],"mappings":";;;;AAGA,MAAa,aAAa,QAAQ;CAChC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aACE;EACJ;CACF;AACF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { command } from "../cli-command.mjs";
2
2
  import { buildAppProduction } from "../../production/build-app-production.mjs";
3
3
 
4
- //#region ../@warlock.js/core/src/cli/commands/build.command.ts
4
+ //#region ../core/src/cli/commands/build.command.ts
5
5
  const buildCommand = command({
6
6
  name: "build",
7
7
  description: "Build the project for production",
@@ -1 +1 @@
1
- {"version":3,"file":"build.command.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/cli/commands/build.command.ts"],"sourcesContent":["import { buildAppProduction } from \"../../production/build-app-production\";\nimport { command } from \"../cli-command\";\n\nexport const buildCommand = command({\n name: \"build\",\n description: \"Build the project for production\",\n action: buildAppProduction,\n preload: {\n warlockConfig: true,\n },\n});\n"],"mappings":";;;;AAGA,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,SAAS,EACP,eAAe,KACjB;AACF,CAAC"}
1
+ {"version":3,"file":"build.command.mjs","names":[],"sources":["../../../../../../../../core/src/cli/commands/build.command.ts"],"sourcesContent":["import { buildAppProduction } from \"../../production/build-app-production\";\nimport { command } from \"../cli-command\";\n\nexport const buildCommand = command({\n name: \"build\",\n description: \"Build the project for production\",\n action: buildAppProduction,\n preload: {\n warlockConfig: true,\n },\n});\n"],"mappings":";;;;AAGA,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,SAAS,EACP,eAAe,KACjB;AACF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { command } from "../cli-command.mjs";
2
2
  import { createDatabaseAction } from "../../database/create-database-action.mjs";
3
3
 
4
- //#region ../@warlock.js/core/src/cli/commands/create-database.command.ts
4
+ //#region ../core/src/cli/commands/create-database.command.ts
5
5
  const createDatabaseCommand = command({
6
6
  name: "create-database <name>",
7
7
  alias: "cdb",
@@ -1 +1 @@
1
- {"version":3,"file":"create-database.command.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/cli/commands/create-database.command.ts"],"sourcesContent":["import { createDatabaseAction } from \"../../database/create-database-action\";\nimport { command } from \"../cli-command\";\n\nexport const createDatabaseCommand = command({\n name: \"create-database <name>\",\n alias: \"cdb\",\n description: \"Create a new database\",\n action: createDatabaseAction,\n preload: {\n config: [\"database\", \"log\"],\n env: true,\n connectors: [\"database\"],\n },\n options: [\n {\n text: \"--connection, -c\",\n description: \"Database connection name\",\n defaultValue: \"default\",\n },\n ],\n});\n"],"mappings":";;;;AAGA,MAAa,wBAAwB,QAAQ;CAC3C,MAAM;CACN,OAAO;CACP,aAAa;CACb,QAAQ;CACR,SAAS;EACP,QAAQ,CAAC,YAAY,KAAK;EAC1B,KAAK;EACL,YAAY,CAAC,UAAU;CACzB;CACA,SAAS,CACP;EACE,MAAM;EACN,aAAa;EACb,cAAc;CAChB,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"create-database.command.mjs","names":[],"sources":["../../../../../../../../core/src/cli/commands/create-database.command.ts"],"sourcesContent":["import { createDatabaseAction } from \"../../database/create-database-action\";\nimport { command } from \"../cli-command\";\n\nexport const createDatabaseCommand = command({\n name: \"create-database <name>\",\n alias: \"cdb\",\n description: \"Create a new database\",\n action: createDatabaseAction,\n preload: {\n config: [\"database\", \"log\"],\n env: true,\n connectors: [\"database\"],\n },\n options: [\n {\n text: \"--connection, -c\",\n description: \"Database connection name\",\n defaultValue: \"default\",\n },\n ],\n});\n"],"mappings":";;;;AAGA,MAAa,wBAAwB,QAAQ;CAC3C,MAAM;CACN,OAAO;CACP,aAAa;CACb,QAAQ;CACR,SAAS;EACP,QAAQ,CAAC,YAAY,KAAK;EAC1B,KAAK;EACL,YAAY,CAAC,UAAU;CACzB;CACA,SAAS,CACP;EACE,MAAM;EACN,aAAa;EACb,cAAc;CAChB,CACF;AACF,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { command } from "../cli-command.mjs";
2
2
  import { displayStartupBanner } from "../cli-commands.utils.mjs";
3
+ import { isDevWorker, superviseDevServer } from "../../dev-server/supervisor.mjs";
3
4
  import { checkForFrameworkUpdate } from "../../dev-server/check-for-updates.mjs";
4
5
  import { startDevelopmentServer } from "../../dev-server/start-development-server.mjs";
5
6
 
6
- //#region ../@warlock.js/core/src/cli/commands/dev-server.command.ts
7
+ //#region ../core/src/cli/commands/dev-server.command.ts
7
8
  const devServerCommand = command({
8
9
  name: "dev",
9
10
  description: "Start development server (HMR, type-gen, health checks)",
@@ -16,15 +17,15 @@ const devServerCommand = command({
16
17
  connectors: true
17
18
  },
18
19
  preAction: async () => {
20
+ if (!isDevWorker()) return superviseDevServer();
19
21
  await displayStartupBanner({ environment: "development" });
20
22
  },
21
23
  action: async (data) => {
22
- startDevelopmentServer({
24
+ checkForFrameworkUpdate(await startDevelopmentServer({
23
25
  fresh: Boolean(data.options.fresh),
24
26
  generateTypings: data.options.skipTypings ? false : void 0,
25
27
  healthCheckers: data.options.skipHealth ? false : void 0
26
- });
27
- checkForFrameworkUpdate();
28
+ }));
28
29
  },
29
30
  options: [
30
31
  {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.command.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/cli/commands/dev-server.command.ts"],"sourcesContent":["import { checkForFrameworkUpdate } from \"../../dev-server/check-for-updates\";\r\nimport { startDevelopmentServer } from \"../../dev-server/start-development-server\";\r\nimport { command } from \"../cli-command\";\r\nimport { displayStartupBanner } from \"../cli-commands.utils\";\r\n\r\nexport const devServerCommand = command({\r\n name: \"dev\",\r\n description: \"Start development server (HMR, type-gen, health checks)\",\r\n persistent: true,\r\n preload: {\r\n runtimeStrategy: \"development\",\r\n config: true, // load all config\r\n bootstrap: true,\r\n prestart: true, // load prestart file (if exists)\r\n // Only the Early lifecycle phase starts here; the Late phase\r\n // (http, socket) starts after app modules load — see\r\n // development-server.ts STEP 8.5.\r\n connectors: true,\r\n },\r\n preAction: async () => {\r\n await displayStartupBanner({ environment: \"development\" });\r\n },\r\n action: async (data) => {\r\n startDevelopmentServer({\r\n fresh: Boolean(data.options.fresh),\r\n // Pass `false` only when the CLI flag is explicitly set; `undefined`\r\n // lets `warlock.config.ts > devServer.*` defaults apply.\r\n generateTypings: data.options.skipTypings ? false : undefined,\r\n healthCheckers: data.options.skipHealth ? false : undefined,\r\n });\r\n\r\n // Fire-and-forget: once the server is ready, surface a one-line notice if\r\n // a newer @warlock.js/core has been published. Fully self-guarded — it\r\n // never blocks startup nor breaks dev if the registry is unreachable.\r\n void checkForFrameworkUpdate();\r\n },\r\n options: [\r\n {\r\n text: \"--fresh, -f\",\r\n description: \"Delete .warlock/manifest.json before start (force full re-parse from disk)\",\r\n type: \"boolean\",\r\n },\r\n {\r\n text: \"--skip-typings, -st\",\r\n description: \"Skip background type generation for this run\",\r\n type: \"boolean\",\r\n },\r\n {\r\n text: \"--skip-health, -sh\",\r\n description: \"Skip file health checkers for this run\",\r\n type: \"boolean\",\r\n },\r\n ],\r\n});\r\n"],"mappings":";;;;;;AAKA,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,aAAa;CACb,YAAY;CACZ,SAAS;EACP,iBAAiB;EACjB,QAAQ;EACR,WAAW;EACX,UAAU;EAIV,YAAY;CACd;CACA,WAAW,YAAY;EACrB,MAAM,qBAAqB,EAAE,aAAa,cAAc,CAAC;CAC3D;CACA,QAAQ,OAAO,SAAS;EACtB,uBAAuB;GACrB,OAAO,QAAQ,KAAK,QAAQ,KAAK;GAGjC,iBAAiB,KAAK,QAAQ,cAAc,QAAQ;GACpD,gBAAgB,KAAK,QAAQ,aAAa,QAAQ;EACpD,CAAC;EAKD,AAAK,wBAAwB;CAC/B;CACA,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"dev-server.command.mjs","names":[],"sources":["../../../../../../../../core/src/cli/commands/dev-server.command.ts"],"sourcesContent":["import { checkForFrameworkUpdate } from \"../../dev-server/check-for-updates\";\r\nimport { startDevelopmentServer } from \"../../dev-server/start-development-server\";\r\nimport { isDevWorker, superviseDevServer } from \"../../dev-server/supervisor\";\r\nimport { command } from \"../cli-command\";\r\nimport { displayStartupBanner } from \"../cli-commands.utils\";\r\n\r\nexport const devServerCommand = command({\r\n name: \"dev\",\r\n description: \"Start development server (HMR, type-gen, health checks)\",\r\n persistent: true,\r\n preload: {\r\n runtimeStrategy: \"development\",\r\n config: true, // load all config\r\n bootstrap: true,\r\n prestart: true, // load prestart file (if exists)\r\n // Only the Early lifecycle phase starts here; the Late phase\r\n // (http, socket) starts after app modules load — see\r\n // development-server.ts STEP 8.5.\r\n connectors: true,\r\n },\r\n preAction: async () => {\r\n // Two roles share this command. The first `warlock dev` becomes a thin\r\n // supervisor that owns the terminal and (re)spawns the real server; the\r\n // process it spawns carries WARLOCK_DEV_WORKER and falls through to the\r\n // server itself. See supervisor.ts for why the split exists.\r\n //\r\n // This branch has to sit in `preAction`, which runs BEFORE the command's\r\n // preloaders: the supervisor must never load config or start connectors,\r\n // or it would hold a second database connection open for the whole\r\n // session. `superviseDevServer()` never resolves, so nothing below it —\r\n // preload included — runs in the supervisor.\r\n if (!isDevWorker()) {\r\n return superviseDevServer();\r\n }\r\n\r\n await displayStartupBanner({ environment: \"development\" });\r\n },\r\n action: async (data) => {\r\n const devServer = await startDevelopmentServer({\r\n fresh: Boolean(data.options.fresh),\r\n // Pass `false` only when the CLI flag is explicitly set; `undefined`\r\n // lets `warlock.config.ts > devServer.*` defaults apply.\r\n generateTypings: data.options.skipTypings ? false : undefined,\r\n healthCheckers: data.options.skipHealth ? false : undefined,\r\n });\r\n\r\n // Fire-and-forget: once the server is ready, surface a one-line notice if\r\n // a newer @warlock.js/core has been published, and arm the `u` shortcut\r\n // that updates + restarts. Fully self-guarded — it never blocks startup\r\n // nor breaks dev if the registry is unreachable.\r\n void checkForFrameworkUpdate(devServer);\r\n },\r\n options: [\r\n {\r\n text: \"--fresh, -f\",\r\n description: \"Delete .warlock/manifest.json before start (force full re-parse from disk)\",\r\n type: \"boolean\",\r\n },\r\n {\r\n text: \"--skip-typings, -st\",\r\n description: \"Skip background type generation for this run\",\r\n type: \"boolean\",\r\n },\r\n {\r\n text: \"--skip-health, -sh\",\r\n description: \"Skip file health checkers for this run\",\r\n type: \"boolean\",\r\n },\r\n ],\r\n});\r\n"],"mappings":";;;;;;;AAMA,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,aAAa;CACb,YAAY;CACZ,SAAS;EACP,iBAAiB;EACjB,QAAQ;EACR,WAAW;EACX,UAAU;EAIV,YAAY;CACd;CACA,WAAW,YAAY;EAWrB,IAAI,CAAC,YAAY,GACf,OAAO,mBAAmB;EAG5B,MAAM,qBAAqB,EAAE,aAAa,cAAc,CAAC;CAC3D;CACA,QAAQ,OAAO,SAAS;EAatB,AAAK,wBAAwB,MAZL,uBAAuB;GAC7C,OAAO,QAAQ,KAAK,QAAQ,KAAK;GAGjC,iBAAiB,KAAK,QAAQ,cAAc,QAAQ;GACpD,gBAAgB,KAAK,QAAQ,aAAa,QAAQ;EACpD,CAAC,CAMqC;CACxC;CACA,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { config } from "../../../../config/config-getter.mjs";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/config.check.ts
3
+ //#region ../core/src/cli/commands/doctor/checks/config.check.ts
4
4
  /**
5
5
  * Config sections that a typical Warlock HTTP application is expected to
6
6
  * register. A missing section here is release/runtime-blocking, so absence is
@@ -1 +1 @@
1
- {"version":3,"file":"config.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/config.check.ts"],"sourcesContent":["import { config } from \"../../../../config/config-getter\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Config sections that a typical Warlock HTTP application is expected to\n * register. A missing section here is release/runtime-blocking, so absence is\n * a `fail` rather than a warning.\n */\nconst REQUIRED_CONFIG_SECTIONS = [\"app\", \"http\"] as const;\n\n/**\n * `@mongez/config` returns `null` (not `undefined`) for an unregistered key,\n * so treat both nullish values as \"missing\".\n */\nfunction isPresent(value: unknown): boolean {\n return value !== null && value !== undefined;\n}\n\n/**\n * Verifies that the required top-level config sections are present. Reads each\n * section via `config.get` only — never mutates configuration.\n */\nexport const configCheck: DoctorCheck = {\n name: \"config\",\n run: () => {\n const missing = REQUIRED_CONFIG_SECTIONS.filter((section) => {\n return !isPresent(config.get(section));\n });\n\n if (missing.length > 0) {\n return {\n name: \"config\",\n status: \"fail\",\n detail: `missing required config section(s): ${missing.join(\", \")}`,\n };\n }\n\n return {\n name: \"config\",\n status: \"ok\",\n detail: `required sections present (${REQUIRED_CONFIG_SECTIONS.join(\", \")})`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAQA,MAAM,2BAA2B,CAAC,OAAO,MAAM;;;;;AAM/C,SAAS,UAAU,OAAyB;CAC1C,OAAO,UAAU,QAAQ,UAAU;AACrC;;;;;AAMA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,UAAU,yBAAyB,QAAQ,YAAY;GAC3D,OAAO,CAAC,UAAU,OAAO,IAAI,OAAO,CAAC;EACvC,CAAC;EAED,IAAI,QAAQ,SAAS,GACnB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,uCAAuC,QAAQ,KAAK,IAAI;EAClE;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,8BAA8B,yBAAyB,KAAK,IAAI,EAAE;EAC5E;CACF;AACF"}
1
+ {"version":3,"file":"config.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/config.check.ts"],"sourcesContent":["import { config } from \"../../../../config/config-getter\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Config sections that a typical Warlock HTTP application is expected to\n * register. A missing section here is release/runtime-blocking, so absence is\n * a `fail` rather than a warning.\n */\nconst REQUIRED_CONFIG_SECTIONS = [\"app\", \"http\"] as const;\n\n/**\n * `@mongez/config` returns `null` (not `undefined`) for an unregistered key,\n * so treat both nullish values as \"missing\".\n */\nfunction isPresent(value: unknown): boolean {\n return value !== null && value !== undefined;\n}\n\n/**\n * Verifies that the required top-level config sections are present. Reads each\n * section via `config.get` only — never mutates configuration.\n */\nexport const configCheck: DoctorCheck = {\n name: \"config\",\n run: () => {\n const missing = REQUIRED_CONFIG_SECTIONS.filter((section) => {\n return !isPresent(config.get(section));\n });\n\n if (missing.length > 0) {\n return {\n name: \"config\",\n status: \"fail\",\n detail: `missing required config section(s): ${missing.join(\", \")}`,\n };\n }\n\n return {\n name: \"config\",\n status: \"ok\",\n detail: `required sections present (${REQUIRED_CONFIG_SECTIONS.join(\", \")})`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAQA,MAAM,2BAA2B,CAAC,OAAO,MAAM;;;;;AAM/C,SAAS,UAAU,OAAyB;CAC1C,OAAO,UAAU,QAAQ,UAAU;AACrC;;;;;AAMA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,UAAU,yBAAyB,QAAQ,YAAY;GAC3D,OAAO,CAAC,UAAU,OAAO,IAAI,OAAO,CAAC;EACvC,CAAC;EAED,IAAI,QAAQ,SAAS,GACnB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,uCAAuC,QAAQ,KAAK,IAAI;EAClE;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,8BAA8B,yBAAyB,KAAK,IAAI,EAAE;EAC5E;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { connectorsManager } from "../../../../connectors/connectors-manager.mjs";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/connectors.check.ts
3
+ //#region ../core/src/cli/commands/doctor/checks/connectors.check.ts
4
4
  /**
5
5
  * Reports which connectors are registered and which are currently active. This
6
6
  * is informational: a registered-but-inactive connector is normal (it simply
@@ -1 +1 @@
1
- {"version":3,"file":"connectors.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/connectors.check.ts"],"sourcesContent":["import { connectorsManager } from \"../../../../connectors/connectors-manager\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Reports which connectors are registered and which are currently active. This\n * is informational: a registered-but-inactive connector is normal (it simply\n * has no config wired), so the check passes as long as the manager can be\n * enumerated and reports its active set.\n *\n * Read-only: calls `connectorsManager.list()` and each connector's\n * `isActive()` (a pure getter) only.\n */\nexport const connectorsCheck: DoctorCheck = {\n name: \"connectors\",\n run: () => {\n const connectors = connectorsManager.list();\n const active = connectors.filter((connector) => connector.isActive());\n const activeNames = active.map((connector) => connector.name);\n\n const detail =\n activeNames.length > 0\n ? `${connectors.length} registered, active: ${activeNames.join(\", \")}`\n : `${connectors.length} registered, none active`;\n\n return {\n name: \"connectors\",\n status: \"ok\",\n detail,\n };\n },\n};\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,kBAA+B;CAC1C,MAAM;CACN,WAAW;EACT,MAAM,aAAa,kBAAkB,KAAK;EAE1C,MAAM,cADS,WAAW,QAAQ,cAAc,UAAU,SAAS,CAC1C,CAAC,CAAC,KAAK,cAAc,UAAU,IAAI;EAO5D,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAPA,YAAY,SAAS,IACjB,GAAG,WAAW,OAAO,uBAAuB,YAAY,KAAK,IAAI,MACjE,GAAG,WAAW,OAAO;EAM3B;CACF;AACF"}
1
+ {"version":3,"file":"connectors.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/connectors.check.ts"],"sourcesContent":["import { connectorsManager } from \"../../../../connectors/connectors-manager\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Reports which connectors are registered and which are currently active. This\n * is informational: a registered-but-inactive connector is normal (it simply\n * has no config wired), so the check passes as long as the manager can be\n * enumerated and reports its active set.\n *\n * Read-only: calls `connectorsManager.list()` and each connector's\n * `isActive()` (a pure getter) only.\n */\nexport const connectorsCheck: DoctorCheck = {\n name: \"connectors\",\n run: () => {\n const connectors = connectorsManager.list();\n const active = connectors.filter((connector) => connector.isActive());\n const activeNames = active.map((connector) => connector.name);\n\n const detail =\n activeNames.length > 0\n ? `${connectors.length} registered, active: ${activeNames.join(\", \")}`\n : `${connectors.length} registered, none active`;\n\n return {\n name: \"connectors\",\n status: \"ok\",\n detail,\n };\n },\n};\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,kBAA+B;CAC1C,MAAM;CACN,WAAW;EACT,MAAM,aAAa,kBAAkB,KAAK;EAE1C,MAAM,cADS,WAAW,QAAQ,cAAc,UAAU,SAAS,CAC1C,CAAC,CAAC,KAAK,cAAc,UAAU,IAAI;EAO5D,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAPA,YAAY,SAAS,IACjB,GAAG,WAAW,OAAO,uBAAuB,YAAY,KAAK,IAAI,MACjE,GAAG,WAAW,OAAO;EAM3B;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { config } from "../../../../config/config-getter.mjs";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/health.check.ts
3
+ //#region ../core/src/cli/commands/doctor/checks/health.check.ts
4
4
  /**
5
5
  * Confirms the built-in liveness (`/health`) and readiness (`/ready`)
6
6
  * endpoints will be exposed. The HTTP connector registers them automatically
@@ -1 +1 @@
1
- {"version":3,"file":"health.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/health.check.ts"],"sourcesContent":["import { config } from \"../../../../config/config-getter\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Confirms the built-in liveness (`/health`) and readiness (`/ready`)\n * endpoints will be exposed. The HTTP connector registers them automatically\n * unless `http.health.enabled` is explicitly `false`, so this check reads that\n * config flag and the (overridable) paths.\n *\n * Disabling the probes is a deliberate, supported choice but a common\n * misconfiguration in container/orchestrated deployments, so it is surfaced as\n * a `warn` rather than a pass.\n *\n * Read-only: inspects `config.get(\"http.health\")` only.\n */\nexport const healthCheck: DoctorCheck = {\n name: \"health\",\n run: () => {\n const healthConfig = config.get(\"http.health\");\n\n if (healthConfig?.enabled === false) {\n return {\n name: \"health\",\n status: \"warn\",\n detail: \"health endpoints disabled (http.health.enabled = false)\",\n };\n }\n\n const livenessPath = healthConfig?.path ?? \"/health\";\n const readinessPath = healthConfig?.readinessPath ?? \"/ready\";\n\n return {\n name: \"health\",\n status: \"ok\",\n detail: `liveness ${livenessPath} + readiness ${readinessPath} registered`,\n };\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,eAAe,OAAO,IAAI,aAAa;EAE7C,IAAI,cAAc,YAAY,OAC5B,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAMF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,YANW,cAAc,QAAQ,UAMR,eALb,cAAc,iBAAiB,SAKW;EAChE;CACF;AACF"}
1
+ {"version":3,"file":"health.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/health.check.ts"],"sourcesContent":["import { config } from \"../../../../config/config-getter\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Confirms the built-in liveness (`/health`) and readiness (`/ready`)\n * endpoints will be exposed. The HTTP connector registers them automatically\n * unless `http.health.enabled` is explicitly `false`, so this check reads that\n * config flag and the (overridable) paths.\n *\n * Disabling the probes is a deliberate, supported choice but a common\n * misconfiguration in container/orchestrated deployments, so it is surfaced as\n * a `warn` rather than a pass.\n *\n * Read-only: inspects `config.get(\"http.health\")` only.\n */\nexport const healthCheck: DoctorCheck = {\n name: \"health\",\n run: () => {\n const healthConfig = config.get(\"http.health\");\n\n if (healthConfig?.enabled === false) {\n return {\n name: \"health\",\n status: \"warn\",\n detail: \"health endpoints disabled (http.health.enabled = false)\",\n };\n }\n\n const livenessPath = healthConfig?.path ?? \"/health\";\n const readinessPath = healthConfig?.readinessPath ?? \"/ready\";\n\n return {\n name: \"health\",\n status: \"ok\",\n detail: `liveness ${livenessPath} + readiness ${readinessPath} registered`,\n };\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,eAAe,OAAO,IAAI,aAAa;EAE7C,IAAI,cAAc,YAAY,OAC5B,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAMF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,YANW,cAAc,QAAQ,UAMR,eALb,cAAc,iBAAiB,SAKW;EAChE;CACF;AACF"}
@@ -5,7 +5,7 @@ import { optionalPeersCheck } from "./optional-peers.check.mjs";
5
5
  import { releaseHygieneCheck } from "./release-hygiene.check.mjs";
6
6
  import { routesCheck } from "./routes.check.mjs";
7
7
 
8
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/index.ts
8
+ //#region ../core/src/cli/commands/doctor/checks/index.ts
9
9
  /**
10
10
  * The default, ordered set of checks `warlock doctor` runs. Ordering controls
11
11
  * the report layout: runtime-surface checks first (routes, config, connectors,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/index.ts"],"sourcesContent":["import type { DoctorCheck } from \"../check.types\";\nimport { configCheck } from \"./config.check\";\nimport { connectorsCheck } from \"./connectors.check\";\nimport { healthCheck } from \"./health.check\";\nimport { optionalPeersCheck } from \"./optional-peers.check\";\nimport { releaseHygieneCheck } from \"./release-hygiene.check\";\nimport { routesCheck } from \"./routes.check\";\n\n/**\n * The default, ordered set of checks `warlock doctor` runs. Ordering controls\n * the report layout: runtime-surface checks first (routes, config, connectors,\n * peers, health), release hygiene last.\n */\nexport const defaultDoctorChecks: DoctorCheck[] = [\n routesCheck,\n configCheck,\n connectorsCheck,\n optionalPeersCheck,\n healthCheck,\n releaseHygieneCheck,\n];\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,sBAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/index.ts"],"sourcesContent":["import type { DoctorCheck } from \"../check.types\";\nimport { configCheck } from \"./config.check\";\nimport { connectorsCheck } from \"./connectors.check\";\nimport { healthCheck } from \"./health.check\";\nimport { optionalPeersCheck } from \"./optional-peers.check\";\nimport { releaseHygieneCheck } from \"./release-hygiene.check\";\nimport { routesCheck } from \"./routes.check\";\n\n/**\n * The default, ordered set of checks `warlock doctor` runs. Ordering controls\n * the report layout: runtime-surface checks first (routes, config, connectors,\n * peers, health), release hygiene last.\n */\nexport const defaultDoctorChecks: DoctorCheck[] = [\n routesCheck,\n configCheck,\n connectorsCheck,\n optionalPeersCheck,\n healthCheck,\n releaseHygieneCheck,\n];\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,sBAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from "node:module";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/optional-peers.check.ts
3
+ //#region ../core/src/cli/commands/doctor/checks/optional-peers.check.ts
4
4
  /**
5
5
  * The optional peers core knows how to use. Kept in sync with the install
6
6
  * targets in the `warlock add` feature registry (sharp, nodemailer, socket.io,
@@ -1 +1 @@
1
- {"version":3,"file":"optional-peers.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/optional-peers.check.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * A single optional peer dependency and the feature it unlocks. These are NOT\n * bundled by core — each is loaded lazily by the connector/driver that needs\n * it, so a missing peer simply means that feature is unavailable (a `warn`),\n * never a failure.\n */\ntype OptionalPeer = {\n /** The npm package name to probe via `require.resolve`. */\n package: string;\n\n /** The framework feature this peer enables. */\n feature: string;\n};\n\n/**\n * The optional peers core knows how to use. Kept in sync with the install\n * targets in the `warlock add` feature registry (sharp, nodemailer, socket.io,\n * the AWS SDK family, redis, the Cascade DB drivers, …).\n */\nconst OPTIONAL_PEERS: OptionalPeer[] = [\n { package: \"sharp\", feature: \"image processing\" },\n { package: \"nodemailer\", feature: \"mail (SMTP) channel\" },\n { package: \"socket.io\", feature: \"realtime socket server\" },\n { package: \"@aws-sdk/client-s3\", feature: \"S3 cloud storage\" },\n { package: \"@aws-sdk/client-sesv2\", feature: \"Amazon SES mail channel\" },\n { package: \"redis\", feature: \"Redis cache driver\" },\n { package: \"mongodb\", feature: \"MongoDB database driver\" },\n { package: \"pg\", feature: \"Postgres database driver\" },\n { package: \"mysql2\", feature: \"MySQL database driver\" },\n];\n\n/**\n * Resolve from the project's working directory, not from core's own\n * `node_modules`, so the probe reflects what the *consuming app* has installed.\n */\nconst projectRequire = createRequire(`${process.cwd()}/package.json`);\n\n/**\n * Whether a package can be resolved from the project. A failed resolve (the\n * normal \"not installed\" case) is swallowed and reported as missing.\n */\nfunction isInstalled(packageName: string): boolean {\n try {\n projectRequire.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects which optional peer dependencies are installed and which are not,\n * reporting the features that are consequently unavailable. Missing peers are\n * a `warn` (the feature is simply off), never a `fail`.\n *\n * Read-only: resolves module paths only; never imports or executes the peers.\n */\nexport const optionalPeersCheck: DoctorCheck = {\n name: \"optional-peers\",\n run: () => {\n const missing = OPTIONAL_PEERS.filter((peer) => !isInstalled(peer.package));\n\n if (missing.length === 0) {\n return {\n name: \"optional-peers\",\n status: \"ok\",\n detail: `all ${OPTIONAL_PEERS.length} known optional peers installed`,\n };\n }\n\n const unavailable = missing\n .map((peer) => `${peer.package} (${peer.feature})`)\n .join(\"; \");\n\n return {\n name: \"optional-peers\",\n status: \"warn\",\n detail: `not installed → unavailable: ${unavailable}`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAsBA,MAAM,iBAAiC;CACrC;EAAE,SAAS;EAAS,SAAS;CAAmB;CAChD;EAAE,SAAS;EAAc,SAAS;CAAsB;CACxD;EAAE,SAAS;EAAa,SAAS;CAAyB;CAC1D;EAAE,SAAS;EAAsB,SAAS;CAAmB;CAC7D;EAAE,SAAS;EAAyB,SAAS;CAA0B;CACvE;EAAE,SAAS;EAAS,SAAS;CAAqB;CAClD;EAAE,SAAS;EAAW,SAAS;CAA0B;CACzD;EAAE,SAAS;EAAM,SAAS;CAA2B;CACrD;EAAE,SAAS;EAAU,SAAS;CAAwB;AACxD;;;;;AAMA,MAAM,iBAAiB,cAAc,GAAG,QAAQ,IAAI,EAAE,cAAc;;;;;AAMpE,SAAS,YAAY,aAA8B;CACjD,IAAI;EACF,eAAe,QAAQ,WAAW;EAClC,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;AASA,MAAa,qBAAkC;CAC7C,MAAM;CACN,WAAW;EACT,MAAM,UAAU,eAAe,QAAQ,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC;EAE1E,IAAI,QAAQ,WAAW,GACrB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,OAAO,eAAe,OAAO;EACvC;EAOF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,gCAPU,QACjB,KAAK,SAAS,GAAG,KAAK,QAAQ,IAAI,KAAK,QAAQ,EAAE,CAAC,CAClD,KAAK,IAK4C;EACpD;CACF;AACF"}
1
+ {"version":3,"file":"optional-peers.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/optional-peers.check.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * A single optional peer dependency and the feature it unlocks. These are NOT\n * bundled by core — each is loaded lazily by the connector/driver that needs\n * it, so a missing peer simply means that feature is unavailable (a `warn`),\n * never a failure.\n */\ntype OptionalPeer = {\n /** The npm package name to probe via `require.resolve`. */\n package: string;\n\n /** The framework feature this peer enables. */\n feature: string;\n};\n\n/**\n * The optional peers core knows how to use. Kept in sync with the install\n * targets in the `warlock add` feature registry (sharp, nodemailer, socket.io,\n * the AWS SDK family, redis, the Cascade DB drivers, …).\n */\nconst OPTIONAL_PEERS: OptionalPeer[] = [\n { package: \"sharp\", feature: \"image processing\" },\n { package: \"nodemailer\", feature: \"mail (SMTP) channel\" },\n { package: \"socket.io\", feature: \"realtime socket server\" },\n { package: \"@aws-sdk/client-s3\", feature: \"S3 cloud storage\" },\n { package: \"@aws-sdk/client-sesv2\", feature: \"Amazon SES mail channel\" },\n { package: \"redis\", feature: \"Redis cache driver\" },\n { package: \"mongodb\", feature: \"MongoDB database driver\" },\n { package: \"pg\", feature: \"Postgres database driver\" },\n { package: \"mysql2\", feature: \"MySQL database driver\" },\n];\n\n/**\n * Resolve from the project's working directory, not from core's own\n * `node_modules`, so the probe reflects what the *consuming app* has installed.\n */\nconst projectRequire = createRequire(`${process.cwd()}/package.json`);\n\n/**\n * Whether a package can be resolved from the project. A failed resolve (the\n * normal \"not installed\" case) is swallowed and reported as missing.\n */\nfunction isInstalled(packageName: string): boolean {\n try {\n projectRequire.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects which optional peer dependencies are installed and which are not,\n * reporting the features that are consequently unavailable. Missing peers are\n * a `warn` (the feature is simply off), never a `fail`.\n *\n * Read-only: resolves module paths only; never imports or executes the peers.\n */\nexport const optionalPeersCheck: DoctorCheck = {\n name: \"optional-peers\",\n run: () => {\n const missing = OPTIONAL_PEERS.filter((peer) => !isInstalled(peer.package));\n\n if (missing.length === 0) {\n return {\n name: \"optional-peers\",\n status: \"ok\",\n detail: `all ${OPTIONAL_PEERS.length} known optional peers installed`,\n };\n }\n\n const unavailable = missing\n .map((peer) => `${peer.package} (${peer.feature})`)\n .join(\"; \");\n\n return {\n name: \"optional-peers\",\n status: \"warn\",\n detail: `not installed → unavailable: ${unavailable}`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAsBA,MAAM,iBAAiC;CACrC;EAAE,SAAS;EAAS,SAAS;CAAmB;CAChD;EAAE,SAAS;EAAc,SAAS;CAAsB;CACxD;EAAE,SAAS;EAAa,SAAS;CAAyB;CAC1D;EAAE,SAAS;EAAsB,SAAS;CAAmB;CAC7D;EAAE,SAAS;EAAyB,SAAS;CAA0B;CACvE;EAAE,SAAS;EAAS,SAAS;CAAqB;CAClD;EAAE,SAAS;EAAW,SAAS;CAA0B;CACzD;EAAE,SAAS;EAAM,SAAS;CAA2B;CACrD;EAAE,SAAS;EAAU,SAAS;CAAwB;AACxD;;;;;AAMA,MAAM,iBAAiB,cAAc,GAAG,QAAQ,IAAI,EAAE,cAAc;;;;;AAMpE,SAAS,YAAY,aAA8B;CACjD,IAAI;EACF,eAAe,QAAQ,WAAW;EAClC,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;AASA,MAAa,qBAAkC;CAC7C,MAAM;CACN,WAAW;EACT,MAAM,UAAU,eAAe,QAAQ,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC;EAE1E,IAAI,QAAQ,WAAW,GACrB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,OAAO,eAAe,OAAO;EACvC;EAOF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,gCAPU,QACjB,KAAK,SAAS,GAAG,KAAK,QAAQ,IAAI,KAAK,QAAQ,EAAE,CAAC,CAClD,KAAK,IAK4C;EACpD;CACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { rootPath } from "../../../../utils/paths.mjs";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
 
4
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/release-hygiene.check.ts
4
+ //#region ../core/src/cli/commands/doctor/checks/release-hygiene.check.ts
5
5
  /**
6
6
  * Parse the top-most `## x.y.z[ - YYYY-MM-DD]` heading out of a CHANGELOG body.
7
7
  * Returns `undefined` when no version heading is present.
@@ -1 +1 @@
1
- {"version":3,"file":"release-hygiene.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/release-hygiene.check.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { rootPath } from \"../../../../utils/paths\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * A `## x.y.z` changelog heading with an optional ` - YYYY-MM-DD` suffix.\n * Mirrors the shape parsed by the tier-0 release-hygiene unit guard; inlined\n * here because that guard lives in the test tree and is not importable from\n * `src`.\n */\ntype ChangelogHeading = {\n version: string;\n date?: string;\n};\n\n/**\n * Parse the top-most `## x.y.z[ - YYYY-MM-DD]` heading out of a CHANGELOG body.\n * Returns `undefined` when no version heading is present.\n */\nfunction parseTopHeading(changelog: string): ChangelogHeading | undefined {\n const match = changelog.match(\n /^##\\s+(\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*[-–]\\s*(\\d{4}-\\d{2}-\\d{2}))?\\s*$/m,\n );\n\n if (!match) {\n return undefined;\n }\n\n const [, major, minor, patch, date] = match;\n\n return {\n version: `${major}.${minor}.${patch}`,\n date,\n };\n}\n\n/**\n * Checks that the project's `package.json` version matches the top-most\n * `## x.y.z` heading in `CHANGELOG.md` — the same version↔changelog invariant\n * the release-hygiene unit guard enforces, surfaced as a pre-release doctor\n * check.\n *\n * Verdicts:\n * - no `CHANGELOG.md` → `warn` (a changelog is recommended, not mandatory);\n * - no parseable heading → `warn`;\n * - heading version ≠ package.json version → `fail`;\n * - otherwise → `ok`.\n *\n * Read-only: reads `package.json` and `CHANGELOG.md` from the project root.\n */\nexport const releaseHygieneCheck: DoctorCheck = {\n name: \"release-hygiene\",\n run: () => {\n const packageJsonPath = rootPath(\"package.json\");\n const changelogPath = rootPath(\"CHANGELOG.md\");\n\n const pkgVersion: unknown = JSON.parse(readFileSync(packageJsonPath, \"utf8\")).version;\n\n if (typeof pkgVersion !== \"string\") {\n return {\n name: \"release-hygiene\",\n status: \"fail\",\n detail: \"package.json has no string version field\",\n };\n }\n\n if (!existsSync(changelogPath)) {\n return {\n name: \"release-hygiene\",\n status: \"warn\",\n detail: `no CHANGELOG.md at project root (package.json is ${pkgVersion})`,\n };\n }\n\n const changelog = readFileSync(changelogPath, \"utf8\");\n const heading = parseTopHeading(changelog);\n\n if (!heading) {\n return {\n name: \"release-hygiene\",\n status: \"warn\",\n detail: \"CHANGELOG.md has no parseable `## x.y.z` heading\",\n };\n }\n\n if (heading.version !== pkgVersion) {\n return {\n name: \"release-hygiene\",\n status: \"fail\",\n detail: `package.json ${pkgVersion} ≠ top CHANGELOG heading ${heading.version}`,\n };\n }\n\n return {\n name: \"release-hygiene\",\n status: \"ok\",\n detail: `package.json and CHANGELOG agree on ${pkgVersion}`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAmBA,SAAS,gBAAgB,WAAiD;CACxE,MAAM,QAAQ,UAAU,MACtB,kEACF;CAEA,IAAI,CAAC,OACH;CAGF,MAAM,GAAG,OAAO,OAAO,OAAO,QAAQ;CAEtC,OAAO;EACL,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG;EAC9B;CACF;AACF;;;;;;;;;;;;;;;AAgBA,MAAa,sBAAmC;CAC9C,MAAM;CACN,WAAW;EACT,MAAM,kBAAkB,SAAS,cAAc;EAC/C,MAAM,gBAAgB,SAAS,cAAc;EAE7C,MAAM,aAAsB,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAAC,CAAC,CAAC;EAE9E,IAAI,OAAO,eAAe,UACxB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,IAAI,CAAC,WAAW,aAAa,GAC3B,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,oDAAoD,WAAW;EACzE;EAIF,MAAM,UAAU,gBADE,aAAa,eAAe,MACN,CAAC;EAEzC,IAAI,CAAC,SACH,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,IAAI,QAAQ,YAAY,YACtB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,gBAAgB,WAAW,2BAA2B,QAAQ;EACxE;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,uCAAuC;EACjD;CACF;AACF"}
1
+ {"version":3,"file":"release-hygiene.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/release-hygiene.check.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { rootPath } from \"../../../../utils/paths\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * A `## x.y.z` changelog heading with an optional ` - YYYY-MM-DD` suffix.\n * Mirrors the shape parsed by the tier-0 release-hygiene unit guard; inlined\n * here because that guard lives in the test tree and is not importable from\n * `src`.\n */\ntype ChangelogHeading = {\n version: string;\n date?: string;\n};\n\n/**\n * Parse the top-most `## x.y.z[ - YYYY-MM-DD]` heading out of a CHANGELOG body.\n * Returns `undefined` when no version heading is present.\n */\nfunction parseTopHeading(changelog: string): ChangelogHeading | undefined {\n const match = changelog.match(\n /^##\\s+(\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*[-–]\\s*(\\d{4}-\\d{2}-\\d{2}))?\\s*$/m,\n );\n\n if (!match) {\n return undefined;\n }\n\n const [, major, minor, patch, date] = match;\n\n return {\n version: `${major}.${minor}.${patch}`,\n date,\n };\n}\n\n/**\n * Checks that the project's `package.json` version matches the top-most\n * `## x.y.z` heading in `CHANGELOG.md` — the same version↔changelog invariant\n * the release-hygiene unit guard enforces, surfaced as a pre-release doctor\n * check.\n *\n * Verdicts:\n * - no `CHANGELOG.md` → `warn` (a changelog is recommended, not mandatory);\n * - no parseable heading → `warn`;\n * - heading version ≠ package.json version → `fail`;\n * - otherwise → `ok`.\n *\n * Read-only: reads `package.json` and `CHANGELOG.md` from the project root.\n */\nexport const releaseHygieneCheck: DoctorCheck = {\n name: \"release-hygiene\",\n run: () => {\n const packageJsonPath = rootPath(\"package.json\");\n const changelogPath = rootPath(\"CHANGELOG.md\");\n\n const pkgVersion: unknown = JSON.parse(readFileSync(packageJsonPath, \"utf8\")).version;\n\n if (typeof pkgVersion !== \"string\") {\n return {\n name: \"release-hygiene\",\n status: \"fail\",\n detail: \"package.json has no string version field\",\n };\n }\n\n if (!existsSync(changelogPath)) {\n return {\n name: \"release-hygiene\",\n status: \"warn\",\n detail: `no CHANGELOG.md at project root (package.json is ${pkgVersion})`,\n };\n }\n\n const changelog = readFileSync(changelogPath, \"utf8\");\n const heading = parseTopHeading(changelog);\n\n if (!heading) {\n return {\n name: \"release-hygiene\",\n status: \"warn\",\n detail: \"CHANGELOG.md has no parseable `## x.y.z` heading\",\n };\n }\n\n if (heading.version !== pkgVersion) {\n return {\n name: \"release-hygiene\",\n status: \"fail\",\n detail: `package.json ${pkgVersion} ≠ top CHANGELOG heading ${heading.version}`,\n };\n }\n\n return {\n name: \"release-hygiene\",\n status: \"ok\",\n detail: `package.json and CHANGELOG agree on ${pkgVersion}`,\n };\n },\n};\n"],"mappings":";;;;;;;;AAmBA,SAAS,gBAAgB,WAAiD;CACxE,MAAM,QAAQ,UAAU,MACtB,kEACF;CAEA,IAAI,CAAC,OACH;CAGF,MAAM,GAAG,OAAO,OAAO,OAAO,QAAQ;CAEtC,OAAO;EACL,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG;EAC9B;CACF;AACF;;;;;;;;;;;;;;;AAgBA,MAAa,sBAAmC;CAC9C,MAAM;CACN,WAAW;EACT,MAAM,kBAAkB,SAAS,cAAc;EAC/C,MAAM,gBAAgB,SAAS,cAAc;EAE7C,MAAM,aAAsB,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAAC,CAAC,CAAC;EAE9E,IAAI,OAAO,eAAe,UACxB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,IAAI,CAAC,WAAW,aAAa,GAC3B,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,oDAAoD,WAAW;EACzE;EAIF,MAAM,UAAU,gBADE,aAAa,eAAe,MACN,CAAC;EAEzC,IAAI,CAAC,SACH,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,IAAI,QAAQ,YAAY,YACtB,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,gBAAgB,WAAW,2BAA2B,QAAQ;EACxE;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,uCAAuC;EACjD;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { router } from "../../../../router/router.mjs";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/checks/routes.check.ts
3
+ //#region ../core/src/cli/commands/doctor/checks/routes.check.ts
4
4
  /**
5
5
  * Reports the number of registered routes. A booted app with zero routes
6
6
  * almost always means a route module failed to register silently, so this
@@ -1 +1 @@
1
- {"version":3,"file":"routes.check.mjs","names":[],"sources":["../../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/checks/routes.check.ts"],"sourcesContent":["import { router } from \"../../../../router/router\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Reports the number of registered routes. A booted app with zero routes\n * almost always means a route module failed to register silently, so this\n * warns (rather than passing) when the route table is empty.\n *\n * Read-only: introspects the router via `routeCount()` only.\n */\nexport const routesCheck: DoctorCheck = {\n name: \"routes\",\n run: () => {\n const count = router.routeCount();\n\n if (count === 0) {\n return {\n name: \"routes\",\n status: \"warn\",\n detail: \"0 routes registered — did a route module fail to load?\",\n };\n }\n\n return {\n name: \"routes\",\n status: \"ok\",\n detail: `${count} registered`,\n };\n },\n};\n"],"mappings":";;;;;;;;;;AAUA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,QAAQ,OAAO,WAAW;EAEhC,IAAI,UAAU,GACZ,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,GAAG,MAAM;EACnB;CACF;AACF"}
1
+ {"version":3,"file":"routes.check.mjs","names":[],"sources":["../../../../../../../../../../core/src/cli/commands/doctor/checks/routes.check.ts"],"sourcesContent":["import { router } from \"../../../../router/router\";\nimport type { DoctorCheck } from \"../check.types\";\n\n/**\n * Reports the number of registered routes. A booted app with zero routes\n * almost always means a route module failed to register silently, so this\n * warns (rather than passing) when the route table is empty.\n *\n * Read-only: introspects the router via `routeCount()` only.\n */\nexport const routesCheck: DoctorCheck = {\n name: \"routes\",\n run: () => {\n const count = router.routeCount();\n\n if (count === 0) {\n return {\n name: \"routes\",\n status: \"warn\",\n detail: \"0 routes registered — did a route module fail to load?\",\n };\n }\n\n return {\n name: \"routes\",\n status: \"ok\",\n detail: `${count} registered`,\n };\n },\n};\n"],"mappings":";;;;;;;;;;AAUA,MAAa,cAA2B;CACtC,MAAM;CACN,WAAW;EACT,MAAM,QAAQ,OAAO,WAAW;EAEhC,IAAI,UAAU,GACZ,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EAGF,OAAO;GACL,MAAM;GACN,QAAQ;GACR,QAAQ,GAAG,MAAM;EACnB;CACF;AACF"}
@@ -2,7 +2,7 @@ import { defaultDoctorChecks } from "./checks/index.mjs";
2
2
  import { printReport } from "./format-report.mjs";
3
3
  import { runChecks } from "./run-checks.mjs";
4
4
 
5
- //#region ../@warlock.js/core/src/cli/commands/doctor/doctor-command.action.ts
5
+ //#region ../core/src/cli/commands/doctor/doctor-command.action.ts
6
6
  /**
7
7
  * Action behind `warlock doctor`. Runs the default read-only diagnostic
8
8
  * checks, prints the grouped pass/warn/fail report, and — when any check
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-command.action.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/doctor-command.action.ts"],"sourcesContent":["import type { CommandActionData } from \"../../types\";\nimport { defaultDoctorChecks } from \"./checks\";\nimport { printReport } from \"./format-report\";\nimport { runChecks } from \"./run-checks\";\n\n/**\n * Action behind `warlock doctor`. Runs the default read-only diagnostic\n * checks, prints the grouped pass/warn/fail report, and — when any check\n * failed — exits the process with a non-zero code so the command signals\n * failure to scripts/CI.\n *\n * A failing check is REPORTED (a line in the report + a non-zero exit), never\n * thrown: the runner converts any thrown check into a `fail` result first.\n *\n * On success this simply returns; the CLI manager then prints its own success\n * banner and exits zero.\n *\n * @param _data Parsed CLI args (unused — doctor takes no positional args).\n */\nexport async function doctorCommandAction(_data: CommandActionData): Promise<void> {\n const report = await runChecks(defaultDoctorChecks);\n\n printReport(report);\n\n if (report.hasFailures) {\n process.exit(report.exitCode);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,eAAsB,oBAAoB,OAAyC;CACjF,MAAM,SAAS,MAAM,UAAU,mBAAmB;CAElD,YAAY,MAAM;CAElB,IAAI,OAAO,aACT,QAAQ,KAAK,OAAO,QAAQ;AAEhC"}
1
+ {"version":3,"file":"doctor-command.action.mjs","names":[],"sources":["../../../../../../../../../core/src/cli/commands/doctor/doctor-command.action.ts"],"sourcesContent":["import type { CommandActionData } from \"../../types\";\nimport { defaultDoctorChecks } from \"./checks\";\nimport { printReport } from \"./format-report\";\nimport { runChecks } from \"./run-checks\";\n\n/**\n * Action behind `warlock doctor`. Runs the default read-only diagnostic\n * checks, prints the grouped pass/warn/fail report, and — when any check\n * failed — exits the process with a non-zero code so the command signals\n * failure to scripts/CI.\n *\n * A failing check is REPORTED (a line in the report + a non-zero exit), never\n * thrown: the runner converts any thrown check into a `fail` result first.\n *\n * On success this simply returns; the CLI manager then prints its own success\n * banner and exits zero.\n *\n * @param _data Parsed CLI args (unused — doctor takes no positional args).\n */\nexport async function doctorCommandAction(_data: CommandActionData): Promise<void> {\n const report = await runChecks(defaultDoctorChecks);\n\n printReport(report);\n\n if (report.hasFailures) {\n process.exit(report.exitCode);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,eAAsB,oBAAoB,OAAyC;CACjF,MAAM,SAAS,MAAM,UAAU,mBAAmB;CAElD,YAAY,MAAM;CAElB,IAAI,OAAO,aACT,QAAQ,KAAK,OAAO,QAAQ;AAEhC"}
@@ -1,6 +1,6 @@
1
1
  import { colors } from "@mongez/copper";
2
2
 
3
- //#region ../@warlock.js/core/src/cli/commands/doctor/format-report.ts
3
+ //#region ../core/src/cli/commands/doctor/format-report.ts
4
4
  /**
5
5
  * The glyph shown beside each check, keyed by status.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"format-report.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/cli/commands/doctor/format-report.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport type { CheckStatus, DoctorReport } from \"./check.types\";\n\n/**\n * The glyph shown beside each check, keyed by status.\n */\nconst STATUS_SYMBOL: Record<CheckStatus, string> = {\n ok: \"✓\",\n warn: \"⚠\",\n fail: \"✗\",\n};\n\n/**\n * Colorize a status glyph. Kept separate from {@link STATUS_SYMBOL} so the\n * plain glyphs remain available for snapshot-friendly, color-free assertions.\n */\nfunction colorizeSymbol(status: CheckStatus): string {\n const symbol = STATUS_SYMBOL[status];\n\n switch (status) {\n case \"ok\":\n return colors.green(symbol);\n case \"warn\":\n return colors.yellow(symbol);\n case \"fail\":\n return colors.red(symbol);\n }\n}\n\n/**\n * Build the report body as an ordered list of plain (uncolored) lines:\n * one `<symbol> <name>: <detail>` line per check, a blank line, then a summary\n * line. Returned as strings (not printed) so the formatting is unit-testable.\n *\n * @param report The aggregated doctor report.\n * @returns The lines to print, top to bottom.\n */\nexport function formatReportLines(report: DoctorReport): string[] {\n const lines = report.results.map((result) => {\n return `${STATUS_SYMBOL[result.status]} ${result.name}: ${result.detail}`;\n });\n\n const { ok, warn, fail } = report.summary;\n\n lines.push(\"\");\n lines.push(`Summary: ${ok} ok, ${warn} warn, ${fail} fail`);\n\n return lines;\n}\n\n/**\n * Print the report to stdout with colored status glyphs and a colored summary\n * verdict. Thin wrapper over {@link formatReportLines} — the structured report\n * stays the source of truth for the exit code.\n *\n * @param report The aggregated doctor report.\n */\nexport function printReport(report: DoctorReport): void {\n for (const result of report.results) {\n const symbol = colorizeSymbol(result.status);\n\n console.log(`${symbol} ${colors.bold(result.name)}: ${result.detail}`);\n }\n\n const { ok, warn, fail } = report.summary;\n const summaryLine = `Summary: ${ok} ok, ${warn} warn, ${fail} fail`;\n\n console.log(\"\");\n console.log(report.hasFailures ? colors.red(summaryLine) : colors.green(summaryLine));\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAA6C;CACjD,IAAI;CACJ,MAAM;CACN,MAAM;AACR;;;;;AAMA,SAAS,eAAe,QAA6B;CACnD,MAAM,SAAS,cAAc;CAE7B,QAAQ,QAAR;EACE,KAAK,MACH,OAAO,OAAO,MAAM,MAAM;EAC5B,KAAK,QACH,OAAO,OAAO,OAAO,MAAM;EAC7B,KAAK,QACH,OAAO,OAAO,IAAI,MAAM;CAC5B;AACF;;;;;;;;AA8BA,SAAgB,YAAY,QAA4B;CACtD,KAAK,MAAM,UAAU,OAAO,SAAS;EACnC,MAAM,SAAS,eAAe,OAAO,MAAM;EAE3C,QAAQ,IAAI,GAAG,OAAO,GAAG,OAAO,KAAK,OAAO,IAAI,EAAE,IAAI,OAAO,QAAQ;CACvE;CAEA,MAAM,EAAE,IAAI,MAAM,SAAS,OAAO;CAClC,MAAM,cAAc,YAAY,GAAG,OAAO,KAAK,SAAS,KAAK;CAE7D,QAAQ,IAAI,EAAE;CACd,QAAQ,IAAI,OAAO,cAAc,OAAO,IAAI,WAAW,IAAI,OAAO,MAAM,WAAW,CAAC;AACtF"}
1
+ {"version":3,"file":"format-report.mjs","names":[],"sources":["../../../../../../../../../core/src/cli/commands/doctor/format-report.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport type { CheckStatus, DoctorReport } from \"./check.types\";\n\n/**\n * The glyph shown beside each check, keyed by status.\n */\nconst STATUS_SYMBOL: Record<CheckStatus, string> = {\n ok: \"✓\",\n warn: \"⚠\",\n fail: \"✗\",\n};\n\n/**\n * Colorize a status glyph. Kept separate from {@link STATUS_SYMBOL} so the\n * plain glyphs remain available for snapshot-friendly, color-free assertions.\n */\nfunction colorizeSymbol(status: CheckStatus): string {\n const symbol = STATUS_SYMBOL[status];\n\n switch (status) {\n case \"ok\":\n return colors.green(symbol);\n case \"warn\":\n return colors.yellow(symbol);\n case \"fail\":\n return colors.red(symbol);\n }\n}\n\n/**\n * Build the report body as an ordered list of plain (uncolored) lines:\n * one `<symbol> <name>: <detail>` line per check, a blank line, then a summary\n * line. Returned as strings (not printed) so the formatting is unit-testable.\n *\n * @param report The aggregated doctor report.\n * @returns The lines to print, top to bottom.\n */\nexport function formatReportLines(report: DoctorReport): string[] {\n const lines = report.results.map((result) => {\n return `${STATUS_SYMBOL[result.status]} ${result.name}: ${result.detail}`;\n });\n\n const { ok, warn, fail } = report.summary;\n\n lines.push(\"\");\n lines.push(`Summary: ${ok} ok, ${warn} warn, ${fail} fail`);\n\n return lines;\n}\n\n/**\n * Print the report to stdout with colored status glyphs and a colored summary\n * verdict. Thin wrapper over {@link formatReportLines} — the structured report\n * stays the source of truth for the exit code.\n *\n * @param report The aggregated doctor report.\n */\nexport function printReport(report: DoctorReport): void {\n for (const result of report.results) {\n const symbol = colorizeSymbol(result.status);\n\n console.log(`${symbol} ${colors.bold(result.name)}: ${result.detail}`);\n }\n\n const { ok, warn, fail } = report.summary;\n const summaryLine = `Summary: ${ok} ok, ${warn} warn, ${fail} fail`;\n\n console.log(\"\");\n console.log(report.hasFailures ? colors.red(summaryLine) : colors.green(summaryLine));\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAA6C;CACjD,IAAI;CACJ,MAAM;CACN,MAAM;AACR;;;;;AAMA,SAAS,eAAe,QAA6B;CACnD,MAAM,SAAS,cAAc;CAE7B,QAAQ,QAAR;EACE,KAAK,MACH,OAAO,OAAO,MAAM,MAAM;EAC5B,KAAK,QACH,OAAO,OAAO,OAAO,MAAM;EAC7B,KAAK,QACH,OAAO,OAAO,IAAI,MAAM;CAC5B;AACF;;;;;;;;AA8BA,SAAgB,YAAY,QAA4B;CACtD,KAAK,MAAM,UAAU,OAAO,SAAS;EACnC,MAAM,SAAS,eAAe,OAAO,MAAM;EAE3C,QAAQ,IAAI,GAAG,OAAO,GAAG,OAAO,KAAK,OAAO,IAAI,EAAE,IAAI,OAAO,QAAQ;CACvE;CAEA,MAAM,EAAE,IAAI,MAAM,SAAS,OAAO;CAClC,MAAM,cAAc,YAAY,GAAG,OAAO,KAAK,SAAS,KAAK;CAE7D,QAAQ,IAAI,EAAE;CACd,QAAQ,IAAI,OAAO,cAAc,OAAO,IAAI,WAAW,IAAI,OAAO,MAAM,WAAW,CAAC;AACtF"}