@warlock.js/core 5.30.0 → 5.32.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 (1374) hide show
  1. package/CHANGELOG.md +165 -36
  2. package/README.md +28 -23
  3. package/bin/source-load-hook.mjs +63 -0
  4. package/bin/warlock.js +102 -42
  5. package/esm/application/app.d.mts +3 -3
  6. package/esm/application/app.d.mts.map +1 -1
  7. package/esm/application/application-config-types.d.mts +1 -2
  8. package/esm/application/application-config-types.d.mts.map +1 -1
  9. package/esm/application/application.d.mts +5 -7
  10. package/esm/application/application.d.mts.map +1 -1
  11. package/esm/application/application.mjs +3 -1
  12. package/esm/application/application.mjs.map +1 -1
  13. package/esm/application/boot-signal.d.mts +14 -12
  14. package/esm/application/boot-signal.d.mts.map +1 -1
  15. package/esm/application/index.d.mts +2 -1
  16. package/esm/application/index.mjs +1 -1
  17. package/esm/application/public-url.d.mts +1 -2
  18. package/esm/application/public-url.d.mts.map +1 -1
  19. package/esm/application/roles.d.mts +10 -11
  20. package/esm/application/roles.d.mts.map +1 -1
  21. package/esm/benchmark/benchmark-snapshots.d.mts +1 -3
  22. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  23. package/esm/benchmark/benchmark.d.mts +1 -3
  24. package/esm/benchmark/benchmark.d.mts.map +1 -1
  25. package/esm/benchmark/channels/console.channel.d.mts +1 -3
  26. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  27. package/esm/benchmark/channels/noop.channel.d.mts +1 -3
  28. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  29. package/esm/benchmark/index.mjs +1 -1
  30. package/esm/benchmark/profiler.d.mts +1 -3
  31. package/esm/benchmark/profiler.d.mts.map +1 -1
  32. package/esm/benchmark/profiler.mjs +2 -1
  33. package/esm/benchmark/profiler.mjs.map +1 -1
  34. package/esm/benchmark/types.d.mts +22 -17
  35. package/esm/benchmark/types.d.mts.map +1 -1
  36. package/esm/bootstrap/setup.d.mts +1 -2
  37. package/esm/bootstrap/setup.d.mts.map +1 -1
  38. package/esm/bootstrap.d.mts +1 -2
  39. package/esm/bootstrap.d.mts.map +1 -1
  40. package/esm/cache/database-cache-driver.d.mts +3 -5
  41. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  42. package/esm/cache/database-cache-driver.mjs +1 -1
  43. package/esm/cache/index.d.mts +2 -1
  44. package/esm/cache/index.mjs +1 -1
  45. package/esm/cli/cli-commands.manager.mjs +6 -3
  46. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  47. package/esm/cli/commands/add.command.mjs +4 -2
  48. package/esm/cli/commands/add.command.mjs.map +1 -1
  49. package/esm/cli/commands/agents-md/agents-md-command.action.mjs +70 -0
  50. package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -0
  51. package/esm/cli/commands/agents-md.command.mjs +38 -0
  52. package/esm/cli/commands/agents-md.command.mjs.map +1 -0
  53. package/esm/cli/commands/board/board-command.action.mjs +279 -0
  54. package/esm/cli/commands/board/board-command.action.mjs.map +1 -0
  55. package/esm/cli/commands/board.command.mjs +78 -0
  56. package/esm/cli/commands/board.command.mjs.map +1 -0
  57. package/esm/cli/commands/build.command.mjs +6 -1
  58. package/esm/cli/commands/build.command.mjs.map +1 -1
  59. package/esm/cli/commands/check/check-command.action.mjs +57 -0
  60. package/esm/cli/commands/check/check-command.action.mjs.map +1 -0
  61. package/esm/cli/commands/check/child-typecheck.mjs +66 -0
  62. package/esm/cli/commands/check/child-typecheck.mjs.map +1 -0
  63. package/esm/cli/commands/check/format-problems.mjs +43 -0
  64. package/esm/cli/commands/check/format-problems.mjs.map +1 -0
  65. package/esm/cli/commands/check/typecheck-command.action.mjs +61 -0
  66. package/esm/cli/commands/check/typecheck-command.action.mjs.map +1 -0
  67. package/esm/cli/commands/check.command.mjs +50 -0
  68. package/esm/cli/commands/check.command.mjs.map +1 -0
  69. package/esm/cli/commands/dev-server.command.mjs +12 -3
  70. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  71. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +8 -3
  72. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
  73. package/esm/cli/commands/doctor/check.types.d.mts +89 -0
  74. package/esm/cli/commands/doctor/check.types.d.mts.map +1 -0
  75. package/esm/cli/commands/doctor/checks/config.check.mjs +1 -0
  76. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
  77. package/esm/cli/commands/doctor/checks/connectors.check.mjs +2 -0
  78. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
  79. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +1 -0
  80. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
  81. package/esm/cli/commands/doctor/checks/health.check.mjs +3 -0
  82. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
  83. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +1 -0
  84. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
  85. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +23 -27
  86. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
  87. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -0
  88. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
  89. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +4 -0
  90. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
  91. package/esm/cli/commands/doctor/checks/routes.check.mjs +3 -0
  92. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
  93. package/esm/cli/commands/doctor/doctor-command.action.mjs +15 -6
  94. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  95. package/esm/cli/commands/doctor/format-report.mjs +30 -2
  96. package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
  97. package/esm/cli/commands/doctor.command.mjs +4 -0
  98. package/esm/cli/commands/doctor.command.mjs.map +1 -1
  99. package/esm/cli/commands/explain/explain-command.action.mjs +64 -0
  100. package/esm/cli/commands/explain/explain-command.action.mjs.map +1 -0
  101. package/esm/cli/commands/explain.command.mjs +23 -0
  102. package/esm/cli/commands/explain.command.mjs.map +1 -0
  103. package/esm/cli/commands/generate/generate.command.mjs +124 -124
  104. package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
  105. package/esm/cli/commands/generate/generators/controller.generator.mjs +5 -2
  106. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  107. package/esm/cli/commands/generate/generators/endpoint.generator.mjs +313 -0
  108. package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -0
  109. package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
  110. package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
  111. package/esm/cli/commands/generate/generators/model.generator.mjs +4 -3
  112. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  113. package/esm/cli/commands/generate/generators/repository.generator.mjs +3 -1
  114. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  115. package/esm/cli/commands/generate/generators/resource.generator.mjs +3 -1
  116. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  117. package/esm/cli/commands/generate/generators/service.generator.mjs +3 -1
  118. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  119. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs +341 -0
  120. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -0
  121. package/esm/cli/commands/generate/templates/stubs.mjs +19 -6
  122. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  123. package/esm/cli/commands/generate/utils/endpoint-schema.mjs +136 -0
  124. package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -0
  125. package/esm/cli/commands/generate/utils/name-parser.mjs +2 -2
  126. package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
  127. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  128. package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
  129. package/esm/cli/commands/generate/utils/writer.mjs +38 -13
  130. package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
  131. package/esm/cli/commands/inspect/inspect-command.action.mjs +73 -0
  132. package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -0
  133. package/esm/cli/commands/inspect.command.mjs +39 -0
  134. package/esm/cli/commands/inspect.command.mjs.map +1 -0
  135. package/esm/cli/commands/issue/collect-environment.mjs +187 -0
  136. package/esm/cli/commands/issue/collect-environment.mjs.map +1 -0
  137. package/esm/cli/commands/issue/issue-command.action.mjs +70 -0
  138. package/esm/cli/commands/issue/issue-command.action.mjs.map +1 -0
  139. package/esm/cli/commands/issue.command.mjs +31 -0
  140. package/esm/cli/commands/issue.command.mjs.map +1 -0
  141. package/esm/cli/commands/mcp/mcp-command.action.mjs +104 -0
  142. package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -0
  143. package/esm/cli/commands/mcp.command.mjs +76 -0
  144. package/esm/cli/commands/mcp.command.mjs.map +1 -0
  145. package/esm/cli/commands/openapi-generator.action.mjs +1 -1
  146. package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
  147. package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
  148. package/esm/cli/commands/postman-generator.action.mjs +1 -1
  149. package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
  150. package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
  151. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  152. package/esm/cli/commands/routes/route-row.mjs +1 -1
  153. package/esm/cli/commands/routes/routes-diff.action.mjs +3 -3
  154. package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
  155. package/esm/cli/commands/test.command.mjs +131 -0
  156. package/esm/cli/commands/test.command.mjs.map +1 -0
  157. package/esm/cli/commands/trace/trace-command.action.mjs +145 -0
  158. package/esm/cli/commands/trace/trace-command.action.mjs.map +1 -0
  159. package/esm/cli/commands/trace.command.mjs +60 -0
  160. package/esm/cli/commands/trace.command.mjs.map +1 -0
  161. package/esm/cli/commands/typecheck.command.mjs +40 -0
  162. package/esm/cli/commands/typecheck.command.mjs.map +1 -0
  163. package/esm/cli/commands/upgrade.command.mjs +46 -0
  164. package/esm/cli/commands/upgrade.command.mjs.map +1 -0
  165. package/esm/cli/commands-loader.mjs +1 -1
  166. package/esm/cli/flush-and-exit.mjs +34 -0
  167. package/esm/cli/flush-and-exit.mjs.map +1 -0
  168. package/esm/cli/framework-cli-commands.mjs +25 -1
  169. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  170. package/esm/cli/parse-cli-args.mjs +3 -2
  171. package/esm/cli/parse-cli-args.mjs.map +1 -1
  172. package/esm/cli/start.d.mts +1 -1
  173. package/esm/cli/string-similarity.mjs +1 -1
  174. package/esm/commands/cli-command.d.mts +2 -4
  175. package/esm/commands/cli-command.d.mts.map +1 -1
  176. package/esm/commands/index.d.mts +2 -1
  177. package/esm/commands/index.mjs +1 -1
  178. package/esm/commands/types.d.mts +8 -8
  179. package/esm/commands/types.d.mts.map +1 -1
  180. package/esm/config/config-getter.d.mts +2 -3
  181. package/esm/config/config-getter.d.mts.map +1 -1
  182. package/esm/config/config-getter.mjs +5 -5
  183. package/esm/config/config-getter.mjs.map +1 -1
  184. package/esm/config/config-handlers.d.mts +1 -3
  185. package/esm/config/config-handlers.d.mts.map +1 -1
  186. package/esm/config/config-loader.d.mts +1 -2
  187. package/esm/config/config-loader.d.mts.map +1 -1
  188. package/esm/config/config-loader.mjs +35 -14
  189. package/esm/config/config-loader.mjs.map +1 -1
  190. package/esm/config/config-manager.mjs +1 -1
  191. package/esm/config/config-schema.d.mts +70 -0
  192. package/esm/config/config-schema.d.mts.map +1 -0
  193. package/esm/config/config-schema.mjs +77 -0
  194. package/esm/config/config-schema.mjs.map +1 -0
  195. package/esm/config/config-setter.d.mts +2 -4
  196. package/esm/config/config-setter.d.mts.map +1 -1
  197. package/esm/config/config-setter.mjs +2 -2
  198. package/esm/config/config-setter.mjs.map +1 -1
  199. package/esm/config/config-special-handlers.d.mts +2 -4
  200. package/esm/config/config-special-handlers.d.mts.map +1 -1
  201. package/esm/config/index.d.mts +7 -0
  202. package/esm/config/index.mjs +2 -1
  203. package/esm/config/types.d.mts +4 -5
  204. package/esm/config/types.d.mts.map +1 -1
  205. package/esm/connectors/access-connector.d.mts +1 -3
  206. package/esm/connectors/access-connector.d.mts.map +1 -1
  207. package/esm/connectors/access-connector.mjs +2 -2
  208. package/esm/connectors/access-connector.mjs.map +1 -1
  209. package/esm/connectors/ai-connector.d.mts +1 -3
  210. package/esm/connectors/ai-connector.d.mts.map +1 -1
  211. package/esm/connectors/ai-connector.mjs +2 -2
  212. package/esm/connectors/ai-connector.mjs.map +1 -1
  213. package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -3
  214. package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
  215. package/esm/connectors/assert-no-reserved-connector-names.mjs +2 -1
  216. package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
  217. package/esm/connectors/assert-unique-connector-names.d.mts +1 -3
  218. package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
  219. package/esm/connectors/assert-unique-connector-names.mjs +26 -1
  220. package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
  221. package/esm/connectors/base-connector.d.mts +1 -3
  222. package/esm/connectors/base-connector.d.mts.map +1 -1
  223. package/esm/connectors/cache-connector.d.mts +1 -3
  224. package/esm/connectors/cache-connector.d.mts.map +1 -1
  225. package/esm/connectors/cache-connector.mjs +3 -3
  226. package/esm/connectors/cache-connector.mjs.map +1 -1
  227. package/esm/connectors/connectors-manager.d.mts +2 -4
  228. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  229. package/esm/connectors/connectors-manager.mjs +2 -2
  230. package/esm/connectors/connectors-manager.mjs.map +1 -1
  231. package/esm/connectors/database-connector.d.mts +1 -3
  232. package/esm/connectors/database-connector.d.mts.map +1 -1
  233. package/esm/connectors/database-connector.mjs +2 -2
  234. package/esm/connectors/database-connector.mjs.map +1 -1
  235. package/esm/connectors/describe-server-address.mjs +4 -4
  236. package/esm/connectors/describe-server-address.mjs.map +1 -1
  237. package/esm/connectors/herald-connector.d.mts +1 -3
  238. package/esm/connectors/herald-connector.d.mts.map +1 -1
  239. package/esm/connectors/herald-connector.mjs +2 -2
  240. package/esm/connectors/herald-connector.mjs.map +1 -1
  241. package/esm/connectors/http-connector.d.mts +1 -3
  242. package/esm/connectors/http-connector.d.mts.map +1 -1
  243. package/esm/connectors/http-connector.mjs +11 -9
  244. package/esm/connectors/http-connector.mjs.map +1 -1
  245. package/esm/connectors/index.d.mts +2 -1
  246. package/esm/connectors/index.mjs +1 -1
  247. package/esm/connectors/logger-connector.d.mts +1 -3
  248. package/esm/connectors/logger-connector.d.mts.map +1 -1
  249. package/esm/connectors/logger-connector.mjs +2 -2
  250. package/esm/connectors/logger-connector.mjs.map +1 -1
  251. package/esm/connectors/mail-connector.d.mts +1 -3
  252. package/esm/connectors/mail-connector.d.mts.map +1 -1
  253. package/esm/connectors/mail-connector.mjs +2 -2
  254. package/esm/connectors/mail-connector.mjs.map +1 -1
  255. package/esm/connectors/notifications-connector.d.mts +1 -3
  256. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  257. package/esm/connectors/notifications-connector.mjs +2 -2
  258. package/esm/connectors/notifications-connector.mjs.map +1 -1
  259. package/esm/connectors/register-configured-connectors.d.mts +2 -4
  260. package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
  261. package/esm/connectors/single-server-warnings.mjs.map +1 -1
  262. package/esm/connectors/socket-connector.d.mts +1 -3
  263. package/esm/connectors/socket-connector.d.mts.map +1 -1
  264. package/esm/connectors/socket-connector.mjs +12 -10
  265. package/esm/connectors/socket-connector.mjs.map +1 -1
  266. package/esm/connectors/storage.connector.d.mts +1 -3
  267. package/esm/connectors/storage.connector.d.mts.map +1 -1
  268. package/esm/connectors/storage.connector.mjs +2 -2
  269. package/esm/connectors/storage.connector.mjs.map +1 -1
  270. package/esm/connectors/types.d.mts +17 -14
  271. package/esm/connectors/types.d.mts.map +1 -1
  272. package/esm/container/container-instance-registry.mjs.map +1 -1
  273. package/esm/container/development-app-modules.d.mts +7 -5
  274. package/esm/container/development-app-modules.d.mts.map +1 -1
  275. package/esm/container/development-model-modules.d.mts +6 -5
  276. package/esm/container/development-model-modules.d.mts.map +1 -1
  277. package/esm/container/index.d.mts +4 -4
  278. package/esm/container/index.d.mts.map +1 -1
  279. package/esm/container/index.mjs.map +1 -1
  280. package/esm/database/index.d.mts +3 -1
  281. package/esm/database/index.mjs +1 -1
  282. package/esm/database/migrate-action.mjs +1 -1
  283. package/esm/database/migrate-action.mjs.map +1 -1
  284. package/esm/database/models/database-log/database-log.d.mts +2 -31
  285. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  286. package/esm/database/models/database-log/index.d.mts +2 -1
  287. package/esm/database/models/database-log/index.mjs +1 -1
  288. package/esm/database/seed-command-action.mjs +1 -1
  289. package/esm/database/seeds/seeder.d.mts +2 -4
  290. package/esm/database/seeds/seeder.d.mts.map +1 -1
  291. package/esm/database/seeds/seeder.errors.d.mts +6 -3
  292. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  293. package/esm/database/seeds/seeder.errors.mjs +2 -0
  294. package/esm/database/seeds/seeder.errors.mjs.map +1 -1
  295. package/esm/database/seeds/seeders.manager.mjs +2 -1
  296. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  297. package/esm/database/seeds/types.d.mts +7 -8
  298. package/esm/database/seeds/types.d.mts.map +1 -1
  299. package/esm/database/utils.d.mts +4 -5
  300. package/esm/database/utils.d.mts.map +1 -1
  301. package/esm/dev-server/app-module-registry.mjs +1 -1
  302. package/esm/dev-server/boot-precondition-error.mjs +1 -0
  303. package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
  304. package/esm/dev-server/create-worker.mjs +17 -9
  305. package/esm/dev-server/create-worker.mjs.map +1 -1
  306. package/esm/dev-server/dependency-graph.d.mts +1 -3
  307. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  308. package/esm/dev-server/dependency-graph.mjs +1 -1
  309. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  310. package/esm/dev-server/dev-agent-tooling.mjs +135 -0
  311. package/esm/dev-server/dev-agent-tooling.mjs.map +1 -0
  312. package/esm/dev-server/dev-logger.mjs.map +1 -1
  313. package/esm/dev-server/development-server.mjs +8 -0
  314. package/esm/dev-server/development-server.mjs.map +1 -1
  315. package/esm/dev-server/extract-translation-keys.mjs +16 -17
  316. package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
  317. package/esm/dev-server/file-manager.d.mts +3 -7
  318. package/esm/dev-server/file-manager.d.mts.map +1 -1
  319. package/esm/dev-server/file-operations.d.mts +1 -3
  320. package/esm/dev-server/file-operations.d.mts.map +1 -1
  321. package/esm/dev-server/files-orchestrator.mjs +4 -5
  322. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  323. package/esm/dev-server/files-watcher.mjs +12 -11
  324. package/esm/dev-server/files-watcher.mjs.map +1 -1
  325. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +2 -3
  326. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  327. package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs +33 -0
  328. package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs.map +1 -0
  329. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +36 -115
  330. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  331. package/esm/dev-server/health-checker/default-health-checkers.mjs +31 -0
  332. package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -0
  333. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +12 -6
  334. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  335. package/esm/dev-server/health-checker/file-health-result.d.mts +2 -2
  336. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  337. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +16 -4
  338. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  339. package/esm/dev-server/health-checker/oxlint-runner.mjs +303 -0
  340. package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -0
  341. package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +1 -1
  342. package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -0
  343. package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs +42 -0
  344. package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs.map +1 -0
  345. package/esm/dev-server/health-checker/workers/ts-health.worker.d.mts +1 -1
  346. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +40 -174
  347. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  348. package/esm/dev-server/loader/hook-thread.d.mts +4 -8
  349. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  350. package/esm/dev-server/loader/load-hook.d.mts +10 -6
  351. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  352. package/esm/dev-server/loader/load-hook.mjs +4 -3
  353. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  354. package/esm/dev-server/loader/loader-port-acks.mjs +1 -1
  355. package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -1
  356. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  357. package/esm/dev-server/loader/register-loader.mjs +4 -3
  358. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  359. package/esm/dev-server/loader/resolve-hook.d.mts +2 -2
  360. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  361. package/esm/dev-server/loader/resolve-hook.mjs +3 -2
  362. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  363. package/esm/dev-server/loader/transpile-cache.mjs +3 -2
  364. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  365. package/esm/dev-server/manifest-manager.d.mts +1 -3
  366. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  367. package/esm/dev-server/model-module-registry.mjs +3 -3
  368. package/esm/dev-server/model-module-registry.mjs.map +1 -1
  369. package/esm/dev-server/model-resource-typings.mjs +40 -47
  370. package/esm/dev-server/model-resource-typings.mjs.map +1 -1
  371. package/esm/dev-server/module-loader.mjs +3 -2
  372. package/esm/dev-server/module-loader.mjs.map +1 -1
  373. package/esm/dev-server/package-json-manager.mjs +1 -1
  374. package/esm/dev-server/parse-imports.mjs +7 -39
  375. package/esm/dev-server/parse-imports.mjs.map +1 -1
  376. package/esm/dev-server/read-config-ast.mjs +3 -33
  377. package/esm/dev-server/read-config-ast.mjs.map +1 -1
  378. package/esm/dev-server/ready-block.mjs +1 -1
  379. package/esm/dev-server/route-types-publisher.mjs +1 -1
  380. package/esm/dev-server/shortcuts.mjs +1 -1
  381. package/esm/dev-server/special-files-collector.d.mts +2 -4
  382. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  383. package/esm/dev-server/start-development-server.mjs.map +1 -1
  384. package/esm/dev-server/supervisor.mjs +1 -1
  385. package/esm/dev-server/translation-keys-sources.mjs +1 -1
  386. package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
  387. package/esm/dev-server/tsconfig-manager.mjs +3 -3
  388. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  389. package/esm/dev-server/type-generator.mjs +31 -38
  390. package/esm/dev-server/type-generator.mjs.map +1 -1
  391. package/esm/dev-server/types.d.mts +3 -4
  392. package/esm/dev-server/types.d.mts.map +1 -1
  393. package/esm/dev-server/update-check-cache.mjs +2 -2
  394. package/esm/dev-server/update-check-cache.mjs.map +1 -1
  395. package/esm/encryption/encrypt.d.mts +2 -3
  396. package/esm/encryption/encrypt.d.mts.map +1 -1
  397. package/esm/encryption/hash.d.mts +1 -2
  398. package/esm/encryption/hash.d.mts.map +1 -1
  399. package/esm/encryption/index.mjs +1 -1
  400. package/esm/encryption/password.d.mts +2 -3
  401. package/esm/encryption/password.d.mts.map +1 -1
  402. package/esm/encryption/types.d.mts +2 -3
  403. package/esm/encryption/types.d.mts.map +1 -1
  404. package/esm/errors/container-key-missing-error.mjs +1 -0
  405. package/esm/errors/container-key-missing-error.mjs.map +1 -1
  406. package/esm/errors/error-codes.d.mts +660 -0
  407. package/esm/errors/error-codes.d.mts.map +1 -0
  408. package/esm/errors/error-codes.mjs +634 -0
  409. package/esm/errors/error-codes.mjs.map +1 -0
  410. package/esm/errors/esbuild-binary-missing-error.mjs +1 -0
  411. package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
  412. package/esm/errors/index.d.mts +3 -1
  413. package/esm/errors/index.mjs +3 -1
  414. package/esm/errors/unknown-locale-error.mjs +1 -0
  415. package/esm/errors/unknown-locale-error.mjs.map +1 -1
  416. package/esm/errors/warlock-error.d.mts +21 -0
  417. package/esm/errors/warlock-error.d.mts.map +1 -0
  418. package/esm/errors/warlock-error.mjs +22 -0
  419. package/esm/errors/warlock-error.mjs.map +1 -0
  420. package/esm/generations/add-command.action.mjs +22 -5
  421. package/esm/generations/add-command.action.mjs.map +1 -1
  422. package/esm/generations/features/access.feature.mjs +1 -1
  423. package/esm/generations/features/access.feature.mjs.map +1 -1
  424. package/esm/generations/features/bull-board.feature.mjs +3 -2
  425. package/esm/generations/features/bull-board.feature.mjs.map +1 -1
  426. package/esm/generations/features/mysql.feature.mjs.map +1 -1
  427. package/esm/generations/features/notifications.feature.mjs +7 -3
  428. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  429. package/esm/generations/features/queue.feature.mjs +1 -1
  430. package/esm/generations/features/queue.feature.mjs.map +1 -1
  431. package/esm/generations/features/react-email.feature.mjs +1 -1
  432. package/esm/generations/features/react-email.feature.mjs.map +1 -1
  433. package/esm/generations/features/shadcn.feature.mjs +1 -1
  434. package/esm/generations/features/shadcn.feature.mjs.map +1 -1
  435. package/esm/generations/features/shared/link-ai-package-import.mjs +1 -1
  436. package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
  437. package/esm/generations/features/shared/merge-web-sitemap-config.mjs +16 -23
  438. package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
  439. package/esm/generations/features/shared/patch-tsconfig-include.mjs +2 -2
  440. package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
  441. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +2 -2
  442. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
  443. package/esm/generations/features/sitemap.feature.mjs +3 -2
  444. package/esm/generations/features/sitemap.feature.mjs.map +1 -1
  445. package/esm/generations/features/tailwind.feature.mjs +1 -1
  446. package/esm/generations/features/tailwind.feature.mjs.map +1 -1
  447. package/esm/generations/features/test.feature.mjs +11 -6
  448. package/esm/generations/features/test.feature.mjs.map +1 -1
  449. package/esm/generations/features/web.feature.mjs +1 -1
  450. package/esm/generations/features/web.feature.mjs.map +1 -1
  451. package/esm/generations/generation-fs.mjs +73 -0
  452. package/esm/generations/generation-fs.mjs.map +1 -0
  453. package/esm/generations/generation-run.mjs +185 -0
  454. package/esm/generations/generation-run.mjs.map +1 -0
  455. package/esm/generations/stubs.mjs +156 -14
  456. package/esm/generations/stubs.mjs.map +1 -1
  457. package/esm/http/boot-port-preflight.d.mts +4 -5
  458. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  459. package/esm/http/boot-port-preflight.mjs +2 -2
  460. package/esm/http/boot-port-preflight.mjs.map +1 -1
  461. package/esm/http/bounded-stream-queue.d.mts +10 -0
  462. package/esm/http/bounded-stream-queue.d.mts.map +1 -0
  463. package/esm/http/bounded-stream-queue.mjs +97 -0
  464. package/esm/http/bounded-stream-queue.mjs.map +1 -0
  465. package/esm/http/build-cors-options.mjs +2 -2
  466. package/esm/http/build-cors-options.mjs.map +1 -1
  467. package/esm/http/build-rate-limit-options.d.mts +15 -3
  468. package/esm/http/build-rate-limit-options.d.mts.map +1 -1
  469. package/esm/http/build-rate-limit-options.mjs +1 -1
  470. package/esm/http/build-rate-limit-options.mjs.map +1 -1
  471. package/esm/http/conditional-request.d.mts +87 -0
  472. package/esm/http/conditional-request.d.mts.map +1 -0
  473. package/esm/http/conditional-request.mjs +121 -0
  474. package/esm/http/conditional-request.mjs.map +1 -0
  475. package/esm/http/config.d.mts +2 -4
  476. package/esm/http/config.d.mts.map +1 -1
  477. package/esm/http/config.mjs +2 -2
  478. package/esm/http/config.mjs.map +1 -1
  479. package/esm/http/context/request-context.d.mts +6 -7
  480. package/esm/http/context/request-context.d.mts.map +1 -1
  481. package/esm/http/context/request-memo.d.mts +1 -2
  482. package/esm/http/context/request-memo.d.mts.map +1 -1
  483. package/esm/http/createHttpApplication.d.mts +2 -3
  484. package/esm/http/createHttpApplication.d.mts.map +1 -1
  485. package/esm/http/createHttpApplication.mjs +2 -2
  486. package/esm/http/createHttpApplication.mjs.map +1 -1
  487. package/esm/http/csp.d.mts +12 -12
  488. package/esm/http/csp.d.mts.map +1 -1
  489. package/esm/http/csp.mjs +3 -2
  490. package/esm/http/csp.mjs.map +1 -1
  491. package/esm/http/csrf-default-guard.d.mts +2 -4
  492. package/esm/http/csrf-default-guard.d.mts.map +1 -1
  493. package/esm/http/csrf-default-guard.mjs +1 -1
  494. package/esm/http/csrf-default-guard.mjs.map +1 -1
  495. package/esm/http/csrf-origin-policy.d.mts +7 -9
  496. package/esm/http/csrf-origin-policy.d.mts.map +1 -1
  497. package/esm/http/csrf-origin-policy.mjs +2 -2
  498. package/esm/http/csrf-origin-policy.mjs.map +1 -1
  499. package/esm/http/database/RequestLog.d.mts +26 -87
  500. package/esm/http/database/RequestLog.d.mts.map +1 -1
  501. package/esm/http/error-codes.d.mts +1 -2
  502. package/esm/http/error-codes.d.mts.map +1 -1
  503. package/esm/http/error-mapper.d.mts +2 -4
  504. package/esm/http/error-mapper.d.mts.map +1 -1
  505. package/esm/http/error-mapper.mjs +2 -2
  506. package/esm/http/error-mapper.mjs.map +1 -1
  507. package/esm/http/errors/errors.d.mts +30 -29
  508. package/esm/http/errors/errors.d.mts.map +1 -1
  509. package/esm/http/errors/errors.mjs +1 -0
  510. package/esm/http/errors/errors.mjs.map +1 -1
  511. package/esm/http/escape-header-value.d.mts +17 -0
  512. package/esm/http/escape-header-value.d.mts.map +1 -0
  513. package/esm/http/escape-header-value.mjs +27 -0
  514. package/esm/http/escape-header-value.mjs.map +1 -0
  515. package/esm/http/events.d.mts +2 -4
  516. package/esm/http/events.d.mts.map +1 -1
  517. package/esm/http/flush-pending-cookies.mjs.map +1 -1
  518. package/esm/http/health.d.mts +4 -4
  519. package/esm/http/health.d.mts.map +1 -1
  520. package/esm/http/index.d.mts +9 -3
  521. package/esm/http/index.mjs +5 -2
  522. package/esm/http/lazy-static.mjs +194 -0
  523. package/esm/http/lazy-static.mjs.map +1 -0
  524. package/esm/http/middleware/cache-response-middleware.d.mts +2 -4
  525. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  526. package/esm/http/middleware/concurrency-limit.middleware.d.mts +3 -3
  527. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  528. package/esm/http/middleware/idempotency.middleware.d.mts +3 -3
  529. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  530. package/esm/http/middleware/idempotency.middleware.mjs +6 -6
  531. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  532. package/esm/http/middleware/index.d.mts +3 -1
  533. package/esm/http/middleware/index.mjs +1 -1
  534. package/esm/http/middleware/inject-request-context.d.mts +2 -4
  535. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  536. package/esm/http/middleware/inject-request-context.mjs +3 -3
  537. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  538. package/esm/http/middleware/ip-filter.middleware.d.mts +3 -3
  539. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  540. package/esm/http/middleware/maintenance.middleware.d.mts +3 -3
  541. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  542. package/esm/http/middleware/maintenance.middleware.mjs +4 -4
  543. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  544. package/esm/http/middleware/max-body-size.middleware.d.mts +2 -2
  545. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  546. package/esm/http/middleware/middleware-list.d.mts +1 -3
  547. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  548. package/esm/http/middleware/rate-limit.middleware.d.mts +3 -3
  549. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  550. package/esm/http/middleware/rate-limit.middleware.mjs +2 -2
  551. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  552. package/esm/http/middleware/utils/cidr-match.d.mts +2 -3
  553. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  554. package/esm/http/middleware/utils/idempotency-key.d.mts +3 -5
  555. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  556. package/esm/http/middleware/utils/index.d.mts +2 -1
  557. package/esm/http/middleware/utils/parse-size.d.mts +1 -2
  558. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  559. package/esm/http/middleware/utils/parse-size.mjs +2 -2
  560. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  561. package/esm/http/plugins.d.mts +2 -4
  562. package/esm/http/plugins.d.mts.map +1 -1
  563. package/esm/http/plugins.mjs +17 -14
  564. package/esm/http/plugins.mjs.map +1 -1
  565. package/esm/http/port-preflight.d.mts +3 -4
  566. package/esm/http/port-preflight.d.mts.map +1 -1
  567. package/esm/http/rate-limit-cache-store.mjs +6 -4
  568. package/esm/http/rate-limit-cache-store.mjs.map +1 -1
  569. package/esm/http/ready-report.d.mts +15 -10
  570. package/esm/http/ready-report.d.mts.map +1 -1
  571. package/esm/http/request-controller.d.mts +1 -3
  572. package/esm/http/request-controller.d.mts.map +1 -1
  573. package/esm/http/request-log-snapshot.d.mts +26 -15
  574. package/esm/http/request-log-snapshot.d.mts.map +1 -1
  575. package/esm/http/request-log-snapshot.mjs +85 -6
  576. package/esm/http/request-log-snapshot.mjs.map +1 -1
  577. package/esm/http/request.d.mts +6 -5
  578. package/esm/http/request.d.mts.map +1 -1
  579. package/esm/http/request.mjs +13 -11
  580. package/esm/http/request.mjs.map +1 -1
  581. package/esm/http/response.d.mts +23 -12
  582. package/esm/http/response.d.mts.map +1 -1
  583. package/esm/http/response.mjs +169 -81
  584. package/esm/http/response.mjs.map +1 -1
  585. package/esm/http/safe-redirect.d.mts +50 -0
  586. package/esm/http/safe-redirect.d.mts.map +1 -0
  587. package/esm/http/safe-redirect.mjs +80 -0
  588. package/esm/http/safe-redirect.mjs.map +1 -0
  589. package/esm/http/serialized.d.mts +12 -13
  590. package/esm/http/serialized.d.mts.map +1 -1
  591. package/esm/http/server-rebuilt.d.mts +3 -5
  592. package/esm/http/server-rebuilt.d.mts.map +1 -1
  593. package/esm/http/server.d.mts +11 -9
  594. package/esm/http/server.d.mts.map +1 -1
  595. package/esm/http/server.mjs +17 -7
  596. package/esm/http/server.mjs.map +1 -1
  597. package/esm/http/stream-react-response.d.mts +7 -7
  598. package/esm/http/stream-react-response.d.mts.map +1 -1
  599. package/esm/http/stream-transport.mjs +4 -2
  600. package/esm/http/stream-transport.mjs.map +1 -1
  601. package/esm/http/tracing/index.mjs +1 -1
  602. package/esm/http/tracing/trace-id.d.mts +2 -3
  603. package/esm/http/tracing/trace-id.d.mts.map +1 -1
  604. package/esm/http/tracing/tracing-dispatcher.d.mts +10 -11
  605. package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
  606. package/esm/http/tracing/tracing-dispatcher.mjs +2 -2
  607. package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
  608. package/esm/http/tracing/tracing.type.d.mts +11 -9
  609. package/esm/http/tracing/tracing.type.d.mts.map +1 -1
  610. package/esm/http/types.d.mts +78 -39
  611. package/esm/http/types.d.mts.map +1 -1
  612. package/esm/http/uploaded-file.d.mts +6 -5
  613. package/esm/http/uploaded-file.d.mts.map +1 -1
  614. package/esm/http/uploads/generate-image-variant.mjs +1 -1
  615. package/esm/http/uploads/generate-image-variants.d.mts +13 -10
  616. package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
  617. package/esm/http/uploads/generate-image-variants.mjs +62 -25
  618. package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
  619. package/esm/http/uploads/image-variant-cache-entries.mjs +78 -0
  620. package/esm/http/uploads/image-variant-cache-entries.mjs.map +1 -0
  621. package/esm/http/uploads/image-variant-cache.mjs +72 -30
  622. package/esm/http/uploads/image-variant-cache.mjs.map +1 -1
  623. package/esm/http/uploads/image-variant-types.d.mts +9 -9
  624. package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
  625. package/esm/http/uploads/image-variants-config-error.d.mts +4 -3
  626. package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
  627. package/esm/http/uploads/image-variants-config-error.mjs +3 -2
  628. package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
  629. package/esm/http/uploads/index.d.mts +2 -1
  630. package/esm/http/uploads/index.mjs +1 -1
  631. package/esm/http/uploads/load-variant-source.mjs +1 -1
  632. package/esm/http/uploads/load-variant-source.mjs.map +1 -1
  633. package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
  634. package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
  635. package/esm/http/uploads/purge-image-variants.d.mts +9 -6
  636. package/esm/http/uploads/purge-image-variants.d.mts.map +1 -1
  637. package/esm/http/uploads/purge-image-variants.mjs +16 -16
  638. package/esm/http/uploads/purge-image-variants.mjs.map +1 -1
  639. package/esm/http/uploads/remote-variant-source.mjs +115 -0
  640. package/esm/http/uploads/remote-variant-source.mjs.map +1 -0
  641. package/esm/http/uploads/resolve-image-variant.d.mts +6 -9
  642. package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -1
  643. package/esm/http/uploads/resolve-image-variant.mjs +10 -18
  644. package/esm/http/uploads/resolve-image-variant.mjs.map +1 -1
  645. package/esm/http/uploads/resolve-image-variants-config.mjs +7 -5
  646. package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
  647. package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
  648. package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
  649. package/esm/http/uploads/resolve-remote-image-variant.mjs +89 -0
  650. package/esm/http/uploads/resolve-remote-image-variant.mjs.map +1 -0
  651. package/esm/http/uploads/trim-image-variant-cache.mjs +193 -0
  652. package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -0
  653. package/esm/http/uploads/uploaded-file.controller.d.mts +9 -6
  654. package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
  655. package/esm/http/uploads/uploaded-file.controller.mjs +18 -9
  656. package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
  657. package/esm/http/uploads/variant-cache-key.mjs +2 -2
  658. package/esm/http/uploads-config.d.mts +2 -4
  659. package/esm/http/uploads-config.d.mts.map +1 -1
  660. package/esm/http/uploads-types.d.mts +22 -16
  661. package/esm/http/uploads-types.d.mts.map +1 -1
  662. package/esm/http/xmlable.d.mts +1 -2
  663. package/esm/http/xmlable.d.mts.map +1 -1
  664. package/esm/image/image.d.mts +6 -7
  665. package/esm/image/image.d.mts.map +1 -1
  666. package/esm/image/image.mjs.map +1 -1
  667. package/esm/image/index.d.mts +2 -1
  668. package/esm/image/index.mjs +1 -1
  669. package/esm/index.d.mts +38 -6
  670. package/esm/index.mjs +14 -3
  671. package/esm/loader/app-module-importer.d.mts +1 -2
  672. package/esm/loader/app-module-importer.d.mts.map +1 -1
  673. package/esm/localization/index.mjs +1 -1
  674. package/esm/localization/parse-locale-dictionary.d.mts +6 -5
  675. package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
  676. package/esm/localization/parse-locale-dictionary.mjs +2 -1
  677. package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
  678. package/esm/localization/register-locale-dictionary.d.mts +3 -4
  679. package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
  680. package/esm/localization/register-locale-dictionary.mjs +2 -2
  681. package/esm/localization/register-locale-dictionary.mjs.map +1 -1
  682. package/esm/logger/fatal-visibility.d.mts +1 -2
  683. package/esm/logger/fatal-visibility.d.mts.map +1 -1
  684. package/esm/logger/index.d.mts +2 -1
  685. package/esm/logger/index.mjs +1 -1
  686. package/esm/logger/logger.d.mts +1 -3
  687. package/esm/logger/logger.d.mts.map +1 -1
  688. package/esm/logger/types.d.mts +2 -3
  689. package/esm/logger/types.d.mts.map +1 -1
  690. package/esm/mail/config.d.mts +21 -12
  691. package/esm/mail/config.d.mts.map +1 -1
  692. package/esm/mail/config.mjs +16 -1
  693. package/esm/mail/config.mjs.map +1 -1
  694. package/esm/mail/events.d.mts +4 -6
  695. package/esm/mail/events.d.mts.map +1 -1
  696. package/esm/mail/index.d.mts +3 -2
  697. package/esm/mail/index.mjs +2 -2
  698. package/esm/mail/mail.d.mts +1 -3
  699. package/esm/mail/mail.d.mts.map +1 -1
  700. package/esm/mail/mailer-pool.d.mts +5 -7
  701. package/esm/mail/mailer-pool.d.mts.map +1 -1
  702. package/esm/mail/react-mail.d.mts +1 -3
  703. package/esm/mail/react-mail.d.mts.map +1 -1
  704. package/esm/mail/send-mail.d.mts +1 -3
  705. package/esm/mail/send-mail.d.mts.map +1 -1
  706. package/esm/mail/send-mail.mjs +2 -1
  707. package/esm/mail/send-mail.mjs.map +1 -1
  708. package/esm/mail/test-mailbox.d.mts +11 -13
  709. package/esm/mail/test-mailbox.d.mts.map +1 -1
  710. package/esm/mail/types.d.mts +17 -18
  711. package/esm/mail/types.d.mts.map +1 -1
  712. package/esm/manifest/manifest-manager.mjs +1 -1
  713. package/esm/net/index.d.mts +2 -0
  714. package/esm/net/index.mjs +3 -0
  715. package/esm/openapi/build-openapi-document.d.mts +2 -4
  716. package/esm/openapi/build-openapi-document.d.mts.map +1 -1
  717. package/esm/openapi/build-openapi-document.mjs +8 -5
  718. package/esm/openapi/build-openapi-document.mjs.map +1 -1
  719. package/esm/openapi/cast-schema.mjs +1 -1
  720. package/esm/openapi/development-openapi-provider.d.mts +5 -6
  721. package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
  722. package/esm/openapi/error-responses.mjs +28 -2
  723. package/esm/openapi/error-responses.mjs.map +1 -1
  724. package/esm/openapi/index.d.mts +3 -1
  725. package/esm/openapi/index.mjs +1 -1
  726. package/esm/openapi/openapi-child-output.mjs +2 -2
  727. package/esm/openapi/openapi-child-output.mjs.map +1 -1
  728. package/esm/openapi/postman/build-request-body.mjs.map +1 -1
  729. package/esm/openapi/postman/build-request-url.mjs +1 -1
  730. package/esm/openapi/postman/build-request-url.mjs.map +1 -1
  731. package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
  732. package/esm/openapi/postman/example-from-schema.d.mts +1 -3
  733. package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
  734. package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
  735. package/esm/openapi/postman/index.d.mts +2 -1
  736. package/esm/openapi/postman/openapi-to-postman-collection.d.mts +3 -5
  737. package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
  738. package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
  739. package/esm/openapi/postman/postman-types.d.mts +19 -18
  740. package/esm/openapi/postman/postman-types.d.mts.map +1 -1
  741. package/esm/openapi/postman/schema-refs.d.mts +1 -3
  742. package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
  743. package/esm/openapi/postman/schema-refs.mjs.map +1 -1
  744. package/esm/openapi/postman/uuid-v5.mjs +1 -1
  745. package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
  746. package/esm/openapi/request-schemas.mjs.map +1 -1
  747. package/esm/openapi/response-schemas.mjs.map +1 -1
  748. package/esm/openapi/schema-registry.d.mts +1 -0
  749. package/esm/openapi/schema-registry.mjs.map +1 -1
  750. package/esm/openapi/security.mjs +1 -1
  751. package/esm/openapi/security.mjs.map +1 -1
  752. package/esm/openapi/types.d.mts +23 -20
  753. package/esm/openapi/types.d.mts.map +1 -1
  754. package/esm/production/assert-generated-imports.mjs +2 -1
  755. package/esm/production/assert-generated-imports.mjs.map +1 -1
  756. package/esm/production/build-contributions.mjs +1 -1
  757. package/esm/production/bundle-framework-dependencies.mjs +1 -1
  758. package/esm/production/dist-build-manifest.mjs +1 -1
  759. package/esm/production/esbuild-plugins.mjs.map +1 -1
  760. package/esm/production/esbuild-preflight.mjs +1 -1
  761. package/esm/production/production-builder.mjs +14 -5
  762. package/esm/production/production-builder.mjs.map +1 -1
  763. package/esm/production/production-supervisor.mjs +1 -1
  764. package/esm/production/registration-child-runner.mjs +4 -3
  765. package/esm/production/registration-child-runner.mjs.map +1 -1
  766. package/esm/production/resolve-build-config.d.mts +4 -4
  767. package/esm/production/resolve-build-config.d.mts.map +1 -1
  768. package/esm/production/resolve-build-config.mjs +2 -1
  769. package/esm/production/resolve-build-config.mjs.map +1 -1
  770. package/esm/production/route-registration-child.d.mts +1 -1
  771. package/esm/production/route-registration-child.mjs +8 -7
  772. package/esm/production/route-registration-child.mjs.map +1 -1
  773. package/esm/production/route-registration-snapshot.mjs.map +1 -1
  774. package/esm/production/tsconfig-path-aliases.mjs +1 -1
  775. package/esm/react/index.d.mts +1 -3
  776. package/esm/react/index.d.mts.map +1 -1
  777. package/esm/react/index.mjs.map +1 -1
  778. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +3 -4
  779. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  780. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +2 -3
  781. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  782. package/esm/repositories/adapters/cascade/filter-applicator.mjs +10 -9
  783. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  784. package/esm/repositories/adapters/cascade/index.d.mts +2 -1
  785. package/esm/repositories/adapters/cascade/index.mjs +1 -1
  786. package/esm/repositories/contracts/index.d.mts +2 -1
  787. package/esm/repositories/contracts/query-builder.contract.d.mts +4 -6
  788. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  789. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -3
  790. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  791. package/esm/repositories/contracts/types.d.mts +23 -25
  792. package/esm/repositories/contracts/types.d.mts.map +1 -1
  793. package/esm/repositories/index.d.mts +4 -1
  794. package/esm/repositories/index.mjs +1 -1
  795. package/esm/repositories/repository.manager.d.mts +2 -3
  796. package/esm/repositories/repository.manager.d.mts.map +1 -1
  797. package/esm/repositories/repository.manager.mjs +2 -2
  798. package/esm/repositories/repository.manager.mjs.map +1 -1
  799. package/esm/resource/define-resource.d.mts +3 -5
  800. package/esm/resource/define-resource.d.mts.map +1 -1
  801. package/esm/resource/index.d.mts +2 -1
  802. package/esm/resource/index.mjs +1 -1
  803. package/esm/resource/nullable-resource.d.mts +5 -7
  804. package/esm/resource/nullable-resource.d.mts.map +1 -1
  805. package/esm/resource/register-resource.d.mts +1 -3
  806. package/esm/resource/register-resource.d.mts.map +1 -1
  807. package/esm/resource/resource-field-builder.d.mts +1 -3
  808. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  809. package/esm/resource/resource.d.mts +3 -5
  810. package/esm/resource/resource.d.mts.map +1 -1
  811. package/esm/resource/resource.mjs +4 -2
  812. package/esm/resource/resource.mjs.map +1 -1
  813. package/esm/resource/types.d.mts +21 -21
  814. package/esm/resource/types.d.mts.map +1 -1
  815. package/esm/restful/index.d.mts +2 -1
  816. package/esm/restful/index.mjs +1 -1
  817. package/esm/restful/restful.d.mts +11 -31
  818. package/esm/restful/restful.d.mts.map +1 -1
  819. package/esm/restful/restful.mjs.map +1 -1
  820. package/esm/router/build-route-rate-limit.mjs.map +1 -1
  821. package/esm/router/dev-dispatch.mjs +31 -12
  822. package/esm/router/dev-dispatch.mjs.map +1 -1
  823. package/esm/router/index.d.mts +5 -2
  824. package/esm/router/index.mjs +3 -1
  825. package/esm/router/log-request-lifecycle.mjs.map +1 -1
  826. package/esm/router/named-api-routes-with-responses.mjs +2 -1
  827. package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
  828. package/esm/router/normalize-request-path.d.mts +1 -2
  829. package/esm/router/normalize-request-path.d.mts.map +1 -1
  830. package/esm/router/normalize-route-path.d.mts +1 -2
  831. package/esm/router/normalize-route-path.d.mts.map +1 -1
  832. package/esm/router/positional-handler-diagnostics.d.mts +15 -13
  833. package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
  834. package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
  835. package/esm/router/resolve-route-rate-limit.mjs +47 -0
  836. package/esm/router/resolve-route-rate-limit.mjs.map +1 -0
  837. package/esm/router/resolve-route-validation.mjs +19 -0
  838. package/esm/router/resolve-route-validation.mjs.map +1 -0
  839. package/esm/router/route-builder.d.mts +1 -3
  840. package/esm/router/route-builder.d.mts.map +1 -1
  841. package/esm/router/route-guard-names.mjs +30 -0
  842. package/esm/router/route-guard-names.mjs.map +1 -0
  843. package/esm/router/route-name-method-suffix.d.mts +2 -3
  844. package/esm/router/route-name-method-suffix.d.mts.map +1 -1
  845. package/esm/router/route-name-taken-error.d.mts +12 -0
  846. package/esm/router/route-name-taken-error.d.mts.map +1 -0
  847. package/esm/router/route-name-taken-error.mjs +18 -0
  848. package/esm/router/route-name-taken-error.mjs.map +1 -0
  849. package/esm/router/route-registry.d.mts +1 -3
  850. package/esm/router/route-registry.d.mts.map +1 -1
  851. package/esm/router/router.d.mts +34 -17
  852. package/esm/router/router.d.mts.map +1 -1
  853. package/esm/router/router.mjs +74 -39
  854. package/esm/router/router.mjs.map +1 -1
  855. package/esm/router/types.d.mts +156 -37
  856. package/esm/router/types.d.mts.map +1 -1
  857. package/esm/router/unguarded-route-diagnostics.d.mts +38 -0
  858. package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -0
  859. package/esm/router/unguarded-route-diagnostics.mjs +95 -0
  860. package/esm/router/unguarded-route-diagnostics.mjs.map +1 -0
  861. package/esm/socket/index.d.mts +2 -1
  862. package/esm/socket/index.mjs +1 -1
  863. package/esm/socket/types.d.mts +2 -4
  864. package/esm/socket/types.d.mts.map +1 -1
  865. package/esm/socket/utils.d.mts +1 -3
  866. package/esm/socket/utils.d.mts.map +1 -1
  867. package/esm/storage/config.d.mts +4 -6
  868. package/esm/storage/config.d.mts.map +1 -1
  869. package/esm/storage/context/storage-driver-context.d.mts +3 -4
  870. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  871. package/esm/storage/drivers/cloud-driver.d.mts +2 -4
  872. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  873. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  874. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -3
  875. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  876. package/esm/storage/drivers/local-driver.d.mts +2 -3
  877. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  878. package/esm/storage/drivers/local-driver.mjs +8 -3
  879. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  880. package/esm/storage/drivers/r2-driver.d.mts +1 -3
  881. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  882. package/esm/storage/drivers/s3-driver.d.mts +1 -3
  883. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  884. package/esm/storage/index.d.mts +2 -1
  885. package/esm/storage/index.mjs +1 -1
  886. package/esm/storage/local-disk-roots.mjs +24 -0
  887. package/esm/storage/local-disk-roots.mjs.map +1 -0
  888. package/esm/storage/scoped-storage.d.mts +2 -3
  889. package/esm/storage/scoped-storage.d.mts.map +1 -1
  890. package/esm/storage/storage-file.d.mts +1 -3
  891. package/esm/storage/storage-file.d.mts.map +1 -1
  892. package/esm/storage/storage.d.mts +17 -4
  893. package/esm/storage/storage.d.mts.map +1 -1
  894. package/esm/storage/storage.mjs +22 -0
  895. package/esm/storage/storage.mjs.map +1 -1
  896. package/esm/storage/types.d.mts +36 -36
  897. package/esm/storage/types.d.mts.map +1 -1
  898. package/esm/storage/utils/classify-ip-address.d.mts +1 -2
  899. package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
  900. package/esm/storage/utils/contain-path.d.mts +1 -2
  901. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  902. package/esm/storage/utils/mime.d.mts +2 -3
  903. package/esm/storage/utils/mime.d.mts.map +1 -1
  904. package/esm/storage/utils/safe-fetch.d.mts +6 -6
  905. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  906. package/esm/storage/utils/safe-fetch.mjs +3 -3
  907. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  908. package/esm/storage/utils/storage-capability-error.d.mts +1 -3
  909. package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
  910. package/esm/storage/utils/storage-error.d.mts +2 -3
  911. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  912. package/esm/storage/utils/storage-not-initialized-error.d.mts +3 -2
  913. package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
  914. package/esm/storage/utils/storage-not-initialized-error.mjs +1 -0
  915. package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
  916. package/esm/tests/authenticated-test-client.d.mts +31 -0
  917. package/esm/tests/authenticated-test-client.d.mts.map +1 -0
  918. package/esm/tests/authenticated-test-client.mjs +40 -0
  919. package/esm/tests/authenticated-test-client.mjs.map +1 -0
  920. package/esm/tests/factories.d.mts +74 -0
  921. package/esm/tests/factories.d.mts.map +1 -0
  922. package/esm/tests/factories.mjs +105 -0
  923. package/esm/tests/factories.mjs.map +1 -0
  924. package/esm/tests/fakes/cache-fake.d.mts +34 -0
  925. package/esm/tests/fakes/cache-fake.d.mts.map +1 -0
  926. package/esm/tests/fakes/cache-fake.mjs +79 -0
  927. package/esm/tests/fakes/cache-fake.mjs.map +1 -0
  928. package/esm/tests/fakes/clock-fake.d.mts +37 -0
  929. package/esm/tests/fakes/clock-fake.d.mts.map +1 -0
  930. package/esm/tests/fakes/clock-fake.mjs +69 -0
  931. package/esm/tests/fakes/clock-fake.mjs.map +1 -0
  932. package/esm/tests/fakes/fake-assertion-error.d.mts +12 -0
  933. package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -0
  934. package/esm/tests/fakes/fake-assertion-error.mjs +20 -0
  935. package/esm/tests/fakes/fake-assertion-error.mjs.map +1 -0
  936. package/esm/tests/fakes/ids-fake.d.mts +23 -0
  937. package/esm/tests/fakes/ids-fake.d.mts.map +1 -0
  938. package/esm/tests/fakes/ids-fake.mjs +57 -0
  939. package/esm/tests/fakes/ids-fake.mjs.map +1 -0
  940. package/esm/tests/fakes/index.d.mts +9 -0
  941. package/esm/tests/fakes/index.mjs +10 -0
  942. package/esm/tests/fakes/mail-fake.d.mts +49 -0
  943. package/esm/tests/fakes/mail-fake.d.mts.map +1 -0
  944. package/esm/tests/fakes/mail-fake.mjs +111 -0
  945. package/esm/tests/fakes/mail-fake.mjs.map +1 -0
  946. package/esm/tests/fakes/queue-fake.d.mts +56 -0
  947. package/esm/tests/fakes/queue-fake.d.mts.map +1 -0
  948. package/esm/tests/fakes/queue-fake.mjs +134 -0
  949. package/esm/tests/fakes/queue-fake.mjs.map +1 -0
  950. package/esm/tests/fakes/storage-fake.d.mts +35 -0
  951. package/esm/tests/fakes/storage-fake.d.mts.map +1 -0
  952. package/esm/tests/fakes/storage-fake.mjs +122 -0
  953. package/esm/tests/fakes/storage-fake.mjs.map +1 -0
  954. package/esm/tests/fakes/test-fakes.d.mts +38 -0
  955. package/esm/tests/fakes/test-fakes.d.mts.map +1 -0
  956. package/esm/tests/fakes/test-fakes.mjs +90 -0
  957. package/esm/tests/fakes/test-fakes.mjs.map +1 -0
  958. package/esm/tests/index.d.mts +15 -2
  959. package/esm/tests/index.mjs +15 -2
  960. package/esm/tests/snapshot-response.d.mts +33 -0
  961. package/esm/tests/snapshot-response.d.mts.map +1 -0
  962. package/esm/tests/snapshot-response.mjs +42 -0
  963. package/esm/tests/snapshot-response.mjs.map +1 -0
  964. package/esm/tests/start-http-development-server.d.mts +25 -5
  965. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  966. package/esm/tests/start-http-development-server.mjs +41 -8
  967. package/esm/tests/start-http-development-server.mjs.map +1 -1
  968. package/esm/tests/test-connectors-selection.d.mts +2 -2
  969. package/esm/tests/test-connectors-selection.d.mts.map +1 -1
  970. package/esm/tests/test-connectors-selection.mjs +1 -1
  971. package/esm/tests/test-helpers.d.mts +28 -10
  972. package/esm/tests/test-helpers.d.mts.map +1 -1
  973. package/esm/tests/test-helpers.mjs +40 -27
  974. package/esm/tests/test-helpers.mjs.map +1 -1
  975. package/esm/tests/test-http-server.d.mts +66 -0
  976. package/esm/tests/test-http-server.d.mts.map +1 -0
  977. package/esm/tests/test-http-server.mjs +119 -0
  978. package/esm/tests/test-http-server.mjs.map +1 -0
  979. package/esm/tests/test-lifecycle-state.mjs +1 -1
  980. package/esm/tests/vitest-setup.d.mts +17 -7
  981. package/esm/tests/vitest-setup.d.mts.map +1 -1
  982. package/esm/tests/vitest-setup.mjs +12 -4
  983. package/esm/tests/vitest-setup.mjs.map +1 -1
  984. package/esm/tooling/agents-md/agents-md-markers.d.mts +26 -0
  985. package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -0
  986. package/esm/tooling/agents-md/agents-md-markers.mjs +60 -0
  987. package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -0
  988. package/esm/tooling/agents-md/agents-md-refresher.d.mts +43 -0
  989. package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -0
  990. package/esm/tooling/agents-md/agents-md-refresher.mjs +72 -0
  991. package/esm/tooling/agents-md/agents-md-refresher.mjs.map +1 -0
  992. package/esm/tooling/agents-md/index.mjs +7 -0
  993. package/esm/tooling/agents-md/installed-skills.d.mts +34 -0
  994. package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -0
  995. package/esm/tooling/agents-md/installed-skills.mjs +74 -0
  996. package/esm/tooling/agents-md/installed-skills.mjs.map +1 -0
  997. package/esm/tooling/agents-md/render-agents-md.d.mts +34 -0
  998. package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -0
  999. package/esm/tooling/agents-md/render-agents-md.mjs +195 -0
  1000. package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -0
  1001. package/esm/tooling/agents-md/write-agents-md.d.mts +38 -0
  1002. package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -0
  1003. package/esm/tooling/agents-md/write-agents-md.mjs +49 -0
  1004. package/esm/tooling/agents-md/write-agents-md.mjs.map +1 -0
  1005. package/esm/tooling/board/board-message.d.mts +29 -0
  1006. package/esm/tooling/board/board-message.d.mts.map +1 -0
  1007. package/esm/tooling/board/board-message.mjs +86 -0
  1008. package/esm/tooling/board/board-message.mjs.map +1 -0
  1009. package/esm/tooling/board/board.d.mts +121 -0
  1010. package/esm/tooling/board/board.d.mts.map +1 -0
  1011. package/esm/tooling/board/board.mjs +407 -0
  1012. package/esm/tooling/board/board.mjs.map +1 -0
  1013. package/esm/tooling/board/board.types.d.mts +81 -0
  1014. package/esm/tooling/board/board.types.d.mts.map +1 -0
  1015. package/esm/tooling/board/board.types.mjs +54 -0
  1016. package/esm/tooling/board/board.types.mjs.map +1 -0
  1017. package/esm/tooling/check/changed-files.d.mts +31 -0
  1018. package/esm/tooling/check/changed-files.d.mts.map +1 -0
  1019. package/esm/tooling/check/changed-files.mjs +73 -0
  1020. package/esm/tooling/check/changed-files.mjs.map +1 -0
  1021. package/esm/tooling/check/check-report.types.d.mts +67 -0
  1022. package/esm/tooling/check/check-report.types.d.mts.map +1 -0
  1023. package/esm/tooling/check/check-report.types.mjs +37 -0
  1024. package/esm/tooling/check/check-report.types.mjs.map +1 -0
  1025. package/esm/tooling/check/code-style-conventions.mjs +106 -0
  1026. package/esm/tooling/check/code-style-conventions.mjs.map +1 -0
  1027. package/esm/tooling/check/conventions-step.d.mts +32 -0
  1028. package/esm/tooling/check/conventions-step.d.mts.map +1 -0
  1029. package/esm/tooling/check/conventions-step.mjs +173 -0
  1030. package/esm/tooling/check/conventions-step.mjs.map +1 -0
  1031. package/esm/tooling/check/environment-step.d.mts +16 -0
  1032. package/esm/tooling/check/environment-step.d.mts.map +1 -0
  1033. package/esm/tooling/check/environment-step.mjs +78 -0
  1034. package/esm/tooling/check/environment-step.mjs.map +1 -0
  1035. package/esm/tooling/check/index.mjs +10 -0
  1036. package/esm/tooling/check/lint-step.d.mts +18 -0
  1037. package/esm/tooling/check/lint-step.d.mts.map +1 -0
  1038. package/esm/tooling/check/lint-step.mjs +112 -0
  1039. package/esm/tooling/check/lint-step.mjs.map +1 -0
  1040. package/esm/tooling/check/request-input.mjs +132 -0
  1041. package/esm/tooling/check/request-input.mjs.map +1 -0
  1042. package/esm/tooling/check/run-check.d.mts +43 -0
  1043. package/esm/tooling/check/run-check.d.mts.map +1 -0
  1044. package/esm/tooling/check/run-check.mjs +192 -0
  1045. package/esm/tooling/check/run-check.mjs.map +1 -0
  1046. package/esm/tooling/check/run-tests.d.mts +55 -0
  1047. package/esm/tooling/check/run-tests.d.mts.map +1 -0
  1048. package/esm/tooling/check/run-tests.mjs +93 -0
  1049. package/esm/tooling/check/run-tests.mjs.map +1 -0
  1050. package/esm/tooling/check/security-conventions.mjs +650 -0
  1051. package/esm/tooling/check/security-conventions.mjs.map +1 -0
  1052. package/esm/tooling/check/source-ast.mjs +155 -0
  1053. package/esm/tooling/check/source-ast.mjs.map +1 -0
  1054. package/esm/tooling/check/source-files.mjs +27 -0
  1055. package/esm/tooling/check/source-files.mjs.map +1 -0
  1056. package/esm/tooling/check/tests-step.d.mts +33 -0
  1057. package/esm/tooling/check/tests-step.d.mts.map +1 -0
  1058. package/esm/tooling/check/tests-step.mjs +177 -0
  1059. package/esm/tooling/check/tests-step.mjs.map +1 -0
  1060. package/esm/tooling/dev-state/dev-server-state.d.mts +43 -0
  1061. package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -0
  1062. package/esm/tooling/dev-state/dev-server-state.mjs +67 -0
  1063. package/esm/tooling/dev-state/dev-server-state.mjs.map +1 -0
  1064. package/esm/tooling/devtools/devtools-client.d.mts +100 -0
  1065. package/esm/tooling/devtools/devtools-client.d.mts.map +1 -0
  1066. package/esm/tooling/devtools/devtools-client.mjs +155 -0
  1067. package/esm/tooling/devtools/devtools-client.mjs.map +1 -0
  1068. package/esm/tooling/generate/generation.d.mts +90 -0
  1069. package/esm/tooling/generate/generation.d.mts.map +1 -0
  1070. package/esm/tooling/generate/generation.mjs +127 -0
  1071. package/esm/tooling/generate/generation.mjs.map +1 -0
  1072. package/esm/tooling/generate/generator-spec.d.mts +57 -0
  1073. package/esm/tooling/generate/generator-spec.d.mts.map +1 -0
  1074. package/esm/tooling/generate/generator-spec.mjs +102 -0
  1075. package/esm/tooling/generate/generator-spec.mjs.map +1 -0
  1076. package/esm/tooling/generate/index.mjs +6 -0
  1077. package/esm/tooling/generate/project-files.mjs +121 -0
  1078. package/esm/tooling/generate/project-files.mjs.map +1 -0
  1079. package/esm/tooling/generate/run-cli.d.mts +43 -0
  1080. package/esm/tooling/generate/run-cli.d.mts.map +1 -0
  1081. package/esm/tooling/generate/run-cli.mjs +93 -0
  1082. package/esm/tooling/generate/run-cli.mjs.map +1 -0
  1083. package/esm/tooling/generate/unified-diff.d.mts +40 -0
  1084. package/esm/tooling/generate/unified-diff.d.mts.map +1 -0
  1085. package/esm/tooling/generate/unified-diff.mjs +161 -0
  1086. package/esm/tooling/generate/unified-diff.mjs.map +1 -0
  1087. package/esm/tooling/index.d.mts +42 -0
  1088. package/esm/tooling/index.mjs +45 -0
  1089. package/esm/tooling/inspect/boot-for-inspect.d.mts +23 -0
  1090. package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -0
  1091. package/esm/tooling/inspect/boot-for-inspect.mjs +63 -0
  1092. package/esm/tooling/inspect/boot-for-inspect.mjs.map +1 -0
  1093. package/esm/tooling/inspect/collect-config.mjs +77 -0
  1094. package/esm/tooling/inspect/collect-config.mjs.map +1 -0
  1095. package/esm/tooling/inspect/collect-models.d.mts +10 -0
  1096. package/esm/tooling/inspect/collect-models.d.mts.map +1 -0
  1097. package/esm/tooling/inspect/collect-models.mjs +154 -0
  1098. package/esm/tooling/inspect/collect-models.mjs.map +1 -0
  1099. package/esm/tooling/inspect/collect-packages.d.mts +9 -0
  1100. package/esm/tooling/inspect/collect-packages.d.mts.map +1 -0
  1101. package/esm/tooling/inspect/collect-packages.mjs +157 -0
  1102. package/esm/tooling/inspect/collect-packages.mjs.map +1 -0
  1103. package/esm/tooling/inspect/collect-pages.mjs +108 -0
  1104. package/esm/tooling/inspect/collect-pages.mjs.map +1 -0
  1105. package/esm/tooling/inspect/collect-routes.mjs +168 -0
  1106. package/esm/tooling/inspect/collect-routes.mjs.map +1 -0
  1107. package/esm/tooling/inspect/event-recorder.d.mts +37 -0
  1108. package/esm/tooling/inspect/event-recorder.d.mts.map +1 -0
  1109. package/esm/tooling/inspect/event-recorder.mjs +91 -0
  1110. package/esm/tooling/inspect/event-recorder.mjs.map +1 -0
  1111. package/esm/tooling/inspect/index.d.mts +8 -0
  1112. package/esm/tooling/inspect/index.mjs +7 -0
  1113. package/esm/tooling/inspect/inspect-app.d.mts +62 -0
  1114. package/esm/tooling/inspect/inspect-app.d.mts.map +1 -0
  1115. package/esm/tooling/inspect/inspect-app.mjs +92 -0
  1116. package/esm/tooling/inspect/inspect-app.mjs.map +1 -0
  1117. package/esm/tooling/inspect/inspect-report.schema.d.mts +14 -0
  1118. package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -0
  1119. package/esm/tooling/inspect/inspect-report.schema.mjs +463 -0
  1120. package/esm/tooling/inspect/inspect-report.schema.mjs.map +1 -0
  1121. package/esm/tooling/inspect/inspect-report.types.d.mts +228 -0
  1122. package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -0
  1123. package/esm/tooling/inspect/inspect-report.types.mjs +33 -0
  1124. package/esm/tooling/inspect/inspect-report.types.mjs.map +1 -0
  1125. package/esm/tooling/mcp/create-mcp-context.d.mts +29 -0
  1126. package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -0
  1127. package/esm/tooling/mcp/create-mcp-context.mjs +75 -0
  1128. package/esm/tooling/mcp/create-mcp-context.mjs.map +1 -0
  1129. package/esm/tooling/mcp/db-schema.d.mts +50 -0
  1130. package/esm/tooling/mcp/db-schema.d.mts.map +1 -0
  1131. package/esm/tooling/mcp/db-schema.mjs +56 -0
  1132. package/esm/tooling/mcp/db-schema.mjs.map +1 -0
  1133. package/esm/tooling/mcp/docs-search.d.mts +77 -0
  1134. package/esm/tooling/mcp/docs-search.d.mts.map +1 -0
  1135. package/esm/tooling/mcp/docs-search.mjs +178 -0
  1136. package/esm/tooling/mcp/docs-search.mjs.map +1 -0
  1137. package/esm/tooling/mcp/index.mjs +9 -0
  1138. package/esm/tooling/mcp/load-ai-tools.d.mts +61 -0
  1139. package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -0
  1140. package/esm/tooling/mcp/load-ai-tools.mjs +45 -0
  1141. package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -0
  1142. package/esm/tooling/mcp/mcp-tools.d.mts +70 -0
  1143. package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -0
  1144. package/esm/tooling/mcp/mcp-tools.mjs +514 -0
  1145. package/esm/tooling/mcp/mcp-tools.mjs.map +1 -0
  1146. package/esm/tooling/mcp/start-mcp-server.d.mts +63 -0
  1147. package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -0
  1148. package/esm/tooling/mcp/start-mcp-server.mjs +126 -0
  1149. package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -0
  1150. package/esm/tooling/mcp/tool-input.d.mts +75 -0
  1151. package/esm/tooling/mcp/tool-input.d.mts.map +1 -0
  1152. package/esm/tooling/mcp/tool-input.mjs +72 -0
  1153. package/esm/tooling/mcp/tool-input.mjs.map +1 -0
  1154. package/esm/tooling/problem.d.mts +55 -0
  1155. package/esm/tooling/problem.d.mts.map +1 -0
  1156. package/esm/tooling/problem.mjs +28 -0
  1157. package/esm/tooling/problem.mjs.map +1 -0
  1158. package/esm/tooling/syntax/ast.mjs +230 -0
  1159. package/esm/tooling/syntax/ast.mjs.map +1 -0
  1160. package/esm/tooling/syntax/imports.mjs +34 -0
  1161. package/esm/tooling/syntax/imports.mjs.map +1 -0
  1162. package/esm/tooling/trace/trace-report.types.d.mts +85 -0
  1163. package/esm/tooling/trace/trace-report.types.d.mts.map +1 -0
  1164. package/esm/tooling/trace/trace-report.types.mjs +7 -0
  1165. package/esm/tooling/trace/trace-report.types.mjs.map +1 -0
  1166. package/esm/tooling/trace/trace-request.d.mts +90 -0
  1167. package/esm/tooling/trace/trace-request.d.mts.map +1 -0
  1168. package/esm/tooling/trace/trace-request.mjs +241 -0
  1169. package/esm/tooling/trace/trace-request.mjs.map +1 -0
  1170. package/esm/tooling/typecheck/index.mjs +3 -0
  1171. package/esm/tooling/typecheck/run-typecheck.d.mts +26 -0
  1172. package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -0
  1173. package/esm/tooling/typecheck/run-typecheck.mjs +90 -0
  1174. package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -0
  1175. package/esm/tooling/typescript/compiler.d.mts +31 -0
  1176. package/esm/tooling/typescript/compiler.d.mts.map +1 -0
  1177. package/esm/tooling/typescript/compiler.mjs +120 -0
  1178. package/esm/tooling/typescript/compiler.mjs.map +1 -0
  1179. package/esm/updater/update-warlock-packages.mjs +3 -2
  1180. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  1181. package/esm/upgrade/codemods/head-viewport.mjs +46 -0
  1182. package/esm/upgrade/codemods/head-viewport.mjs.map +1 -0
  1183. package/esm/upgrade/codemods/helpers.mjs +81 -0
  1184. package/esm/upgrade/codemods/helpers.mjs.map +1 -0
  1185. package/esm/upgrade/codemods/index.mjs +34 -0
  1186. package/esm/upgrade/codemods/index.mjs.map +1 -0
  1187. package/esm/upgrade/codemods/logger-sync-calls.mjs +57 -0
  1188. package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -0
  1189. package/esm/upgrade/codemods/package-json.mjs +122 -0
  1190. package/esm/upgrade/codemods/package-json.mjs.map +1 -0
  1191. package/esm/upgrade/codemods/request-log-snapshot.mjs +82 -0
  1192. package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -0
  1193. package/esm/upgrade/codemods/review-sites.mjs +262 -0
  1194. package/esm/upgrade/codemods/review-sites.mjs.map +1 -0
  1195. package/esm/upgrade/diff.mjs +119 -0
  1196. package/esm/upgrade/diff.mjs.map +1 -0
  1197. package/esm/upgrade/format-upgrade-report.mjs +32 -0
  1198. package/esm/upgrade/format-upgrade-report.mjs.map +1 -0
  1199. package/esm/upgrade/load-ts-morph.mjs +49 -0
  1200. package/esm/upgrade/load-ts-morph.mjs.map +1 -0
  1201. package/esm/upgrade/notes.mjs +16 -0
  1202. package/esm/upgrade/notes.mjs.map +1 -0
  1203. package/esm/upgrade/run-upgrade.mjs +246 -0
  1204. package/esm/upgrade/run-upgrade.mjs.map +1 -0
  1205. package/esm/upgrade/upgrade-command.action.mjs +37 -0
  1206. package/esm/upgrade/upgrade-command.action.mjs.map +1 -0
  1207. package/esm/upgrade/version.mjs +39 -0
  1208. package/esm/upgrade/version.mjs.map +1 -0
  1209. package/esm/use-cases/index.d.mts +2 -1
  1210. package/esm/use-cases/index.mjs +1 -1
  1211. package/esm/use-cases/types.d.mts +116 -63
  1212. package/esm/use-cases/types.d.mts.map +1 -1
  1213. package/esm/use-cases/use-case-broadcast.d.mts +1 -3
  1214. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  1215. package/esm/use-cases/use-case-events.d.mts +3 -5
  1216. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  1217. package/esm/use-cases/use-case-pipeline.d.mts +6 -6
  1218. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  1219. package/esm/use-cases/use-case.d.mts +2 -4
  1220. package/esm/use-cases/use-case.d.mts.map +1 -1
  1221. package/esm/use-cases/use-case.errors.d.mts +1 -3
  1222. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  1223. package/esm/use-cases/use-cases-registry.d.mts +8 -10
  1224. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  1225. package/esm/use-cases/use-cases-registry.mjs.map +1 -1
  1226. package/esm/utils/app-log.d.mts +1 -2
  1227. package/esm/utils/app-log.d.mts.map +1 -1
  1228. package/esm/utils/clock.d.mts +35 -0
  1229. package/esm/utils/clock.d.mts.map +1 -0
  1230. package/esm/utils/clock.mjs +27 -0
  1231. package/esm/utils/clock.mjs.map +1 -0
  1232. package/esm/utils/database-log.d.mts +3 -4
  1233. package/esm/utils/database-log.d.mts.map +1 -1
  1234. package/esm/utils/environment.d.mts +4 -5
  1235. package/esm/utils/environment.d.mts.map +1 -1
  1236. package/esm/utils/framework-vesion.mjs +1 -1
  1237. package/esm/utils/framework-vesion.mjs.map +1 -1
  1238. package/esm/utils/get-localized.d.mts +2 -3
  1239. package/esm/utils/get-localized.d.mts.map +1 -1
  1240. package/esm/utils/ids.d.mts +35 -0
  1241. package/esm/utils/ids.d.mts.map +1 -0
  1242. package/esm/utils/ids.mjs +33 -0
  1243. package/esm/utils/ids.mjs.map +1 -0
  1244. package/esm/utils/index.d.mts +5 -1
  1245. package/esm/utils/index.mjs +4 -1
  1246. package/esm/utils/normalized-path.d.mts +1 -2
  1247. package/esm/utils/normalized-path.d.mts.map +1 -1
  1248. package/esm/utils/npm-registry.d.mts +1 -2
  1249. package/esm/utils/npm-registry.d.mts.map +1 -1
  1250. package/esm/utils/paths.d.mts +13 -14
  1251. package/esm/utils/paths.d.mts.map +1 -1
  1252. package/esm/utils/paths.mjs +2 -2
  1253. package/esm/utils/paths.mjs.map +1 -1
  1254. package/esm/utils/promise-all-object.d.mts +1 -2
  1255. package/esm/utils/promise-all-object.d.mts.map +1 -1
  1256. package/esm/utils/queue.d.mts +1 -2
  1257. package/esm/utils/queue.d.mts.map +1 -1
  1258. package/esm/utils/runtime.d.mts +60 -0
  1259. package/esm/utils/runtime.d.mts.map +1 -0
  1260. package/esm/utils/runtime.mjs +85 -0
  1261. package/esm/utils/runtime.mjs.map +1 -0
  1262. package/esm/utils/sleep.d.mts +1 -2
  1263. package/esm/utils/sleep.d.mts.map +1 -1
  1264. package/esm/utils/sluggable.d.mts +1 -3
  1265. package/esm/utils/sluggable.d.mts.map +1 -1
  1266. package/esm/utils/to-json.d.mts +1 -2
  1267. package/esm/utils/to-json.d.mts.map +1 -1
  1268. package/esm/utils/types.d.mts +1 -2
  1269. package/esm/utils/types.d.mts.map +1 -1
  1270. package/esm/utils/urls.d.mts +5 -6
  1271. package/esm/utils/urls.d.mts.map +1 -1
  1272. package/esm/utils/version-compare.d.mts +1 -2
  1273. package/esm/utils/version-compare.d.mts.map +1 -1
  1274. package/esm/validation/database/exists-except-current-id.d.mts +2 -3
  1275. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  1276. package/esm/validation/database/exists-except-current-user.d.mts +2 -3
  1277. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  1278. package/esm/validation/database/index.d.mts +2 -1
  1279. package/esm/validation/database/index.mjs +1 -1
  1280. package/esm/validation/database/types.d.mts +14 -10
  1281. package/esm/validation/database/types.d.mts.map +1 -1
  1282. package/esm/validation/database/unique-except-current-id.d.mts +2 -3
  1283. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  1284. package/esm/validation/database/unique-except-current-user.d.mts +2 -3
  1285. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  1286. package/esm/validation/file/file.d.mts +4 -6
  1287. package/esm/validation/file/file.d.mts.map +1 -1
  1288. package/esm/validation/file/index.d.mts +2 -1
  1289. package/esm/validation/file/index.mjs +1 -1
  1290. package/esm/validation/index.d.mts +6 -2
  1291. package/esm/validation/index.mjs +1 -1
  1292. package/esm/validation/plugins/index.mjs +1 -1
  1293. package/esm/validation/types.d.mts +61 -4
  1294. package/esm/validation/types.d.mts.map +1 -1
  1295. package/esm/validation/validateAll.mjs +21 -4
  1296. package/esm/validation/validateAll.mjs.map +1 -1
  1297. package/esm/validation/validation-failure-status.mjs +15 -0
  1298. package/esm/validation/validation-failure-status.mjs.map +1 -0
  1299. package/esm/validation/validators/file-validator.d.mts +2 -20
  1300. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  1301. package/esm/validation/validators/index.d.mts +2 -1
  1302. package/esm/validation/validators/index.mjs +1 -1
  1303. package/esm/vite/lower-stage3-decorators.d.mts +2 -3
  1304. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  1305. package/esm/warlock-config/bundle-config.mjs +1 -1
  1306. package/esm/warlock-config/define-config.d.mts +1 -3
  1307. package/esm/warlock-config/define-config.d.mts.map +1 -1
  1308. package/esm/warlock-config/define-config.mjs +3 -2
  1309. package/esm/warlock-config/define-config.mjs.map +1 -1
  1310. package/esm/warlock-config/index.d.mts +2 -1
  1311. package/esm/warlock-config/index.mjs +1 -1
  1312. package/esm/warlock-config/types.d.mts +31 -6
  1313. package/esm/warlock-config/types.d.mts.map +1 -1
  1314. package/esm/warlock-config/warlock-config.manager.d.mts +5 -7
  1315. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  1316. package/esm/warlock-config/warlock-config.manager.mjs +2 -1
  1317. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  1318. package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
  1319. package/llms-full.txt +3211 -731
  1320. package/llms.txt +16 -6
  1321. package/package.json +47 -15
  1322. package/schemas/inspect-report.schema.json +554 -0
  1323. package/skills/README.md +9 -0
  1324. package/skills/add-connector/SKILL.md +26 -38
  1325. package/skills/benchmark-code/SKILL.md +30 -24
  1326. package/skills/build-restful/SKILL.md +14 -14
  1327. package/skills/build-url/SKILL.md +18 -18
  1328. package/skills/configure-app/SKILL.md +107 -14
  1329. package/skills/create-controller/SKILL.md +25 -12
  1330. package/skills/create-module/SKILL.md +10 -3
  1331. package/skills/define-resource/SKILL.md +32 -29
  1332. package/skills/encrypt-data/SKILL.md +21 -19
  1333. package/skills/generate-openapi/SKILL.md +50 -24
  1334. package/skills/hash-password/SKILL.md +2 -2
  1335. package/skills/health-checks/SKILL.md +24 -7
  1336. package/skills/index.md +11 -4
  1337. package/skills/lower-stage3-decorators/SKILL.md +4 -4
  1338. package/skills/make-endpoint/SKILL.md +110 -0
  1339. package/skills/model-factories/SKILL.md +92 -0
  1340. package/skills/process-image/SKILL.md +32 -30
  1341. package/skills/register-route/SKILL.md +109 -10
  1342. package/skills/report-framework-issue.md +154 -0
  1343. package/skills/request-memo/SKILL.md +1 -1
  1344. package/skills/request-tracing/SKILL.md +4 -1
  1345. package/skills/resolve-path/SKILL.md +45 -44
  1346. package/skills/retry-operation/SKILL.md +20 -11
  1347. package/skills/run-app/SKILL.md +107 -22
  1348. package/skills/send-response/SKILL.md +179 -14
  1349. package/skills/store-file/SKILL.md +93 -53
  1350. package/skills/test-fakes/SKILL.md +123 -0
  1351. package/skills/test-http/SKILL.md +125 -21
  1352. package/skills/test-service/SKILL.md +41 -1
  1353. package/skills/update-packages/SKILL.md +29 -18
  1354. package/skills/upgrade-from-5-29/SKILL.md +454 -0
  1355. package/skills/upload-file/SKILL.md +31 -33
  1356. package/skills/use-app-context/SKILL.md +38 -31
  1357. package/skills/use-middleware/SKILL.md +45 -25
  1358. package/skills/use-model-transformers/SKILL.md +37 -28
  1359. package/skills/use-repository/SKILL.md +2 -2
  1360. package/skills/validate-input/SKILL.md +72 -28
  1361. package/skills/warlock-agents-md/SKILL.md +96 -0
  1362. package/skills/warlock-board/SKILL.md +123 -0
  1363. package/skills/warlock-check/SKILL.md +133 -0
  1364. package/skills/warlock-conventions/SKILL.md +115 -0
  1365. package/skills/warlock-doctor/SKILL.md +55 -22
  1366. package/skills/warlock-inspect/SKILL.md +134 -0
  1367. package/skills/warlock-mcp/SKILL.md +120 -0
  1368. package/skills/warlock-routes/SKILL.md +18 -11
  1369. package/skills/warlock-trace/SKILL.md +81 -0
  1370. package/skills/wire-socket/SKILL.md +8 -8
  1371. package/skills/write-seeder/SKILL.md +46 -32
  1372. package/skills/write-use-case/SKILL.md +40 -27
  1373. package/esm/http/uploads/matches-if-none-match.mjs +0 -13
  1374. package/esm/http/uploads/matches-if-none-match.mjs.map +0 -1
@@ -125,5 +125,5 @@ function printRoutesTable(rows) {
125
125
  }
126
126
 
127
127
  //#endregion
128
- export { printRoutesTable };
128
+ export { printRoutesTable, routesSummary };
129
129
  //# sourceMappingURL=format-routes-table.mjs.map
@@ -88,5 +88,5 @@ function sortRouteRows(rows) {
88
88
  }
89
89
 
90
90
  //#endregion
91
- export { filterRouteRows, methodRank, sortRouteRows, toRouteRow };
91
+ export { METHOD_ORDER, filterRouteRows, methodRank, sortRouteRows, toRouteRow };
92
92
  //# sourceMappingURL=route-row.mjs.map
@@ -1,9 +1,9 @@
1
1
  import { router } from "../../../router/router.mjs";
2
- import { resolveBuildConfig } from "../../../production/resolve-build-config.mjs";
3
2
  import { bootForDiagnostics } from "../doctor/boot-for-diagnostics.mjs";
3
+ import { resolveBuildConfig } from "../../../production/resolve-build-config.mjs";
4
4
  import { comparePageRoutes, diffPageRoutes } from "./diff-page-routes.mjs";
5
5
  import path from "node:path";
6
- import fs from "node:fs";
6
+ import fsSync from "node:fs";
7
7
 
8
8
  //#region ../../packages/core/src/cli/commands/routes/routes-diff.action.ts
9
9
  const SNAPSHOT_FILE = "page-routes.manifest.json";
@@ -26,7 +26,7 @@ function snapshotPath() {
26
26
  function readSnapshot(file) {
27
27
  let raw;
28
28
  try {
29
- raw = fs.readFileSync(file, "utf-8");
29
+ raw = fsSync.readFileSync(file, "utf-8");
30
30
  } catch {
31
31
  throw new Error(`Cannot compare page routes: no build snapshot exists at "${file}". Run \`warlock build\` successfully, then run \`warlock routes:diff\` again.`);
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routes-diff.action.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/cli/commands/routes/routes-diff.action.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveBuildConfig } from \"../../../production/resolve-build-config\";\nimport { router } from \"../../../router/router\";\nimport type { Route } from \"../../../router/types\";\nimport { bootForDiagnostics } from \"../doctor/boot-for-diagnostics\";\nimport { comparePageRoutes, diffPageRoutes, type PageRoute } from \"./diff-page-routes\";\n\ntype PageRoutesSnapshot = {\n version: 1;\n routes: PageRoute[];\n};\n\nconst SNAPSHOT_FILE = \"page-routes.manifest.json\";\n\n/**\n * What a clean `warlock routes:diff` does and does NOT prove, printed on a\n * clean run so the guarantee is stated where it is relied on.\n */\nconst CLEAN_RUN_LIMIT =\n \"Note: page names are compared as DERIVED by the build, so a clean diff does not prove \" +\n \"that no route name collided at registration (the router appends `.<method>` to a name \" +\n \"already claimed by another method). Run `warlock routes` to see the registered names.\";\n\nfunction routeFromLive(route: Route): PageRoute {\n return {\n method: route.method.toUpperCase() as \"GET\",\n path: route.path,\n name: route.name ?? \"\",\n source: route.sourceFile ?? \"\",\n };\n}\n\nfunction snapshotPath(): string {\n return path.join(resolveBuildConfig().outdir, SNAPSHOT_FILE);\n}\n\nfunction readSnapshot(file: string): PageRoutesSnapshot {\n let raw: string;\n\n try {\n raw = fs.readFileSync(file, \"utf-8\");\n } catch {\n throw new Error(\n `Cannot compare page routes: no build snapshot exists at \"${file}\". Run \\`warlock build\\` successfully, then run \\`warlock routes:diff\\` again.`,\n );\n }\n\n try {\n const parsed: unknown = JSON.parse(raw);\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n (parsed as { version?: unknown }).version !== 1 ||\n !Array.isArray((parsed as { routes?: unknown }).routes) ||\n !(parsed as { routes: unknown[] }).routes.every(\n (route) =>\n typeof route === \"object\" &&\n route !== null &&\n (route as PageRoute).method === \"GET\" &&\n typeof (route as PageRoute).path === \"string\" &&\n typeof (route as PageRoute).name === \"string\" &&\n typeof (route as PageRoute).source === \"string\",\n )\n ) {\n throw new Error(\"invalid shape\");\n }\n\n return parsed as PageRoutesSnapshot;\n } catch {\n throw new Error(\n `Cannot compare page routes: build snapshot \"${file}\" is malformed. Run \\`warlock build\\` successfully to replace it, then retry.`,\n );\n }\n}\n\nfunction printRoute(prefix: string, route: PageRoute): void {\n const source = route.source ? ` (${route.source})` : \"\";\n console.log(`${prefix} GET ${route.path} ${route.name}${source}`);\n}\n\n/**\n * Compare the last successful production page surface with the live dev\n * surface.\n *\n * The comparison itself lives in `diff-page-routes.ts`, which also documents\n * why the route-name method suffix is the one registration-time difference the\n * build-time manifest cannot record — and therefore what a clean run of this\n * command does not prove.\n */\nexport async function routesDiffCommandAction(): Promise<void> {\n const snapshot = readSnapshot(snapshotPath());\n const context = await bootForDiagnostics();\n\n if (\n !context.booted ||\n context.moduleFailures.length > 0 ||\n context.connectors.failures.length > 0 ||\n context.connectors.registrationError !== undefined\n ) {\n const details = [\n ...context.moduleFailures.map(({ file, message }) => `${file}: ${message}`),\n ...context.connectors.failures.map(({ name, message }) => `${name}: ${message}`),\n ...(context.connectors.registrationError ? [context.connectors.registrationError] : []),\n ];\n throw new Error(\n `Cannot compare page routes because diagnostic boot failed.${details.length ? `\\n${details.join(\"\\n\")}` : \"\"}`,\n );\n }\n\n const live = router\n .list()\n .filter((route) => route.isPage)\n .map(routeFromLive)\n .sort(comparePageRoutes);\n const expected = [...snapshot.routes].sort(comparePageRoutes);\n const { changes, removed, added } = diffPageRoutes(expected, live);\n\n if (changes.length === 0 && removed.length === 0 && added.length === 0) {\n console.log(`Page routes match (${expected.length} routes).`);\n console.log(CLEAN_RUN_LIMIT);\n return;\n }\n\n for (const { before, after } of changes) {\n printRoute(\"changed -\", before);\n printRoute(\" +\", after);\n }\n for (const route of removed) printRoute(\"removed -\", route);\n for (const route of added) printRoute(\"added +\", route);\n\n throw new Error(\n `Page route drift: ${changes.length} changed, ${removed.length} removed, ${added.length} added. Run \\`warlock build\\` after reviewing these changes.`,\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,gBAAgB;;;;;AAMtB,MAAM,kBACJ;AAIF,SAAS,cAAc,OAAyB;CAC9C,OAAO;EACL,QAAQ,MAAM,OAAO,YAAY;EACjC,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ;EACpB,QAAQ,MAAM,cAAc;CAC9B;AACF;AAEA,SAAS,eAAuB;CAC9B,OAAO,KAAK,KAAK,mBAAmB,CAAC,CAAC,QAAQ,aAAa;AAC7D;AAEA,SAAS,aAAa,MAAkC;CACtD,IAAI;CAEJ,IAAI;EACF,MAAM,GAAG,aAAa,MAAM,OAAO;CACrC,QAAQ;EACN,MAAM,IAAI,MACR,4DAA4D,KAAK,+EACnE;CACF;CAEA,IAAI;EACF,MAAM,SAAkB,KAAK,MAAM,GAAG;EAEtC,IACE,OAAO,WAAW,YAClB,WAAW,QACV,OAAiC,YAAY,KAC9C,CAAC,MAAM,QAAS,OAAgC,MAAM,KACtD,CAAE,OAAiC,OAAO,OACvC,UACC,OAAO,UAAU,YACjB,UAAU,QACT,MAAoB,WAAW,SAChC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,WAAW,QAC3C,GAEA,MAAM,IAAI,MAAM,eAAe;EAGjC,OAAO;CACT,QAAQ;EACN,MAAM,IAAI,MACR,+CAA+C,KAAK,8EACtD;CACF;AACF;AAEA,SAAS,WAAW,QAAgB,OAAwB;CAC1D,MAAM,SAAS,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK;CACrD,QAAQ,IAAI,GAAG,OAAO,OAAO,MAAM,KAAK,IAAI,MAAM,OAAO,QAAQ;AACnE;;;;;;;;;;AAWA,eAAsB,0BAAyC;CAC7D,MAAM,WAAW,aAAa,aAAa,CAAC;CAC5C,MAAM,UAAU,MAAM,mBAAmB;CAEzC,IACE,CAAC,QAAQ,UACT,QAAQ,eAAe,SAAS,KAChC,QAAQ,WAAW,SAAS,SAAS,KACrC,QAAQ,WAAW,sBAAsB,QACzC;EACA,MAAM,UAAU;GACd,GAAG,QAAQ,eAAe,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC1E,GAAG,QAAQ,WAAW,SAAS,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC/E,GAAI,QAAQ,WAAW,oBAAoB,CAAC,QAAQ,WAAW,iBAAiB,IAAI,CAAC;EACvF;EACA,MAAM,IAAI,MACR,6DAA6D,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,MAAM,IAC5G;CACF;CAEA,MAAM,OAAO,OACV,KAAK,CAAC,CACN,QAAQ,UAAU,MAAM,MAAM,CAAC,CAC/B,IAAI,aAAa,CAAC,CAClB,KAAK,iBAAiB;CACzB,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,KAAK,iBAAiB;CAC5D,MAAM,EAAE,SAAS,SAAS,UAAU,eAAe,UAAU,IAAI;CAEjE,IAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;EACtE,QAAQ,IAAI,sBAAsB,SAAS,OAAO,UAAU;EAC5D,QAAQ,IAAI,eAAe;EAC3B;CACF;CAEA,KAAK,MAAM,EAAE,QAAQ,WAAW,SAAS;EACvC,WAAW,aAAa,MAAM;EAC9B,WAAW,aAAa,KAAK;CAC/B;CACA,KAAK,MAAM,SAAS,SAAS,WAAW,aAAa,KAAK;CAC1D,KAAK,MAAM,SAAS,OAAO,WAAW,aAAa,KAAK;CAExD,MAAM,IAAI,MACR,qBAAqB,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,MAAM,OAAO,6DAC1F;AACF"}
1
+ {"version":3,"file":"routes-diff.action.mjs","names":["fs"],"sources":["../../../../../../../../../../packages/core/src/cli/commands/routes/routes-diff.action.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveBuildConfig } from \"../../../production/resolve-build-config\";\nimport { router } from \"../../../router/router\";\nimport type { Route } from \"../../../router/types\";\nimport { bootForDiagnostics } from \"../doctor/boot-for-diagnostics\";\nimport { comparePageRoutes, diffPageRoutes, type PageRoute } from \"./diff-page-routes\";\n\ntype PageRoutesSnapshot = {\n version: 1;\n routes: PageRoute[];\n};\n\nconst SNAPSHOT_FILE = \"page-routes.manifest.json\";\n\n/**\n * What a clean `warlock routes:diff` does and does NOT prove, printed on a\n * clean run so the guarantee is stated where it is relied on.\n */\nconst CLEAN_RUN_LIMIT =\n \"Note: page names are compared as DERIVED by the build, so a clean diff does not prove \" +\n \"that no route name collided at registration (the router appends `.<method>` to a name \" +\n \"already claimed by another method). Run `warlock routes` to see the registered names.\";\n\nfunction routeFromLive(route: Route): PageRoute {\n return {\n method: route.method.toUpperCase() as \"GET\",\n path: route.path,\n name: route.name ?? \"\",\n source: route.sourceFile ?? \"\",\n };\n}\n\nfunction snapshotPath(): string {\n return path.join(resolveBuildConfig().outdir, SNAPSHOT_FILE);\n}\n\nfunction readSnapshot(file: string): PageRoutesSnapshot {\n let raw: string;\n\n try {\n raw = fs.readFileSync(file, \"utf-8\");\n } catch {\n throw new Error(\n `Cannot compare page routes: no build snapshot exists at \"${file}\". Run \\`warlock build\\` successfully, then run \\`warlock routes:diff\\` again.`,\n );\n }\n\n try {\n const parsed: unknown = JSON.parse(raw);\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n (parsed as { version?: unknown }).version !== 1 ||\n !Array.isArray((parsed as { routes?: unknown }).routes) ||\n !(parsed as { routes: unknown[] }).routes.every(\n (route) =>\n typeof route === \"object\" &&\n route !== null &&\n (route as PageRoute).method === \"GET\" &&\n typeof (route as PageRoute).path === \"string\" &&\n typeof (route as PageRoute).name === \"string\" &&\n typeof (route as PageRoute).source === \"string\",\n )\n ) {\n throw new Error(\"invalid shape\");\n }\n\n return parsed as PageRoutesSnapshot;\n } catch {\n throw new Error(\n `Cannot compare page routes: build snapshot \"${file}\" is malformed. Run \\`warlock build\\` successfully to replace it, then retry.`,\n );\n }\n}\n\nfunction printRoute(prefix: string, route: PageRoute): void {\n const source = route.source ? ` (${route.source})` : \"\";\n console.log(`${prefix} GET ${route.path} ${route.name}${source}`);\n}\n\n/**\n * Compare the last successful production page surface with the live dev\n * surface.\n *\n * The comparison itself lives in `diff-page-routes.ts`, which also documents\n * why the route-name method suffix is the one registration-time difference the\n * build-time manifest cannot record — and therefore what a clean run of this\n * command does not prove.\n */\nexport async function routesDiffCommandAction(): Promise<void> {\n const snapshot = readSnapshot(snapshotPath());\n const context = await bootForDiagnostics();\n\n if (\n !context.booted ||\n context.moduleFailures.length > 0 ||\n context.connectors.failures.length > 0 ||\n context.connectors.registrationError !== undefined\n ) {\n const details = [\n ...context.moduleFailures.map(({ file, message }) => `${file}: ${message}`),\n ...context.connectors.failures.map(({ name, message }) => `${name}: ${message}`),\n ...(context.connectors.registrationError ? [context.connectors.registrationError] : []),\n ];\n throw new Error(\n `Cannot compare page routes because diagnostic boot failed.${details.length ? `\\n${details.join(\"\\n\")}` : \"\"}`,\n );\n }\n\n const live = router\n .list()\n .filter((route) => route.isPage)\n .map(routeFromLive)\n .sort(comparePageRoutes);\n const expected = [...snapshot.routes].sort(comparePageRoutes);\n const { changes, removed, added } = diffPageRoutes(expected, live);\n\n if (changes.length === 0 && removed.length === 0 && added.length === 0) {\n console.log(`Page routes match (${expected.length} routes).`);\n console.log(CLEAN_RUN_LIMIT);\n return;\n }\n\n for (const { before, after } of changes) {\n printRoute(\"changed -\", before);\n printRoute(\" +\", after);\n }\n for (const route of removed) printRoute(\"removed -\", route);\n for (const route of added) printRoute(\"added +\", route);\n\n throw new Error(\n `Page route drift: ${changes.length} changed, ${removed.length} removed, ${added.length} added. Run \\`warlock build\\` after reviewing these changes.`,\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,gBAAgB;;;;;AAMtB,MAAM,kBACJ;AAIF,SAAS,cAAc,OAAyB;CAC9C,OAAO;EACL,QAAQ,MAAM,OAAO,YAAY;EACjC,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ;EACpB,QAAQ,MAAM,cAAc;CAC9B;AACF;AAEA,SAAS,eAAuB;CAC9B,OAAO,KAAK,KAAK,mBAAmB,CAAC,CAAC,QAAQ,aAAa;AAC7D;AAEA,SAAS,aAAa,MAAkC;CACtD,IAAI;CAEJ,IAAI;EACF,MAAMA,OAAG,aAAa,MAAM,OAAO;CACrC,QAAQ;EACN,MAAM,IAAI,MACR,4DAA4D,KAAK,+EACnE;CACF;CAEA,IAAI;EACF,MAAM,SAAkB,KAAK,MAAM,GAAG;EAEtC,IACE,OAAO,WAAW,YAClB,WAAW,QACV,OAAiC,YAAY,KAC9C,CAAC,MAAM,QAAS,OAAgC,MAAM,KACtD,CAAE,OAAiC,OAAO,OACvC,UACC,OAAO,UAAU,YACjB,UAAU,QACT,MAAoB,WAAW,SAChC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,WAAW,QAC3C,GAEA,MAAM,IAAI,MAAM,eAAe;EAGjC,OAAO;CACT,QAAQ;EACN,MAAM,IAAI,MACR,+CAA+C,KAAK,8EACtD;CACF;AACF;AAEA,SAAS,WAAW,QAAgB,OAAwB;CAC1D,MAAM,SAAS,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK;CACrD,QAAQ,IAAI,GAAG,OAAO,OAAO,MAAM,KAAK,IAAI,MAAM,OAAO,QAAQ;AACnE;;;;;;;;;;AAWA,eAAsB,0BAAyC;CAC7D,MAAM,WAAW,aAAa,aAAa,CAAC;CAC5C,MAAM,UAAU,MAAM,mBAAmB;CAEzC,IACE,CAAC,QAAQ,UACT,QAAQ,eAAe,SAAS,KAChC,QAAQ,WAAW,SAAS,SAAS,KACrC,QAAQ,WAAW,sBAAsB,QACzC;EACA,MAAM,UAAU;GACd,GAAG,QAAQ,eAAe,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC1E,GAAG,QAAQ,WAAW,SAAS,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC/E,GAAI,QAAQ,WAAW,oBAAoB,CAAC,QAAQ,WAAW,iBAAiB,IAAI,CAAC;EACvF;EACA,MAAM,IAAI,MACR,6DAA6D,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,MAAM,IAC5G;CACF;CAEA,MAAM,OAAO,OACV,KAAK,CAAC,CACN,QAAQ,UAAU,MAAM,MAAM,CAAC,CAC/B,IAAI,aAAa,CAAC,CAClB,KAAK,iBAAiB;CACzB,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,KAAK,iBAAiB;CAC5D,MAAM,EAAE,SAAS,SAAS,UAAU,eAAe,UAAU,IAAI;CAEjE,IAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;EACtE,QAAQ,IAAI,sBAAsB,SAAS,OAAO,UAAU;EAC5D,QAAQ,IAAI,eAAe;EAC3B;CACF;CAEA,KAAK,MAAM,EAAE,QAAQ,WAAW,SAAS;EACvC,WAAW,aAAa,MAAM;EAC9B,WAAW,aAAa,KAAK;CAC/B;CACA,KAAK,MAAM,SAAS,SAAS,WAAW,aAAa,KAAK;CAC1D,KAAK,MAAM,SAAS,OAAO,WAAW,aAAa,KAAK;CAExD,MAAM,IAAI,MACR,qBAAqB,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,MAAM,OAAO,6DAC1F;AACF"}
@@ -0,0 +1,131 @@
1
+ import { command } from "../../commands/cli-command.mjs";
2
+ import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { spawn } from "node:child_process";
6
+
7
+ //#region ../../packages/core/src/cli/commands/test.command.ts
8
+ /**
9
+ * Translate `warlock test` options into Vitest arguments. Pure, so the mapping
10
+ * is pinned by a test rather than discovered in CI.
11
+ *
12
+ * Flags used (verified against `vitest --help`, Vitest 4.1):
13
+ * `run`, `related [...filters]`, `--changed [since]`, `--passWithNoTests`,
14
+ * `--reporter <name>`, `--testNamePattern <pattern>`.
15
+ */
16
+ function buildVitestArguments(options) {
17
+ const related = options.related ?? [];
18
+ const args = [];
19
+ if (related.length > 0) {
20
+ args.push("related", ...related, ...options.filters);
21
+ if (!options.watch) args.push("--run");
22
+ } else {
23
+ if (!options.watch) args.push("run");
24
+ args.push(...options.filters);
25
+ }
26
+ if (options.changed || options.since) {
27
+ args.push("--changed");
28
+ if (options.since) args.push(options.since);
29
+ }
30
+ if (related.length > 0 || options.changed || options.since) args.push("--passWithNoTests");
31
+ if (options.testNamePattern) args.push("--testNamePattern", options.testNamePattern);
32
+ if (options.json) args.push("--reporter=json");
33
+ return args;
34
+ }
35
+ /** Read `warlock test`'s parsed CLI input into {@link TestCommandOptions}. */
36
+ function readTestCommandOptions(data) {
37
+ const text = (value) => typeof value === "string" && value.trim() !== "" ? value.trim() : void 0;
38
+ const relatedOption = text(data.options.related);
39
+ return {
40
+ filters: data.args,
41
+ changed: data.options.changed === true,
42
+ since: text(data.options.since),
43
+ related: relatedOption ? relatedOption.split(",").map((file) => file.trim()).filter(Boolean) : void 0,
44
+ watch: data.options.watch === true,
45
+ json: data.options.json === true,
46
+ testNamePattern: text(data.options.testNamePattern) ?? text(data.options.t)
47
+ };
48
+ }
49
+ /**
50
+ * The project's own Vitest entry (`vitest.mjs`), resolved from the project
51
+ * root — never a global or an `npx` download.
52
+ */
53
+ function resolveProjectVitest(projectRoot, resolve = createRequire(path.join(projectRoot, "package.json")).resolve) {
54
+ let manifestPath;
55
+ try {
56
+ manifestPath = resolve("vitest/package.json");
57
+ } catch {
58
+ throw new Error(`Vitest is not installed in ${projectRoot}. Run \`warlock add test\` (or install vitest as a dev dependency) first.`);
59
+ }
60
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
61
+ const bin = typeof manifest.bin === "string" ? manifest.bin : manifest.bin?.vitest;
62
+ const entry = path.join(path.dirname(manifestPath), bin ?? "vitest.mjs");
63
+ if (!existsSync(entry)) throw new Error(`Vitest's entry point was not found at ${entry}. Reinstall vitest.`);
64
+ return entry;
65
+ }
66
+ async function testCommandAction(data) {
67
+ const options = readTestCommandOptions(data);
68
+ const vitest = resolveProjectVitest(process.cwd());
69
+ const args = buildVitestArguments(options);
70
+ const exitCode = await new Promise((resolve, reject) => {
71
+ const child = spawn(process.execPath, [vitest, ...args], {
72
+ cwd: process.cwd(),
73
+ env: {
74
+ ...process.env,
75
+ NODE_ENV: "test"
76
+ },
77
+ stdio: "inherit"
78
+ });
79
+ child.once("error", reject);
80
+ child.once("exit", (code, signal) => resolve(code ?? (signal ? 1 : 0)));
81
+ });
82
+ if (exitCode !== 0) process.exit(exitCode);
83
+ }
84
+ /**
85
+ * `warlock test` — run the project's tests through its own Vitest.
86
+ *
87
+ * @example
88
+ * warlock test # everything, once
89
+ * warlock test --changed # tests affected by uncommitted changes
90
+ * warlock test --changed --since main # ... by changes since main
91
+ * warlock test --related src/app/posts/services/create-post.service.ts
92
+ * warlock test src/app/posts --json # one folder, JSON report on stdout
93
+ */
94
+ const testCommand = command({
95
+ name: "test [filters...]",
96
+ description: "Run the project's tests with Vitest; --changed / --related run only the tests your change affects",
97
+ action: testCommandAction,
98
+ options: [
99
+ {
100
+ text: "--changed",
101
+ description: "Only run tests affected by uncommitted changes (git)",
102
+ type: "boolean"
103
+ },
104
+ {
105
+ text: "--since <ref>",
106
+ description: "With --changed: tests affected by changes since this git ref (e.g. main)"
107
+ },
108
+ {
109
+ text: "--related <files>",
110
+ description: "Comma-separated source files: only run the tests that import them"
111
+ },
112
+ {
113
+ text: "--watch, -w",
114
+ description: "Re-run on change instead of running once",
115
+ type: "boolean"
116
+ },
117
+ {
118
+ text: "--test-name-pattern, -t",
119
+ description: "Only run tests whose name matches this pattern"
120
+ },
121
+ {
122
+ text: "--json",
123
+ description: "Print Vitest's JSON report on stdout",
124
+ type: "boolean"
125
+ }
126
+ ]
127
+ });
128
+
129
+ //#endregion
130
+ export { buildVitestArguments, readTestCommandOptions, resolveProjectVitest, testCommand };
131
+ //# sourceMappingURL=test.command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/test.command.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { command } from \"../../commands/cli-command\";\nimport type { CommandActionData } from \"../../commands/types\";\n\n/** What `warlock test` was asked for. */\nexport type TestCommandOptions = {\n /** Positional filters: file paths or name fragments, passed to Vitest. */\n filters: string[];\n /** Only the tests affected by uncommitted changes (or by changes since `since`). */\n changed?: boolean;\n /** A git ref for `changed`: tests affected by changes since this commit or branch. */\n since?: string;\n /** Only the tests that import these source files, directly or not. */\n related?: string[];\n /** Keep running and re-run on change instead of running once. */\n watch?: boolean;\n /** Print Vitest's JSON report on stdout. */\n json?: boolean;\n /** Only tests whose name matches this pattern. */\n testNamePattern?: string;\n};\n\n/**\n * Translate `warlock test` options into Vitest arguments. Pure, so the mapping\n * is pinned by a test rather than discovered in CI.\n *\n * Flags used (verified against `vitest --help`, Vitest 4.1):\n * `run`, `related [...filters]`, `--changed [since]`, `--passWithNoTests`,\n * `--reporter <name>`, `--testNamePattern <pattern>`.\n */\nexport function buildVitestArguments(options: TestCommandOptions): string[] {\n const related = options.related ?? [];\n const args: string[] = [];\n\n if (related.length > 0) {\n // `vitest related` watches by default; `--run` makes it run once.\n args.push(\"related\", ...related, ...options.filters);\n\n if (!options.watch) args.push(\"--run\");\n } else {\n if (!options.watch) args.push(\"run\");\n\n args.push(...options.filters);\n }\n\n if (options.changed || options.since) {\n args.push(\"--changed\");\n\n if (options.since) args.push(options.since);\n }\n\n // \"Run what my change affects\" finding nothing to run is a pass, not an error.\n if (related.length > 0 || options.changed || options.since) args.push(\"--passWithNoTests\");\n\n if (options.testNamePattern) args.push(\"--testNamePattern\", options.testNamePattern);\n\n if (options.json) args.push(\"--reporter=json\");\n\n return args;\n}\n\n/** Read `warlock test`'s parsed CLI input into {@link TestCommandOptions}. */\nexport function readTestCommandOptions(data: CommandActionData): TestCommandOptions {\n const text = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n const relatedOption = text(data.options.related);\n\n return {\n filters: data.args,\n changed: data.options.changed === true,\n since: text(data.options.since),\n related: relatedOption\n ? relatedOption\n .split(\",\")\n .map((file) => file.trim())\n .filter(Boolean)\n : undefined,\n watch: data.options.watch === true,\n json: data.options.json === true,\n testNamePattern: text(data.options.testNamePattern) ?? text(data.options.t),\n };\n}\n\n/**\n * The project's own Vitest entry (`vitest.mjs`), resolved from the project\n * root — never a global or an `npx` download.\n */\nexport function resolveProjectVitest(\n projectRoot: string,\n resolve: (specifier: string) => string = createRequire(path.join(projectRoot, \"package.json\"))\n .resolve,\n): string {\n let manifestPath: string;\n\n try {\n manifestPath = resolve(\"vitest/package.json\");\n } catch {\n throw new Error(\n `Vitest is not installed in ${projectRoot}. Run \\`warlock add test\\` (or install vitest as a dev dependency) first.`,\n );\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n const bin = typeof manifest.bin === \"string\" ? manifest.bin : manifest.bin?.vitest;\n const entry = path.join(path.dirname(manifestPath), bin ?? \"vitest.mjs\");\n\n if (!existsSync(entry)) {\n throw new Error(`Vitest's entry point was not found at ${entry}. Reinstall vitest.`);\n }\n\n return entry;\n}\n\nasync function testCommandAction(data: CommandActionData): Promise<void> {\n const options = readTestCommandOptions(data);\n const vitest = resolveProjectVitest(process.cwd());\n const args = buildVitestArguments(options);\n\n const exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(process.execPath, [vitest, ...args], {\n cwd: process.cwd(),\n // Vitest only defaults NODE_ENV to \"test\" when it is unset; an exported\n // NODE_ENV=production would otherwise reach the test server and be refused.\n env: { ...process.env, NODE_ENV: \"test\" },\n stdio: \"inherit\",\n });\n\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => resolve(code ?? (signal ? 1 : 0)));\n });\n\n if (exitCode !== 0) process.exit(exitCode);\n}\n\n/**\n * `warlock test` — run the project's tests through its own Vitest.\n *\n * @example\n * warlock test # everything, once\n * warlock test --changed # tests affected by uncommitted changes\n * warlock test --changed --since main # ... by changes since main\n * warlock test --related src/app/posts/services/create-post.service.ts\n * warlock test src/app/posts --json # one folder, JSON report on stdout\n */\nexport const testCommand = command({\n name: \"test [filters...]\",\n description:\n \"Run the project's tests with Vitest; --changed / --related run only the tests your change affects\",\n action: testCommandAction,\n options: [\n {\n text: \"--changed\",\n description: \"Only run tests affected by uncommitted changes (git)\",\n type: \"boolean\",\n },\n {\n text: \"--since <ref>\",\n description: \"With --changed: tests affected by changes since this git ref (e.g. main)\",\n },\n {\n text: \"--related <files>\",\n description: \"Comma-separated source files: only run the tests that import them\",\n },\n {\n text: \"--watch, -w\",\n description: \"Re-run on change instead of running once\",\n type: \"boolean\",\n },\n {\n text: \"--test-name-pattern, -t\",\n description: \"Only run tests whose name matches this pattern\",\n },\n {\n text: \"--json\",\n description: \"Print Vitest's JSON report on stdout\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;;;;AAiCA,SAAgB,qBAAqB,SAAuC;CAC1E,MAAM,UAAU,QAAQ,WAAW,CAAC;CACpC,MAAM,OAAiB,CAAC;CAExB,IAAI,QAAQ,SAAS,GAAG;EAEtB,KAAK,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ,OAAO;EAEnD,IAAI,CAAC,QAAQ,OAAO,KAAK,KAAK,OAAO;CACvC,OAAO;EACL,IAAI,CAAC,QAAQ,OAAO,KAAK,KAAK,KAAK;EAEnC,KAAK,KAAK,GAAG,QAAQ,OAAO;CAC9B;CAEA,IAAI,QAAQ,WAAW,QAAQ,OAAO;EACpC,KAAK,KAAK,WAAW;EAErB,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,KAAK;CAC5C;CAGA,IAAI,QAAQ,SAAS,KAAK,QAAQ,WAAW,QAAQ,OAAO,KAAK,KAAK,mBAAmB;CAEzF,IAAI,QAAQ,iBAAiB,KAAK,KAAK,qBAAqB,QAAQ,eAAe;CAEnF,IAAI,QAAQ,MAAM,KAAK,KAAK,iBAAiB;CAE7C,OAAO;AACT;;AAGA,SAAgB,uBAAuB,MAA6C;CAClF,MAAM,QAAQ,UACZ,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;CACpE,MAAM,gBAAgB,KAAK,KAAK,QAAQ,OAAO;CAE/C,OAAO;EACL,SAAS,KAAK;EACd,SAAS,KAAK,QAAQ,YAAY;EAClC,OAAO,KAAK,KAAK,QAAQ,KAAK;EAC9B,SAAS,gBACL,cACG,MAAM,GAAG,CAAC,CACV,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,IACjB;EACJ,OAAO,KAAK,QAAQ,UAAU;EAC9B,MAAM,KAAK,QAAQ,SAAS;EAC5B,iBAAiB,KAAK,KAAK,QAAQ,eAAe,KAAK,KAAK,KAAK,QAAQ,CAAC;CAC5E;AACF;;;;;AAMA,SAAgB,qBACd,aACA,UAAyC,cAAc,KAAK,KAAK,aAAa,cAAc,CAAC,CAAC,CAC3F,SACK;CACR,IAAI;CAEJ,IAAI;EACF,eAAe,QAAQ,qBAAqB;CAC9C,QAAQ;EACN,MAAM,IAAI,MACR,8BAA8B,YAAY,0EAC5C;CACF;CAEA,MAAM,WAAW,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;CAG9D,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,SAAS,MAAM,SAAS,KAAK;CAC5E,MAAM,QAAQ,KAAK,KAAK,KAAK,QAAQ,YAAY,GAAG,OAAO,YAAY;CAEvE,IAAI,CAAC,WAAW,KAAK,GACnB,MAAM,IAAI,MAAM,yCAAyC,MAAM,oBAAoB;CAGrF,OAAO;AACT;AAEA,eAAe,kBAAkB,MAAwC;CACvE,MAAM,UAAU,uBAAuB,IAAI;CAC3C,MAAM,SAAS,qBAAqB,QAAQ,IAAI,CAAC;CACjD,MAAM,OAAO,qBAAqB,OAAO;CAEzC,MAAM,WAAW,MAAM,IAAI,SAAiB,SAAS,WAAW;EAC9D,MAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC,QAAQ,GAAG,IAAI,GAAG;GACvD,KAAK,QAAQ,IAAI;GAGjB,KAAK;IAAE,GAAG,QAAQ;IAAK,UAAU;GAAO;GACxC,OAAO;EACT,CAAC;EAED,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,SAAS,MAAM,WAAW,QAAQ,SAAS,SAAS,IAAI,EAAE,CAAC;CACxE,CAAC;CAED,IAAI,aAAa,GAAG,QAAQ,KAAK,QAAQ;AAC3C;;;;;;;;;;;AAYA,MAAa,cAAc,QAAQ;CACjC,MAAM;CACN,aACE;CACF,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
@@ -0,0 +1,145 @@
1
+ import { ERROR_CODES, errorCodeOf } from "../../../errors/error-codes.mjs";
2
+ import { flushAndExit } from "../../flush-and-exit.mjs";
3
+ import { traceRequest } from "../../../tooling/trace/trace-request.mjs";
4
+ import path from "node:path";
5
+ import { readFileSync } from "node:fs";
6
+ import { colors } from "@mongez/copper";
7
+
8
+ //#region ../../packages/core/src/cli/commands/trace/trace-command.action.ts
9
+ function stringOption(value) {
10
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
11
+ }
12
+ /**
13
+ * Every `--header` / `-H` value in `argv`, in order. The CLI parser keeps only
14
+ * the last value of a repeated option, so headers are read from argv directly.
15
+ * Accepts `--header k:v`, `--header=k:v`, `-H k:v` and `-H=k:v`.
16
+ */
17
+ function collectHeaderValues(argv) {
18
+ const values = [];
19
+ for (let index = 0; index < argv.length; index++) {
20
+ const token = argv[index];
21
+ if (token === void 0) continue;
22
+ const inline = /^(?:--header|-H)=(.*)$/s.exec(token);
23
+ if (inline) {
24
+ values.push(inline[1] ?? "");
25
+ continue;
26
+ }
27
+ if (token === "--header" || token === "-H") {
28
+ const next = argv[index + 1];
29
+ if (next !== void 0) {
30
+ values.push(next);
31
+ index++;
32
+ }
33
+ }
34
+ }
35
+ return values;
36
+ }
37
+ /**
38
+ * Turn `name:value` strings into a header object. The first colon splits; both
39
+ * sides are trimmed. Throws on a value without a colon or with an empty name.
40
+ */
41
+ function parseHeaderValues(values) {
42
+ const headers = {};
43
+ for (const value of values) {
44
+ const colon = value.indexOf(":");
45
+ const name = colon === -1 ? "" : value.slice(0, colon).trim();
46
+ if (name.length === 0) throw new Error(`Invalid --header ${JSON.stringify(value)}: expected name:value.`);
47
+ headers[name] = value.slice(colon + 1).trim();
48
+ }
49
+ return headers;
50
+ }
51
+ /**
52
+ * The request body for `--body`: `@path` reads the file (relative to `cwd`);
53
+ * text that parses as JSON becomes that value (sent as JSON); anything else is
54
+ * sent as the text itself. `undefined` without `--body`.
55
+ */
56
+ function parseTraceBody(value, cwd = process.cwd(), readFile = (file) => readFileSync(file, "utf8")) {
57
+ if (value === void 0) return void 0;
58
+ const text = value.startsWith("@") ? readFile(path.resolve(cwd, value.slice(1))) : value;
59
+ try {
60
+ return JSON.parse(text);
61
+ } catch {
62
+ return text;
63
+ }
64
+ }
65
+ function ms(value) {
66
+ return value === null ? "-" : `${value.toFixed(1)}ms`;
67
+ }
68
+ /** The human summary `warlock trace` prints without `--json`. Uncolored, so it is testable. */
69
+ function formatTraceSummary(report) {
70
+ const { timeline } = report;
71
+ const lines = [`${report.request.method} ${report.request.url} → ${report.response.status} (${report.route ?? "no route"}, id ${report.requestId})`, ` total ${ms(report.timings.totalMs)} server, ${ms(report.timings.clientMs)} round trip`];
72
+ if (timeline.routeMatch) lines.push(` route.match ${ms(timeline.routeMatch.durationMs)}`);
73
+ for (const middleware of timeline.middleware) lines.push(` middleware ${middleware.name ?? "(anonymous)"} ${ms(middleware.durationMs)}`);
74
+ if (timeline.validation.ran) {
75
+ const verdict = timeline.validation.passed ? "passed" : "failed";
76
+ lines.push(` validation ${verdict} ${ms(timeline.validation.durationMs)}`);
77
+ }
78
+ if (timeline.handler) lines.push(` handler ${ms(timeline.handler.durationMs)}`);
79
+ const nPlusOne = report.queries.filter((query) => query.nPlusOne).length;
80
+ lines.push(` queries ${report.queries.length}${nPlusOne > 0 ? ` (${nPlusOne} N+1)` : ""} · logs ${report.logs.length} · cache ${report.cache.length} · mails ${report.mails.length}`);
81
+ for (const warning of report.warnings) if (typeof warning.message === "string") lines.push(` ! ${warning.message}`);
82
+ if (report.error) lines.push(` error: ${report.error}`);
83
+ lines.push("", "Run with --json for the full timeline.");
84
+ return lines;
85
+ }
86
+ /** The exit code for a failed trace: 2 for this machine (WL8xxx), 1 otherwise. */
87
+ function traceFailureExitCode(error) {
88
+ const code = errorCodeOf(error);
89
+ return code !== void 0 && ERROR_CODES[code].category === "environment" ? 2 : 1;
90
+ }
91
+ /**
92
+ * Action behind `warlock trace <method> <url>`.
93
+ *
94
+ * Sends the request to the running dev server and prints its devtools
95
+ * timeline; with `--json`, stdout carries exactly the report. A failure
96
+ * (no dev server, no devtools, no record) prints the coded error — as
97
+ * `{ ok: false, code, message }` with `--json` — and exits 2 for this machine
98
+ * or 1 otherwise.
99
+ *
100
+ * @param data Parsed CLI args: `[method, url]`, `body`, `url`, `devtoolsPath`, `idHeader`, `timeout`, `json`.
101
+ */
102
+ async function traceCommandAction({ args, options }) {
103
+ const json = options.json === true;
104
+ const [method, url] = args;
105
+ try {
106
+ if (!method || !url) throw new Error("Usage: warlock trace <method> <url> [--body json|@file] [--header k:v]");
107
+ const timeout = stringOption(options.timeout);
108
+ const timeoutMs = timeout === void 0 ? void 0 : Number(timeout);
109
+ if (timeoutMs !== void 0 && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) throw new Error(`Invalid --timeout ${JSON.stringify(timeout)}: expected milliseconds.`);
110
+ const report = await traceRequest({
111
+ method,
112
+ url,
113
+ body: parseTraceBody(stringOption(options.body)),
114
+ headers: parseHeaderValues(collectHeaderValues(process.argv)),
115
+ serverUrl: stringOption(options.url),
116
+ devtoolsPath: stringOption(options.devtoolsPath),
117
+ requestIdHeader: stringOption(options.idHeader),
118
+ timeoutMs
119
+ });
120
+ if (json) {
121
+ console.log(JSON.stringify(report, null, 2));
122
+ return;
123
+ }
124
+ const [heading, ...rest] = formatTraceSummary(report);
125
+ console.log(colors.bold(heading ?? ""));
126
+ for (const line of rest) console.log(line);
127
+ } catch (error) {
128
+ const code = errorCodeOf(error) ?? null;
129
+ const message = error instanceof Error ? error.message : String(error);
130
+ if (json) console.log(JSON.stringify({
131
+ ok: false,
132
+ code,
133
+ message
134
+ }, null, 2));
135
+ else {
136
+ console.error(colors.red(`${code ? `${code} ` : ""}${message}`));
137
+ if (code) console.error(` → ${ERROR_CODES[code].fix}`);
138
+ }
139
+ await flushAndExit(traceFailureExitCode(error));
140
+ }
141
+ }
142
+
143
+ //#endregion
144
+ export { collectHeaderValues, formatTraceSummary, parseHeaderValues, parseTraceBody, traceCommandAction, traceFailureExitCode };
145
+ //# sourceMappingURL=trace-command.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-command.action.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/cli/commands/trace/trace-command.action.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { colors } from \"@mongez/copper\";\nimport type { CommandActionData } from \"../../../commands/types\";\nimport { ERROR_CODES, errorCodeOf } from \"../../../errors/error-codes\";\nimport type { TraceReport } from \"../../../tooling/trace/trace-report.types\";\nimport { traceRequest } from \"../../../tooling/trace/trace-request\";\nimport { flushAndExit } from \"../../flush-and-exit\";\n\nfunction stringOption(value: string | number | boolean | undefined): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\n/**\n * Every `--header` / `-H` value in `argv`, in order. The CLI parser keeps only\n * the last value of a repeated option, so headers are read from argv directly.\n * Accepts `--header k:v`, `--header=k:v`, `-H k:v` and `-H=k:v`.\n */\nexport function collectHeaderValues(argv: readonly string[]): string[] {\n const values: string[] = [];\n\n for (let index = 0; index < argv.length; index++) {\n const token = argv[index];\n\n if (token === undefined) continue;\n\n const inline = /^(?:--header|-H)=(.*)$/s.exec(token);\n\n if (inline) {\n values.push(inline[1] ?? \"\");\n continue;\n }\n\n if (token === \"--header\" || token === \"-H\") {\n const next = argv[index + 1];\n\n if (next !== undefined) {\n values.push(next);\n index++;\n }\n }\n }\n\n return values;\n}\n\n/**\n * Turn `name:value` strings into a header object. The first colon splits; both\n * sides are trimmed. Throws on a value without a colon or with an empty name.\n */\nexport function parseHeaderValues(values: readonly string[]): Record<string, string> {\n const headers: Record<string, string> = {};\n\n for (const value of values) {\n const colon = value.indexOf(\":\");\n const name = colon === -1 ? \"\" : value.slice(0, colon).trim();\n\n if (name.length === 0) {\n throw new Error(`Invalid --header ${JSON.stringify(value)}: expected name:value.`);\n }\n\n headers[name] = value.slice(colon + 1).trim();\n }\n\n return headers;\n}\n\n/**\n * The request body for `--body`: `@path` reads the file (relative to `cwd`);\n * text that parses as JSON becomes that value (sent as JSON); anything else is\n * sent as the text itself. `undefined` without `--body`.\n */\nexport function parseTraceBody(\n value: string | undefined,\n cwd = process.cwd(),\n readFile: (file: string) => string = (file) => readFileSync(file, \"utf8\"),\n): unknown {\n if (value === undefined) return undefined;\n\n const text = value.startsWith(\"@\") ? readFile(path.resolve(cwd, value.slice(1))) : value;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction ms(value: number | null): string {\n return value === null ? \"-\" : `${value.toFixed(1)}ms`;\n}\n\n/** The human summary `warlock trace` prints without `--json`. Uncolored, so it is testable. */\nexport function formatTraceSummary(report: TraceReport): string[] {\n const { timeline } = report;\n const lines = [\n `${report.request.method} ${report.request.url} → ${report.response.status} (${report.route ?? \"no route\"}, id ${report.requestId})`,\n ` total ${ms(report.timings.totalMs)} server, ${ms(report.timings.clientMs)} round trip`,\n ];\n\n if (timeline.routeMatch) lines.push(` route.match ${ms(timeline.routeMatch.durationMs)}`);\n\n for (const middleware of timeline.middleware) {\n lines.push(` middleware ${middleware.name ?? \"(anonymous)\"} ${ms(middleware.durationMs)}`);\n }\n\n if (timeline.validation.ran) {\n const verdict = timeline.validation.passed ? \"passed\" : \"failed\";\n\n lines.push(` validation ${verdict} ${ms(timeline.validation.durationMs)}`);\n }\n\n if (timeline.handler) lines.push(` handler ${ms(timeline.handler.durationMs)}`);\n\n const nPlusOne = report.queries.filter((query) => query.nPlusOne).length;\n\n lines.push(\n ` queries ${report.queries.length}${nPlusOne > 0 ? ` (${nPlusOne} N+1)` : \"\"} · logs ${report.logs.length} · cache ${report.cache.length} · mails ${report.mails.length}`,\n );\n\n for (const warning of report.warnings) {\n if (typeof warning.message === \"string\") lines.push(` ! ${warning.message}`);\n }\n\n if (report.error) lines.push(` error: ${report.error}`);\n\n lines.push(\"\", \"Run with --json for the full timeline.\");\n\n return lines;\n}\n\n/** The exit code for a failed trace: 2 for this machine (WL8xxx), 1 otherwise. */\nexport function traceFailureExitCode(error: unknown): 1 | 2 {\n const code = errorCodeOf(error);\n\n return code !== undefined && ERROR_CODES[code].category === \"environment\" ? 2 : 1;\n}\n\n/**\n * Action behind `warlock trace <method> <url>`.\n *\n * Sends the request to the running dev server and prints its devtools\n * timeline; with `--json`, stdout carries exactly the report. A failure\n * (no dev server, no devtools, no record) prints the coded error — as\n * `{ ok: false, code, message }` with `--json` — and exits 2 for this machine\n * or 1 otherwise.\n *\n * @param data Parsed CLI args: `[method, url]`, `body`, `url`, `devtoolsPath`, `idHeader`, `timeout`, `json`.\n */\nexport async function traceCommandAction({ args, options }: CommandActionData): Promise<void> {\n const json = options.json === true;\n const [method, url] = args;\n\n try {\n if (!method || !url) {\n throw new Error(\"Usage: warlock trace <method> <url> [--body json|@file] [--header k:v]\");\n }\n\n const timeout = stringOption(options.timeout);\n const timeoutMs = timeout === undefined ? undefined : Number(timeout);\n\n if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) {\n throw new Error(`Invalid --timeout ${JSON.stringify(timeout)}: expected milliseconds.`);\n }\n\n const report = await traceRequest({\n method,\n url,\n body: parseTraceBody(stringOption(options.body)),\n headers: parseHeaderValues(collectHeaderValues(process.argv)),\n serverUrl: stringOption(options.url),\n devtoolsPath: stringOption(options.devtoolsPath),\n requestIdHeader: stringOption(options.idHeader),\n timeoutMs,\n });\n\n if (json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n const [heading, ...rest] = formatTraceSummary(report);\n\n console.log(colors.bold(heading ?? \"\"));\n\n for (const line of rest) {\n console.log(line);\n }\n } catch (error) {\n const code = errorCodeOf(error) ?? null;\n const message = error instanceof Error ? error.message : String(error);\n\n if (json) {\n console.log(JSON.stringify({ ok: false, code, message }, null, 2));\n } else {\n console.error(colors.red(`${code ? `${code} ` : \"\"}${message}`));\n\n if (code) console.error(` → ${ERROR_CODES[code].fix}`);\n }\n\n await flushAndExit(traceFailureExitCode(error));\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAS,aAAa,OAAkE;CACtF,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI;AAC/E;;;;;;AAOA,SAAgB,oBAAoB,MAAmC;CACrE,MAAM,SAAmB,CAAC;CAE1B,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;EAChD,MAAM,QAAQ,KAAK;EAEnB,IAAI,UAAU,QAAW;EAEzB,MAAM,SAAS,0BAA0B,KAAK,KAAK;EAEnD,IAAI,QAAQ;GACV,OAAO,KAAK,OAAO,MAAM,EAAE;GAC3B;EACF;EAEA,IAAI,UAAU,cAAc,UAAU,MAAM;GAC1C,MAAM,OAAO,KAAK,QAAQ;GAE1B,IAAI,SAAS,QAAW;IACtB,OAAO,KAAK,IAAI;IAChB;GACF;EACF;CACF;CAEA,OAAO;AACT;;;;;AAMA,SAAgB,kBAAkB,QAAmD;CACnF,MAAM,UAAkC,CAAC;CAEzC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ,MAAM,QAAQ,GAAG;EAC/B,MAAM,OAAO,UAAU,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK;EAE5D,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,oBAAoB,KAAK,UAAU,KAAK,EAAE,uBAAuB;EAGnF,QAAQ,QAAQ,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;CAC9C;CAEA,OAAO;AACT;;;;;;AAOA,SAAgB,eACd,OACA,MAAM,QAAQ,IAAI,GAClB,YAAsC,SAAS,aAAa,MAAM,MAAM,GAC/D;CACT,IAAI,UAAU,QAAW,OAAO;CAEhC,MAAM,OAAO,MAAM,WAAW,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI;CAEnF,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,GAAG,OAA8B;CACxC,OAAO,UAAU,OAAO,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE;AACpD;;AAGA,SAAgB,mBAAmB,QAA+B;CAChE,MAAM,EAAE,aAAa;CACrB,MAAM,QAAQ,CACZ,GAAG,OAAO,QAAQ,OAAO,GAAG,OAAO,QAAQ,IAAI,KAAK,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,IACnI,WAAW,GAAG,OAAO,QAAQ,OAAO,EAAE,WAAW,GAAG,OAAO,QAAQ,QAAQ,EAAE,YAC/E;CAEA,IAAI,SAAS,YAAY,MAAM,KAAK,kBAAkB,GAAG,SAAS,WAAW,UAAU,GAAG;CAE1F,KAAK,MAAM,cAAc,SAAS,YAChC,MAAM,KAAK,kBAAkB,WAAW,QAAQ,cAAc,IAAI,GAAG,WAAW,UAAU,GAAG;CAG/F,IAAI,SAAS,WAAW,KAAK;EAC3B,MAAM,UAAU,SAAS,WAAW,SAAS,WAAW;EAExD,MAAM,KAAK,kBAAkB,QAAQ,IAAI,GAAG,SAAS,WAAW,UAAU,GAAG;CAC/E;CAEA,IAAI,SAAS,SAAS,MAAM,KAAK,kBAAkB,GAAG,SAAS,QAAQ,UAAU,GAAG;CAEpF,MAAM,WAAW,OAAO,QAAQ,QAAQ,UAAU,MAAM,QAAQ,CAAC,CAAC;CAElE,MAAM,KACJ,aAAa,OAAO,QAAQ,SAAS,WAAW,IAAI,KAAK,SAAS,SAAS,GAAG,UAAU,OAAO,KAAK,OAAO,WAAW,OAAO,MAAM,OAAO,WAAW,OAAO,MAAM,QACpK;CAEA,KAAK,MAAM,WAAW,OAAO,UAC3B,IAAI,OAAO,QAAQ,YAAY,UAAU,MAAM,KAAK,OAAO,QAAQ,SAAS;CAG9E,IAAI,OAAO,OAAO,MAAM,KAAK,YAAY,OAAO,OAAO;CAEvD,MAAM,KAAK,IAAI,wCAAwC;CAEvD,OAAO;AACT;;AAGA,SAAgB,qBAAqB,OAAuB;CAC1D,MAAM,OAAO,YAAY,KAAK;CAE9B,OAAO,SAAS,UAAa,YAAY,KAAK,CAAC,aAAa,gBAAgB,IAAI;AAClF;;;;;;;;;;;;AAaA,eAAsB,mBAAmB,EAAE,MAAM,WAA6C;CAC5F,MAAM,OAAO,QAAQ,SAAS;CAC9B,MAAM,CAAC,QAAQ,OAAO;CAEtB,IAAI;EACF,IAAI,CAAC,UAAU,CAAC,KACd,MAAM,IAAI,MAAM,wEAAwE;EAG1F,MAAM,UAAU,aAAa,QAAQ,OAAO;EAC5C,MAAM,YAAY,YAAY,SAAY,SAAY,OAAO,OAAO;EAEpE,IAAI,cAAc,WAAc,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,IACzE,MAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,OAAO,EAAE,yBAAyB;EAGxF,MAAM,SAAS,MAAM,aAAa;GAChC;GACA;GACA,MAAM,eAAe,aAAa,QAAQ,IAAI,CAAC;GAC/C,SAAS,kBAAkB,oBAAoB,QAAQ,IAAI,CAAC;GAC5D,WAAW,aAAa,QAAQ,GAAG;GACnC,cAAc,aAAa,QAAQ,YAAY;GAC/C,iBAAiB,aAAa,QAAQ,QAAQ;GAC9C;EACF,CAAC;EAED,IAAI,MAAM;GACR,QAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;GAC3C;EACF;EAEA,MAAM,CAAC,SAAS,GAAG,QAAQ,mBAAmB,MAAM;EAEpD,QAAQ,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;EAEtC,KAAK,MAAM,QAAQ,MACjB,QAAQ,IAAI,IAAI;CAEpB,SAAS,OAAO;EACd,MAAM,OAAO,YAAY,KAAK,KAAK;EACnC,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EAErE,IAAI,MACF,QAAQ,IAAI,KAAK,UAAU;GAAE,IAAI;GAAO;GAAM;EAAQ,GAAG,MAAM,CAAC,CAAC;OAC5D;GACL,QAAQ,MAAM,OAAO,IAAI,GAAG,OAAO,GAAG,KAAK,KAAK,KAAK,SAAS,CAAC;GAE/D,IAAI,MAAM,QAAQ,MAAM,OAAO,YAAY,KAAK,CAAC,KAAK;EACxD;EAEA,MAAM,aAAa,qBAAqB,KAAK,CAAC;CAChD;AACF"}
@@ -0,0 +1,60 @@
1
+ import { command } from "../../commands/cli-command.mjs";
2
+ import { traceCommandAction } from "./trace/trace-command.action.mjs";
3
+
4
+ //#region ../../packages/core/src/cli/commands/trace.command.ts
5
+ /**
6
+ * `warlock trace <method> <url>` — send one request to the running dev server
7
+ * and print its devtools timeline: middleware, validation result, handler,
8
+ * queries with N+1 flags, logs, cache operations, the response and timings.
9
+ * `--json` prints the versioned report (`schemaVersion: 1`).
10
+ *
11
+ * No preload: nothing boots here. The dev server (`warlock dev` with
12
+ * `@warlock.js/devtools` installed) does the work; this command finds it
13
+ * through `.warlock/dev-server.json` or `--url`.
14
+ */
15
+ const traceCommand = command({
16
+ name: "trace <method> <url>",
17
+ description: "Send a request to the running dev server and print its devtools timeline (middleware, validation, queries, logs, response, timings); --json for the report",
18
+ action: traceCommandAction,
19
+ options: [
20
+ {
21
+ text: "--body, -b",
22
+ description: "Request body: JSON text, plain text, or @file to read it from a file",
23
+ type: "string"
24
+ },
25
+ {
26
+ text: "--header, -H",
27
+ description: "A request header as name:value (repeatable)",
28
+ type: "string"
29
+ },
30
+ {
31
+ text: "--url, -u",
32
+ description: "Dev server origin (default: read from .warlock/dev-server.json)",
33
+ type: "string"
34
+ },
35
+ {
36
+ text: "--devtools-path",
37
+ description: "Devtools mount path (default /__warlock)",
38
+ type: "string"
39
+ },
40
+ {
41
+ text: "--id-header",
42
+ description: "The app's request id header (http.requestId.header; default x-request-id)",
43
+ type: "string"
44
+ },
45
+ {
46
+ text: "--timeout, -t",
47
+ description: "How long to wait for the devtools record, in ms (default 5000)",
48
+ type: "string"
49
+ },
50
+ {
51
+ text: "--json, -j",
52
+ description: "Print the trace report as JSON (schemaVersion 1)",
53
+ type: "boolean"
54
+ }
55
+ ]
56
+ });
57
+
58
+ //#endregion
59
+ export { traceCommand };
60
+ //# sourceMappingURL=trace.command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/trace.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\nimport { traceCommandAction } from \"./trace/trace-command.action\";\n\n/**\n * `warlock trace <method> <url>` — send one request to the running dev server\n * and print its devtools timeline: middleware, validation result, handler,\n * queries with N+1 flags, logs, cache operations, the response and timings.\n * `--json` prints the versioned report (`schemaVersion: 1`).\n *\n * No preload: nothing boots here. The dev server (`warlock dev` with\n * `@warlock.js/devtools` installed) does the work; this command finds it\n * through `.warlock/dev-server.json` or `--url`.\n */\nexport const traceCommand = command({\n name: \"trace <method> <url>\",\n description:\n \"Send a request to the running dev server and print its devtools timeline (middleware, validation, queries, logs, response, timings); --json for the report\",\n action: traceCommandAction,\n options: [\n {\n text: \"--body, -b\",\n description: \"Request body: JSON text, plain text, or @file to read it from a file\",\n type: \"string\",\n },\n {\n text: \"--header, -H\",\n description: \"A request header as name:value (repeatable)\",\n type: \"string\",\n },\n {\n text: \"--url, -u\",\n description: \"Dev server origin (default: read from .warlock/dev-server.json)\",\n type: \"string\",\n },\n {\n text: \"--devtools-path\",\n description: \"Devtools mount path (default /__warlock)\",\n type: \"string\",\n },\n {\n text: \"--id-header\",\n description: \"The app's request id header (http.requestId.header; default x-request-id)\",\n type: \"string\",\n },\n {\n text: \"--timeout, -t\",\n description: \"How long to wait for the devtools record, in ms (default 5000)\",\n type: \"string\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the trace report as JSON (schemaVersion 1)\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,aACE;CACF,QAAQ;CACR,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;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;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"}
@@ -0,0 +1,40 @@
1
+ import { command } from "../../commands/cli-command.mjs";
2
+ import { typecheckCommandAction } from "./check/typecheck-command.action.mjs";
3
+
4
+ //#region ../../packages/core/src/cli/commands/typecheck.command.ts
5
+ /**
6
+ * `warlock typecheck` — incremental TypeScript check through the compiler
7
+ * API, with `--changed` to limit it to the changed files and their importers.
8
+ * The same problem shape and exit codes as `warlock check`. No preload.
9
+ */
10
+ const typecheckCommand = command({
11
+ name: "typecheck",
12
+ description: "Typecheck the project incrementally; --changed limits it to changed files and the files importing them",
13
+ action: typecheckCommandAction,
14
+ options: [
15
+ {
16
+ text: "--changed, -c",
17
+ description: "Only the files changed against HEAD (plus untracked files) and their importers",
18
+ type: "boolean"
19
+ },
20
+ {
21
+ text: "--base, -b",
22
+ description: "Compare with the merge base of this ref instead of HEAD (implies --changed)",
23
+ type: "string"
24
+ },
25
+ {
26
+ text: "--project, -p",
27
+ description: "tsconfig path (default tsconfig.json)",
28
+ type: "string"
29
+ },
30
+ {
31
+ text: "--json, -j",
32
+ description: "Print the result as JSON",
33
+ type: "boolean"
34
+ }
35
+ ]
36
+ });
37
+
38
+ //#endregion
39
+ export { typecheckCommand };
40
+ //# sourceMappingURL=typecheck.command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/typecheck.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\nimport { typecheckCommandAction } from \"./check/typecheck-command.action\";\n\n/**\n * `warlock typecheck` — incremental TypeScript check through the compiler\n * API, with `--changed` to limit it to the changed files and their importers.\n * The same problem shape and exit codes as `warlock check`. No preload.\n */\nexport const typecheckCommand = command({\n name: \"typecheck\",\n description:\n \"Typecheck the project incrementally; --changed limits it to changed files and the files importing them\",\n action: typecheckCommandAction,\n options: [\n {\n text: \"--changed, -c\",\n description: \"Only the files changed against HEAD (plus untracked files) and their importers\",\n type: \"boolean\",\n },\n {\n text: \"--base, -b\",\n description: \"Compare with the merge base of this ref instead of HEAD (implies --changed)\",\n type: \"string\",\n },\n {\n text: \"--project, -p\",\n description: \"tsconfig path (default tsconfig.json)\",\n type: \"string\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the result as JSON\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;AAQA,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,aACE;CACF,QAAQ;CACR,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;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { command } from "../../commands/cli-command.mjs";
2
+
3
+ //#region ../../packages/core/src/cli/commands/upgrade.command.ts
4
+ /**
5
+ * `warlock upgrade --to <version>` — apply the mechanical edits for every
6
+ * breaking change between the installed release and the target, and list the
7
+ * places that need a decision (`file:line` plus the reason). `--dry-run`
8
+ * prints a diff and writes nothing; `--json` prints the result as JSON.
9
+ *
10
+ * Needs no app boot: it reads source files, `package.json` and Node version
11
+ * files only. `ts-morph` (an optional peer) is loaded when the command runs.
12
+ */
13
+ const upgradeCommand = command({
14
+ name: "upgrade",
15
+ description: "Apply the code changes a Warlock upgrade needs (--to <version>), and list what to review by hand; --dry-run shows a diff, --json prints JSON",
16
+ action: async (data) => {
17
+ const { runUpgradeCommand } = await import("../../upgrade/upgrade-command.action.mjs");
18
+ await runUpgradeCommand(data.options);
19
+ },
20
+ options: [
21
+ {
22
+ text: "--to",
23
+ description: "Version to upgrade to, e.g. 5.31 or 5.31.0 (required)",
24
+ type: "string"
25
+ },
26
+ {
27
+ text: "--from",
28
+ description: "Version to upgrade from (default: the installed @warlock.js/core, so pass it once the new release is installed)",
29
+ type: "string"
30
+ },
31
+ {
32
+ text: "--dry-run",
33
+ description: "Show the diff and the review list without writing any file",
34
+ type: "boolean"
35
+ },
36
+ {
37
+ text: "--json, -j",
38
+ description: "Print the result as JSON",
39
+ type: "boolean"
40
+ }
41
+ ]
42
+ });
43
+
44
+ //#endregion
45
+ export { upgradeCommand };
46
+ //# sourceMappingURL=upgrade.command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/upgrade.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\n\n/**\n * `warlock upgrade --to <version>` — apply the mechanical edits for every\n * breaking change between the installed release and the target, and list the\n * places that need a decision (`file:line` plus the reason). `--dry-run`\n * prints a diff and writes nothing; `--json` prints the result as JSON.\n *\n * Needs no app boot: it reads source files, `package.json` and Node version\n * files only. `ts-morph` (an optional peer) is loaded when the command runs.\n */\nexport const upgradeCommand = command({\n name: \"upgrade\",\n description:\n \"Apply the code changes a Warlock upgrade needs (--to <version>), and list what to review by hand; --dry-run shows a diff, --json prints JSON\",\n action: async (data) => {\n // Loaded here so ts-morph and the codemods never join another command's graph.\n const { runUpgradeCommand } = await import(\"../../upgrade/upgrade-command.action\");\n await runUpgradeCommand(data.options);\n },\n options: [\n {\n text: \"--to\",\n description: \"Version to upgrade to, e.g. 5.31 or 5.31.0 (required)\",\n type: \"string\",\n },\n {\n text: \"--from\",\n description:\n \"Version to upgrade from (default: the installed @warlock.js/core, so pass it once the new release is installed)\",\n type: \"string\",\n },\n {\n text: \"--dry-run\",\n description: \"Show the diff and the review list without writing any file\",\n type: \"boolean\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the result as JSON\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,iBAAiB,QAAQ;CACpC,MAAM;CACN,aACE;CACF,QAAQ,OAAO,SAAS;EAEtB,MAAM,EAAE,sBAAsB,MAAM,OAAO;EAC3C,MAAM,kBAAkB,KAAK,OAAO;CACtC;CACA,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aACE;GACF,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
@@ -46,5 +46,5 @@ var CLICommandsLoader = class {
46
46
  const cliCommandsLoader = new CLICommandsLoader();
47
47
 
48
48
  //#endregion
49
- export { cliCommandsLoader };
49
+ export { CLICommandsLoader, cliCommandsLoader };
50
50
  //# sourceMappingURL=commands-loader.mjs.map
@@ -0,0 +1,34 @@
1
+ //#region ../../packages/core/src/cli/flush-and-exit.ts
2
+ /** How long to wait for stdout/stderr to drain before exiting anyway. */
3
+ const FLUSH_BUDGET_MS = 500;
4
+ function drain(stream) {
5
+ return new Promise((resolve) => {
6
+ stream.write("", () => resolve());
7
+ });
8
+ }
9
+ /**
10
+ * Exit with `code` once everything already written to stdout and stderr has
11
+ * been flushed.
12
+ *
13
+ * For commands whose exit code carries meaning (`warlock check` exits 1 for
14
+ * problems in the code and 2 for problems with the machine): a bare
15
+ * `process.exit()` right after printing a large JSON report to a pipe can cut
16
+ * the report short. Awaited inside the action, so the CLI never goes on to
17
+ * print its success banner or exit 0.
18
+ *
19
+ * @param code The process exit code.
20
+ */
21
+ async function flushAndExit(code) {
22
+ process.exitCode = code;
23
+ let timer;
24
+ await Promise.race([Promise.all([drain(process.stdout), drain(process.stderr)]), new Promise((resolve) => {
25
+ timer = setTimeout(resolve, FLUSH_BUDGET_MS);
26
+ timer.unref?.();
27
+ })]);
28
+ if (timer) clearTimeout(timer);
29
+ return process.exit(code);
30
+ }
31
+
32
+ //#endregion
33
+ export { flushAndExit };
34
+ //# sourceMappingURL=flush-and-exit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-and-exit.mjs","names":[],"sources":["../../../../../../../../packages/core/src/cli/flush-and-exit.ts"],"sourcesContent":["/** How long to wait for stdout/stderr to drain before exiting anyway. */\nconst FLUSH_BUDGET_MS = 500;\n\nfunction drain(stream: NodeJS.WriteStream): Promise<void> {\n return new Promise((resolve) => {\n // A zero-length write's callback fires once everything queued ahead of it\n // has been handed to the OS.\n stream.write(\"\", () => resolve());\n });\n}\n\n/**\n * Exit with `code` once everything already written to stdout and stderr has\n * been flushed.\n *\n * For commands whose exit code carries meaning (`warlock check` exits 1 for\n * problems in the code and 2 for problems with the machine): a bare\n * `process.exit()` right after printing a large JSON report to a pipe can cut\n * the report short. Awaited inside the action, so the CLI never goes on to\n * print its success banner or exit 0.\n *\n * @param code The process exit code.\n */\nexport async function flushAndExit(code: number): Promise<never> {\n process.exitCode = code;\n\n let timer: NodeJS.Timeout | undefined;\n\n await Promise.race([\n Promise.all([drain(process.stdout), drain(process.stderr)]),\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, FLUSH_BUDGET_MS);\n timer.unref?.();\n }),\n ]);\n\n if (timer) clearTimeout(timer);\n\n return process.exit(code);\n}\n"],"mappings":";;AACA,MAAM,kBAAkB;AAExB,SAAS,MAAM,QAA2C;CACxD,OAAO,IAAI,SAAS,YAAY;EAG9B,OAAO,MAAM,UAAU,QAAQ,CAAC;CAClC,CAAC;AACH;;;;;;;;;;;;;AAcA,eAAsB,aAAa,MAA8B;CAC/D,QAAQ,WAAW;CAEnB,IAAI;CAEJ,MAAM,QAAQ,KAAK,CACjB,QAAQ,IAAI,CAAC,MAAM,QAAQ,MAAM,GAAG,MAAM,QAAQ,MAAM,CAAC,CAAC,GAC1D,IAAI,SAAe,YAAY;EAC7B,QAAQ,WAAW,SAAS,eAAe;EAC3C,MAAM,QAAQ;CAChB,CAAC,CACH,CAAC;CAED,IAAI,OAAO,aAAa,KAAK;CAE7B,OAAO,QAAQ,KAAK,IAAI;AAC1B"}