@warlock.js/core 5.31.0 → 5.33.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 (1097) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/esm/application/app.d.mts +3 -3
  3. package/esm/application/app.d.mts.map +1 -1
  4. package/esm/application/application-config-types.d.mts +9 -2
  5. package/esm/application/application-config-types.d.mts.map +1 -1
  6. package/esm/application/application.d.mts +5 -7
  7. package/esm/application/application.d.mts.map +1 -1
  8. package/esm/application/application.mjs +3 -1
  9. package/esm/application/application.mjs.map +1 -1
  10. package/esm/application/boot-signal.d.mts +22 -20
  11. package/esm/application/boot-signal.d.mts.map +1 -1
  12. package/esm/application/boot-signal.mjs +15 -9
  13. package/esm/application/boot-signal.mjs.map +1 -1
  14. package/esm/application/index.d.mts +2 -1
  15. package/esm/application/index.mjs +1 -1
  16. package/esm/application/public-url.d.mts +1 -2
  17. package/esm/application/public-url.d.mts.map +1 -1
  18. package/esm/application/roles.d.mts +10 -11
  19. package/esm/application/roles.d.mts.map +1 -1
  20. package/esm/benchmark/benchmark-snapshots.d.mts +1 -3
  21. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  22. package/esm/benchmark/benchmark.d.mts +1 -3
  23. package/esm/benchmark/benchmark.d.mts.map +1 -1
  24. package/esm/benchmark/channels/console.channel.d.mts +1 -3
  25. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  26. package/esm/benchmark/channels/noop.channel.d.mts +1 -3
  27. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  28. package/esm/benchmark/index.mjs +1 -1
  29. package/esm/benchmark/profiler.d.mts +1 -3
  30. package/esm/benchmark/profiler.d.mts.map +1 -1
  31. package/esm/benchmark/profiler.mjs +2 -1
  32. package/esm/benchmark/profiler.mjs.map +1 -1
  33. package/esm/benchmark/types.d.mts +22 -17
  34. package/esm/benchmark/types.d.mts.map +1 -1
  35. package/esm/bootstrap/setup.d.mts +1 -2
  36. package/esm/bootstrap/setup.d.mts.map +1 -1
  37. package/esm/bootstrap.d.mts +1 -2
  38. package/esm/bootstrap.d.mts.map +1 -1
  39. package/esm/cache/database-cache-driver.d.mts +3 -5
  40. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  41. package/esm/cache/database-cache-driver.mjs +1 -1
  42. package/esm/cache/index.d.mts +2 -1
  43. package/esm/cache/index.mjs +1 -1
  44. package/esm/cli/cli-commands.manager.mjs +6 -3
  45. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  46. package/esm/cli/commands/agents-md/agents-md-command.action.mjs +3 -2
  47. package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -1
  48. package/esm/cli/commands/ai/ai-command.action.mjs +140 -0
  49. package/esm/cli/commands/ai/ai-command.action.mjs.map +1 -0
  50. package/esm/cli/commands/ai.command.mjs +50 -0
  51. package/esm/cli/commands/ai.command.mjs.map +1 -0
  52. package/esm/cli/commands/board/board-command.action.mjs +1 -1
  53. package/esm/cli/commands/check/check-command.action.mjs +4 -1
  54. package/esm/cli/commands/check/check-command.action.mjs.map +1 -1
  55. package/esm/cli/commands/check/child-typecheck.mjs +1 -1
  56. package/esm/cli/commands/check/child-typecheck.mjs.map +1 -1
  57. package/esm/cli/commands/check/format-problems.mjs +1 -1
  58. package/esm/cli/commands/check.command.mjs +6 -1
  59. package/esm/cli/commands/check.command.mjs.map +1 -1
  60. package/esm/cli/commands/dev-server.command.mjs +3 -2
  61. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  62. package/esm/cli/commands/doctor/check.types.d.mts +29 -16
  63. package/esm/cli/commands/doctor/check.types.d.mts.map +1 -1
  64. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +22 -27
  65. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
  66. package/esm/cli/commands/doctor/doctor-command.action.mjs +2 -1
  67. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  68. package/esm/cli/commands/explain/explain-command.action.mjs +1 -1
  69. package/esm/cli/commands/generate/generators/controller.generator.mjs +5 -2
  70. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  71. package/esm/cli/commands/generate/generators/endpoint.generator.mjs +5 -3
  72. package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -1
  73. package/esm/cli/commands/generate/generators/model.generator.mjs +3 -2
  74. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  75. package/esm/cli/commands/generate/generators/repository.generator.mjs +3 -1
  76. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  77. package/esm/cli/commands/generate/generators/resource.generator.mjs +3 -1
  78. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  79. package/esm/cli/commands/generate/generators/service.generator.mjs +3 -1
  80. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  81. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs +2 -2
  82. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -1
  83. package/esm/cli/commands/generate/utils/endpoint-schema.mjs +1 -2
  84. package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -1
  85. package/esm/cli/commands/generate/utils/name-parser.mjs +1 -1
  86. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  87. package/esm/cli/commands/inspect/inspect-command.action.mjs +3 -2
  88. package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -1
  89. package/esm/cli/commands/issue/collect-environment.mjs +187 -0
  90. package/esm/cli/commands/issue/collect-environment.mjs.map +1 -0
  91. package/esm/cli/commands/issue/issue-command.action.mjs +70 -0
  92. package/esm/cli/commands/issue/issue-command.action.mjs.map +1 -0
  93. package/esm/cli/commands/issue.command.mjs +31 -0
  94. package/esm/cli/commands/issue.command.mjs.map +1 -0
  95. package/esm/cli/commands/mcp/mcp-command.action.mjs +15 -14
  96. package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -1
  97. package/esm/cli/commands/openapi-generator.action.mjs +1 -1
  98. package/esm/cli/commands/pm2/pm2-command.action.mjs +91 -0
  99. package/esm/cli/commands/pm2/pm2-command.action.mjs.map +1 -0
  100. package/esm/cli/commands/pm2/pm2-config.mjs +115 -0
  101. package/esm/cli/commands/pm2/pm2-config.mjs.map +1 -0
  102. package/esm/cli/commands/pm2.command.mjs +53 -0
  103. package/esm/cli/commands/pm2.command.mjs.map +1 -0
  104. package/esm/cli/commands/postman-generator.action.mjs +1 -1
  105. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  106. package/esm/cli/commands/routes/route-row.mjs +1 -1
  107. package/esm/cli/commands/routes/routes-diff.action.mjs +2 -2
  108. package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
  109. package/esm/cli/commands/test.command.mjs +1 -1
  110. package/esm/cli/commands/trace/trace-command.action.mjs +1 -1
  111. package/esm/cli/commands-loader.mjs +1 -1
  112. package/esm/cli/framework-cli-commands.mjs +6 -0
  113. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  114. package/esm/cli/parse-cli-args.mjs +2 -2
  115. package/esm/cli/parse-cli-args.mjs.map +1 -1
  116. package/esm/cli/start.d.mts +1 -1
  117. package/esm/cli/string-similarity.mjs +1 -1
  118. package/esm/commands/cli-command.d.mts +2 -4
  119. package/esm/commands/cli-command.d.mts.map +1 -1
  120. package/esm/commands/index.d.mts +2 -1
  121. package/esm/commands/index.mjs +1 -1
  122. package/esm/commands/types.d.mts +8 -8
  123. package/esm/commands/types.d.mts.map +1 -1
  124. package/esm/config/config-getter.d.mts +2 -3
  125. package/esm/config/config-getter.d.mts.map +1 -1
  126. package/esm/config/config-getter.mjs +5 -5
  127. package/esm/config/config-getter.mjs.map +1 -1
  128. package/esm/config/config-handlers.d.mts +1 -3
  129. package/esm/config/config-handlers.d.mts.map +1 -1
  130. package/esm/config/config-loader.d.mts +1 -2
  131. package/esm/config/config-loader.d.mts.map +1 -1
  132. package/esm/config/config-loader.mjs +3 -3
  133. package/esm/config/config-loader.mjs.map +1 -1
  134. package/esm/config/config-manager.mjs +1 -1
  135. package/esm/config/config-schema.d.mts +19 -16
  136. package/esm/config/config-schema.d.mts.map +1 -1
  137. package/esm/config/config-setter.d.mts +2 -4
  138. package/esm/config/config-setter.d.mts.map +1 -1
  139. package/esm/config/config-setter.mjs +2 -2
  140. package/esm/config/config-setter.mjs.map +1 -1
  141. package/esm/config/config-special-handlers.d.mts +2 -4
  142. package/esm/config/config-special-handlers.d.mts.map +1 -1
  143. package/esm/config/index.d.mts +2 -1
  144. package/esm/config/index.mjs +1 -1
  145. package/esm/config/types.d.mts +4 -5
  146. package/esm/config/types.d.mts.map +1 -1
  147. package/esm/connectors/access-connector.d.mts +1 -3
  148. package/esm/connectors/access-connector.d.mts.map +1 -1
  149. package/esm/connectors/access-connector.mjs +2 -2
  150. package/esm/connectors/access-connector.mjs.map +1 -1
  151. package/esm/connectors/ai-connector.d.mts +1 -3
  152. package/esm/connectors/ai-connector.d.mts.map +1 -1
  153. package/esm/connectors/ai-connector.mjs +2 -2
  154. package/esm/connectors/ai-connector.mjs.map +1 -1
  155. package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -3
  156. package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
  157. package/esm/connectors/assert-unique-connector-names.d.mts +1 -3
  158. package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
  159. package/esm/connectors/assert-unique-connector-names.mjs +2 -1
  160. package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
  161. package/esm/connectors/base-connector.d.mts +1 -3
  162. package/esm/connectors/base-connector.d.mts.map +1 -1
  163. package/esm/connectors/cache-connector.d.mts +1 -3
  164. package/esm/connectors/cache-connector.d.mts.map +1 -1
  165. package/esm/connectors/cache-connector.mjs +3 -3
  166. package/esm/connectors/cache-connector.mjs.map +1 -1
  167. package/esm/connectors/connectors-manager.d.mts +2 -4
  168. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  169. package/esm/connectors/connectors-manager.mjs +3 -6
  170. package/esm/connectors/connectors-manager.mjs.map +1 -1
  171. package/esm/connectors/database-connector.d.mts +1 -3
  172. package/esm/connectors/database-connector.d.mts.map +1 -1
  173. package/esm/connectors/database-connector.mjs +2 -2
  174. package/esm/connectors/database-connector.mjs.map +1 -1
  175. package/esm/connectors/describe-server-address.mjs +4 -4
  176. package/esm/connectors/describe-server-address.mjs.map +1 -1
  177. package/esm/connectors/herald-connector.d.mts +1 -3
  178. package/esm/connectors/herald-connector.d.mts.map +1 -1
  179. package/esm/connectors/herald-connector.mjs +2 -2
  180. package/esm/connectors/herald-connector.mjs.map +1 -1
  181. package/esm/connectors/http-connector.d.mts +1 -3
  182. package/esm/connectors/http-connector.d.mts.map +1 -1
  183. package/esm/connectors/http-connector.mjs +8 -7
  184. package/esm/connectors/http-connector.mjs.map +1 -1
  185. package/esm/connectors/index.d.mts +2 -1
  186. package/esm/connectors/index.mjs +1 -1
  187. package/esm/connectors/logger-connector.d.mts +1 -3
  188. package/esm/connectors/logger-connector.d.mts.map +1 -1
  189. package/esm/connectors/logger-connector.mjs +2 -2
  190. package/esm/connectors/logger-connector.mjs.map +1 -1
  191. package/esm/connectors/mail-connector.d.mts +1 -3
  192. package/esm/connectors/mail-connector.d.mts.map +1 -1
  193. package/esm/connectors/mail-connector.mjs +2 -2
  194. package/esm/connectors/mail-connector.mjs.map +1 -1
  195. package/esm/connectors/notifications-connector.d.mts +1 -3
  196. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  197. package/esm/connectors/notifications-connector.mjs +2 -2
  198. package/esm/connectors/notifications-connector.mjs.map +1 -1
  199. package/esm/connectors/register-configured-connectors.d.mts +2 -4
  200. package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
  201. package/esm/connectors/shutdown-timeout.mjs +7 -0
  202. package/esm/connectors/shutdown-timeout.mjs.map +1 -0
  203. package/esm/connectors/socket-connector.d.mts +1 -3
  204. package/esm/connectors/socket-connector.d.mts.map +1 -1
  205. package/esm/connectors/socket-connector.mjs +20 -11
  206. package/esm/connectors/socket-connector.mjs.map +1 -1
  207. package/esm/connectors/storage.connector.d.mts +1 -3
  208. package/esm/connectors/storage.connector.d.mts.map +1 -1
  209. package/esm/connectors/storage.connector.mjs +2 -2
  210. package/esm/connectors/storage.connector.mjs.map +1 -1
  211. package/esm/connectors/types.d.mts +17 -14
  212. package/esm/connectors/types.d.mts.map +1 -1
  213. package/esm/container/container-instance-registry.mjs.map +1 -1
  214. package/esm/container/development-app-modules.d.mts +7 -5
  215. package/esm/container/development-app-modules.d.mts.map +1 -1
  216. package/esm/container/development-model-modules.d.mts +6 -5
  217. package/esm/container/development-model-modules.d.mts.map +1 -1
  218. package/esm/container/index.d.mts +4 -4
  219. package/esm/container/index.d.mts.map +1 -1
  220. package/esm/database/index.d.mts +3 -1
  221. package/esm/database/index.mjs +1 -1
  222. package/esm/database/migrate-action.mjs +1 -1
  223. package/esm/database/models/database-log/database-log.d.mts +2 -3
  224. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  225. package/esm/database/models/database-log/index.d.mts +2 -1
  226. package/esm/database/models/database-log/index.mjs +1 -1
  227. package/esm/database/seed-command-action.mjs +1 -1
  228. package/esm/database/seeds/seeder.d.mts +2 -4
  229. package/esm/database/seeds/seeder.d.mts.map +1 -1
  230. package/esm/database/seeds/seeder.errors.d.mts +2 -3
  231. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  232. package/esm/database/seeds/seeders.manager.mjs +2 -1
  233. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  234. package/esm/database/seeds/types.d.mts +7 -8
  235. package/esm/database/seeds/types.d.mts.map +1 -1
  236. package/esm/database/utils.d.mts +4 -5
  237. package/esm/database/utils.d.mts.map +1 -1
  238. package/esm/dev-server/app-module-registry.mjs +1 -1
  239. package/esm/dev-server/create-worker.mjs +5 -3
  240. package/esm/dev-server/create-worker.mjs.map +1 -1
  241. package/esm/dev-server/dependency-graph.d.mts +1 -3
  242. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  243. package/esm/dev-server/dependency-graph.mjs +1 -1
  244. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  245. package/esm/dev-server/extract-translation-keys.mjs +16 -17
  246. package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
  247. package/esm/dev-server/file-manager.d.mts +3 -7
  248. package/esm/dev-server/file-manager.d.mts.map +1 -1
  249. package/esm/dev-server/file-operations.d.mts +1 -3
  250. package/esm/dev-server/file-operations.d.mts.map +1 -1
  251. package/esm/dev-server/files-watcher.mjs +12 -11
  252. package/esm/dev-server/files-watcher.mjs.map +1 -1
  253. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +6 -8
  254. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  255. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +36 -115
  256. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  257. package/esm/dev-server/health-checker/default-health-checkers.mjs +6 -15
  258. package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -1
  259. package/esm/dev-server/health-checker/eslint-support.mjs +27 -0
  260. package/esm/dev-server/health-checker/eslint-support.mjs.map +1 -0
  261. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +7 -6
  262. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  263. package/esm/dev-server/health-checker/file-health-result.d.mts +2 -2
  264. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  265. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -0
  266. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  267. package/esm/dev-server/health-checker/oxlint-runner.mjs +6 -5
  268. package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -1
  269. package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +1 -1
  270. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +2 -11
  271. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
  272. package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -1
  273. package/esm/dev-server/health-checker/workers/ts-health.worker.d.mts +1 -1
  274. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +40 -174
  275. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  276. package/esm/dev-server/loader/hook-thread.d.mts +4 -8
  277. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  278. package/esm/dev-server/loader/load-hook.d.mts +10 -6
  279. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  280. package/esm/dev-server/loader/load-hook.mjs +4 -3
  281. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  282. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  283. package/esm/dev-server/loader/register-loader.mjs +3 -2
  284. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  285. package/esm/dev-server/loader/resolve-hook.d.mts +2 -2
  286. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  287. package/esm/dev-server/loader/resolve-hook.mjs +2 -1
  288. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  289. package/esm/dev-server/loader/transpile-cache.mjs +2 -1
  290. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  291. package/esm/dev-server/manifest-manager.d.mts +1 -3
  292. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  293. package/esm/dev-server/model-module-registry.mjs +3 -3
  294. package/esm/dev-server/model-module-registry.mjs.map +1 -1
  295. package/esm/dev-server/model-resource-typings.mjs +40 -47
  296. package/esm/dev-server/model-resource-typings.mjs.map +1 -1
  297. package/esm/dev-server/module-loader.mjs +2 -2
  298. package/esm/dev-server/module-loader.mjs.map +1 -1
  299. package/esm/dev-server/package-json-manager.mjs +1 -1
  300. package/esm/dev-server/parse-imports.mjs +6 -38
  301. package/esm/dev-server/parse-imports.mjs.map +1 -1
  302. package/esm/dev-server/read-config-ast.mjs +3 -33
  303. package/esm/dev-server/read-config-ast.mjs.map +1 -1
  304. package/esm/dev-server/ready-block.mjs +1 -1
  305. package/esm/dev-server/shortcuts.mjs +1 -1
  306. package/esm/dev-server/special-files-collector.d.mts +2 -4
  307. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  308. package/esm/dev-server/supervisor.mjs +1 -1
  309. package/esm/dev-server/tsconfig-manager.mjs +3 -3
  310. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  311. package/esm/dev-server/type-generator.mjs +28 -35
  312. package/esm/dev-server/type-generator.mjs.map +1 -1
  313. package/esm/dev-server/types.d.mts +3 -4
  314. package/esm/dev-server/types.d.mts.map +1 -1
  315. package/esm/dev-server/update-check-cache.mjs +2 -2
  316. package/esm/dev-server/update-check-cache.mjs.map +1 -1
  317. package/esm/encryption/encrypt.d.mts +2 -3
  318. package/esm/encryption/encrypt.d.mts.map +1 -1
  319. package/esm/encryption/hash.d.mts +1 -2
  320. package/esm/encryption/hash.d.mts.map +1 -1
  321. package/esm/encryption/index.mjs +1 -1
  322. package/esm/encryption/password.d.mts +2 -3
  323. package/esm/encryption/password.d.mts.map +1 -1
  324. package/esm/encryption/types.d.mts +2 -3
  325. package/esm/encryption/types.d.mts.map +1 -1
  326. package/esm/errors/error-codes.d.mts +29 -22
  327. package/esm/errors/error-codes.d.mts.map +1 -1
  328. package/esm/errors/warlock-error.d.mts +1 -3
  329. package/esm/errors/warlock-error.d.mts.map +1 -1
  330. package/esm/generations/add-command.action.mjs +3 -2
  331. package/esm/generations/add-command.action.mjs.map +1 -1
  332. package/esm/generations/features/bull-board.feature.mjs +2 -1
  333. package/esm/generations/features/bull-board.feature.mjs.map +1 -1
  334. package/esm/generations/features/index.mjs +2 -0
  335. package/esm/generations/features/index.mjs.map +1 -1
  336. package/esm/generations/features/notifications.feature.mjs +2 -1
  337. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  338. package/esm/generations/features/process.feature.mjs +65 -0
  339. package/esm/generations/features/process.feature.mjs.map +1 -0
  340. package/esm/generations/features/shared/merge-web-sitemap-config.mjs +16 -23
  341. package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
  342. package/esm/generations/features/shared/patch-tsconfig-include.mjs +1 -1
  343. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +1 -1
  344. package/esm/generations/features/sitemap.feature.mjs +2 -1
  345. package/esm/generations/features/sitemap.feature.mjs.map +1 -1
  346. package/esm/generations/generation-fs.mjs +1 -1
  347. package/esm/generations/generation-run.mjs +1 -1
  348. package/esm/generations/stubs.mjs +1 -1
  349. package/esm/generations/stubs.mjs.map +1 -1
  350. package/esm/http/boot-port-preflight.d.mts +4 -5
  351. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  352. package/esm/http/boot-port-preflight.mjs +2 -2
  353. package/esm/http/boot-port-preflight.mjs.map +1 -1
  354. package/esm/http/bounded-stream-queue.d.mts +4 -4
  355. package/esm/http/bounded-stream-queue.d.mts.map +1 -1
  356. package/esm/http/bounded-stream-queue.mjs +1 -1
  357. package/esm/http/bounded-stream-queue.mjs.map +1 -1
  358. package/esm/http/build-cors-options.mjs +2 -2
  359. package/esm/http/build-cors-options.mjs.map +1 -1
  360. package/esm/http/build-rate-limit-options.d.mts +2 -3
  361. package/esm/http/build-rate-limit-options.d.mts.map +1 -1
  362. package/esm/http/build-rate-limit-options.mjs +1 -1
  363. package/esm/http/build-rate-limit-options.mjs.map +1 -1
  364. package/esm/http/conditional-request.d.mts +14 -13
  365. package/esm/http/conditional-request.d.mts.map +1 -1
  366. package/esm/http/config.d.mts +2 -4
  367. package/esm/http/config.d.mts.map +1 -1
  368. package/esm/http/config.mjs +2 -2
  369. package/esm/http/config.mjs.map +1 -1
  370. package/esm/http/context/request-context.d.mts +6 -7
  371. package/esm/http/context/request-context.d.mts.map +1 -1
  372. package/esm/http/context/request-memo.d.mts +1 -2
  373. package/esm/http/context/request-memo.d.mts.map +1 -1
  374. package/esm/http/createHttpApplication.d.mts +2 -3
  375. package/esm/http/createHttpApplication.d.mts.map +1 -1
  376. package/esm/http/createHttpApplication.mjs +2 -2
  377. package/esm/http/createHttpApplication.mjs.map +1 -1
  378. package/esm/http/csp.d.mts +10 -12
  379. package/esm/http/csp.d.mts.map +1 -1
  380. package/esm/http/csp.mjs +2 -2
  381. package/esm/http/csp.mjs.map +1 -1
  382. package/esm/http/csrf-default-guard.d.mts +2 -4
  383. package/esm/http/csrf-default-guard.d.mts.map +1 -1
  384. package/esm/http/csrf-default-guard.mjs +1 -1
  385. package/esm/http/csrf-default-guard.mjs.map +1 -1
  386. package/esm/http/csrf-origin-policy.d.mts +7 -9
  387. package/esm/http/csrf-origin-policy.d.mts.map +1 -1
  388. package/esm/http/csrf-origin-policy.mjs +2 -2
  389. package/esm/http/csrf-origin-policy.mjs.map +1 -1
  390. package/esm/http/database/RequestLog.d.mts +2 -3
  391. package/esm/http/database/RequestLog.d.mts.map +1 -1
  392. package/esm/http/error-codes.d.mts +1 -2
  393. package/esm/http/error-codes.d.mts.map +1 -1
  394. package/esm/http/error-mapper.d.mts +2 -4
  395. package/esm/http/error-mapper.d.mts.map +1 -1
  396. package/esm/http/error-mapper.mjs +2 -2
  397. package/esm/http/error-mapper.mjs.map +1 -1
  398. package/esm/http/errors/errors.d.mts +28 -29
  399. package/esm/http/errors/errors.d.mts.map +1 -1
  400. package/esm/http/escape-header-value.d.mts +1 -2
  401. package/esm/http/escape-header-value.d.mts.map +1 -1
  402. package/esm/http/events.d.mts +2 -4
  403. package/esm/http/events.d.mts.map +1 -1
  404. package/esm/http/health.d.mts +4 -4
  405. package/esm/http/health.d.mts.map +1 -1
  406. package/esm/http/index.d.mts +4 -1
  407. package/esm/http/index.mjs +1 -1
  408. package/esm/http/middleware/cache-response-middleware.d.mts +2 -4
  409. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  410. package/esm/http/middleware/concurrency-limit.middleware.d.mts +3 -3
  411. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  412. package/esm/http/middleware/idempotency.middleware.d.mts +3 -3
  413. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  414. package/esm/http/middleware/idempotency.middleware.mjs +6 -6
  415. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  416. package/esm/http/middleware/index.d.mts +3 -1
  417. package/esm/http/middleware/index.mjs +1 -1
  418. package/esm/http/middleware/inject-request-context.d.mts +2 -4
  419. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  420. package/esm/http/middleware/inject-request-context.mjs +3 -3
  421. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  422. package/esm/http/middleware/ip-filter.middleware.d.mts +3 -3
  423. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  424. package/esm/http/middleware/maintenance.middleware.d.mts +3 -3
  425. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  426. package/esm/http/middleware/maintenance.middleware.mjs +4 -4
  427. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  428. package/esm/http/middleware/max-body-size.middleware.d.mts +2 -2
  429. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  430. package/esm/http/middleware/middleware-list.d.mts +1 -3
  431. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  432. package/esm/http/middleware/rate-limit.middleware.d.mts +3 -3
  433. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  434. package/esm/http/middleware/rate-limit.middleware.mjs +2 -2
  435. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  436. package/esm/http/middleware/utils/cidr-match.d.mts +2 -3
  437. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  438. package/esm/http/middleware/utils/idempotency-key.d.mts +3 -5
  439. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  440. package/esm/http/middleware/utils/index.d.mts +2 -1
  441. package/esm/http/middleware/utils/parse-size.d.mts +1 -2
  442. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  443. package/esm/http/middleware/utils/parse-size.mjs +2 -2
  444. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  445. package/esm/http/plugins.d.mts +2 -4
  446. package/esm/http/plugins.d.mts.map +1 -1
  447. package/esm/http/plugins.mjs +10 -10
  448. package/esm/http/plugins.mjs.map +1 -1
  449. package/esm/http/port-preflight.d.mts +3 -4
  450. package/esm/http/port-preflight.d.mts.map +1 -1
  451. package/esm/http/port-preflight.mjs +2 -0
  452. package/esm/http/port-preflight.mjs.map +1 -1
  453. package/esm/http/rate-limit-cache-store.mjs +4 -3
  454. package/esm/http/rate-limit-cache-store.mjs.map +1 -1
  455. package/esm/http/ready-report.d.mts +15 -10
  456. package/esm/http/ready-report.d.mts.map +1 -1
  457. package/esm/http/request-controller.d.mts +1 -3
  458. package/esm/http/request-controller.d.mts.map +1 -1
  459. package/esm/http/request-log-snapshot.d.mts +20 -16
  460. package/esm/http/request-log-snapshot.d.mts.map +1 -1
  461. package/esm/http/request-log-snapshot.mjs +3 -3
  462. package/esm/http/request-log-snapshot.mjs.map +1 -1
  463. package/esm/http/request.d.mts +8 -7
  464. package/esm/http/request.d.mts.map +1 -1
  465. package/esm/http/request.mjs +8 -7
  466. package/esm/http/request.mjs.map +1 -1
  467. package/esm/http/response.d.mts +12 -11
  468. package/esm/http/response.d.mts.map +1 -1
  469. package/esm/http/response.mjs +7 -7
  470. package/esm/http/response.mjs.map +1 -1
  471. package/esm/http/safe-redirect.d.mts +3 -4
  472. package/esm/http/safe-redirect.d.mts.map +1 -1
  473. package/esm/http/serialized.d.mts +12 -13
  474. package/esm/http/serialized.d.mts.map +1 -1
  475. package/esm/http/server-rebuilt.d.mts +3 -5
  476. package/esm/http/server-rebuilt.d.mts.map +1 -1
  477. package/esm/http/server.d.mts +9 -9
  478. package/esm/http/server.d.mts.map +1 -1
  479. package/esm/http/server.mjs +4 -4
  480. package/esm/http/server.mjs.map +1 -1
  481. package/esm/http/stream-react-response.d.mts +7 -7
  482. package/esm/http/stream-react-response.d.mts.map +1 -1
  483. package/esm/http/tracing/index.mjs +1 -1
  484. package/esm/http/tracing/trace-id.d.mts +2 -3
  485. package/esm/http/tracing/trace-id.d.mts.map +1 -1
  486. package/esm/http/tracing/tracing-dispatcher.d.mts +10 -11
  487. package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
  488. package/esm/http/tracing/tracing-dispatcher.mjs +2 -2
  489. package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
  490. package/esm/http/tracing/tracing.type.d.mts +11 -9
  491. package/esm/http/tracing/tracing.type.d.mts.map +1 -1
  492. package/esm/http/types.d.mts +49 -43
  493. package/esm/http/types.d.mts.map +1 -1
  494. package/esm/http/uploaded-file.d.mts +6 -5
  495. package/esm/http/uploaded-file.d.mts.map +1 -1
  496. package/esm/http/uploads/generate-image-variants.d.mts +6 -6
  497. package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
  498. package/esm/http/uploads/generate-image-variants.mjs +1 -1
  499. package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
  500. package/esm/http/uploads/image-variant-cache-entries.mjs +1 -1
  501. package/esm/http/uploads/image-variant-cache.mjs +8 -8
  502. package/esm/http/uploads/image-variant-cache.mjs.map +1 -1
  503. package/esm/http/uploads/image-variant-types.d.mts +7 -9
  504. package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
  505. package/esm/http/uploads/image-variants-config-error.d.mts +1 -2
  506. package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
  507. package/esm/http/uploads/index.d.mts +2 -1
  508. package/esm/http/uploads/index.mjs +1 -1
  509. package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
  510. package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
  511. package/esm/http/uploads/purge-image-variants.d.mts +2 -4
  512. package/esm/http/uploads/purge-image-variants.d.mts.map +1 -1
  513. package/esm/http/uploads/resolve-image-variant.d.mts +3 -5
  514. package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -1
  515. package/esm/http/uploads/resolve-image-variants-config.mjs +4 -4
  516. package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
  517. package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
  518. package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
  519. package/esm/http/uploads/trim-image-variant-cache.mjs +3 -3
  520. package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -1
  521. package/esm/http/uploads/uploaded-file.controller.d.mts +6 -5
  522. package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
  523. package/esm/http/uploads/uploaded-file.controller.mjs +2 -1
  524. package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
  525. package/esm/http/uploads/variant-cache-key.mjs +1 -1
  526. package/esm/http/uploads-config.d.mts +2 -4
  527. package/esm/http/uploads-config.d.mts.map +1 -1
  528. package/esm/http/uploads-types.d.mts +19 -17
  529. package/esm/http/uploads-types.d.mts.map +1 -1
  530. package/esm/http/xmlable.d.mts +1 -2
  531. package/esm/http/xmlable.d.mts.map +1 -1
  532. package/esm/image/image.d.mts +6 -7
  533. package/esm/image/image.d.mts.map +1 -1
  534. package/esm/image/image.mjs.map +1 -1
  535. package/esm/image/index.d.mts +2 -1
  536. package/esm/image/index.mjs +1 -1
  537. package/esm/index.d.mts +28 -2
  538. package/esm/index.mjs +7 -2
  539. package/esm/loader/app-module-importer.d.mts +1 -2
  540. package/esm/loader/app-module-importer.d.mts.map +1 -1
  541. package/esm/localization/index.mjs +1 -1
  542. package/esm/localization/parse-locale-dictionary.d.mts +4 -5
  543. package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
  544. package/esm/localization/parse-locale-dictionary.mjs +1 -1
  545. package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
  546. package/esm/localization/register-locale-dictionary.d.mts +3 -4
  547. package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
  548. package/esm/localization/register-locale-dictionary.mjs +2 -2
  549. package/esm/localization/register-locale-dictionary.mjs.map +1 -1
  550. package/esm/logger/fatal-visibility.d.mts +1 -2
  551. package/esm/logger/fatal-visibility.d.mts.map +1 -1
  552. package/esm/logger/index.d.mts +2 -1
  553. package/esm/logger/index.mjs +1 -1
  554. package/esm/logger/logger.d.mts +1 -3
  555. package/esm/logger/logger.d.mts.map +1 -1
  556. package/esm/logger/types.d.mts +2 -3
  557. package/esm/logger/types.d.mts.map +1 -1
  558. package/esm/mail/config.d.mts +12 -14
  559. package/esm/mail/config.d.mts.map +1 -1
  560. package/esm/mail/events.d.mts +4 -6
  561. package/esm/mail/events.d.mts.map +1 -1
  562. package/esm/mail/index.d.mts +2 -1
  563. package/esm/mail/index.mjs +1 -1
  564. package/esm/mail/mail.d.mts +1 -3
  565. package/esm/mail/mail.d.mts.map +1 -1
  566. package/esm/mail/mailer-pool.d.mts +5 -7
  567. package/esm/mail/mailer-pool.d.mts.map +1 -1
  568. package/esm/mail/react-mail.d.mts +1 -3
  569. package/esm/mail/react-mail.d.mts.map +1 -1
  570. package/esm/mail/send-mail.d.mts +1 -3
  571. package/esm/mail/send-mail.d.mts.map +1 -1
  572. package/esm/mail/send-mail.mjs +2 -1
  573. package/esm/mail/send-mail.mjs.map +1 -1
  574. package/esm/mail/test-mailbox.d.mts +11 -13
  575. package/esm/mail/test-mailbox.d.mts.map +1 -1
  576. package/esm/mail/types.d.mts +17 -18
  577. package/esm/mail/types.d.mts.map +1 -1
  578. package/esm/manifest/manifest-manager.mjs +1 -1
  579. package/esm/openapi/build-openapi-document.d.mts +2 -4
  580. package/esm/openapi/build-openapi-document.d.mts.map +1 -1
  581. package/esm/openapi/cast-schema.mjs +1 -1
  582. package/esm/openapi/development-openapi-provider.d.mts +5 -6
  583. package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
  584. package/esm/openapi/index.d.mts +3 -1
  585. package/esm/openapi/index.mjs +1 -1
  586. package/esm/openapi/openapi-child-output.mjs +2 -2
  587. package/esm/openapi/openapi-child-output.mjs.map +1 -1
  588. package/esm/openapi/postman/build-request-url.mjs +1 -1
  589. package/esm/openapi/postman/example-from-schema.d.mts +1 -3
  590. package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
  591. package/esm/openapi/postman/index.d.mts +2 -1
  592. package/esm/openapi/postman/openapi-to-postman-collection.d.mts +3 -5
  593. package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
  594. package/esm/openapi/postman/postman-types.d.mts +19 -18
  595. package/esm/openapi/postman/postman-types.d.mts.map +1 -1
  596. package/esm/openapi/postman/schema-refs.d.mts +1 -3
  597. package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
  598. package/esm/openapi/postman/uuid-v5.mjs +1 -1
  599. package/esm/openapi/schema-registry.d.mts +1 -1
  600. package/esm/openapi/security.mjs +1 -1
  601. package/esm/openapi/types.d.mts +23 -21
  602. package/esm/openapi/types.d.mts.map +1 -1
  603. package/esm/production/assert-generated-imports.mjs +1 -1
  604. package/esm/production/build-contributions.mjs +1 -1
  605. package/esm/production/bundle-framework-dependencies.mjs +1 -1
  606. package/esm/production/dist-build-manifest.mjs +1 -1
  607. package/esm/production/esbuild-plugins.mjs.map +1 -1
  608. package/esm/production/esbuild-preflight.mjs +1 -1
  609. package/esm/production/production-builder.mjs +2 -1
  610. package/esm/production/production-builder.mjs.map +1 -1
  611. package/esm/production/production-supervisor.mjs +1 -1
  612. package/esm/production/registration-child-runner.mjs +4 -3
  613. package/esm/production/registration-child-runner.mjs.map +1 -1
  614. package/esm/production/resolve-build-config.d.mts +4 -4
  615. package/esm/production/resolve-build-config.d.mts.map +1 -1
  616. package/esm/production/resolve-build-config.mjs +1 -1
  617. package/esm/production/route-registration-child.d.mts +1 -1
  618. package/esm/production/route-registration-child.mjs +8 -7
  619. package/esm/production/route-registration-child.mjs.map +1 -1
  620. package/esm/production/tsconfig-path-aliases.mjs +1 -1
  621. package/esm/react/index.d.mts +1 -3
  622. package/esm/react/index.d.mts.map +1 -1
  623. package/esm/react/index.mjs.map +1 -1
  624. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +3 -4
  625. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  626. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +2 -3
  627. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  628. package/esm/repositories/adapters/cascade/filter-applicator.mjs +10 -9
  629. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  630. package/esm/repositories/adapters/cascade/index.d.mts +2 -1
  631. package/esm/repositories/adapters/cascade/index.mjs +1 -1
  632. package/esm/repositories/contracts/index.d.mts +2 -1
  633. package/esm/repositories/contracts/query-builder.contract.d.mts +4 -6
  634. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  635. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -3
  636. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  637. package/esm/repositories/contracts/types.d.mts +23 -25
  638. package/esm/repositories/contracts/types.d.mts.map +1 -1
  639. package/esm/repositories/index.d.mts +4 -1
  640. package/esm/repositories/index.mjs +1 -1
  641. package/esm/repositories/repository.manager.d.mts +2 -3
  642. package/esm/repositories/repository.manager.d.mts.map +1 -1
  643. package/esm/repositories/repository.manager.mjs +2 -2
  644. package/esm/repositories/repository.manager.mjs.map +1 -1
  645. package/esm/resource/define-resource.d.mts +3 -5
  646. package/esm/resource/define-resource.d.mts.map +1 -1
  647. package/esm/resource/index.d.mts +2 -1
  648. package/esm/resource/index.mjs +1 -1
  649. package/esm/resource/nullable-resource.d.mts +5 -7
  650. package/esm/resource/nullable-resource.d.mts.map +1 -1
  651. package/esm/resource/register-resource.d.mts +1 -3
  652. package/esm/resource/register-resource.d.mts.map +1 -1
  653. package/esm/resource/resource-field-builder.d.mts +1 -3
  654. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  655. package/esm/resource/resource.d.mts +3 -5
  656. package/esm/resource/resource.d.mts.map +1 -1
  657. package/esm/resource/resource.mjs +4 -2
  658. package/esm/resource/resource.mjs.map +1 -1
  659. package/esm/resource/types.d.mts +21 -21
  660. package/esm/resource/types.d.mts.map +1 -1
  661. package/esm/restful/index.d.mts +2 -1
  662. package/esm/restful/index.mjs +1 -1
  663. package/esm/restful/restful.d.mts +12 -32
  664. package/esm/restful/restful.d.mts.map +1 -1
  665. package/esm/router/index.d.mts +2 -1
  666. package/esm/router/index.mjs +1 -1
  667. package/esm/router/named-api-routes-with-responses.mjs +2 -1
  668. package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
  669. package/esm/router/normalize-request-path.d.mts +1 -2
  670. package/esm/router/normalize-request-path.d.mts.map +1 -1
  671. package/esm/router/normalize-route-path.d.mts +1 -2
  672. package/esm/router/normalize-route-path.d.mts.map +1 -1
  673. package/esm/router/positional-handler-diagnostics.d.mts +15 -13
  674. package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
  675. package/esm/router/resolve-route-rate-limit.mjs +3 -3
  676. package/esm/router/resolve-route-rate-limit.mjs.map +1 -1
  677. package/esm/router/route-builder.d.mts +1 -3
  678. package/esm/router/route-builder.d.mts.map +1 -1
  679. package/esm/router/route-guard-names.mjs +1 -1
  680. package/esm/router/route-guard-names.mjs.map +1 -1
  681. package/esm/router/route-name-method-suffix.d.mts +2 -3
  682. package/esm/router/route-name-method-suffix.d.mts.map +1 -1
  683. package/esm/router/route-name-taken-error.d.mts +1 -3
  684. package/esm/router/route-name-taken-error.d.mts.map +1 -1
  685. package/esm/router/route-registry.d.mts +1 -3
  686. package/esm/router/route-registry.d.mts.map +1 -1
  687. package/esm/router/router.d.mts +2 -4
  688. package/esm/router/router.d.mts.map +1 -1
  689. package/esm/router/router.mjs +8 -6
  690. package/esm/router/router.mjs.map +1 -1
  691. package/esm/router/types.d.mts +25 -26
  692. package/esm/router/types.d.mts.map +1 -1
  693. package/esm/router/unguarded-route-diagnostics.d.mts +6 -8
  694. package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -1
  695. package/esm/secrets/errors.d.mts +9 -0
  696. package/esm/secrets/errors.d.mts.map +1 -0
  697. package/esm/secrets/errors.mjs +22 -0
  698. package/esm/secrets/errors.mjs.map +1 -0
  699. package/esm/secrets/file-backend.mjs +167 -0
  700. package/esm/secrets/file-backend.mjs.map +1 -0
  701. package/esm/secrets/index.d.mts +6 -0
  702. package/esm/secrets/index.mjs +6 -0
  703. package/esm/secrets/keyring-backend.mjs +50 -0
  704. package/esm/secrets/keyring-backend.mjs.map +1 -0
  705. package/esm/secrets/memory-backend.d.mts +12 -0
  706. package/esm/secrets/memory-backend.d.mts.map +1 -0
  707. package/esm/secrets/memory-backend.mjs +28 -0
  708. package/esm/secrets/memory-backend.mjs.map +1 -0
  709. package/esm/secrets/secret-store.d.mts +25 -0
  710. package/esm/secrets/secret-store.d.mts.map +1 -0
  711. package/esm/secrets/secret-store.mjs +117 -0
  712. package/esm/secrets/secret-store.mjs.map +1 -0
  713. package/esm/secrets/secrets.d.mts +11 -0
  714. package/esm/secrets/secrets.d.mts.map +1 -0
  715. package/esm/secrets/secrets.mjs +63 -0
  716. package/esm/secrets/secrets.mjs.map +1 -0
  717. package/esm/secrets/types.d.mts +22 -0
  718. package/esm/secrets/types.d.mts.map +1 -0
  719. package/esm/socket/index.d.mts +2 -1
  720. package/esm/socket/index.mjs +2 -2
  721. package/esm/socket/types.d.mts +2 -4
  722. package/esm/socket/types.d.mts.map +1 -1
  723. package/esm/socket/utils.d.mts +8 -3
  724. package/esm/socket/utils.d.mts.map +1 -1
  725. package/esm/socket/utils.mjs +12 -1
  726. package/esm/socket/utils.mjs.map +1 -1
  727. package/esm/storage/config.d.mts +4 -6
  728. package/esm/storage/config.d.mts.map +1 -1
  729. package/esm/storage/context/storage-driver-context.d.mts +3 -4
  730. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  731. package/esm/storage/drivers/cloud-driver.d.mts +2 -4
  732. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  733. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  734. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -3
  735. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  736. package/esm/storage/drivers/local-driver.d.mts +2 -3
  737. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  738. package/esm/storage/drivers/local-driver.mjs +8 -3
  739. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  740. package/esm/storage/drivers/r2-driver.d.mts +1 -3
  741. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  742. package/esm/storage/drivers/s3-driver.d.mts +1 -3
  743. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  744. package/esm/storage/index.d.mts +2 -1
  745. package/esm/storage/index.mjs +1 -1
  746. package/esm/storage/local-disk-roots.mjs +2 -2
  747. package/esm/storage/local-disk-roots.mjs.map +1 -1
  748. package/esm/storage/scoped-storage.d.mts +2 -3
  749. package/esm/storage/scoped-storage.d.mts.map +1 -1
  750. package/esm/storage/storage-file.d.mts +1 -3
  751. package/esm/storage/storage-file.d.mts.map +1 -1
  752. package/esm/storage/storage.d.mts +3 -4
  753. package/esm/storage/storage.d.mts.map +1 -1
  754. package/esm/storage/types.d.mts +36 -36
  755. package/esm/storage/types.d.mts.map +1 -1
  756. package/esm/storage/utils/classify-ip-address.d.mts +1 -2
  757. package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
  758. package/esm/storage/utils/contain-path.d.mts +1 -2
  759. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  760. package/esm/storage/utils/mime.d.mts +2 -3
  761. package/esm/storage/utils/mime.d.mts.map +1 -1
  762. package/esm/storage/utils/safe-fetch.d.mts +6 -6
  763. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  764. package/esm/storage/utils/safe-fetch.mjs +3 -3
  765. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  766. package/esm/storage/utils/storage-capability-error.d.mts +1 -3
  767. package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
  768. package/esm/storage/utils/storage-error.d.mts +2 -3
  769. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  770. package/esm/storage/utils/storage-not-initialized-error.d.mts +1 -2
  771. package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
  772. package/esm/tests/authenticated-test-client.d.mts +5 -6
  773. package/esm/tests/authenticated-test-client.d.mts.map +1 -1
  774. package/esm/tests/factories.d.mts +38 -23
  775. package/esm/tests/factories.d.mts.map +1 -1
  776. package/esm/tests/fakes/cache-fake.d.mts +14 -9
  777. package/esm/tests/fakes/cache-fake.d.mts.map +1 -1
  778. package/esm/tests/fakes/clock-fake.d.mts +13 -8
  779. package/esm/tests/fakes/clock-fake.d.mts.map +1 -1
  780. package/esm/tests/fakes/fake-assertion-error.d.mts +2 -3
  781. package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -1
  782. package/esm/tests/fakes/ids-fake.d.mts +5 -4
  783. package/esm/tests/fakes/ids-fake.d.mts.map +1 -1
  784. package/esm/tests/fakes/index.d.mts +3 -1
  785. package/esm/tests/fakes/index.mjs +2 -1
  786. package/esm/tests/fakes/mail-fake.d.mts +21 -13
  787. package/esm/tests/fakes/mail-fake.d.mts.map +1 -1
  788. package/esm/tests/fakes/queue-fake.d.mts +21 -13
  789. package/esm/tests/fakes/queue-fake.d.mts.map +1 -1
  790. package/esm/tests/fakes/secrets-fake.d.mts +13 -0
  791. package/esm/tests/fakes/secrets-fake.d.mts.map +1 -0
  792. package/esm/tests/fakes/secrets-fake.mjs +50 -0
  793. package/esm/tests/fakes/secrets-fake.mjs.map +1 -0
  794. package/esm/tests/fakes/storage-fake.d.mts +12 -8
  795. package/esm/tests/fakes/storage-fake.d.mts.map +1 -1
  796. package/esm/tests/fakes/storage-fake.mjs +1 -1
  797. package/esm/tests/fakes/test-fakes.d.mts +9 -10
  798. package/esm/tests/fakes/test-fakes.d.mts.map +1 -1
  799. package/esm/tests/fakes/test-fakes.mjs +6 -3
  800. package/esm/tests/fakes/test-fakes.mjs.map +1 -1
  801. package/esm/tests/index.d.mts +3 -1
  802. package/esm/tests/index.mjs +2 -1
  803. package/esm/tests/snapshot-response.d.mts +4 -5
  804. package/esm/tests/snapshot-response.d.mts.map +1 -1
  805. package/esm/tests/start-http-development-server.d.mts +4 -6
  806. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  807. package/esm/tests/start-http-development-server.mjs +5 -5
  808. package/esm/tests/start-http-development-server.mjs.map +1 -1
  809. package/esm/tests/test-connectors-selection.d.mts +2 -2
  810. package/esm/tests/test-connectors-selection.d.mts.map +1 -1
  811. package/esm/tests/test-connectors-selection.mjs +1 -1
  812. package/esm/tests/test-helpers.d.mts +11 -12
  813. package/esm/tests/test-helpers.d.mts.map +1 -1
  814. package/esm/tests/test-http-server.d.mts +14 -10
  815. package/esm/tests/test-http-server.d.mts.map +1 -1
  816. package/esm/tests/test-lifecycle-state.mjs +1 -1
  817. package/esm/tests/vitest-setup.d.mts +7 -8
  818. package/esm/tests/vitest-setup.d.mts.map +1 -1
  819. package/esm/tests/vitest-setup.mjs.map +1 -1
  820. package/esm/tooling/agents-md/agents-md-markers.d.mts +4 -5
  821. package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -1
  822. package/esm/tooling/agents-md/agents-md-markers.mjs +2 -1
  823. package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -1
  824. package/esm/tooling/agents-md/agents-md-refresher.d.mts +19 -12
  825. package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -1
  826. package/esm/tooling/agents-md/installed-skills.d.mts +13 -9
  827. package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -1
  828. package/esm/tooling/agents-md/render-agents-md.d.mts +8 -7
  829. package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -1
  830. package/esm/tooling/agents-md/render-agents-md.mjs +2 -2
  831. package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -1
  832. package/esm/tooling/agents-md/write-agents-md.d.mts +17 -12
  833. package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -1
  834. package/esm/tooling/board/board-message.d.mts +4 -6
  835. package/esm/tooling/board/board-message.d.mts.map +1 -1
  836. package/esm/tooling/board/board.d.mts +50 -38
  837. package/esm/tooling/board/board.d.mts.map +1 -1
  838. package/esm/tooling/board/board.mjs +4 -3
  839. package/esm/tooling/board/board.mjs.map +1 -1
  840. package/esm/tooling/board/board.types.d.mts +32 -23
  841. package/esm/tooling/board/board.types.d.mts.map +1 -1
  842. package/esm/tooling/check/changed-files.d.mts +4 -6
  843. package/esm/tooling/check/changed-files.d.mts.map +1 -1
  844. package/esm/tooling/check/changed-files.mjs +2 -2
  845. package/esm/tooling/check/changed-files.mjs.map +1 -1
  846. package/esm/tooling/check/check-report.types.d.mts +22 -17
  847. package/esm/tooling/check/check-report.types.d.mts.map +1 -1
  848. package/esm/tooling/check/code-style-conventions.mjs +25 -25
  849. package/esm/tooling/check/code-style-conventions.mjs.map +1 -1
  850. package/esm/tooling/check/conventions-step.d.mts +4 -6
  851. package/esm/tooling/check/conventions-step.d.mts.map +1 -1
  852. package/esm/tooling/check/conventions-step.mjs +7 -18
  853. package/esm/tooling/check/conventions-step.mjs.map +1 -1
  854. package/esm/tooling/check/environment-step.d.mts +2 -4
  855. package/esm/tooling/check/environment-step.d.mts.map +1 -1
  856. package/esm/tooling/check/environment-step.mjs +1 -1
  857. package/esm/tooling/check/index.mjs +1 -1
  858. package/esm/tooling/check/lint-step.d.mts +5 -12
  859. package/esm/tooling/check/lint-step.d.mts.map +1 -1
  860. package/esm/tooling/check/lint-step.mjs +16 -12
  861. package/esm/tooling/check/lint-step.mjs.map +1 -1
  862. package/esm/tooling/check/request-input.mjs +15 -15
  863. package/esm/tooling/check/request-input.mjs.map +1 -1
  864. package/esm/tooling/check/run-check.d.mts +24 -14
  865. package/esm/tooling/check/run-check.d.mts.map +1 -1
  866. package/esm/tooling/check/run-check.mjs +2 -2
  867. package/esm/tooling/check/run-check.mjs.map +1 -1
  868. package/esm/tooling/check/run-tests.d.mts +22 -15
  869. package/esm/tooling/check/run-tests.d.mts.map +1 -1
  870. package/esm/tooling/check/security-conventions.mjs +133 -131
  871. package/esm/tooling/check/security-conventions.mjs.map +1 -1
  872. package/esm/tooling/check/source-ast.mjs +92 -132
  873. package/esm/tooling/check/source-ast.mjs.map +1 -1
  874. package/esm/tooling/check/tests-step.d.mts +7 -8
  875. package/esm/tooling/check/tests-step.d.mts.map +1 -1
  876. package/esm/tooling/check/tests-step.mjs +3 -3
  877. package/esm/tooling/check/tests-step.mjs.map +1 -1
  878. package/esm/tooling/dev-state/dev-server-state.d.mts +17 -13
  879. package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -1
  880. package/esm/tooling/devtools/devtools-client.d.mts +29 -20
  881. package/esm/tooling/devtools/devtools-client.d.mts.map +1 -1
  882. package/esm/tooling/generate/generation.d.mts +34 -22
  883. package/esm/tooling/generate/generation.d.mts.map +1 -1
  884. package/esm/tooling/generate/generation.mjs +9 -5
  885. package/esm/tooling/generate/generation.mjs.map +1 -1
  886. package/esm/tooling/generate/generator-spec.d.mts +9 -9
  887. package/esm/tooling/generate/generator-spec.d.mts.map +1 -1
  888. package/esm/tooling/generate/index.mjs +1 -1
  889. package/esm/tooling/generate/project-files.mjs +3 -3
  890. package/esm/tooling/generate/project-files.mjs.map +1 -1
  891. package/esm/tooling/generate/run-cli.d.mts +14 -11
  892. package/esm/tooling/generate/run-cli.d.mts.map +1 -1
  893. package/esm/tooling/generate/run-cli.mjs +2 -2
  894. package/esm/tooling/generate/run-cli.mjs.map +1 -1
  895. package/esm/tooling/generate/unified-diff.d.mts +10 -7
  896. package/esm/tooling/generate/unified-diff.d.mts.map +1 -1
  897. package/esm/tooling/index.d.mts +1 -0
  898. package/esm/tooling/inspect/boot-for-inspect.d.mts +7 -7
  899. package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -1
  900. package/esm/tooling/inspect/collect-config.mjs +3 -3
  901. package/esm/tooling/inspect/collect-config.mjs.map +1 -1
  902. package/esm/tooling/inspect/collect-models.d.mts +4 -3
  903. package/esm/tooling/inspect/collect-models.d.mts.map +1 -1
  904. package/esm/tooling/inspect/collect-models.mjs +1 -1
  905. package/esm/tooling/inspect/collect-packages.d.mts +1 -2
  906. package/esm/tooling/inspect/collect-packages.d.mts.map +1 -1
  907. package/esm/tooling/inspect/collect-pages.mjs +10 -10
  908. package/esm/tooling/inspect/collect-pages.mjs.map +1 -1
  909. package/esm/tooling/inspect/collect-routes.mjs +1 -1
  910. package/esm/tooling/inspect/event-recorder.d.mts +7 -7
  911. package/esm/tooling/inspect/event-recorder.d.mts.map +1 -1
  912. package/esm/tooling/inspect/index.d.mts +2 -1
  913. package/esm/tooling/inspect/index.mjs +1 -1
  914. package/esm/tooling/inspect/inspect-app.d.mts +25 -16
  915. package/esm/tooling/inspect/inspect-app.d.mts.map +1 -1
  916. package/esm/tooling/inspect/inspect-report.schema.d.mts +1 -2
  917. package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -1
  918. package/esm/tooling/inspect/inspect-report.types.d.mts +86 -54
  919. package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -1
  920. package/esm/tooling/mcp/create-mcp-context.d.mts +11 -8
  921. package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -1
  922. package/esm/tooling/mcp/db-schema.d.mts +10 -9
  923. package/esm/tooling/mcp/db-schema.d.mts.map +1 -1
  924. package/esm/tooling/mcp/docs-search.d.mts +20 -15
  925. package/esm/tooling/mcp/docs-search.d.mts.map +1 -1
  926. package/esm/tooling/mcp/index.mjs +1 -1
  927. package/esm/tooling/mcp/load-ai-tools.d.mts +7 -8
  928. package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -1
  929. package/esm/tooling/mcp/load-ai-tools.mjs +2 -1
  930. package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -1
  931. package/esm/tooling/mcp/mcp-tools.d.mts +29 -19
  932. package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -1
  933. package/esm/tooling/mcp/mcp-tools.mjs +3 -2
  934. package/esm/tooling/mcp/mcp-tools.mjs.map +1 -1
  935. package/esm/tooling/mcp/start-mcp-server.d.mts +24 -17
  936. package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -1
  937. package/esm/tooling/mcp/start-mcp-server.mjs +1 -1
  938. package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -1
  939. package/esm/tooling/mcp/tool-input.d.mts +7 -7
  940. package/esm/tooling/mcp/tool-input.d.mts.map +1 -1
  941. package/esm/tooling/problem.d.mts +27 -17
  942. package/esm/tooling/problem.d.mts.map +1 -1
  943. package/esm/tooling/syntax/ast.mjs +230 -0
  944. package/esm/tooling/syntax/ast.mjs.map +1 -0
  945. package/esm/tooling/syntax/imports.mjs +34 -0
  946. package/esm/tooling/syntax/imports.mjs.map +1 -0
  947. package/esm/tooling/trace/trace-report.types.d.mts +36 -22
  948. package/esm/tooling/trace/trace-report.types.d.mts.map +1 -1
  949. package/esm/tooling/trace/trace-request.d.mts +27 -20
  950. package/esm/tooling/trace/trace-request.d.mts.map +1 -1
  951. package/esm/tooling/trace/trace-request.mjs +2 -2
  952. package/esm/tooling/trace/trace-request.mjs.map +1 -1
  953. package/esm/tooling/typecheck/index.mjs +1 -1
  954. package/esm/tooling/typecheck/run-typecheck.d.mts +15 -48
  955. package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -1
  956. package/esm/tooling/typecheck/run-typecheck.mjs +42 -105
  957. package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -1
  958. package/esm/tooling/typescript/compiler.d.mts +31 -0
  959. package/esm/tooling/typescript/compiler.d.mts.map +1 -0
  960. package/esm/tooling/typescript/compiler.mjs +120 -0
  961. package/esm/tooling/typescript/compiler.mjs.map +1 -0
  962. package/esm/updater/update-warlock-packages.mjs +3 -2
  963. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  964. package/esm/upgrade/codemods/index.mjs +3 -1
  965. package/esm/upgrade/codemods/index.mjs.map +1 -1
  966. package/esm/upgrade/codemods/logger-sync-calls.mjs +1 -1
  967. package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -1
  968. package/esm/upgrade/codemods/oxc-toolchain.mjs +142 -0
  969. package/esm/upgrade/codemods/oxc-toolchain.mjs.map +1 -0
  970. package/esm/upgrade/codemods/request-log-snapshot.mjs +1 -1
  971. package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -1
  972. package/esm/upgrade/codemods/toolchain-templates.mjs +244 -0
  973. package/esm/upgrade/codemods/toolchain-templates.mjs.map +1 -0
  974. package/esm/upgrade/diff.mjs +1 -1
  975. package/esm/upgrade/diff.mjs.map +1 -1
  976. package/esm/upgrade/load-ts-morph.mjs +3 -2
  977. package/esm/upgrade/load-ts-morph.mjs.map +1 -1
  978. package/esm/upgrade/run-upgrade.mjs +26 -7
  979. package/esm/upgrade/run-upgrade.mjs.map +1 -1
  980. package/esm/use-cases/index.d.mts +2 -1
  981. package/esm/use-cases/index.mjs +1 -1
  982. package/esm/use-cases/types.d.mts +116 -63
  983. package/esm/use-cases/types.d.mts.map +1 -1
  984. package/esm/use-cases/use-case-broadcast.d.mts +1 -3
  985. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  986. package/esm/use-cases/use-case-events.d.mts +3 -5
  987. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  988. package/esm/use-cases/use-case-pipeline.d.mts +6 -6
  989. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  990. package/esm/use-cases/use-case.d.mts +2 -4
  991. package/esm/use-cases/use-case.d.mts.map +1 -1
  992. package/esm/use-cases/use-case.errors.d.mts +1 -3
  993. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  994. package/esm/use-cases/use-cases-registry.d.mts +8 -10
  995. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  996. package/esm/utils/app-log.d.mts +1 -2
  997. package/esm/utils/app-log.d.mts.map +1 -1
  998. package/esm/utils/clock.d.mts +8 -6
  999. package/esm/utils/clock.d.mts.map +1 -1
  1000. package/esm/utils/database-log.d.mts +3 -4
  1001. package/esm/utils/database-log.d.mts.map +1 -1
  1002. package/esm/utils/environment.d.mts +4 -5
  1003. package/esm/utils/environment.d.mts.map +1 -1
  1004. package/esm/utils/framework-vesion.mjs.map +1 -1
  1005. package/esm/utils/get-localized.d.mts +2 -3
  1006. package/esm/utils/get-localized.d.mts.map +1 -1
  1007. package/esm/utils/ids.d.mts +9 -6
  1008. package/esm/utils/ids.d.mts.map +1 -1
  1009. package/esm/utils/index.d.mts +2 -1
  1010. package/esm/utils/index.mjs +1 -1
  1011. package/esm/utils/normalized-path.d.mts +1 -2
  1012. package/esm/utils/normalized-path.d.mts.map +1 -1
  1013. package/esm/utils/npm-registry.d.mts +1 -2
  1014. package/esm/utils/npm-registry.d.mts.map +1 -1
  1015. package/esm/utils/paths.d.mts +13 -14
  1016. package/esm/utils/paths.d.mts.map +1 -1
  1017. package/esm/utils/paths.mjs +2 -2
  1018. package/esm/utils/paths.mjs.map +1 -1
  1019. package/esm/utils/promise-all-object.d.mts +1 -2
  1020. package/esm/utils/promise-all-object.d.mts.map +1 -1
  1021. package/esm/utils/queue.d.mts +1 -2
  1022. package/esm/utils/queue.d.mts.map +1 -1
  1023. package/esm/utils/runtime.d.mts +11 -10
  1024. package/esm/utils/runtime.d.mts.map +1 -1
  1025. package/esm/utils/sleep.d.mts +1 -2
  1026. package/esm/utils/sleep.d.mts.map +1 -1
  1027. package/esm/utils/sluggable.d.mts +1 -3
  1028. package/esm/utils/sluggable.d.mts.map +1 -1
  1029. package/esm/utils/to-json.d.mts +1 -2
  1030. package/esm/utils/to-json.d.mts.map +1 -1
  1031. package/esm/utils/types.d.mts +1 -2
  1032. package/esm/utils/types.d.mts.map +1 -1
  1033. package/esm/utils/urls.d.mts +5 -6
  1034. package/esm/utils/urls.d.mts.map +1 -1
  1035. package/esm/utils/version-compare.d.mts +1 -2
  1036. package/esm/utils/version-compare.d.mts.map +1 -1
  1037. package/esm/validation/database/exists-except-current-id.d.mts +2 -3
  1038. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  1039. package/esm/validation/database/exists-except-current-user.d.mts +2 -3
  1040. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  1041. package/esm/validation/database/index.d.mts +2 -1
  1042. package/esm/validation/database/index.mjs +1 -1
  1043. package/esm/validation/database/types.d.mts +14 -10
  1044. package/esm/validation/database/types.d.mts.map +1 -1
  1045. package/esm/validation/database/unique-except-current-id.d.mts +2 -3
  1046. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  1047. package/esm/validation/database/unique-except-current-user.d.mts +2 -3
  1048. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  1049. package/esm/validation/file/file.d.mts +4 -6
  1050. package/esm/validation/file/file.d.mts.map +1 -1
  1051. package/esm/validation/file/index.d.mts +2 -1
  1052. package/esm/validation/file/index.mjs +1 -1
  1053. package/esm/validation/index.d.mts +5 -1
  1054. package/esm/validation/index.mjs +1 -1
  1055. package/esm/validation/plugins/index.mjs +1 -1
  1056. package/esm/validation/types.d.mts +6 -4
  1057. package/esm/validation/types.d.mts.map +1 -1
  1058. package/esm/validation/validateAll.mjs +2 -2
  1059. package/esm/validation/validateAll.mjs.map +1 -1
  1060. package/esm/validation/validation-failure-status.mjs +2 -2
  1061. package/esm/validation/validation-failure-status.mjs.map +1 -1
  1062. package/esm/validation/validators/file-validator.d.mts +2 -4
  1063. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  1064. package/esm/validation/validators/index.d.mts +2 -1
  1065. package/esm/validation/validators/index.mjs +1 -1
  1066. package/esm/vite/lower-stage3-decorators.d.mts +2 -3
  1067. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  1068. package/esm/warlock-config/define-config.d.mts +1 -3
  1069. package/esm/warlock-config/define-config.d.mts.map +1 -1
  1070. package/esm/warlock-config/define-config.mjs +3 -2
  1071. package/esm/warlock-config/define-config.mjs.map +1 -1
  1072. package/esm/warlock-config/index.d.mts +2 -1
  1073. package/esm/warlock-config/index.mjs +1 -1
  1074. package/esm/warlock-config/types.d.mts +8 -6
  1075. package/esm/warlock-config/types.d.mts.map +1 -1
  1076. package/esm/warlock-config/warlock-config.manager.d.mts +5 -7
  1077. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  1078. package/esm/warlock-config/warlock-config.manager.mjs +2 -1
  1079. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  1080. package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
  1081. package/llms-full.txt +379 -22
  1082. package/llms.txt +3 -2
  1083. package/package.json +27 -15
  1084. package/skills/README.md +2 -1
  1085. package/skills/create-module/SKILL.md +7 -0
  1086. package/skills/index.md +3 -1
  1087. package/skills/report-framework-issue.md +154 -0
  1088. package/skills/run-app/SKILL.md +120 -10
  1089. package/skills/store-secrets/SKILL.md +102 -0
  1090. package/skills/test-fakes/SKILL.md +13 -11
  1091. package/skills/upgrade-from-5-29/SKILL.md +78 -0
  1092. package/skills/warlock-check/SKILL.md +6 -1
  1093. package/skills/warlock-doctor/SKILL.md +9 -0
  1094. package/skills/wire-socket/SKILL.md +19 -0
  1095. package/skills/write-cli-command/SKILL.md +21 -0
  1096. package/esm/tooling/check/index.d.mts +0 -8
  1097. package/esm/tooling/typecheck/index.d.mts +0 -1
@@ -1,3 +1,3 @@
1
1
  import { DEFAULT_TYPECHECK_BUILD_INFO, diagnosticToProblem, directImporters, runTypecheck } from "./run-typecheck.mjs";
2
2
 
3
- export { };
3
+ export { DEFAULT_TYPECHECK_BUILD_INFO, diagnosticToProblem, directImporters, runTypecheck };
@@ -1,59 +1,26 @@
1
1
  import { ToolingProblem } from "../problem.mjs";
2
- import ts from "typescript";
3
-
2
+ import { CompilerDiagnostic, CompilerSession } from "../typescript/compiler.mjs";
4
3
  //#region ../../packages/core/src/tooling/typecheck/run-typecheck.d.ts
5
- /** Inputs of {@link runTypecheck}. */
6
- type TypecheckOptions = {
7
- /** Project root. Default: `process.cwd()`. */cwd?: string; /** tsconfig path, relative to `cwd`. Default: `tsconfig.json`. */
4
+ export type TypecheckOptions = {
5
+ cwd?: string;
8
6
  project?: string;
9
- /**
10
- * Limit diagnostics to these files (relative to `cwd` or absolute) and the
11
- * project files that import them directly. Omit for the whole program.
12
- */
13
- files?: readonly string[]; /** Where the incremental state is kept. Default: `.warlock/cache/typecheck.tsbuildinfo`. */
7
+ files?: readonly string[];
14
8
  buildInfoFile?: string;
15
9
  };
16
- /** The outcome of {@link runTypecheck}. */
17
- type TypecheckResult = {
18
- /** `true` when no error-severity problem was found. */ok: boolean; /** `program` = every file; `files` = the given files and their direct importers. */
19
- mode: "program" | "files"; /** Project-relative files whose diagnostics were collected in `files` mode, else `null`. */
20
- files: string[] | null; /** Number of source files checked. */
10
+ export type TypecheckResult = {
11
+ ok: boolean;
12
+ mode: "program" | "files";
13
+ files: string[] | null;
21
14
  checkedFiles: number;
22
15
  problems: ToolingProblem[];
23
- durationMs: number; /** Absolute path of the incremental state file, or `null` when nothing was written. */
16
+ durationMs: number;
24
17
  buildInfoFile: string | null;
25
18
  };
26
- /** Default location of the incremental state, under the framework's own folder. */
27
- declare const DEFAULT_TYPECHECK_BUILD_INFO: string;
28
- /** Map one TypeScript diagnostic to a problem (`WL7101`, `rule: "TS<code>"`). */
29
- declare function diagnosticToProblem(diagnostic: ts.Diagnostic, cwd: string, code?: "WL7101" | "WL7102"): ToolingProblem | undefined;
30
- /**
31
- * The project files that import any of `targets` directly.
32
- *
33
- * Read from each file's import list (`ts.preProcessFile`) resolved with the
34
- * program's own options and a shared resolution cache, rather than through the
35
- * builder's transitive dependency graph: a change to a widely used file would
36
- * otherwise pull in nearly the whole project, and `--changed` exists to keep
37
- * the loop small. A full `warlock typecheck` (incremental, so cheap after the
38
- * first run) still checks everything.
39
- */
40
- declare function directImporters(program: ts.Program, targets: ReadonlySet<string>, root: string): Set<string>;
41
- /**
42
- * Typecheck the project with the TypeScript compiler API, incrementally.
43
- *
44
- * The program is built with `incremental` and `noEmit`, and its state is kept
45
- * in {@link DEFAULT_TYPECHECK_BUILD_INFO}, so a second run re-checks only what
46
- * changed. With `files`, diagnostics are collected only for those files and
47
- * their direct importers — the checker is lazy, so files nobody asks about are
48
- * parsed and bound but not checked, which is most of the memory a full check
49
- * costs.
50
- *
51
- * Never throws for a project problem: a missing or invalid tsconfig is a
52
- * `WL7102` problem, a type error a `WL7101` problem. A compiler crash is
53
- * re-thrown for the caller to classify (`warlock check` reports it as
54
- * `WL8007`).
55
- */
56
- declare function runTypecheck(options?: TypecheckOptions): TypecheckResult;
19
+ export declare const DEFAULT_TYPECHECK_BUILD_INFO: string;
20
+ export declare function diagnosticToProblem(diagnostic: CompilerDiagnostic, cwd: string, code?: "WL7101" | "WL7102"): ToolingProblem;
21
+ /** Resolve direct importers with the native checker, including package exports and aliases. */
22
+ export declare function directImporters(session: CompilerSession, targets: ReadonlySet<string>, root: string): Set<string>;
23
+ /** TypeScript 7's native incremental compiler owns build state; changed mode filters its diagnostics. */
24
+ export declare function runTypecheck(options?: TypecheckOptions): TypecheckResult;
57
25
  //#endregion
58
- export { DEFAULT_TYPECHECK_BUILD_INFO, TypecheckOptions, TypecheckResult, diagnosticToProblem, directImporters, runTypecheck };
59
26
  //# sourceMappingURL=run-typecheck.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-typecheck.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typecheck/run-typecheck.ts"],"mappings":";;;;;KAMY,gBAAA;EAAA,8CAEV,GAAA;EAEA,OAAA;EAFA;;;;EAOA,KAAA,sBAEa;EAAb,aAAA;AAAA;;KAIU,eAAA;EAEV,uDAAA,EAAA,WAIA;EAFA,IAAA,uBAKA;EAHA,KAAA,mBAIA;EAFA,YAAA;EACA,QAAA,EAAU,cAAc;EACxB,UAAA,UAMW;EAJX,aAAA;AAAA;;cAIW,4BAAA;AAkBb;AAAA,iBAAgB,mBAAA,CACd,UAAA,EAAY,EAAA,CAAG,UAAA,EACf,GAAA,UACA,IAAA,yBACC,cAAc;;;;;;;;;;AAAA;iBAuDD,eAAA,CACd,OAAA,EAAS,EAAA,CAAG,OAAA,EACZ,OAAA,EAAS,WAAA,UACT,IAAA,WACC,GAAA;;;;;;;;;;;;;;;;iBAyCa,YAAA,CAAa,OAAA,GAAS,gBAAA,GAAwB,eAAe"}
1
+ {"version":3,"file":"run-typecheck.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typecheck/run-typecheck.ts"],"mappings":";;;YAKY;EACV;EACA;EACA;EACA;;YAEU;EACV;EACA;EACA;EACA;EACA,UAAU;EACV;EACA;;qBAEW;wBASG,oBACd,YAAY,oBACZ,aACA,6BACC;;wBAca,gBACd,SAAS,iBACT,SAAS,qBACT,eACC;;wBAWa,aAAa,UAAS,mBAAwB"}
@@ -1,90 +1,36 @@
1
+ import { CompilerSession, runCompiler } from "../typescript/compiler.mjs";
1
2
  import { createProblem } from "../problem.mjs";
2
3
  import path from "node:path";
3
4
  import { existsSync, mkdirSync } from "node:fs";
4
- import ts from "typescript";
5
5
 
6
6
  //#region ../../packages/core/src/tooling/typecheck/run-typecheck.ts
7
- /** Default location of the incremental state, under the framework's own folder. */
8
7
  const DEFAULT_TYPECHECK_BUILD_INFO = path.join(".warlock", "cache", "typecheck.tsbuildinfo");
9
- function toPosix(file) {
10
- return file.split(path.sep).join("/");
8
+ const toPosix = (file) => file.split(path.sep).join("/");
9
+ function isProjectFile(file, root, declarations = true) {
10
+ return file.startsWith(root + path.sep) && !file.split(path.sep).includes("node_modules") && (declarations || !file.endsWith(".d.ts"));
11
11
  }
12
- /** Whether a program file belongs to the project (under the root, outside node_modules). */
13
- function isProjectFile(fileName, root, declarations = true) {
14
- const normalized = path.resolve(fileName);
15
- return normalized.startsWith(root + path.sep) && !normalized.split(path.sep).includes("node_modules") && (declarations || !normalized.endsWith(".d.ts"));
16
- }
17
- /** Map one TypeScript diagnostic to a problem (`WL7101`, `rule: "TS<code>"`). */
18
12
  function diagnosticToProblem(diagnostic, cwd, code = "WL7101") {
19
- if (diagnostic.category !== ts.DiagnosticCategory.Error && diagnostic.category !== ts.DiagnosticCategory.Warning) return;
20
- let file = null;
21
- let line = null;
22
- let column = null;
23
- if (diagnostic.file) {
24
- file = toPosix(path.relative(cwd, diagnostic.file.fileName));
25
- if (diagnostic.start !== void 0) {
26
- const position = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
27
- line = position.line + 1;
28
- column = position.character + 1;
29
- }
30
- }
31
13
  return createProblem({
32
14
  code,
33
15
  source: "typescript",
34
- severity: diagnostic.category === ts.DiagnosticCategory.Error ? "error" : "warning",
35
- message: ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"),
36
- file,
37
- line,
38
- column,
16
+ severity: diagnostic.severity,
17
+ message: diagnostic.message,
18
+ file: diagnostic.fileName ? toPosix(path.relative(cwd, diagnostic.fileName)) : null,
19
+ line: diagnostic.fileName ? diagnostic.line : null,
20
+ column: diagnostic.fileName ? diagnostic.column : null,
39
21
  rule: `TS${diagnostic.code}`
40
22
  });
41
23
  }
42
- function collect(diagnostics, cwd, code) {
43
- return diagnostics.map((diagnostic) => diagnosticToProblem(diagnostic, cwd, code)).filter((problem) => problem !== void 0);
44
- }
45
- /**
46
- * The project files that import any of `targets` directly.
47
- *
48
- * Read from each file's import list (`ts.preProcessFile`) resolved with the
49
- * program's own options and a shared resolution cache, rather than through the
50
- * builder's transitive dependency graph: a change to a widely used file would
51
- * otherwise pull in nearly the whole project, and `--changed` exists to keep
52
- * the loop small. A full `warlock typecheck` (incremental, so cheap after the
53
- * first run) still checks everything.
54
- */
55
- function directImporters(program, targets, root) {
56
- const options = program.getCompilerOptions();
57
- const cache = ts.createModuleResolutionCache(root, (name) => name, options);
24
+ /** Resolve direct importers with the native checker, including package exports and aliases. */
25
+ function directImporters(session, targets, root) {
58
26
  const importers = /* @__PURE__ */ new Set();
59
- for (const sourceFile of program.getSourceFiles()) {
60
- const fileName = path.resolve(sourceFile.fileName);
61
- if (!isProjectFile(fileName, root, false) || targets.has(fileName)) continue;
62
- const { importedFiles } = ts.preProcessFile(sourceFile.text, true, true);
63
- for (const imported of importedFiles) {
64
- const resolved = ts.resolveModuleName(imported.fileName, fileName, options, ts.sys, cache).resolvedModule?.resolvedFileName;
65
- if (resolved && targets.has(path.resolve(resolved))) {
66
- importers.add(fileName);
67
- break;
68
- }
69
- }
27
+ for (const file of session.fileNames) {
28
+ if (!isProjectFile(file, root, false) || targets.has(file)) continue;
29
+ if (session.importFiles(file).some((imported) => targets.has(path.resolve(imported)))) importers.add(file);
70
30
  }
71
31
  return importers;
72
32
  }
73
- /**
74
- * Typecheck the project with the TypeScript compiler API, incrementally.
75
- *
76
- * The program is built with `incremental` and `noEmit`, and its state is kept
77
- * in {@link DEFAULT_TYPECHECK_BUILD_INFO}, so a second run re-checks only what
78
- * changed. With `files`, diagnostics are collected only for those files and
79
- * their direct importers — the checker is lazy, so files nobody asks about are
80
- * parsed and bound but not checked, which is most of the memory a full check
81
- * costs.
82
- *
83
- * Never throws for a project problem: a missing or invalid tsconfig is a
84
- * `WL7102` problem, a type error a `WL7101` problem. A compiler crash is
85
- * re-thrown for the caller to classify (`warlock check` reports it as
86
- * `WL8007`).
87
- */
33
+ /** TypeScript 7's native incremental compiler owns build state; changed mode filters its diagnostics. */
88
34
  function runTypecheck(options = {}) {
89
35
  const startedAt = Date.now();
90
36
  const cwd = path.resolve(options.cwd ?? process.cwd());
@@ -105,44 +51,35 @@ function runTypecheck(options = {}) {
105
51
  message: `No TypeScript config at ${toPosix(path.relative(cwd, configPath)) || configPath}.`,
106
52
  file: toPosix(path.relative(cwd, configPath))
107
53
  })]);
108
- const read = ts.readConfigFile(configPath, ts.sys.readFile);
109
- if (read.error) return result(collect([read.error], cwd, "WL7102"));
110
- const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, path.dirname(configPath), void 0, configPath);
111
54
  const buildInfoFile = path.resolve(cwd, options.buildInfoFile ?? DEFAULT_TYPECHECK_BUILD_INFO);
112
55
  mkdirSync(path.dirname(buildInfoFile), { recursive: true });
113
- const compilerOptions = {
114
- ...parsed.options,
115
- noEmit: true,
116
- incremental: true,
117
- tsBuildInfoFile: buildInfoFile,
118
- composite: false,
119
- emitDeclarationOnly: false
120
- };
121
- const builder = ts.createIncrementalProgram({
122
- rootNames: parsed.fileNames,
123
- options: compilerOptions,
124
- projectReferences: parsed.projectReferences,
125
- configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(parsed),
126
- host: ts.createIncrementalCompilerHost(compilerOptions)
127
- });
128
- const problems = [
129
- ...collect(builder.getConfigFileParsingDiagnostics(), cwd, "WL7102"),
130
- ...collect(builder.getOptionsDiagnostics(), cwd, "WL7102"),
131
- ...collect(builder.getGlobalDiagnostics(), cwd, "WL7101")
132
- ];
133
- let checked;
134
- let files = null;
135
- if (options.files) {
136
- const targets = new Set(options.files.map((file) => path.resolve(cwd, file)));
137
- const program = builder.getProgram();
138
- const wanted = new Set([...targets, ...directImporters(program, targets, cwd)]);
139
- checked = builder.getSourceFiles().filter((sourceFile) => wanted.has(path.resolve(sourceFile.fileName)));
140
- files = checked.map((sourceFile) => toPosix(path.relative(cwd, sourceFile.fileName))).sort();
141
- } else checked = builder.getSourceFiles().filter((sourceFile) => isProjectFile(sourceFile.fileName, cwd));
142
- for (const sourceFile of checked) problems.push(...collect(builder.getSyntacticDiagnostics(sourceFile), cwd, "WL7101"), ...collect(builder.getSemanticDiagnostics(sourceFile), cwd, "WL7101"));
143
- builder.emit();
144
- return result(problems, {
145
- files,
56
+ const compiled = runCompiler(cwd, [
57
+ "-p",
58
+ configPath,
59
+ "--noEmit",
60
+ "--incremental",
61
+ "--tsBuildInfoFile",
62
+ buildInfoFile,
63
+ "--composite",
64
+ "false",
65
+ "--emitDeclarationOnly",
66
+ "false",
67
+ "--listFiles"
68
+ ]);
69
+ const sources = compiled.output.split(/\r?\n/).map((line) => path.isAbsolute(line) ? line : "").filter((file) => isProjectFile(file, cwd));
70
+ const wanted = options.files ? new Set(options.files.map((file) => path.resolve(cwd, file))) : null;
71
+ if (wanted) {
72
+ const session = new CompilerSession(cwd, configPath);
73
+ try {
74
+ for (const file of directImporters(session, wanted, cwd)) wanted.add(file);
75
+ } finally {
76
+ session.close();
77
+ }
78
+ }
79
+ const checked = sources.filter((file) => !wanted || wanted.has(file));
80
+ const configCodes = /* @__PURE__ */ new Set([18002, 18003]);
81
+ return result([...compiled.diagnostics].sort((a, b) => Number(b.fileName === configPath) - Number(a.fileName === configPath)).filter((diagnostic) => !diagnostic.fileName || diagnostic.fileName === configPath || isProjectFile(diagnostic.fileName, cwd) && (!wanted || wanted.has(diagnostic.fileName))).map((diagnostic) => diagnosticToProblem(diagnostic, cwd, !diagnostic.fileName || diagnostic.fileName === configPath || configCodes.has(diagnostic.code) ? "WL7102" : "WL7101")), {
82
+ files: wanted ? checked.map((file) => toPosix(path.relative(cwd, file))).sort() : null,
146
83
  checkedFiles: checked.length,
147
84
  buildInfoFile: existsSync(buildInfoFile) ? buildInfoFile : null
148
85
  });
@@ -1 +1 @@
1
- {"version":3,"file":"run-typecheck.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typecheck/run-typecheck.ts"],"sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport ts from \"typescript\";\nimport { createProblem, type ToolingProblem } from \"../problem\";\n\n/** Inputs of {@link runTypecheck}. */\nexport type TypecheckOptions = {\n /** Project root. Default: `process.cwd()`. */\n cwd?: string;\n /** tsconfig path, relative to `cwd`. Default: `tsconfig.json`. */\n project?: string;\n /**\n * Limit diagnostics to these files (relative to `cwd` or absolute) and the\n * project files that import them directly. Omit for the whole program.\n */\n files?: readonly string[];\n /** Where the incremental state is kept. Default: `.warlock/cache/typecheck.tsbuildinfo`. */\n buildInfoFile?: string;\n};\n\n/** The outcome of {@link runTypecheck}. */\nexport type TypecheckResult = {\n /** `true` when no error-severity problem was found. */\n ok: boolean;\n /** `program` = every file; `files` = the given files and their direct importers. */\n mode: \"program\" | \"files\";\n /** Project-relative files whose diagnostics were collected in `files` mode, else `null`. */\n files: string[] | null;\n /** Number of source files checked. */\n checkedFiles: number;\n problems: ToolingProblem[];\n durationMs: number;\n /** Absolute path of the incremental state file, or `null` when nothing was written. */\n buildInfoFile: string | null;\n};\n\n/** Default location of the incremental state, under the framework's own folder. */\nexport const DEFAULT_TYPECHECK_BUILD_INFO = path.join(\".warlock\", \"cache\", \"typecheck.tsbuildinfo\");\n\nfunction toPosix(file: string): string {\n return file.split(path.sep).join(\"/\");\n}\n\n/** Whether a program file belongs to the project (under the root, outside node_modules). */\nfunction isProjectFile(fileName: string, root: string, declarations = true): boolean {\n const normalized = path.resolve(fileName);\n\n return (\n normalized.startsWith(root + path.sep) &&\n !normalized.split(path.sep).includes(\"node_modules\") &&\n (declarations || !normalized.endsWith(\".d.ts\"))\n );\n}\n\n/** Map one TypeScript diagnostic to a problem (`WL7101`, `rule: \"TS<code>\"`). */\nexport function diagnosticToProblem(\n diagnostic: ts.Diagnostic,\n cwd: string,\n code: \"WL7101\" | \"WL7102\" = \"WL7101\",\n): ToolingProblem | undefined {\n if (\n diagnostic.category !== ts.DiagnosticCategory.Error &&\n diagnostic.category !== ts.DiagnosticCategory.Warning\n ) {\n return undefined;\n }\n\n let file: string | null = null;\n let line: number | null = null;\n let column: number | null = null;\n\n if (diagnostic.file) {\n file = toPosix(path.relative(cwd, diagnostic.file.fileName));\n\n if (diagnostic.start !== undefined) {\n const position = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n\n line = position.line + 1;\n column = position.character + 1;\n }\n }\n\n return createProblem({\n code,\n source: \"typescript\",\n severity: diagnostic.category === ts.DiagnosticCategory.Error ? \"error\" : \"warning\",\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n file,\n line,\n column,\n rule: `TS${diagnostic.code}`,\n });\n}\n\nfunction collect(\n diagnostics: readonly ts.Diagnostic[],\n cwd: string,\n code: \"WL7101\" | \"WL7102\",\n): ToolingProblem[] {\n return diagnostics\n .map((diagnostic) => diagnosticToProblem(diagnostic, cwd, code))\n .filter((problem): problem is ToolingProblem => problem !== undefined);\n}\n\n/**\n * The project files that import any of `targets` directly.\n *\n * Read from each file's import list (`ts.preProcessFile`) resolved with the\n * program's own options and a shared resolution cache, rather than through the\n * builder's transitive dependency graph: a change to a widely used file would\n * otherwise pull in nearly the whole project, and `--changed` exists to keep\n * the loop small. A full `warlock typecheck` (incremental, so cheap after the\n * first run) still checks everything.\n */\nexport function directImporters(\n program: ts.Program,\n targets: ReadonlySet<string>,\n root: string,\n): Set<string> {\n const options = program.getCompilerOptions();\n const cache = ts.createModuleResolutionCache(root, (name) => name, options);\n const importers = new Set<string>();\n\n for (const sourceFile of program.getSourceFiles()) {\n const fileName = path.resolve(sourceFile.fileName);\n\n if (!isProjectFile(fileName, root, false) || targets.has(fileName)) continue;\n\n const { importedFiles } = ts.preProcessFile(sourceFile.text, true, true);\n\n for (const imported of importedFiles) {\n const resolved = ts.resolveModuleName(imported.fileName, fileName, options, ts.sys, cache)\n .resolvedModule?.resolvedFileName;\n\n if (resolved && targets.has(path.resolve(resolved))) {\n importers.add(fileName);\n break;\n }\n }\n }\n\n return importers;\n}\n\n/**\n * Typecheck the project with the TypeScript compiler API, incrementally.\n *\n * The program is built with `incremental` and `noEmit`, and its state is kept\n * in {@link DEFAULT_TYPECHECK_BUILD_INFO}, so a second run re-checks only what\n * changed. With `files`, diagnostics are collected only for those files and\n * their direct importers — the checker is lazy, so files nobody asks about are\n * parsed and bound but not checked, which is most of the memory a full check\n * costs.\n *\n * Never throws for a project problem: a missing or invalid tsconfig is a\n * `WL7102` problem, a type error a `WL7101` problem. A compiler crash is\n * re-thrown for the caller to classify (`warlock check` reports it as\n * `WL8007`).\n */\nexport function runTypecheck(options: TypecheckOptions = {}): TypecheckResult {\n const startedAt = Date.now();\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const configPath = path.resolve(cwd, options.project ?? \"tsconfig.json\");\n const result = (\n problems: ToolingProblem[],\n rest: Partial<TypecheckResult> = {},\n ): TypecheckResult => ({\n ok: !problems.some((problem) => problem.severity === \"error\"),\n mode: options.files ? \"files\" : \"program\",\n files: null,\n checkedFiles: 0,\n problems,\n durationMs: Date.now() - startedAt,\n buildInfoFile: null,\n ...rest,\n });\n\n if (!existsSync(configPath)) {\n return result([\n createProblem({\n code: \"WL7102\",\n source: \"typescript\",\n message: `No TypeScript config at ${toPosix(path.relative(cwd, configPath)) || configPath}.`,\n file: toPosix(path.relative(cwd, configPath)),\n }),\n ]);\n }\n\n const read = ts.readConfigFile(configPath, ts.sys.readFile);\n\n if (read.error) {\n return result(collect([read.error], cwd, \"WL7102\"));\n }\n\n const parsed = ts.parseJsonConfigFileContent(\n read.config,\n ts.sys,\n path.dirname(configPath),\n undefined,\n configPath,\n );\n const buildInfoFile = path.resolve(cwd, options.buildInfoFile ?? DEFAULT_TYPECHECK_BUILD_INFO);\n\n mkdirSync(path.dirname(buildInfoFile), { recursive: true });\n\n const compilerOptions: ts.CompilerOptions = {\n ...parsed.options,\n noEmit: true,\n incremental: true,\n tsBuildInfoFile: buildInfoFile,\n // Both require emitting and are refused alongside noEmit.\n composite: false,\n emitDeclarationOnly: false,\n };\n const builder = ts.createIncrementalProgram({\n rootNames: parsed.fileNames,\n options: compilerOptions,\n projectReferences: parsed.projectReferences,\n configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(parsed),\n host: ts.createIncrementalCompilerHost(compilerOptions),\n });\n const problems: ToolingProblem[] = [\n ...collect(builder.getConfigFileParsingDiagnostics(), cwd, \"WL7102\"),\n ...collect(builder.getOptionsDiagnostics(), cwd, \"WL7102\"),\n ...collect(builder.getGlobalDiagnostics(), cwd, \"WL7101\"),\n ];\n\n let checked: ts.SourceFile[];\n let files: string[] | null = null;\n\n if (options.files) {\n const targets = new Set(options.files.map((file) => path.resolve(cwd, file)));\n const program = builder.getProgram();\n const wanted = new Set([...targets, ...directImporters(program, targets, cwd)]);\n\n checked = builder\n .getSourceFiles()\n .filter((sourceFile) => wanted.has(path.resolve(sourceFile.fileName)));\n files = checked.map((sourceFile) => toPosix(path.relative(cwd, sourceFile.fileName))).sort();\n } else {\n checked = builder\n .getSourceFiles()\n .filter((sourceFile) => isProjectFile(sourceFile.fileName, cwd));\n }\n\n for (const sourceFile of checked) {\n problems.push(\n ...collect(builder.getSyntacticDiagnostics(sourceFile), cwd, \"WL7101\"),\n ...collect(builder.getSemanticDiagnostics(sourceFile), cwd, \"WL7101\"),\n );\n }\n\n // With noEmit + incremental, emit writes only the .tsbuildinfo state.\n builder.emit();\n\n return result(problems, {\n files,\n checkedFiles: checked.length,\n buildInfoFile: existsSync(buildInfoFile) ? buildInfoFile : null,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"run-typecheck.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typecheck/run-typecheck.ts"],"sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createProblem, type ToolingProblem } from \"../problem\";\nimport { CompilerSession, runCompiler, type CompilerDiagnostic } from \"../typescript/compiler\";\n\nexport type TypecheckOptions = {\n cwd?: string;\n project?: string;\n files?: readonly string[];\n buildInfoFile?: string;\n};\nexport type TypecheckResult = {\n ok: boolean;\n mode: \"program\" | \"files\";\n files: string[] | null;\n checkedFiles: number;\n problems: ToolingProblem[];\n durationMs: number;\n buildInfoFile: string | null;\n};\nexport const DEFAULT_TYPECHECK_BUILD_INFO = path.join(\".warlock\", \"cache\", \"typecheck.tsbuildinfo\");\nconst toPosix = (file: string) => file.split(path.sep).join(\"/\");\nfunction isProjectFile(file: string, root: string, declarations = true): boolean {\n return (\n file.startsWith(root + path.sep) &&\n !file.split(path.sep).includes(\"node_modules\") &&\n (declarations || !file.endsWith(\".d.ts\"))\n );\n}\nexport function diagnosticToProblem(\n diagnostic: CompilerDiagnostic,\n cwd: string,\n code: \"WL7101\" | \"WL7102\" = \"WL7101\",\n): ToolingProblem {\n return createProblem({\n code,\n source: \"typescript\",\n severity: diagnostic.severity,\n message: diagnostic.message,\n file: diagnostic.fileName ? toPosix(path.relative(cwd, diagnostic.fileName)) : null,\n line: diagnostic.fileName ? diagnostic.line : null,\n column: diagnostic.fileName ? diagnostic.column : null,\n rule: `TS${diagnostic.code}`,\n });\n}\n\n/** Resolve direct importers with the native checker, including package exports and aliases. */\nexport function directImporters(\n session: CompilerSession,\n targets: ReadonlySet<string>,\n root: string,\n): Set<string> {\n const importers = new Set<string>();\n for (const file of session.fileNames) {\n if (!isProjectFile(file, root, false) || targets.has(file)) continue;\n if (session.importFiles(file).some((imported) => targets.has(path.resolve(imported))))\n importers.add(file);\n }\n return importers;\n}\n\n/** TypeScript 7's native incremental compiler owns build state; changed mode filters its diagnostics. */\nexport function runTypecheck(options: TypecheckOptions = {}): TypecheckResult {\n const startedAt = Date.now();\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const configPath = path.resolve(cwd, options.project ?? \"tsconfig.json\");\n const result = (\n problems: ToolingProblem[],\n rest: Partial<TypecheckResult> = {},\n ): TypecheckResult => ({\n ok: !problems.some((problem) => problem.severity === \"error\"),\n mode: options.files ? \"files\" : \"program\",\n files: null,\n checkedFiles: 0,\n problems,\n durationMs: Date.now() - startedAt,\n buildInfoFile: null,\n ...rest,\n });\n if (!existsSync(configPath))\n return result([\n createProblem({\n code: \"WL7102\",\n source: \"typescript\",\n message: `No TypeScript config at ${toPosix(path.relative(cwd, configPath)) || configPath}.`,\n file: toPosix(path.relative(cwd, configPath)),\n }),\n ]);\n const buildInfoFile = path.resolve(cwd, options.buildInfoFile ?? DEFAULT_TYPECHECK_BUILD_INFO);\n mkdirSync(path.dirname(buildInfoFile), { recursive: true });\n const compiled = runCompiler(cwd, [\n \"-p\",\n configPath,\n \"--noEmit\",\n \"--incremental\",\n \"--tsBuildInfoFile\",\n buildInfoFile,\n \"--composite\",\n \"false\",\n \"--emitDeclarationOnly\",\n \"false\",\n \"--listFiles\",\n ]);\n const sources = compiled.output\n .split(/\\r?\\n/)\n .map((line) => (path.isAbsolute(line) ? line : \"\"))\n .filter((file) => isProjectFile(file, cwd));\n const wanted = options.files\n ? new Set(options.files.map((file) => path.resolve(cwd, file)))\n : null;\n if (wanted) {\n const session = new CompilerSession(cwd, configPath);\n try {\n for (const file of directImporters(session, wanted, cwd)) wanted.add(file);\n } finally {\n session.close();\n }\n }\n const checked = sources.filter((file) => !wanted || wanted.has(file));\n const configCodes = new Set([18002, 18003]);\n const problems = [...compiled.diagnostics]\n .sort((a, b) => Number(b.fileName === configPath) - Number(a.fileName === configPath))\n .filter(\n (diagnostic) =>\n !diagnostic.fileName ||\n diagnostic.fileName === configPath ||\n (isProjectFile(diagnostic.fileName, cwd) && (!wanted || wanted.has(diagnostic.fileName))),\n )\n .map((diagnostic) =>\n diagnosticToProblem(\n diagnostic,\n cwd,\n !diagnostic.fileName ||\n diagnostic.fileName === configPath ||\n configCodes.has(diagnostic.code)\n ? \"WL7102\"\n : \"WL7101\",\n ),\n );\n return result(problems, {\n files: wanted ? checked.map((file) => toPosix(path.relative(cwd, file))).sort() : null,\n checkedFiles: checked.length,\n buildInfoFile: existsSync(buildInfoFile) ? buildInfoFile : null,\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ //#region ../../packages/core/src/tooling/typescript/compiler.d.ts
2
+ /** Keep the pinned compiler's unstable protocol inside this module. */
3
+ export type CompilerDiagnostic = {
4
+ fileName?: string;
5
+ code: number;
6
+ message: string;
7
+ severity: "error" | "warning";
8
+ line: number;
9
+ column: number;
10
+ length: number;
11
+ };
12
+ export type SourceUpdate = {
13
+ path: string;
14
+ content: string;
15
+ };
16
+ /** One native server per dev session; snapshots retain the configured declaration roots. */
17
+ export declare class CompilerSession {
18
+ private api;
19
+ private snapshot;
20
+ private contents;
21
+ private configPath;
22
+ constructor(cwd: string, configPath?: string, virtualFiles?: Record<string, string>);
23
+ update(files: readonly SourceUpdate[], deleted?: readonly string[]): void;
24
+ get fileNames(): readonly string[];
25
+ /** Ask the checker to resolve module references using the project's actual options. */
26
+ importFiles(file: string): string[];
27
+ diagnostics(file: string): CompilerDiagnostic[];
28
+ close(): void;
29
+ }
30
+ //#endregion
31
+ //# sourceMappingURL=compiler.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typescript/compiler.ts"],"mappings":";;YASY;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;YA+CU;EAAiB;EAAc;;;qBAG9B;UACH;UACA;UACA;UACA;EAER,YACE,aACA,qBACA,eAAc;EA6BhB,OAAO,gBAAgB,gBAAgB;MAQnC;;EAKJ,YAAY;EAUZ,YAAY,eAAe;EAqB3B"}
@@ -0,0 +1,120 @@
1
+ import { importSpecifiers } from "../syntax/imports.mjs";
2
+ import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ import { readFileSync } from "node:fs";
5
+ import { readTsconfig } from "get-tsconfig";
6
+ import { spawnSync } from "node:child_process";
7
+ import { API } from "typescript/unstable/sync";
8
+
9
+ //#region ../../packages/core/src/tooling/typescript/compiler.ts
10
+ const manifestPath = createRequire(import.meta.url).resolve("typescript/package.json");
11
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
12
+ const compilerBin = path.resolve(path.dirname(manifestPath), manifest.bin.tsc);
13
+ function parseCompilerOutput(output, cwd) {
14
+ const diagnostics = [];
15
+ for (const line of output.split(/\r?\n/)) {
16
+ const match = /^(?:(.*?)\((\d+),(\d+)\): )?(error|warning) TS(\d+): (.*)$/.exec(line);
17
+ if (match) diagnostics.push({
18
+ ...match[1] ? { fileName: path.resolve(cwd, match[1]) } : {},
19
+ line: Number(match[2] ?? 1),
20
+ column: Number(match[3] ?? 1),
21
+ severity: match[4] === "warning" ? "warning" : "error",
22
+ code: Number(match[5]),
23
+ message: match[6] ?? "",
24
+ length: 1
25
+ });
26
+ else if (/^\s+\S/.test(line)) {
27
+ const previous = diagnostics.at(-1);
28
+ if (previous) previous.message += `\n${line}`;
29
+ }
30
+ }
31
+ return diagnostics;
32
+ }
33
+ function runCompiler(cwd, args) {
34
+ const result = spawnSync(process.execPath, [
35
+ compilerBin,
36
+ ...args,
37
+ "--pretty",
38
+ "false"
39
+ ], {
40
+ cwd,
41
+ encoding: "utf8",
42
+ maxBuffer: 67108864
43
+ });
44
+ if (result.error) throw result.error;
45
+ if (result.signal) throw new Error(`TypeScript compiler terminated by ${result.signal}.`);
46
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
47
+ const diagnostics = parseCompilerOutput(output, cwd);
48
+ if (result.status !== 0 && diagnostics.length === 0) throw new Error(`TypeScript compiler exited ${result.status}: ${output}`);
49
+ return {
50
+ diagnostics,
51
+ output,
52
+ status: result.status,
53
+ pid: result.pid
54
+ };
55
+ }
56
+ /** One native server per dev session; snapshots retain the configured declaration roots. */
57
+ var CompilerSession = class {
58
+ constructor(cwd, configPath = path.join(cwd, "tsconfig.json"), virtualFiles = {}) {
59
+ this.contents = /* @__PURE__ */ new Map();
60
+ for (const [file, content] of Object.entries(virtualFiles)) this.contents.set(path.resolve(file), content);
61
+ this.configPath = path.resolve(cwd, configPath);
62
+ this.api = new API({
63
+ cwd,
64
+ fs: {
65
+ readFile: (file) => this.contents.get(path.resolve(file)),
66
+ directoryExists: (directory) => [...this.contents.keys()].some((file) => file.startsWith(path.resolve(directory) + path.sep)) ? true : void 0,
67
+ fileExists: (file) => this.contents.has(path.resolve(file)) ? this.contents.get(path.resolve(file)) !== null : void 0
68
+ }
69
+ });
70
+ try {
71
+ this.snapshot = this.api.updateSnapshot({ openProjects: [this.configPath] });
72
+ } catch (error) {
73
+ this.api.close();
74
+ throw error;
75
+ }
76
+ }
77
+ update(files, deleted = []) {
78
+ for (const file of files) this.contents.set(path.resolve(file.path), file.content);
79
+ for (const file of deleted) this.contents.set(path.resolve(file), null);
80
+ const old = this.snapshot;
81
+ this.snapshot = this.api.updateSnapshot({ fileChanges: { invalidateAll: true } });
82
+ old.dispose();
83
+ }
84
+ get fileNames() {
85
+ return this.snapshot.getProject(this.configPath)?.program.getSourceFileNames() ?? [];
86
+ }
87
+ /** Ask the checker to resolve module references using the project's actual options. */
88
+ importFiles(file) {
89
+ const project = this.snapshot.getProject(this.configPath);
90
+ if (!project?.program.getSourceFile(file)) return [];
91
+ const source = this.contents.get(path.resolve(file)) ?? readFileSync(file, "utf8");
92
+ return importSpecifiers(file, source).flatMap((imported) => {
93
+ return project.checker.getSymbolAtPosition(file, imported.node.start + 1)?.declarations.map((declaration) => declaration.path) ?? [];
94
+ });
95
+ }
96
+ diagnostics(file) {
97
+ const program = this.snapshot.getProject(this.configPath)?.program;
98
+ if (!program?.getSourceFile(file)) return [];
99
+ return [...program.getSyntacticDiagnostics(file), ...program.getSemanticDiagnostics(file)].filter((diagnostic) => diagnostic.category === 1 || diagnostic.category === 0).map((diagnostic) => {
100
+ const lines = (this.contents.get(path.resolve(file)) ?? readFileSync(file, "utf8")).slice(0, Math.max(0, diagnostic.pos)).split("\n");
101
+ return {
102
+ fileName: diagnostic.fileName,
103
+ code: diagnostic.code,
104
+ message: diagnostic.text,
105
+ severity: diagnostic.category === 1 ? "error" : "warning",
106
+ line: lines.length,
107
+ column: (lines.at(-1)?.length ?? 0) + 1,
108
+ length: Math.max(1, diagnostic.end - diagnostic.pos)
109
+ };
110
+ });
111
+ }
112
+ close() {
113
+ this.snapshot.dispose();
114
+ this.api.close();
115
+ }
116
+ };
117
+
118
+ //#endregion
119
+ export { CompilerSession, compilerBin, parseCompilerOutput, runCompiler };
120
+ //# sourceMappingURL=compiler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/typescript/compiler.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { readTsconfig } from \"get-tsconfig\";\nimport { importSpecifiers } from \"../syntax/imports\";\nimport { API, type Snapshot } from \"typescript/unstable/sync\";\n\n/** Keep the pinned compiler's unstable protocol inside this module. */\nexport type CompilerDiagnostic = {\n fileName?: string;\n code: number;\n message: string;\n severity: \"error\" | \"warning\";\n line: number;\n column: number;\n length: number;\n};\n\nconst require = createRequire(import.meta.url);\nconst manifestPath = require.resolve(\"typescript/package.json\");\nconst manifest: { bin: { tsc: string } } = JSON.parse(readFileSync(manifestPath, \"utf8\"));\nexport const compilerBin = path.resolve(path.dirname(manifestPath), manifest.bin.tsc);\n\nexport function parseCompilerOutput(output: string, cwd: string): CompilerDiagnostic[] {\n const diagnostics: CompilerDiagnostic[] = [];\n for (const line of output.split(/\\r?\\n/)) {\n const match = /^(?:(.*?)\\((\\d+),(\\d+)\\): )?(error|warning) TS(\\d+): (.*)$/.exec(line);\n if (match) {\n diagnostics.push({\n ...(match[1] ? { fileName: path.resolve(cwd, match[1]) } : {}),\n line: Number(match[2] ?? 1),\n column: Number(match[3] ?? 1),\n severity: match[4] === \"warning\" ? \"warning\" : \"error\",\n code: Number(match[5]),\n message: match[6] ?? \"\",\n length: 1,\n });\n } else if (/^\\s+\\S/.test(line)) {\n const previous = diagnostics.at(-1);\n if (previous) previous.message += `\\n${line}`;\n }\n }\n return diagnostics;\n}\n\nexport function runCompiler(cwd: string, args: string[]) {\n // spawnSync owns and waits for this exact child PID; it never stops unrelated processes.\n const result = spawnSync(process.execPath, [compilerBin, ...args, \"--pretty\", \"false\"], {\n cwd,\n encoding: \"utf8\",\n maxBuffer: 64 * 1024 * 1024,\n });\n if (result.error) throw result.error;\n if (result.signal) throw new Error(`TypeScript compiler terminated by ${result.signal}.`);\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n const diagnostics = parseCompilerOutput(output, cwd);\n if (result.status !== 0 && diagnostics.length === 0) {\n throw new Error(`TypeScript compiler exited ${result.status}: ${output}`);\n }\n return { diagnostics, output, status: result.status, pid: result.pid };\n}\n\nexport type SourceUpdate = { path: string; content: string };\n\n/** One native server per dev session; snapshots retain the configured declaration roots. */\nexport class CompilerSession {\n private api: API;\n private snapshot: Snapshot;\n private contents = new Map<string, string | null>();\n private configPath: string;\n\n constructor(\n cwd: string,\n configPath = path.join(cwd, \"tsconfig.json\"),\n virtualFiles: Record<string, string> = {},\n ) {\n for (const [file, content] of Object.entries(virtualFiles))\n this.contents.set(path.resolve(file), content);\n this.configPath = path.resolve(cwd, configPath);\n this.api = new API({\n cwd,\n fs: {\n readFile: (file) => this.contents.get(path.resolve(file)),\n directoryExists: (directory) =>\n [...this.contents.keys()].some((file) =>\n file.startsWith(path.resolve(directory) + path.sep),\n )\n ? true\n : undefined,\n fileExists: (file) =>\n this.contents.has(path.resolve(file))\n ? this.contents.get(path.resolve(file)) !== null\n : undefined,\n },\n });\n try {\n this.snapshot = this.api.updateSnapshot({ openProjects: [this.configPath] });\n } catch (error) {\n this.api.close();\n throw error;\n }\n }\n\n update(files: readonly SourceUpdate[], deleted: readonly string[] = []): void {\n for (const file of files) this.contents.set(path.resolve(file.path), file.content);\n for (const file of deleted) this.contents.set(path.resolve(file), null);\n const old = this.snapshot;\n this.snapshot = this.api.updateSnapshot({ fileChanges: { invalidateAll: true } });\n old.dispose();\n }\n\n get fileNames(): readonly string[] {\n return this.snapshot.getProject(this.configPath)?.program.getSourceFileNames() ?? [];\n }\n\n /** Ask the checker to resolve module references using the project's actual options. */\n importFiles(file: string): string[] {\n const project = this.snapshot.getProject(this.configPath);\n if (!project?.program.getSourceFile(file)) return [];\n const source = this.contents.get(path.resolve(file)) ?? readFileSync(file, \"utf8\");\n return importSpecifiers(file, source).flatMap((imported) => {\n const symbol = project.checker.getSymbolAtPosition(file, imported.node.start + 1);\n return symbol?.declarations.map((declaration) => declaration.path) ?? [];\n });\n }\n\n diagnostics(file: string): CompilerDiagnostic[] {\n const program = this.snapshot.getProject(this.configPath)?.program;\n if (!program?.getSourceFile(file)) return [];\n return [...program.getSyntacticDiagnostics(file), ...program.getSemanticDiagnostics(file)]\n .filter((diagnostic) => diagnostic.category === 1 || diagnostic.category === 0)\n .map((diagnostic) => {\n const content = this.contents.get(path.resolve(file)) ?? readFileSync(file, \"utf8\");\n const before = content.slice(0, Math.max(0, diagnostic.pos));\n const lines = before.split(\"\\n\");\n return {\n fileName: diagnostic.fileName,\n code: diagnostic.code,\n message: diagnostic.text,\n severity: diagnostic.category === 1 ? \"error\" : \"warning\",\n line: lines.length,\n column: (lines.at(-1)?.length ?? 0) + 1,\n length: Math.max(1, diagnostic.end - diagnostic.pos),\n };\n });\n }\n\n close(): void {\n this.snapshot.dispose();\n // API.close() stops only the child it spawned (typescript/dist/api/syncChannel.js).\n this.api.close();\n }\n}\n\n/** Compile generated source against the real project, with an isolated virtual config. */\nexport function compileSources(\n configPath: string,\n files: Record<string, string>,\n paths: Record<string, string[]> = {},\n): Record<string, string[]> {\n const cwd = path.dirname(configPath);\n const config = readTsconfig(configPath);\n const virtualConfig = path.join(cwd, \"__generated-types__\", \"tsconfig.json\");\n const session = new CompilerSession(cwd, virtualConfig, {\n ...files,\n [virtualConfig]: JSON.stringify({\n extends: configPath,\n compilerOptions: {\n noEmit: true,\n paths: { ...config.config.compilerOptions?.paths, ...paths },\n },\n files: Object.keys(files),\n include: [],\n }),\n });\n try {\n return Object.fromEntries(\n Object.keys(files).map((file) => [\n file,\n session.diagnostics(file).map((diagnostic) => diagnostic.message),\n ]),\n );\n } finally {\n session.close();\n }\n}\n"],"mappings":"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"}
@@ -184,7 +184,8 @@ function printUpdates(updates, { pending = false } = {}) {
184
184
  }
185
185
  /** Reconcile node_modules to the rewritten package.json via the project PM. */
186
186
  async function installDependencies() {
187
- const installCommand = getInstallCommand(await detectPackageManager());
187
+ const packageManager = await detectPackageManager();
188
+ const installCommand = getInstallCommand(packageManager);
188
189
  console.log(`${colors.cyan("›")} Running ${colors.bold(installCommand)}…`);
189
190
  execSync(installCommand, {
190
191
  cwd: process.cwd(),
@@ -193,5 +194,5 @@ async function installDependencies() {
193
194
  }
194
195
 
195
196
  //#endregion
196
- export { updateWarlockPackages };
197
+ export { isRegistryUnreachable, resolvePackageUpdates, updateWarlockPackages };
197
198
  //# sourceMappingURL=update-warlock-packages.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-warlock-packages.mjs","names":[],"sources":["../../../../../../../../packages/core/src/updater/update-warlock-packages.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport { fileExistsAsync, getJsonFileAsync, putJsonFileAsync } from \"@warlock.js/fs\";\nimport { execSync } from \"node:child_process\";\nimport { rootPath } from \"../utils\";\nimport { fetchLatestVersion } from \"../utils/npm-registry\";\nimport { isNewerVersion } from \"../utils/version-compare\";\nimport { detectPackageManager, getInstallCommand } from \"./package-manager\";\n\n/** Scope prefix that identifies a Warlock framework package. */\nconst WARLOCK_SCOPE = \"@warlock.js/\";\n\n/** The dependency maps in package.json we update, in display order. */\nconst DEPENDENCY_SECTIONS = [\"dependencies\", \"devDependencies\"] as const;\n\ntype DependencySection = (typeof DEPENDENCY_SECTIONS)[number];\n\ntype DependencyMap = Record<string, string>;\n\ntype PackageJson = Record<string, unknown> & {\n dependencies?: DependencyMap;\n devDependencies?: DependencyMap;\n};\n\n/** A `@warlock.js/*` dependency found in package.json. */\ntype WarlockDependency = {\n name: string;\n section: DependencySection;\n /** The current spec exactly as written, e.g. `^4.2.0`. */\n current: string;\n};\n\n/** A dependency whose latest version has been resolved from the registry. */\nexport type ResolvedDependency = WarlockDependency & {\n /** Latest version from npm, or `undefined` when the lookup failed. */\n latest: string | undefined;\n};\n\n/** A concrete version bump to write back into package.json. */\nexport type PackageUpdate = {\n name: string;\n section: DependencySection;\n /** Existing spec, e.g. `^4.2.0`. */\n from: string;\n /** New spec with the original range operator preserved, e.g. `^4.3.0`. */\n to: string;\n};\n\n/** Options accepted by {@link updateWarlockPackages}. */\nexport type UpdateWarlockPackagesOptions = {\n /** Run the package manager install after rewriting versions (default true). */\n install?: boolean;\n /**\n * Report what would change without touching package.json or node_modules.\n * Resolves with the `outdated` outcome instead of `updated`.\n */\n dryRun?: boolean;\n};\n\n/**\n * How an update run ended. Callers branch on this instead of re-deriving the\n * situation from the printed output — the dev-server `u` shortcut needs to\n * know whether restarting is warranted, and whether it may offer a retry.\n */\nexport type UpdateOutcome =\n /** No package.json at the project root — nothing to do. */\n | \"no-package-json\"\n /** package.json carries no `@warlock.js/*` dependency. */\n | \"no-packages\"\n /** Every registry lookup failed — offline, DNS down, or npm unreachable. */\n | \"registry-unreachable\"\n /** Every package is already at (or ahead of) its latest published version. */\n | \"up-to-date\"\n /** Newer versions exist, and a dry run left everything untouched. */\n | \"outdated\"\n /** Versions were rewritten (and installed, unless `install: false`). */\n | \"updated\"\n /** Versions were rewritten but the package manager install failed. */\n | \"install-failed\";\n\n/** The result of an update run. */\nexport type UpdateWarlockPackagesResult = {\n outcome: UpdateOutcome;\n /** The bumps written to package.json — empty unless `outcome` wrote any. */\n updates: PackageUpdate[];\n /** The install failure, present only for `install-failed`. */\n error?: Error;\n};\n\n/**\n * Update every `@warlock.js/*` package listed in the project's root\n * package.json to its latest published version, then reconcile `node_modules`\n * via the detected package manager.\n *\n * The original range operator on each dependency (`^`, `~`, or an exact pin)\n * is preserved; specs that aren't a plain semver — `workspace:*`, `*`,\n * `latest`, git/file URLs — are left untouched. Only genuine upgrades are\n * written, so re-running on an already-current project is a no-op.\n *\n * Resolves rather than throws on the two failures a caller is expected to\n * survive — an unreachable registry and a failed install — so the dev-server\n * shortcut can report them and keep serving.\n */\nexport async function updateWarlockPackages(\n options: UpdateWarlockPackagesOptions = {},\n): Promise<UpdateWarlockPackagesResult> {\n const runInstall = options.install ?? true;\n const packageJsonPath = rootPath(\"package.json\");\n\n if (!(await fileExistsAsync(packageJsonPath))) {\n console.log(`${colors.red(\"✖\")} No package.json found at the project root.`);\n return { outcome: \"no-package-json\", updates: [] };\n }\n\n const packageJson = (await getJsonFileAsync(packageJsonPath)) as PackageJson;\n const dependencies = collectWarlockDependencies(packageJson);\n\n if (dependencies.length === 0) {\n console.log(`${colors.yellow(\"⚠\")} No @warlock.js packages found in package.json.`);\n return { outcome: \"no-packages\", updates: [] };\n }\n\n console.log(\n `${colors.cyan(\"›\")} Checking ${colors.bold(String(dependencies.length))} ` +\n `@warlock.js package(s) for updates…`,\n );\n\n const resolved = await resolveLatestVersions(dependencies);\n\n // Distinguish \"nothing newer\" from \"we never got an answer\". Without this,\n // an offline run reports every package as up to date, which is a lie.\n if (isRegistryUnreachable(resolved)) {\n console.log(\n `${colors.yellow(\"⚠\")} Could not reach the npm registry — ` +\n `no versions were changed. Check your connection and try again.`,\n );\n return { outcome: \"registry-unreachable\", updates: [] };\n }\n\n // A partial failure would bump some family members and leave others behind,\n // a lockstep drift reported as success. Refuse the whole run instead.\n const failedLookups = resolved.filter((dependency) => !dependency.latest);\n\n if (failedLookups.length > 0) {\n console.log(\n `${colors.yellow(\"⚠\")} Could not look up ${failedLookups.map((dependency) => dependency.name).join(\", \")} — ` +\n `no versions were changed, to keep @warlock.js packages in lockstep. Try again.`,\n );\n return { outcome: \"registry-unreachable\", updates: [] };\n }\n\n const updates = resolvePackageUpdates(resolved);\n\n if (updates.length === 0) {\n console.log(`${colors.green(\"✓\")} All @warlock.js packages are already up to date.`);\n return { outcome: \"up-to-date\", updates: [] };\n }\n\n if (options.dryRun) {\n printUpdates(updates, { pending: true });\n return { outcome: \"outdated\", updates };\n }\n\n applyUpdates(packageJson, updates);\n await putJsonFileAsync(packageJsonPath, packageJson);\n\n printUpdates(updates);\n\n if (!runInstall) {\n console.log(\n colors.dim(\"Skipped install (--no-install). Run your package manager to apply the changes.\"),\n );\n return { outcome: \"updated\", updates };\n }\n\n try {\n await installDependencies();\n } catch (error) {\n console.log(\n `${colors.red(\"✖\")} The install failed. package.json is already updated — ` +\n `re-run your package manager install to finish.`,\n );\n return { outcome: \"install-failed\", updates, error: error as Error };\n }\n\n return { outcome: \"updated\", updates };\n}\n\n/**\n * Whether *every* lookup came back empty, which in practice means the\n * registry was never reached. A single failed package (unpublished, renamed,\n * private) leaves the rest resolvable and is not treated as an outage.\n */\nexport function isRegistryUnreachable(resolved: ResolvedDependency[]): boolean {\n return resolved.length > 0 && resolved.every((dependency) => !dependency.latest);\n}\n\n/** Collect every `@warlock.js/*` dependency across the relevant sections. */\nfunction collectWarlockDependencies(packageJson: PackageJson): WarlockDependency[] {\n const dependencies: WarlockDependency[] = [];\n\n for (const section of DEPENDENCY_SECTIONS) {\n const map = packageJson[section];\n\n if (!map) {\n continue;\n }\n\n for (const [name, current] of Object.entries(map)) {\n if (name.startsWith(WARLOCK_SCOPE)) {\n dependencies.push({ name, section, current });\n }\n }\n }\n\n return dependencies;\n}\n\n/** Resolve each dependency's latest version from the registry in parallel. */\nasync function resolveLatestVersions(\n dependencies: WarlockDependency[],\n): Promise<ResolvedDependency[]> {\n return Promise.all(\n dependencies.map(async (dependency) => ({\n ...dependency,\n latest: await fetchLatestVersion(dependency.name),\n })),\n );\n}\n\n/**\n * Turn resolved dependencies into the concrete set of version bumps to write.\n * Pure (no I/O) so it can be unit-tested directly: skips lookups that failed,\n * non-semver specs, and anything already at (or ahead of) the latest version,\n * and preserves the original range operator on everything it does rewrite.\n */\nexport function resolvePackageUpdates(resolved: ResolvedDependency[]): PackageUpdate[] {\n const updates: PackageUpdate[] = [];\n\n for (const dependency of resolved) {\n if (!dependency.latest) {\n continue;\n }\n\n const parsed = parseSpec(dependency.current);\n\n if (!parsed) {\n continue;\n }\n\n if (!isNewerVersion(dependency.latest, parsed.version)) {\n continue;\n }\n\n updates.push({\n name: dependency.name,\n section: dependency.section,\n from: dependency.current,\n to: `${parsed.operator}${dependency.latest}`,\n });\n }\n\n return updates;\n}\n\n/**\n * Split a dependency spec into its range operator and concrete version.\n * Returns `undefined` for specs we won't touch — `workspace:*`, `*`,\n * `latest`, multi-part ranges, or git/file URLs — leaving them exactly as\n * the author wrote them.\n */\nfunction parseSpec(spec: string): { operator: string; version: string } | undefined {\n const match = spec.trim().match(/^(\\^|~)?(\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?)$/);\n\n if (!match) {\n return undefined;\n }\n\n const version = match[2];\n\n if (version === undefined) {\n return undefined;\n }\n\n return { operator: match[1] ?? \"\", version };\n}\n\n/** Write the resolved bumps back into the package.json object in place. */\nfunction applyUpdates(packageJson: PackageJson, updates: PackageUpdate[]): void {\n for (const update of updates) {\n const map = packageJson[update.section];\n\n if (map) {\n map[update.name] = update.to;\n }\n }\n}\n\n/** Print the version bumps — applied, or pending on a dry run. */\nfunction printUpdates(updates: PackageUpdate[], { pending = false } = {}): void {\n const headline = pending\n ? `${colors.yellow(\"↑\")} ${colors.bold(String(updates.length))} package(s) can be updated:`\n : `${colors.green(\"✓\")} Updated ${colors.bold(String(updates.length))} package(s):`;\n\n console.log(headline);\n\n for (const update of updates) {\n console.log(\n ` ${colors.cyan(update.name)} ` +\n `${colors.dim(update.from)} ${colors.dim(\"→\")} ${colors.greenBright(update.to)}`,\n );\n }\n}\n\n/** Reconcile node_modules to the rewritten package.json via the project PM. */\nasync function installDependencies(): Promise<void> {\n const packageManager = await detectPackageManager();\n const installCommand = getInstallCommand(packageManager);\n\n console.log(`${colors.cyan(\"›\")} Running ${colors.bold(installCommand)}…`);\n\n execSync(installCommand, { cwd: process.cwd(), stdio: \"inherit\" });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"update-warlock-packages.mjs","names":[],"sources":["../../../../../../../../packages/core/src/updater/update-warlock-packages.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport { fileExistsAsync, getJsonFileAsync, putJsonFileAsync } from \"@warlock.js/fs\";\nimport { execSync } from \"node:child_process\";\nimport { rootPath } from \"../utils\";\nimport { fetchLatestVersion } from \"../utils/npm-registry\";\nimport { isNewerVersion } from \"../utils/version-compare\";\nimport { detectPackageManager, getInstallCommand } from \"./package-manager\";\n\n/** Scope prefix that identifies a Warlock framework package. */\nconst WARLOCK_SCOPE = \"@warlock.js/\";\n\n/** The dependency maps in package.json we update, in display order. */\nconst DEPENDENCY_SECTIONS = [\"dependencies\", \"devDependencies\"] as const;\n\ntype DependencySection = (typeof DEPENDENCY_SECTIONS)[number];\n\ntype DependencyMap = Record<string, string>;\n\ntype PackageJson = Record<string, unknown> & {\n dependencies?: DependencyMap;\n devDependencies?: DependencyMap;\n};\n\n/** A `@warlock.js/*` dependency found in package.json. */\ntype WarlockDependency = {\n name: string;\n section: DependencySection;\n /** The current spec exactly as written, e.g. `^4.2.0`. */\n current: string;\n};\n\n/** A dependency whose latest version has been resolved from the registry. */\nexport type ResolvedDependency = WarlockDependency & {\n /** Latest version from npm, or `undefined` when the lookup failed. */\n latest: string | undefined;\n};\n\n/** A concrete version bump to write back into package.json. */\nexport type PackageUpdate = {\n name: string;\n section: DependencySection;\n /** Existing spec, e.g. `^4.2.0`. */\n from: string;\n /** New spec with the original range operator preserved, e.g. `^4.3.0`. */\n to: string;\n};\n\n/** Options accepted by {@link updateWarlockPackages}. */\nexport type UpdateWarlockPackagesOptions = {\n /** Run the package manager install after rewriting versions (default true). */\n install?: boolean;\n /**\n * Report what would change without touching package.json or node_modules.\n * Resolves with the `outdated` outcome instead of `updated`.\n */\n dryRun?: boolean;\n};\n\n/**\n * How an update run ended. Callers branch on this instead of re-deriving the\n * situation from the printed output — the dev-server `u` shortcut needs to\n * know whether restarting is warranted, and whether it may offer a retry.\n */\nexport type UpdateOutcome =\n /** No package.json at the project root — nothing to do. */\n | \"no-package-json\"\n /** package.json carries no `@warlock.js/*` dependency. */\n | \"no-packages\"\n /** Every registry lookup failed — offline, DNS down, or npm unreachable. */\n | \"registry-unreachable\"\n /** Every package is already at (or ahead of) its latest published version. */\n | \"up-to-date\"\n /** Newer versions exist, and a dry run left everything untouched. */\n | \"outdated\"\n /** Versions were rewritten (and installed, unless `install: false`). */\n | \"updated\"\n /** Versions were rewritten but the package manager install failed. */\n | \"install-failed\";\n\n/** The result of an update run. */\nexport type UpdateWarlockPackagesResult = {\n outcome: UpdateOutcome;\n /** The bumps written to package.json — empty unless `outcome` wrote any. */\n updates: PackageUpdate[];\n /** The install failure, present only for `install-failed`. */\n error?: Error;\n};\n\n/**\n * Update every `@warlock.js/*` package listed in the project's root\n * package.json to its latest published version, then reconcile `node_modules`\n * via the detected package manager.\n *\n * The original range operator on each dependency (`^`, `~`, or an exact pin)\n * is preserved; specs that aren't a plain semver — `workspace:*`, `*`,\n * `latest`, git/file URLs — are left untouched. Only genuine upgrades are\n * written, so re-running on an already-current project is a no-op.\n *\n * Resolves rather than throws on the two failures a caller is expected to\n * survive — an unreachable registry and a failed install — so the dev-server\n * shortcut can report them and keep serving.\n */\nexport async function updateWarlockPackages(\n options: UpdateWarlockPackagesOptions = {},\n): Promise<UpdateWarlockPackagesResult> {\n const runInstall = options.install ?? true;\n const packageJsonPath = rootPath(\"package.json\");\n\n if (!(await fileExistsAsync(packageJsonPath))) {\n console.log(`${colors.red(\"✖\")} No package.json found at the project root.`);\n return { outcome: \"no-package-json\", updates: [] };\n }\n\n const packageJson = (await getJsonFileAsync(packageJsonPath)) as PackageJson;\n const dependencies = collectWarlockDependencies(packageJson);\n\n if (dependencies.length === 0) {\n console.log(`${colors.yellow(\"⚠\")} No @warlock.js packages found in package.json.`);\n return { outcome: \"no-packages\", updates: [] };\n }\n\n console.log(\n `${colors.cyan(\"›\")} Checking ${colors.bold(String(dependencies.length))} ` +\n `@warlock.js package(s) for updates…`,\n );\n\n const resolved = await resolveLatestVersions(dependencies);\n\n // Distinguish \"nothing newer\" from \"we never got an answer\". Without this,\n // an offline run reports every package as up to date, which is a lie.\n if (isRegistryUnreachable(resolved)) {\n console.log(\n `${colors.yellow(\"⚠\")} Could not reach the npm registry — ` +\n `no versions were changed. Check your connection and try again.`,\n );\n return { outcome: \"registry-unreachable\", updates: [] };\n }\n\n // A partial failure would bump some family members and leave others behind,\n // a lockstep drift reported as success. Refuse the whole run instead.\n const failedLookups = resolved.filter((dependency) => !dependency.latest);\n\n if (failedLookups.length > 0) {\n console.log(\n `${colors.yellow(\"⚠\")} Could not look up ${failedLookups.map((dependency) => dependency.name).join(\", \")} — ` +\n `no versions were changed, to keep @warlock.js packages in lockstep. Try again.`,\n );\n return { outcome: \"registry-unreachable\", updates: [] };\n }\n\n const updates = resolvePackageUpdates(resolved);\n\n if (updates.length === 0) {\n console.log(`${colors.green(\"✓\")} All @warlock.js packages are already up to date.`);\n return { outcome: \"up-to-date\", updates: [] };\n }\n\n if (options.dryRun) {\n printUpdates(updates, { pending: true });\n return { outcome: \"outdated\", updates };\n }\n\n applyUpdates(packageJson, updates);\n await putJsonFileAsync(packageJsonPath, packageJson);\n\n printUpdates(updates);\n\n if (!runInstall) {\n console.log(\n colors.dim(\"Skipped install (--no-install). Run your package manager to apply the changes.\"),\n );\n return { outcome: \"updated\", updates };\n }\n\n try {\n await installDependencies();\n } catch (error) {\n console.log(\n `${colors.red(\"✖\")} The install failed. package.json is already updated — ` +\n `re-run your package manager install to finish.`,\n );\n return { outcome: \"install-failed\", updates, error: error as Error };\n }\n\n return { outcome: \"updated\", updates };\n}\n\n/**\n * Whether *every* lookup came back empty, which in practice means the\n * registry was never reached. A single failed package (unpublished, renamed,\n * private) leaves the rest resolvable and is not treated as an outage.\n */\nexport function isRegistryUnreachable(resolved: ResolvedDependency[]): boolean {\n return resolved.length > 0 && resolved.every((dependency) => !dependency.latest);\n}\n\n/** Collect every `@warlock.js/*` dependency across the relevant sections. */\nfunction collectWarlockDependencies(packageJson: PackageJson): WarlockDependency[] {\n const dependencies: WarlockDependency[] = [];\n\n for (const section of DEPENDENCY_SECTIONS) {\n const map = packageJson[section];\n\n if (!map) {\n continue;\n }\n\n for (const [name, current] of Object.entries(map)) {\n if (name.startsWith(WARLOCK_SCOPE)) {\n dependencies.push({ name, section, current });\n }\n }\n }\n\n return dependencies;\n}\n\n/** Resolve each dependency's latest version from the registry in parallel. */\nasync function resolveLatestVersions(\n dependencies: WarlockDependency[],\n): Promise<ResolvedDependency[]> {\n return Promise.all(\n dependencies.map(async (dependency) => ({\n ...dependency,\n latest: await fetchLatestVersion(dependency.name),\n })),\n );\n}\n\n/**\n * Turn resolved dependencies into the concrete set of version bumps to write.\n * Pure (no I/O) so it can be unit-tested directly: skips lookups that failed,\n * non-semver specs, and anything already at (or ahead of) the latest version,\n * and preserves the original range operator on everything it does rewrite.\n */\nexport function resolvePackageUpdates(resolved: ResolvedDependency[]): PackageUpdate[] {\n const updates: PackageUpdate[] = [];\n\n for (const dependency of resolved) {\n if (!dependency.latest) {\n continue;\n }\n\n const parsed = parseSpec(dependency.current);\n\n if (!parsed) {\n continue;\n }\n\n if (!isNewerVersion(dependency.latest, parsed.version)) {\n continue;\n }\n\n updates.push({\n name: dependency.name,\n section: dependency.section,\n from: dependency.current,\n to: `${parsed.operator}${dependency.latest}`,\n });\n }\n\n return updates;\n}\n\n/**\n * Split a dependency spec into its range operator and concrete version.\n * Returns `undefined` for specs we won't touch — `workspace:*`, `*`,\n * `latest`, multi-part ranges, or git/file URLs — leaving them exactly as\n * the author wrote them.\n */\nfunction parseSpec(spec: string): { operator: string; version: string } | undefined {\n const match = spec.trim().match(/^(\\^|~)?(\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?)$/);\n\n if (!match) {\n return undefined;\n }\n\n const version = match[2];\n\n if (version === undefined) {\n return undefined;\n }\n\n return { operator: match[1] ?? \"\", version };\n}\n\n/** Write the resolved bumps back into the package.json object in place. */\nfunction applyUpdates(packageJson: PackageJson, updates: PackageUpdate[]): void {\n for (const update of updates) {\n const map = packageJson[update.section];\n\n if (map) {\n map[update.name] = update.to;\n }\n }\n}\n\n/** Print the version bumps — applied, or pending on a dry run. */\nfunction printUpdates(updates: PackageUpdate[], { pending = false } = {}): void {\n const headline = pending\n ? `${colors.yellow(\"↑\")} ${colors.bold(String(updates.length))} package(s) can be updated:`\n : `${colors.green(\"✓\")} Updated ${colors.bold(String(updates.length))} package(s):`;\n\n console.log(headline);\n\n for (const update of updates) {\n console.log(\n ` ${colors.cyan(update.name)} ` +\n `${colors.dim(update.from)} ${colors.dim(\"→\")} ${colors.greenBright(update.to)}`,\n );\n }\n}\n\n/** Reconcile node_modules to the rewritten package.json via the project PM. */\nasync function installDependencies(): Promise<void> {\n const packageManager = await detectPackageManager();\n const installCommand = getInstallCommand(packageManager);\n\n console.log(`${colors.cyan(\"›\")} Running ${colors.bold(installCommand)}…`);\n\n execSync(installCommand, { cwd: process.cwd(), stdio: \"inherit\" });\n}\n"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { importedLocalNames, importsFrom, manualAt, objectProperty, objectProper
2
2
  import { headViewport } from "./head-viewport.mjs";
3
3
  import { loggerSyncCalls } from "./logger-sync-calls.mjs";
4
4
  import { node2215, warlockVersions } from "./package-json.mjs";
5
+ import { oxcToolchain } from "./oxc-toolchain.mjs";
5
6
  import { requestLogSnapshot } from "./request-log-snapshot.mjs";
6
7
  import { aiAnthropicBody, aiCompactionOptIn, aiFinishReason, aiToolDispatch, rateLimitDefaults, sealContainerCatch, sealRefineOutput, sealUnionOutput, sealValidateResult } from "./review-sites.mjs";
7
8
 
@@ -26,9 +27,10 @@ const CODEMODS = [
26
27
  sealContainerCatch,
27
28
  sealUnionOutput,
28
29
  aiCompactionOptIn,
30
+ oxcToolchain,
29
31
  warlockVersions
30
32
  ];
31
33
 
32
34
  //#endregion
33
- export { CODEMODS };
35
+ export { CODEMODS, importedLocalNames, importsFrom, manualAt, objectProperty, objectPropertyNames, removeNode, replaceNode };
34
36
  //# sourceMappingURL=index.mjs.map