@warlock.js/core 5.28.0 → 5.30.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 (1396) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/esm/application/app.d.mts +1 -1
  3. package/esm/application/app.d.mts.map +1 -1
  4. package/esm/application/app.mjs +1 -1
  5. package/esm/application/app.mjs.map +1 -1
  6. package/esm/application/application-config-types.d.mts +1 -1
  7. package/esm/application/application-config-types.d.mts.map +1 -1
  8. package/esm/application/application.d.mts +1 -1
  9. package/esm/application/application.d.mts.map +1 -1
  10. package/esm/application/application.mjs +1 -1
  11. package/esm/application/application.mjs.map +1 -1
  12. package/esm/application/boot-signal.d.mts +1 -1
  13. package/esm/application/boot-signal.d.mts.map +1 -1
  14. package/esm/application/boot-signal.mjs +1 -1
  15. package/esm/application/boot-signal.mjs.map +1 -1
  16. package/esm/application/public-url.d.mts +1 -1
  17. package/esm/application/public-url.d.mts.map +1 -1
  18. package/esm/application/public-url.mjs +1 -1
  19. package/esm/application/public-url.mjs.map +1 -1
  20. package/esm/application/roles.d.mts +1 -1
  21. package/esm/application/roles.d.mts.map +1 -1
  22. package/esm/application/roles.mjs +1 -1
  23. package/esm/application/roles.mjs.map +1 -1
  24. package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
  25. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  26. package/esm/benchmark/benchmark-snapshots.mjs +1 -1
  27. package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
  28. package/esm/benchmark/benchmark.d.mts +1 -1
  29. package/esm/benchmark/benchmark.d.mts.map +1 -1
  30. package/esm/benchmark/benchmark.mjs +1 -1
  31. package/esm/benchmark/benchmark.mjs.map +1 -1
  32. package/esm/benchmark/channels/console.channel.d.mts +1 -1
  33. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  34. package/esm/benchmark/channels/console.channel.mjs +1 -1
  35. package/esm/benchmark/channels/console.channel.mjs.map +1 -1
  36. package/esm/benchmark/channels/noop.channel.d.mts +1 -1
  37. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  38. package/esm/benchmark/channels/noop.channel.mjs +1 -1
  39. package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
  40. package/esm/benchmark/profiler.d.mts +1 -1
  41. package/esm/benchmark/profiler.d.mts.map +1 -1
  42. package/esm/benchmark/profiler.mjs +1 -1
  43. package/esm/benchmark/profiler.mjs.map +1 -1
  44. package/esm/benchmark/types.d.mts +1 -1
  45. package/esm/benchmark/types.d.mts.map +1 -1
  46. package/esm/bootstrap/setup.d.mts +1 -1
  47. package/esm/bootstrap/setup.d.mts.map +1 -1
  48. package/esm/bootstrap/setup.mjs +1 -1
  49. package/esm/bootstrap/setup.mjs.map +1 -1
  50. package/esm/bootstrap.d.mts +1 -1
  51. package/esm/bootstrap.d.mts.map +1 -1
  52. package/esm/bootstrap.mjs +1 -1
  53. package/esm/bootstrap.mjs.map +1 -1
  54. package/esm/cache/database-cache-driver.d.mts +1 -1
  55. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  56. package/esm/cache/database-cache-driver.mjs +1 -1
  57. package/esm/cache/database-cache-driver.mjs.map +1 -1
  58. package/esm/cache/index.mjs +1 -1
  59. package/esm/cache/index.mjs.map +1 -1
  60. package/esm/cli/cli-commands.manager.mjs +1 -1
  61. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  62. package/esm/cli/cli-commands.utils.mjs +1 -1
  63. package/esm/cli/cli-commands.utils.mjs.map +1 -1
  64. package/esm/cli/commands/add.command.mjs +1 -1
  65. package/esm/cli/commands/add.command.mjs.map +1 -1
  66. package/esm/cli/commands/build.command.mjs +1 -1
  67. package/esm/cli/commands/build.command.mjs.map +1 -1
  68. package/esm/cli/commands/create-database.command.mjs +1 -1
  69. package/esm/cli/commands/create-database.command.mjs.map +1 -1
  70. package/esm/cli/commands/dev-server.command.mjs +1 -1
  71. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  72. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +1 -1
  73. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
  74. package/esm/cli/commands/doctor/checks/config.check.mjs +1 -1
  75. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
  76. package/esm/cli/commands/doctor/checks/connectors.check.mjs +1 -1
  77. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
  78. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +1 -1
  79. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
  80. package/esm/cli/commands/doctor/checks/health.check.mjs +1 -1
  81. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
  82. package/esm/cli/commands/doctor/checks/index.mjs +1 -1
  83. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -1
  84. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +1 -1
  85. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
  86. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +1 -1
  87. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
  88. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -1
  89. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
  90. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +1 -1
  91. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
  92. package/esm/cli/commands/doctor/checks/routes.check.mjs +1 -1
  93. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
  94. package/esm/cli/commands/doctor/doctor-command.action.mjs +1 -1
  95. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  96. package/esm/cli/commands/doctor/format-report.mjs +1 -1
  97. package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
  98. package/esm/cli/commands/doctor/run-checks.mjs +1 -1
  99. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -1
  100. package/esm/cli/commands/doctor.command.mjs +1 -1
  101. package/esm/cli/commands/doctor.command.mjs.map +1 -1
  102. package/esm/cli/commands/drop-tables.command.mjs +1 -1
  103. package/esm/cli/commands/drop-tables.command.mjs.map +1 -1
  104. package/esm/cli/commands/generate/generate.command.mjs +1 -1
  105. package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
  106. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +1 -1
  107. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +1 -1
  108. package/esm/cli/commands/generate/generators/controller.generator.mjs +1 -1
  109. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  110. package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
  111. package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
  112. package/esm/cli/commands/generate/generators/model.generator.mjs +1 -1
  113. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  114. package/esm/cli/commands/generate/generators/module.generator.mjs +1 -1
  115. package/esm/cli/commands/generate/generators/module.generator.mjs.map +1 -1
  116. package/esm/cli/commands/generate/generators/repository.generator.mjs +1 -1
  117. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  118. package/esm/cli/commands/generate/generators/resource.generator.mjs +1 -1
  119. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  120. package/esm/cli/commands/generate/generators/service.generator.mjs +1 -1
  121. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  122. package/esm/cli/commands/generate/generators/use-case.generator.mjs +1 -1
  123. package/esm/cli/commands/generate/generators/use-case.generator.mjs.map +1 -1
  124. package/esm/cli/commands/generate/templates/stubs.mjs +1 -1
  125. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  126. package/esm/cli/commands/generate/utils/name-parser.mjs +1 -1
  127. package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
  128. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  129. package/esm/cli/commands/generate/utils/path-resolver.mjs.map +1 -1
  130. package/esm/cli/commands/generate/utils/prompt.mjs +1 -1
  131. package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
  132. package/esm/cli/commands/generate/utils/writer.mjs +1 -1
  133. package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
  134. package/esm/cli/commands/migrate.command.mjs +1 -1
  135. package/esm/cli/commands/migrate.command.mjs.map +1 -1
  136. package/esm/cli/commands/openapi-generator.action.mjs +1 -1
  137. package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
  138. package/esm/cli/commands/openapi-generator.command.mjs +1 -1
  139. package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
  140. package/esm/cli/commands/postman-generator.action.mjs +1 -1
  141. package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
  142. package/esm/cli/commands/postman-generator.command.mjs +1 -1
  143. package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
  144. package/esm/cli/commands/routes/diff-page-routes.mjs +1 -1
  145. package/esm/cli/commands/routes/diff-page-routes.mjs.map +1 -1
  146. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  147. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -1
  148. package/esm/cli/commands/routes/route-row.mjs +1 -1
  149. package/esm/cli/commands/routes/route-row.mjs.map +1 -1
  150. package/esm/cli/commands/routes/routes-command.action.mjs +1 -1
  151. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -1
  152. package/esm/cli/commands/routes/routes-diff.action.mjs +1 -1
  153. package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
  154. package/esm/cli/commands/routes/with-console-on-stderr.mjs +1 -1
  155. package/esm/cli/commands/routes/with-console-on-stderr.mjs.map +1 -1
  156. package/esm/cli/commands/routes.command.mjs +1 -1
  157. package/esm/cli/commands/routes.command.mjs.map +1 -1
  158. package/esm/cli/commands/seed.command.mjs +1 -1
  159. package/esm/cli/commands/seed.command.mjs.map +1 -1
  160. package/esm/cli/commands/start-production.command.mjs +1 -1
  161. package/esm/cli/commands/start-production.command.mjs.map +1 -1
  162. package/esm/cli/commands/storage-put.action.mjs +1 -1
  163. package/esm/cli/commands/storage-put.action.mjs.map +1 -1
  164. package/esm/cli/commands/storage-put.command.mjs +1 -1
  165. package/esm/cli/commands/storage-put.command.mjs.map +1 -1
  166. package/esm/cli/commands/typings-generator.command.mjs +1 -1
  167. package/esm/cli/commands/typings-generator.command.mjs.map +1 -1
  168. package/esm/cli/commands/update.command.mjs +1 -1
  169. package/esm/cli/commands/update.command.mjs.map +1 -1
  170. package/esm/cli/commands-loader.mjs +1 -1
  171. package/esm/cli/commands-loader.mjs.map +1 -1
  172. package/esm/cli/framework-cli-commands.mjs +1 -1
  173. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  174. package/esm/cli/parse-cli-args.mjs +1 -1
  175. package/esm/cli/parse-cli-args.mjs.map +1 -1
  176. package/esm/cli/start.mjs +1 -1
  177. package/esm/cli/start.mjs.map +1 -1
  178. package/esm/cli/string-similarity.mjs +1 -1
  179. package/esm/cli/string-similarity.mjs.map +1 -1
  180. package/esm/commands/cli-command.d.mts +1 -1
  181. package/esm/commands/cli-command.d.mts.map +1 -1
  182. package/esm/commands/cli-command.mjs +1 -1
  183. package/esm/commands/cli-command.mjs.map +1 -1
  184. package/esm/commands/types.d.mts +1 -1
  185. package/esm/commands/types.d.mts.map +1 -1
  186. package/esm/config/config-getter.d.mts +1 -1
  187. package/esm/config/config-getter.d.mts.map +1 -1
  188. package/esm/config/config-getter.mjs +1 -1
  189. package/esm/config/config-getter.mjs.map +1 -1
  190. package/esm/config/config-handlers.d.mts +1 -1
  191. package/esm/config/config-handlers.d.mts.map +1 -1
  192. package/esm/config/config-handlers.mjs +1 -1
  193. package/esm/config/config-handlers.mjs.map +1 -1
  194. package/esm/config/config-key-from-path.mjs +1 -1
  195. package/esm/config/config-key-from-path.mjs.map +1 -1
  196. package/esm/config/config-loader.d.mts +1 -1
  197. package/esm/config/config-loader.d.mts.map +1 -1
  198. package/esm/config/config-loader.mjs +1 -1
  199. package/esm/config/config-loader.mjs.map +1 -1
  200. package/esm/config/config-manager.mjs +1 -1
  201. package/esm/config/config-manager.mjs.map +1 -1
  202. package/esm/config/config-setter.d.mts +1 -1
  203. package/esm/config/config-setter.d.mts.map +1 -1
  204. package/esm/config/config-setter.mjs +1 -1
  205. package/esm/config/config-setter.mjs.map +1 -1
  206. package/esm/config/config-special-handlers.d.mts +1 -1
  207. package/esm/config/config-special-handlers.d.mts.map +1 -1
  208. package/esm/config/config-special-handlers.mjs +1 -1
  209. package/esm/config/config-special-handlers.mjs.map +1 -1
  210. package/esm/config/load-config-files.mjs +1 -1
  211. package/esm/config/load-config-files.mjs.map +1 -1
  212. package/esm/config/locale-configuration.mjs +1 -1
  213. package/esm/config/locale-configuration.mjs.map +1 -1
  214. package/esm/config/types.d.mts +1 -1
  215. package/esm/config/types.d.mts.map +1 -1
  216. package/esm/connectors/access-connector.d.mts +1 -1
  217. package/esm/connectors/access-connector.d.mts.map +1 -1
  218. package/esm/connectors/access-connector.mjs +1 -1
  219. package/esm/connectors/access-connector.mjs.map +1 -1
  220. package/esm/connectors/ai-connector.d.mts +1 -1
  221. package/esm/connectors/ai-connector.d.mts.map +1 -1
  222. package/esm/connectors/ai-connector.mjs +1 -1
  223. package/esm/connectors/ai-connector.mjs.map +1 -1
  224. package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -1
  225. package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
  226. package/esm/connectors/assert-no-reserved-connector-names.mjs +1 -1
  227. package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
  228. package/esm/connectors/assert-unique-connector-names.d.mts +1 -1
  229. package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
  230. package/esm/connectors/assert-unique-connector-names.mjs +1 -1
  231. package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
  232. package/esm/connectors/base-connector.d.mts +1 -1
  233. package/esm/connectors/base-connector.d.mts.map +1 -1
  234. package/esm/connectors/base-connector.mjs +1 -1
  235. package/esm/connectors/base-connector.mjs.map +1 -1
  236. package/esm/connectors/cache-connector.d.mts +1 -1
  237. package/esm/connectors/cache-connector.d.mts.map +1 -1
  238. package/esm/connectors/cache-connector.mjs +1 -1
  239. package/esm/connectors/cache-connector.mjs.map +1 -1
  240. package/esm/connectors/connectors-manager.d.mts +1 -1
  241. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  242. package/esm/connectors/connectors-manager.mjs +2 -2
  243. package/esm/connectors/connectors-manager.mjs.map +1 -1
  244. package/esm/connectors/database-connector.d.mts +1 -1
  245. package/esm/connectors/database-connector.d.mts.map +1 -1
  246. package/esm/connectors/database-connector.mjs +1 -1
  247. package/esm/connectors/database-connector.mjs.map +1 -1
  248. package/esm/connectors/describe-server-address.mjs +1 -1
  249. package/esm/connectors/describe-server-address.mjs.map +1 -1
  250. package/esm/connectors/herald-connector.d.mts +1 -1
  251. package/esm/connectors/herald-connector.d.mts.map +1 -1
  252. package/esm/connectors/herald-connector.mjs +1 -1
  253. package/esm/connectors/herald-connector.mjs.map +1 -1
  254. package/esm/connectors/http-connector.d.mts +1 -1
  255. package/esm/connectors/http-connector.d.mts.map +1 -1
  256. package/esm/connectors/http-connector.mjs +1 -1
  257. package/esm/connectors/http-connector.mjs.map +1 -1
  258. package/esm/connectors/logger-connector.d.mts +1 -1
  259. package/esm/connectors/logger-connector.d.mts.map +1 -1
  260. package/esm/connectors/logger-connector.mjs +1 -1
  261. package/esm/connectors/logger-connector.mjs.map +1 -1
  262. package/esm/connectors/mail-connector.d.mts +1 -1
  263. package/esm/connectors/mail-connector.d.mts.map +1 -1
  264. package/esm/connectors/mail-connector.mjs +1 -1
  265. package/esm/connectors/mail-connector.mjs.map +1 -1
  266. package/esm/connectors/notifications-connector.d.mts +1 -1
  267. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  268. package/esm/connectors/notifications-connector.mjs +1 -1
  269. package/esm/connectors/notifications-connector.mjs.map +1 -1
  270. package/esm/connectors/read-bound-port.mjs +1 -1
  271. package/esm/connectors/read-bound-port.mjs.map +1 -1
  272. package/esm/connectors/register-configured-connectors.d.mts +1 -1
  273. package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
  274. package/esm/connectors/register-configured-connectors.mjs +1 -1
  275. package/esm/connectors/register-configured-connectors.mjs.map +1 -1
  276. package/esm/connectors/single-server-warnings.mjs +1 -1
  277. package/esm/connectors/single-server-warnings.mjs.map +1 -1
  278. package/esm/connectors/socket-connector.d.mts +1 -1
  279. package/esm/connectors/socket-connector.d.mts.map +1 -1
  280. package/esm/connectors/socket-connector.mjs +1 -1
  281. package/esm/connectors/socket-connector.mjs.map +1 -1
  282. package/esm/connectors/storage.connector.d.mts +1 -1
  283. package/esm/connectors/storage.connector.d.mts.map +1 -1
  284. package/esm/connectors/storage.connector.mjs +1 -1
  285. package/esm/connectors/storage.connector.mjs.map +1 -1
  286. package/esm/connectors/types.d.mts +1 -1
  287. package/esm/connectors/types.d.mts.map +1 -1
  288. package/esm/connectors/types.mjs +1 -1
  289. package/esm/connectors/types.mjs.map +1 -1
  290. package/esm/container/container-instance-registry.mjs +1 -1
  291. package/esm/container/container-instance-registry.mjs.map +1 -1
  292. package/esm/container/development-app-modules.d.mts +31 -0
  293. package/esm/container/development-app-modules.d.mts.map +1 -0
  294. package/esm/container/development-model-modules.d.mts +1 -1
  295. package/esm/container/development-model-modules.d.mts.map +1 -1
  296. package/esm/container/index.d.mts +3 -1
  297. package/esm/container/index.d.mts.map +1 -1
  298. package/esm/container/index.mjs +1 -1
  299. package/esm/container/index.mjs.map +1 -1
  300. package/esm/database/create-database-action.mjs +1 -1
  301. package/esm/database/create-database-action.mjs.map +1 -1
  302. package/esm/database/drop-tables-action.mjs +1 -1
  303. package/esm/database/drop-tables-action.mjs.map +1 -1
  304. package/esm/database/migrate-action.mjs +1 -1
  305. package/esm/database/migrate-action.mjs.map +1 -1
  306. package/esm/database/models/database-log/database-log.d.mts +31 -39
  307. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  308. package/esm/database/models/database-log/database-log.mjs +1 -1
  309. package/esm/database/models/database-log/database-log.mjs.map +1 -1
  310. package/esm/database/pending-exit-code.mjs +1 -1
  311. package/esm/database/pending-exit-code.mjs.map +1 -1
  312. package/esm/database/resolve-pending-migrations.mjs +1 -1
  313. package/esm/database/resolve-pending-migrations.mjs.map +1 -1
  314. package/esm/database/seed-command-action.mjs +1 -1
  315. package/esm/database/seed-command-action.mjs.map +1 -1
  316. package/esm/database/seeds/seed-records-table-migration.mjs +1 -1
  317. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -1
  318. package/esm/database/seeds/seeder.d.mts +1 -1
  319. package/esm/database/seeds/seeder.d.mts.map +1 -1
  320. package/esm/database/seeds/seeder.errors.d.mts +1 -1
  321. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  322. package/esm/database/seeds/seeder.errors.mjs +1 -1
  323. package/esm/database/seeds/seeder.errors.mjs.map +1 -1
  324. package/esm/database/seeds/seeder.mjs +1 -1
  325. package/esm/database/seeds/seeder.mjs.map +1 -1
  326. package/esm/database/seeds/seeders.manager.mjs +1 -1
  327. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  328. package/esm/database/seeds/seeds-table-migration.mjs +1 -1
  329. package/esm/database/seeds/seeds-table-migration.mjs.map +1 -1
  330. package/esm/database/seeds/types.d.mts +1 -1
  331. package/esm/database/seeds/types.d.mts.map +1 -1
  332. package/esm/database/seeds/utils.mjs +1 -1
  333. package/esm/database/seeds/utils.mjs.map +1 -1
  334. package/esm/database/utils.d.mts +1 -1
  335. package/esm/database/utils.d.mts.map +1 -1
  336. package/esm/database/utils.mjs +1 -1
  337. package/esm/database/utils.mjs.map +1 -1
  338. package/esm/dev-server/app-module-registry.mjs +52 -0
  339. package/esm/dev-server/app-module-registry.mjs.map +1 -0
  340. package/esm/dev-server/boot-precondition-error.mjs +1 -1
  341. package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
  342. package/esm/dev-server/build-development-openapi-document.mjs +1 -1
  343. package/esm/dev-server/build-development-openapi-document.mjs.map +1 -1
  344. package/esm/dev-server/check-for-updates.mjs +1 -1
  345. package/esm/dev-server/check-for-updates.mjs.map +1 -1
  346. package/esm/dev-server/collect-development-api-routes.mjs +1 -1
  347. package/esm/dev-server/collect-development-api-routes.mjs.map +1 -1
  348. package/esm/dev-server/create-worker.mjs +1 -1
  349. package/esm/dev-server/create-worker.mjs.map +1 -1
  350. package/esm/dev-server/dependency-graph.d.mts +1 -1
  351. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  352. package/esm/dev-server/dependency-graph.mjs +1 -1
  353. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  354. package/esm/dev-server/dev-logger.mjs +1 -1
  355. package/esm/dev-server/dev-logger.mjs.map +1 -1
  356. package/esm/dev-server/development-server.mjs +1 -1
  357. package/esm/dev-server/development-server.mjs.map +1 -1
  358. package/esm/dev-server/events.mjs +1 -1
  359. package/esm/dev-server/events.mjs.map +1 -1
  360. package/esm/dev-server/extract-translation-keys.mjs +1 -1
  361. package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
  362. package/esm/dev-server/file-event-handler.mjs +1 -1
  363. package/esm/dev-server/file-event-handler.mjs.map +1 -1
  364. package/esm/dev-server/file-manager.d.mts +1 -1
  365. package/esm/dev-server/file-manager.d.mts.map +1 -1
  366. package/esm/dev-server/file-manager.mjs +1 -1
  367. package/esm/dev-server/file-manager.mjs.map +1 -1
  368. package/esm/dev-server/file-operations.d.mts +1 -1
  369. package/esm/dev-server/file-operations.d.mts.map +1 -1
  370. package/esm/dev-server/file-operations.mjs +1 -1
  371. package/esm/dev-server/file-operations.mjs.map +1 -1
  372. package/esm/dev-server/files-orchestrator.mjs +28 -14
  373. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  374. package/esm/dev-server/files-watcher.mjs +1 -1
  375. package/esm/dev-server/files-watcher.mjs.map +1 -1
  376. package/esm/dev-server/flags.mjs +1 -1
  377. package/esm/dev-server/flags.mjs.map +1 -1
  378. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
  379. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
  380. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +1 -1
  381. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  382. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
  383. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  384. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +1 -1
  385. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  386. package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
  387. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  388. package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
  389. package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
  390. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -1
  391. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  392. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
  393. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
  394. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
  395. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  396. package/esm/dev-server/layer-executor.mjs +1 -1
  397. package/esm/dev-server/layer-executor.mjs.map +1 -1
  398. package/esm/dev-server/legacy-locales-warning.mjs +1 -1
  399. package/esm/dev-server/legacy-locales-warning.mjs.map +1 -1
  400. package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
  401. package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
  402. package/esm/dev-server/loader/hook-thread.d.mts +1 -1
  403. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  404. package/esm/dev-server/loader/hook-thread.mjs +1 -1
  405. package/esm/dev-server/loader/hook-thread.mjs.map +1 -1
  406. package/esm/dev-server/loader/load-hook.d.mts +1 -1
  407. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  408. package/esm/dev-server/loader/load-hook.mjs +1 -1
  409. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  410. package/esm/dev-server/loader/loader-port-acks.mjs +34 -0
  411. package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -0
  412. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  413. package/esm/dev-server/loader/own-resolver.mjs.map +1 -1
  414. package/esm/dev-server/loader/register-loader.mjs +1 -1
  415. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  416. package/esm/dev-server/loader/resolve-capture.mjs +1 -1
  417. package/esm/dev-server/loader/resolve-capture.mjs.map +1 -1
  418. package/esm/dev-server/loader/resolve-hook.d.mts +1 -1
  419. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  420. package/esm/dev-server/loader/resolve-hook.mjs +2 -2
  421. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  422. package/esm/dev-server/loader/source-slug.mjs +1 -1
  423. package/esm/dev-server/loader/source-slug.mjs.map +1 -1
  424. package/esm/dev-server/loader/transpile-cache.mjs +1 -1
  425. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  426. package/esm/dev-server/loader/version-registry.mjs +1 -1
  427. package/esm/dev-server/loader/version-registry.mjs.map +1 -1
  428. package/esm/dev-server/manifest-manager.d.mts +1 -1
  429. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  430. package/esm/dev-server/manifest-manager.mjs +1 -1
  431. package/esm/dev-server/manifest-manager.mjs.map +1 -1
  432. package/esm/dev-server/model-module-registry.mjs +1 -1
  433. package/esm/dev-server/model-module-registry.mjs.map +1 -1
  434. package/esm/dev-server/model-resource-typings.mjs +1 -1
  435. package/esm/dev-server/model-resource-typings.mjs.map +1 -1
  436. package/esm/dev-server/module-loader.mjs +1 -1
  437. package/esm/dev-server/module-loader.mjs.map +1 -1
  438. package/esm/dev-server/package-json-manager.mjs +1 -1
  439. package/esm/dev-server/package-json-manager.mjs.map +1 -1
  440. package/esm/dev-server/parse-imports.mjs +73 -6
  441. package/esm/dev-server/parse-imports.mjs.map +1 -1
  442. package/esm/dev-server/read-config-ast.mjs +1 -1
  443. package/esm/dev-server/read-config-ast.mjs.map +1 -1
  444. package/esm/dev-server/ready-block.mjs +1 -1
  445. package/esm/dev-server/ready-block.mjs.map +1 -1
  446. package/esm/dev-server/register-dev-shortcuts.mjs +1 -1
  447. package/esm/dev-server/register-dev-shortcuts.mjs.map +1 -1
  448. package/esm/dev-server/register-installed-devtools.mjs +1 -1
  449. package/esm/dev-server/register-installed-devtools.mjs.map +1 -1
  450. package/esm/dev-server/restart-dev-server.mjs +1 -1
  451. package/esm/dev-server/restart-dev-server.mjs.map +1 -1
  452. package/esm/dev-server/route-types-publisher.mjs +1 -1
  453. package/esm/dev-server/route-types-publisher.mjs.map +1 -1
  454. package/esm/dev-server/run-connector-typings.mjs +1 -1
  455. package/esm/dev-server/run-connector-typings.mjs.map +1 -1
  456. package/esm/dev-server/run-typings-generation.mjs +1 -1
  457. package/esm/dev-server/run-typings-generation.mjs.map +1 -1
  458. package/esm/dev-server/shortcuts.mjs +1 -1
  459. package/esm/dev-server/shortcuts.mjs.map +1 -1
  460. package/esm/dev-server/special-file-patterns.mjs +1 -1
  461. package/esm/dev-server/special-file-patterns.mjs.map +1 -1
  462. package/esm/dev-server/special-files-collector.d.mts +1 -1
  463. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  464. package/esm/dev-server/special-files-collector.mjs +1 -1
  465. package/esm/dev-server/special-files-collector.mjs.map +1 -1
  466. package/esm/dev-server/start-development-server.mjs +1 -1
  467. package/esm/dev-server/start-development-server.mjs.map +1 -1
  468. package/esm/dev-server/supervisor.mjs +1 -1
  469. package/esm/dev-server/supervisor.mjs.map +1 -1
  470. package/esm/dev-server/translation-keys-sources.mjs +1 -1
  471. package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
  472. package/esm/dev-server/tsconfig-manager.mjs +1 -1
  473. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  474. package/esm/dev-server/type-generator.mjs +32 -11
  475. package/esm/dev-server/type-generator.mjs.map +1 -1
  476. package/esm/dev-server/types.d.mts +1 -1
  477. package/esm/dev-server/types.d.mts.map +1 -1
  478. package/esm/dev-server/update-check-cache.mjs +1 -1
  479. package/esm/dev-server/update-check-cache.mjs.map +1 -1
  480. package/esm/dev-server/utils.mjs +1 -1
  481. package/esm/dev-server/utils.mjs.map +1 -1
  482. package/esm/encryption/encrypt.d.mts +1 -1
  483. package/esm/encryption/encrypt.d.mts.map +1 -1
  484. package/esm/encryption/encrypt.mjs +1 -1
  485. package/esm/encryption/encrypt.mjs.map +1 -1
  486. package/esm/encryption/hash.d.mts +1 -1
  487. package/esm/encryption/hash.d.mts.map +1 -1
  488. package/esm/encryption/hash.mjs +1 -1
  489. package/esm/encryption/hash.mjs.map +1 -1
  490. package/esm/encryption/password.d.mts +1 -1
  491. package/esm/encryption/password.d.mts.map +1 -1
  492. package/esm/encryption/password.mjs +1 -1
  493. package/esm/encryption/password.mjs.map +1 -1
  494. package/esm/encryption/types.d.mts +1 -1
  495. package/esm/encryption/types.d.mts.map +1 -1
  496. package/esm/errors/container-key-missing-error.mjs +1 -1
  497. package/esm/errors/container-key-missing-error.mjs.map +1 -1
  498. package/esm/errors/esbuild-binary-missing-error.mjs +1 -1
  499. package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
  500. package/esm/errors/index.d.mts +2 -0
  501. package/esm/errors/index.mjs +3 -0
  502. package/esm/errors/unknown-locale-error.mjs +1 -1
  503. package/esm/errors/unknown-locale-error.mjs.map +1 -1
  504. package/esm/generations/add-command.action.mjs +29 -6
  505. package/esm/generations/add-command.action.mjs.map +1 -1
  506. package/esm/generations/features/access.feature.mjs +1 -1
  507. package/esm/generations/features/access.feature.mjs.map +1 -1
  508. package/esm/generations/features/ai-anthropic.feature.mjs +1 -1
  509. package/esm/generations/features/ai-anthropic.feature.mjs.map +1 -1
  510. package/esm/generations/features/ai-bedrock.feature.mjs +1 -1
  511. package/esm/generations/features/ai-bedrock.feature.mjs.map +1 -1
  512. package/esm/generations/features/ai-google.feature.mjs +1 -1
  513. package/esm/generations/features/ai-google.feature.mjs.map +1 -1
  514. package/esm/generations/features/ai-ollama.feature.mjs +1 -1
  515. package/esm/generations/features/ai-ollama.feature.mjs.map +1 -1
  516. package/esm/generations/features/ai-openai.feature.mjs +1 -1
  517. package/esm/generations/features/ai-openai.feature.mjs.map +1 -1
  518. package/esm/generations/features/ai-panoptic.feature.mjs +1 -1
  519. package/esm/generations/features/ai-panoptic.feature.mjs.map +1 -1
  520. package/esm/generations/features/ai-tools.feature.mjs +1 -1
  521. package/esm/generations/features/ai-tools.feature.mjs.map +1 -1
  522. package/esm/generations/features/ai-workspace.feature.mjs +1 -1
  523. package/esm/generations/features/ai-workspace.feature.mjs.map +1 -1
  524. package/esm/generations/features/ai.feature.mjs +1 -1
  525. package/esm/generations/features/ai.feature.mjs.map +1 -1
  526. package/esm/generations/features/auth-google.feature.mjs +1 -1
  527. package/esm/generations/features/auth-google.feature.mjs.map +1 -1
  528. package/esm/generations/features/auth-passkeys.feature.mjs +1 -1
  529. package/esm/generations/features/auth-passkeys.feature.mjs.map +1 -1
  530. package/esm/generations/features/bull-board.feature.mjs +1 -1
  531. package/esm/generations/features/bull-board.feature.mjs.map +1 -1
  532. package/esm/generations/features/devtools.feature.mjs +1 -1
  533. package/esm/generations/features/devtools.feature.mjs.map +1 -1
  534. package/esm/generations/features/herald.feature.mjs +1 -1
  535. package/esm/generations/features/herald.feature.mjs.map +1 -1
  536. package/esm/generations/features/image.feature.mjs +1 -1
  537. package/esm/generations/features/image.feature.mjs.map +1 -1
  538. package/esm/generations/features/index.mjs +1 -1
  539. package/esm/generations/features/index.mjs.map +1 -1
  540. package/esm/generations/features/mail.feature.mjs +1 -1
  541. package/esm/generations/features/mail.feature.mjs.map +1 -1
  542. package/esm/generations/features/mongodb.feature.mjs +1 -1
  543. package/esm/generations/features/mongodb.feature.mjs.map +1 -1
  544. package/esm/generations/features/mysql.feature.mjs +1 -1
  545. package/esm/generations/features/mysql.feature.mjs.map +1 -1
  546. package/esm/generations/features/notifications.feature.mjs +121 -17
  547. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  548. package/esm/generations/features/postgres.feature.mjs +1 -1
  549. package/esm/generations/features/postgres.feature.mjs.map +1 -1
  550. package/esm/generations/features/queue.feature.mjs +1 -1
  551. package/esm/generations/features/queue.feature.mjs.map +1 -1
  552. package/esm/generations/features/react-email.feature.mjs +1 -1
  553. package/esm/generations/features/react-email.feature.mjs.map +1 -1
  554. package/esm/generations/features/react.feature.mjs +1 -1
  555. package/esm/generations/features/react.feature.mjs.map +1 -1
  556. package/esm/generations/features/redis.feature.mjs +1 -1
  557. package/esm/generations/features/redis.feature.mjs.map +1 -1
  558. package/esm/generations/features/s3.feature.mjs +1 -1
  559. package/esm/generations/features/s3.feature.mjs.map +1 -1
  560. package/esm/generations/features/scheduler.feature.mjs +1 -1
  561. package/esm/generations/features/scheduler.feature.mjs.map +1 -1
  562. package/esm/generations/features/ses.feature.mjs +1 -1
  563. package/esm/generations/features/ses.feature.mjs.map +1 -1
  564. package/esm/generations/features/shadcn.feature.mjs +1 -1
  565. package/esm/generations/features/shadcn.feature.mjs.map +1 -1
  566. package/esm/generations/features/shared/insert-connector-entry.mjs +1 -1
  567. package/esm/generations/features/shared/insert-connector-entry.mjs.map +1 -1
  568. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs +1 -1
  569. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs.map +1 -1
  570. package/esm/generations/features/shared/link-ai-package-import.mjs +1 -1
  571. package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
  572. package/esm/generations/features/shared/merge-web-sitemap-config.mjs +1 -1
  573. package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
  574. package/esm/generations/features/shared/migration-timestamp.mjs +1 -1
  575. package/esm/generations/features/shared/migration-timestamp.mjs.map +1 -1
  576. package/esm/generations/features/shared/patch-tsconfig-include.mjs +1 -1
  577. package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
  578. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +1 -1
  579. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
  580. package/esm/generations/features/shared/resolve-contact-scaffold.mjs +1 -1
  581. package/esm/generations/features/shared/resolve-contact-scaffold.mjs.map +1 -1
  582. package/esm/generations/features/sitemap.feature.mjs +1 -1
  583. package/esm/generations/features/sitemap.feature.mjs.map +1 -1
  584. package/esm/generations/features/socket.feature.mjs +1 -1
  585. package/esm/generations/features/socket.feature.mjs.map +1 -1
  586. package/esm/generations/features/tailwind.feature.mjs +1 -1
  587. package/esm/generations/features/tailwind.feature.mjs.map +1 -1
  588. package/esm/generations/features/test.feature.mjs +1 -1
  589. package/esm/generations/features/test.feature.mjs.map +1 -1
  590. package/esm/generations/features/types.mjs +1 -1
  591. package/esm/generations/features/types.mjs.map +1 -1
  592. package/esm/generations/features/web.feature.mjs +1 -1
  593. package/esm/generations/features/web.feature.mjs.map +1 -1
  594. package/esm/generations/pnpm-build-approvals.mjs +89 -3
  595. package/esm/generations/pnpm-build-approvals.mjs.map +1 -1
  596. package/esm/generations/stubs.mjs +184 -78
  597. package/esm/generations/stubs.mjs.map +1 -1
  598. package/esm/http/boot-port-preflight.d.mts +1 -1
  599. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  600. package/esm/http/boot-port-preflight.mjs +1 -1
  601. package/esm/http/boot-port-preflight.mjs.map +1 -1
  602. package/esm/http/build-cors-options.mjs +1 -1
  603. package/esm/http/build-cors-options.mjs.map +1 -1
  604. package/esm/http/build-rate-limit-options.d.mts +22 -1
  605. package/esm/http/build-rate-limit-options.d.mts.map +1 -1
  606. package/esm/http/build-rate-limit-options.mjs +7 -1
  607. package/esm/http/build-rate-limit-options.mjs.map +1 -1
  608. package/esm/http/config.d.mts +1 -1
  609. package/esm/http/config.d.mts.map +1 -1
  610. package/esm/http/config.mjs +1 -1
  611. package/esm/http/config.mjs.map +1 -1
  612. package/esm/http/context/request-context.d.mts +1 -1
  613. package/esm/http/context/request-context.d.mts.map +1 -1
  614. package/esm/http/context/request-context.mjs +1 -1
  615. package/esm/http/context/request-context.mjs.map +1 -1
  616. package/esm/http/context/request-memo.d.mts +1 -1
  617. package/esm/http/context/request-memo.d.mts.map +1 -1
  618. package/esm/http/context/request-memo.mjs +1 -1
  619. package/esm/http/context/request-memo.mjs.map +1 -1
  620. package/esm/http/createHttpApplication.d.mts +1 -1
  621. package/esm/http/createHttpApplication.d.mts.map +1 -1
  622. package/esm/http/createHttpApplication.mjs +1 -1
  623. package/esm/http/createHttpApplication.mjs.map +1 -1
  624. package/esm/http/csp.d.mts +1 -1
  625. package/esm/http/csp.d.mts.map +1 -1
  626. package/esm/http/csp.mjs +1 -1
  627. package/esm/http/csp.mjs.map +1 -1
  628. package/esm/http/csrf-default-guard.d.mts +1 -1
  629. package/esm/http/csrf-default-guard.d.mts.map +1 -1
  630. package/esm/http/csrf-default-guard.mjs +1 -1
  631. package/esm/http/csrf-default-guard.mjs.map +1 -1
  632. package/esm/http/csrf-origin-policy.d.mts +1 -1
  633. package/esm/http/csrf-origin-policy.d.mts.map +1 -1
  634. package/esm/http/csrf-origin-policy.mjs +1 -1
  635. package/esm/http/csrf-origin-policy.mjs.map +1 -1
  636. package/esm/http/database/RequestLog.d.mts +63 -111
  637. package/esm/http/database/RequestLog.d.mts.map +1 -1
  638. package/esm/http/database/RequestLog.mjs +1 -1
  639. package/esm/http/database/RequestLog.mjs.map +1 -1
  640. package/esm/http/error-codes.d.mts +1 -1
  641. package/esm/http/error-codes.d.mts.map +1 -1
  642. package/esm/http/error-codes.mjs +1 -1
  643. package/esm/http/error-codes.mjs.map +1 -1
  644. package/esm/http/error-mapper.d.mts +48 -0
  645. package/esm/http/error-mapper.d.mts.map +1 -0
  646. package/esm/http/error-mapper.mjs +48 -0
  647. package/esm/http/error-mapper.mjs.map +1 -0
  648. package/esm/http/errors/errors.d.mts +1 -1
  649. package/esm/http/errors/errors.d.mts.map +1 -1
  650. package/esm/http/errors/errors.mjs +1 -1
  651. package/esm/http/errors/errors.mjs.map +1 -1
  652. package/esm/http/events.d.mts +1 -1
  653. package/esm/http/events.d.mts.map +1 -1
  654. package/esm/http/events.mjs +1 -1
  655. package/esm/http/events.mjs.map +1 -1
  656. package/esm/http/flush-pending-cookies.mjs +1 -1
  657. package/esm/http/flush-pending-cookies.mjs.map +1 -1
  658. package/esm/http/health.d.mts +1 -1
  659. package/esm/http/health.d.mts.map +1 -1
  660. package/esm/http/health.mjs +1 -1
  661. package/esm/http/health.mjs.map +1 -1
  662. package/esm/http/index.d.mts +10 -6
  663. package/esm/http/index.mjs +8 -5
  664. package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
  665. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  666. package/esm/http/middleware/cache-response-middleware.mjs +1 -1
  667. package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
  668. package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
  669. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  670. package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
  671. package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
  672. package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
  673. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  674. package/esm/http/middleware/idempotency.middleware.mjs +1 -1
  675. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  676. package/esm/http/middleware/inject-request-context.d.mts +1 -1
  677. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  678. package/esm/http/middleware/inject-request-context.mjs +4 -2
  679. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  680. package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
  681. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  682. package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
  683. package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
  684. package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
  685. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  686. package/esm/http/middleware/maintenance.middleware.mjs +1 -1
  687. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  688. package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
  689. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  690. package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
  691. package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
  692. package/esm/http/middleware/middleware-list.d.mts +1 -1
  693. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  694. package/esm/http/middleware/middleware-list.mjs +1 -1
  695. package/esm/http/middleware/middleware-list.mjs.map +1 -1
  696. package/esm/http/middleware/rate-limit.middleware.d.mts +20 -5
  697. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  698. package/esm/http/middleware/rate-limit.middleware.mjs +34 -12
  699. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  700. package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
  701. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  702. package/esm/http/middleware/utils/cidr-match.mjs +1 -1
  703. package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
  704. package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
  705. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  706. package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
  707. package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
  708. package/esm/http/middleware/utils/parse-size.d.mts +1 -1
  709. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  710. package/esm/http/middleware/utils/parse-size.mjs +1 -1
  711. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  712. package/esm/http/parse-urlencoded-body.mjs +1 -1
  713. package/esm/http/parse-urlencoded-body.mjs.map +1 -1
  714. package/esm/http/plugins.d.mts +9 -2
  715. package/esm/http/plugins.d.mts.map +1 -1
  716. package/esm/http/plugins.mjs +18 -4
  717. package/esm/http/plugins.mjs.map +1 -1
  718. package/esm/http/port-preflight.d.mts +1 -1
  719. package/esm/http/port-preflight.d.mts.map +1 -1
  720. package/esm/http/port-preflight.mjs +1 -1
  721. package/esm/http/port-preflight.mjs.map +1 -1
  722. package/esm/http/rate-limit-cache-store.mjs +155 -0
  723. package/esm/http/rate-limit-cache-store.mjs.map +1 -0
  724. package/esm/http/ready-report.d.mts +1 -1
  725. package/esm/http/ready-report.d.mts.map +1 -1
  726. package/esm/http/ready-report.mjs +1 -1
  727. package/esm/http/ready-report.mjs.map +1 -1
  728. package/esm/http/request-controller.d.mts +1 -1
  729. package/esm/http/request-controller.d.mts.map +1 -1
  730. package/esm/http/request-controller.mjs +1 -1
  731. package/esm/http/request-controller.mjs.map +1 -1
  732. package/esm/http/request-log-snapshot.d.mts +123 -0
  733. package/esm/http/request-log-snapshot.d.mts.map +1 -0
  734. package/esm/http/request-log-snapshot.mjs +141 -0
  735. package/esm/http/request-log-snapshot.mjs.map +1 -0
  736. package/esm/http/request.d.mts +41 -2
  737. package/esm/http/request.d.mts.map +1 -1
  738. package/esm/http/request.mjs +65 -2
  739. package/esm/http/request.mjs.map +1 -1
  740. package/esm/http/resolve-bind-port.mjs +1 -1
  741. package/esm/http/resolve-bind-port.mjs.map +1 -1
  742. package/esm/http/response.d.mts +40 -8
  743. package/esm/http/response.d.mts.map +1 -1
  744. package/esm/http/response.mjs +173 -61
  745. package/esm/http/response.mjs.map +1 -1
  746. package/esm/http/serialized.d.mts +1 -1
  747. package/esm/http/serialized.d.mts.map +1 -1
  748. package/esm/http/server-rebuilt.d.mts +1 -1
  749. package/esm/http/server-rebuilt.d.mts.map +1 -1
  750. package/esm/http/server-rebuilt.mjs +1 -1
  751. package/esm/http/server-rebuilt.mjs.map +1 -1
  752. package/esm/http/server.d.mts +34 -6
  753. package/esm/http/server.d.mts.map +1 -1
  754. package/esm/http/server.mjs +70 -5
  755. package/esm/http/server.mjs.map +1 -1
  756. package/esm/http/stream-react-response.d.mts +1 -1
  757. package/esm/http/stream-react-response.d.mts.map +1 -1
  758. package/esm/http/stream-react-response.mjs +1 -1
  759. package/esm/http/stream-react-response.mjs.map +1 -1
  760. package/esm/http/stream-transport.mjs +75 -0
  761. package/esm/http/stream-transport.mjs.map +1 -0
  762. package/esm/http/tracing/trace-id.d.mts +1 -1
  763. package/esm/http/tracing/trace-id.d.mts.map +1 -1
  764. package/esm/http/tracing/trace-id.mjs +1 -1
  765. package/esm/http/tracing/trace-id.mjs.map +1 -1
  766. package/esm/http/tracing/tracing-dispatcher.d.mts +1 -1
  767. package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
  768. package/esm/http/tracing/tracing-dispatcher.mjs +1 -1
  769. package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
  770. package/esm/http/tracing/tracing.type.d.mts +1 -1
  771. package/esm/http/tracing/tracing.type.d.mts.map +1 -1
  772. package/esm/http/types.d.mts +131 -6
  773. package/esm/http/types.d.mts.map +1 -1
  774. package/esm/http/uploaded-file.d.mts +2 -2
  775. package/esm/http/uploaded-file.d.mts.map +1 -1
  776. package/esm/http/uploaded-file.mjs +2 -2
  777. package/esm/http/uploaded-file.mjs.map +1 -1
  778. package/esm/http/uploads/detect-image-format.mjs +1 -1
  779. package/esm/http/uploads/detect-image-format.mjs.map +1 -1
  780. package/esm/http/uploads/generate-image-variant.mjs +1 -1
  781. package/esm/http/uploads/generate-image-variant.mjs.map +1 -1
  782. package/esm/http/uploads/generate-image-variants.d.mts +1 -1
  783. package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
  784. package/esm/http/uploads/generate-image-variants.mjs +15 -7
  785. package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
  786. package/esm/http/uploads/image-variant-cache.mjs +143 -0
  787. package/esm/http/uploads/image-variant-cache.mjs.map +1 -0
  788. package/esm/http/uploads/image-variant-types.d.mts +1 -1
  789. package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
  790. package/esm/http/uploads/image-variants-config-error.d.mts +1 -1
  791. package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
  792. package/esm/http/uploads/image-variants-config-error.mjs +1 -1
  793. package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
  794. package/esm/http/uploads/index.d.mts +3 -1
  795. package/esm/http/uploads/index.mjs +3 -1
  796. package/esm/http/uploads/is-path-inside.mjs +1 -1
  797. package/esm/http/uploads/is-path-inside.mjs.map +1 -1
  798. package/esm/http/uploads/load-variant-source.mjs +1 -1
  799. package/esm/http/uploads/load-variant-source.mjs.map +1 -1
  800. package/esm/http/uploads/local-disk-root.mjs +24 -0
  801. package/esm/http/uploads/local-disk-root.mjs.map +1 -0
  802. package/esm/http/uploads/matches-if-none-match.mjs +1 -1
  803. package/esm/http/uploads/matches-if-none-match.mjs.map +1 -1
  804. package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
  805. package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
  806. package/esm/http/uploads/purge-image-variants.d.mts +32 -0
  807. package/esm/http/uploads/purge-image-variants.d.mts.map +1 -0
  808. package/esm/http/uploads/purge-image-variants.mjs +46 -0
  809. package/esm/http/uploads/purge-image-variants.mjs.map +1 -0
  810. package/esm/http/uploads/read-file-head.mjs +1 -1
  811. package/esm/http/uploads/read-file-head.mjs.map +1 -1
  812. package/esm/http/uploads/resolve-image-variant.d.mts +73 -0
  813. package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -0
  814. package/esm/http/uploads/resolve-image-variant.mjs +107 -0
  815. package/esm/http/uploads/resolve-image-variant.mjs.map +1 -0
  816. package/esm/http/uploads/resolve-image-variants-config.mjs +1 -1
  817. package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
  818. package/esm/http/uploads/resolve-inline-image-content-type.mjs +1 -1
  819. package/esm/http/uploads/resolve-inline-image-content-type.mjs.map +1 -1
  820. package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
  821. package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
  822. package/esm/http/uploads/resolve-upload-path.mjs +3 -2
  823. package/esm/http/uploads/resolve-upload-path.mjs.map +1 -1
  824. package/esm/http/uploads/resolve-variant-candidate.mjs +1 -1
  825. package/esm/http/uploads/resolve-variant-candidate.mjs.map +1 -1
  826. package/esm/http/uploads/single-flight.mjs +1 -1
  827. package/esm/http/uploads/single-flight.mjs.map +1 -1
  828. package/esm/http/uploads/uploaded-file.controller.d.mts +24 -6
  829. package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
  830. package/esm/http/uploads/uploaded-file.controller.mjs +63 -91
  831. package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
  832. package/esm/http/uploads/variant-cache-key.mjs +30 -5
  833. package/esm/http/uploads/variant-cache-key.mjs.map +1 -1
  834. package/esm/http/uploads/variant-generations.mjs +1 -1
  835. package/esm/http/uploads/variant-generations.mjs.map +1 -1
  836. package/esm/http/uploads-config.d.mts +1 -1
  837. package/esm/http/uploads-config.d.mts.map +1 -1
  838. package/esm/http/uploads-config.mjs +1 -1
  839. package/esm/http/uploads-config.mjs.map +1 -1
  840. package/esm/http/uploads-types.d.mts +1 -1
  841. package/esm/http/uploads-types.d.mts.map +1 -1
  842. package/esm/http/xmlable.d.mts +1 -1
  843. package/esm/http/xmlable.d.mts.map +1 -1
  844. package/esm/image/image.d.mts +1 -1
  845. package/esm/image/image.d.mts.map +1 -1
  846. package/esm/image/image.mjs +1 -1
  847. package/esm/image/image.mjs.map +1 -1
  848. package/esm/index.d.mts +15 -9
  849. package/esm/index.mjs +11 -7
  850. package/esm/loader/app-module-importer.d.mts +1 -1
  851. package/esm/loader/app-module-importer.d.mts.map +1 -1
  852. package/esm/loader/app-module-importer.mjs +1 -1
  853. package/esm/loader/app-module-importer.mjs.map +1 -1
  854. package/esm/localization/parse-locale-dictionary.d.mts +7 -2
  855. package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
  856. package/esm/localization/parse-locale-dictionary.mjs +6 -2
  857. package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
  858. package/esm/localization/register-locale-dictionary.d.mts +1 -1
  859. package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
  860. package/esm/localization/register-locale-dictionary.mjs +1 -1
  861. package/esm/localization/register-locale-dictionary.mjs.map +1 -1
  862. package/esm/logger/fatal-visibility.d.mts +1 -1
  863. package/esm/logger/fatal-visibility.d.mts.map +1 -1
  864. package/esm/logger/fatal-visibility.mjs +1 -1
  865. package/esm/logger/fatal-visibility.mjs.map +1 -1
  866. package/esm/logger/logger.d.mts +1 -1
  867. package/esm/logger/logger.d.mts.map +1 -1
  868. package/esm/logger/logger.mjs +1 -1
  869. package/esm/logger/logger.mjs.map +1 -1
  870. package/esm/logger/types.d.mts +1 -1
  871. package/esm/logger/types.d.mts.map +1 -1
  872. package/esm/mail/config.d.mts +1 -1
  873. package/esm/mail/config.d.mts.map +1 -1
  874. package/esm/mail/config.mjs +1 -1
  875. package/esm/mail/config.mjs.map +1 -1
  876. package/esm/mail/events.d.mts +1 -1
  877. package/esm/mail/events.d.mts.map +1 -1
  878. package/esm/mail/events.mjs +1 -1
  879. package/esm/mail/events.mjs.map +1 -1
  880. package/esm/mail/mail.d.mts +1 -1
  881. package/esm/mail/mail.d.mts.map +1 -1
  882. package/esm/mail/mail.mjs +1 -1
  883. package/esm/mail/mail.mjs.map +1 -1
  884. package/esm/mail/mailer-pool.d.mts +1 -1
  885. package/esm/mail/mailer-pool.d.mts.map +1 -1
  886. package/esm/mail/mailer-pool.mjs +1 -1
  887. package/esm/mail/mailer-pool.mjs.map +1 -1
  888. package/esm/mail/react-mail.d.mts +1 -1
  889. package/esm/mail/react-mail.d.mts.map +1 -1
  890. package/esm/mail/react-mail.mjs +1 -1
  891. package/esm/mail/react-mail.mjs.map +1 -1
  892. package/esm/mail/send-mail.d.mts +1 -1
  893. package/esm/mail/send-mail.d.mts.map +1 -1
  894. package/esm/mail/send-mail.mjs +7 -7
  895. package/esm/mail/send-mail.mjs.map +1 -1
  896. package/esm/mail/test-mailbox.d.mts +1 -1
  897. package/esm/mail/test-mailbox.d.mts.map +1 -1
  898. package/esm/mail/test-mailbox.mjs +1 -1
  899. package/esm/mail/test-mailbox.mjs.map +1 -1
  900. package/esm/mail/types.d.mts +1 -1
  901. package/esm/mail/types.d.mts.map +1 -1
  902. package/esm/mail/types.mjs +1 -1
  903. package/esm/mail/types.mjs.map +1 -1
  904. package/esm/manifest/manifest-manager.mjs +1 -1
  905. package/esm/manifest/manifest-manager.mjs.map +1 -1
  906. package/esm/openapi/build-openapi-document.d.mts +1 -1
  907. package/esm/openapi/build-openapi-document.d.mts.map +1 -1
  908. package/esm/openapi/build-openapi-document.mjs +1 -1
  909. package/esm/openapi/build-openapi-document.mjs.map +1 -1
  910. package/esm/openapi/cast-schema.mjs +1 -1
  911. package/esm/openapi/cast-schema.mjs.map +1 -1
  912. package/esm/openapi/collect-openapi-document.mjs +1 -1
  913. package/esm/openapi/collect-openapi-document.mjs.map +1 -1
  914. package/esm/openapi/development-openapi-provider.d.mts +1 -1
  915. package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
  916. package/esm/openapi/development-openapi-provider.mjs +1 -1
  917. package/esm/openapi/development-openapi-provider.mjs.map +1 -1
  918. package/esm/openapi/error-responses.mjs +1 -1
  919. package/esm/openapi/error-responses.mjs.map +1 -1
  920. package/esm/openapi/openapi-child-output.mjs +1 -1
  921. package/esm/openapi/openapi-child-output.mjs.map +1 -1
  922. package/esm/openapi/openapi-protocol.mjs +1 -1
  923. package/esm/openapi/openapi-protocol.mjs.map +1 -1
  924. package/esm/openapi/paths.mjs +1 -1
  925. package/esm/openapi/paths.mjs.map +1 -1
  926. package/esm/openapi/postman/build-request-body.mjs +1 -1
  927. package/esm/openapi/postman/build-request-body.mjs.map +1 -1
  928. package/esm/openapi/postman/build-request-url.mjs +1 -1
  929. package/esm/openapi/postman/build-request-url.mjs.map +1 -1
  930. package/esm/openapi/postman/build-saved-responses.mjs +1 -1
  931. package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
  932. package/esm/openapi/postman/example-from-schema.d.mts +1 -1
  933. package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
  934. package/esm/openapi/postman/example-from-schema.mjs +1 -1
  935. package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
  936. package/esm/openapi/postman/http-status-text.mjs +1 -1
  937. package/esm/openapi/postman/http-status-text.mjs.map +1 -1
  938. package/esm/openapi/postman/openapi-to-postman-collection.d.mts +1 -1
  939. package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
  940. package/esm/openapi/postman/openapi-to-postman-collection.mjs +1 -1
  941. package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
  942. package/esm/openapi/postman/postman-types.d.mts +1 -1
  943. package/esm/openapi/postman/postman-types.d.mts.map +1 -1
  944. package/esm/openapi/postman/resolve-operation-auth.mjs +1 -1
  945. package/esm/openapi/postman/resolve-operation-auth.mjs.map +1 -1
  946. package/esm/openapi/postman/schema-refs.d.mts +1 -1
  947. package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
  948. package/esm/openapi/postman/schema-refs.mjs +1 -1
  949. package/esm/openapi/postman/schema-refs.mjs.map +1 -1
  950. package/esm/openapi/postman/uuid-v5.mjs +1 -1
  951. package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
  952. package/esm/openapi/request-schemas.mjs +1 -1
  953. package/esm/openapi/request-schemas.mjs.map +1 -1
  954. package/esm/openapi/response-schemas.mjs +5 -2
  955. package/esm/openapi/response-schemas.mjs.map +1 -1
  956. package/esm/openapi/schema-registry.mjs +7 -1
  957. package/esm/openapi/schema-registry.mjs.map +1 -1
  958. package/esm/openapi/security.mjs +1 -1
  959. package/esm/openapi/security.mjs.map +1 -1
  960. package/esm/openapi/types.d.mts +1 -1
  961. package/esm/openapi/types.d.mts.map +1 -1
  962. package/esm/production/assert-dist-ready-to-start.mjs +1 -1
  963. package/esm/production/assert-dist-ready-to-start.mjs.map +1 -1
  964. package/esm/production/assert-generated-imports.mjs +1 -1
  965. package/esm/production/assert-generated-imports.mjs.map +1 -1
  966. package/esm/production/build-app-production.mjs +1 -1
  967. package/esm/production/build-app-production.mjs.map +1 -1
  968. package/esm/production/build-contributions.mjs +1 -1
  969. package/esm/production/build-contributions.mjs.map +1 -1
  970. package/esm/production/bundle-framework-dependencies.mjs +1 -1
  971. package/esm/production/bundle-framework-dependencies.mjs.map +1 -1
  972. package/esm/production/dist-build-manifest.mjs +1 -1
  973. package/esm/production/dist-build-manifest.mjs.map +1 -1
  974. package/esm/production/esbuild-plugins.mjs +1 -1
  975. package/esm/production/esbuild-plugins.mjs.map +1 -1
  976. package/esm/production/esbuild-preflight.mjs +1 -1
  977. package/esm/production/esbuild-preflight.mjs.map +1 -1
  978. package/esm/production/production-builder.mjs +1 -1
  979. package/esm/production/production-builder.mjs.map +1 -1
  980. package/esm/production/production-supervisor.mjs +1 -1
  981. package/esm/production/production-supervisor.mjs.map +1 -1
  982. package/esm/production/promote-dist.mjs +1 -1
  983. package/esm/production/promote-dist.mjs.map +1 -1
  984. package/esm/production/registration-child-runner.mjs +1 -1
  985. package/esm/production/registration-child-runner.mjs.map +1 -1
  986. package/esm/production/resolve-build-config.d.mts +1 -1
  987. package/esm/production/resolve-build-config.d.mts.map +1 -1
  988. package/esm/production/resolve-build-config.mjs +1 -1
  989. package/esm/production/resolve-build-config.mjs.map +1 -1
  990. package/esm/production/route-registration-child.mjs +1 -1
  991. package/esm/production/route-registration-child.mjs.map +1 -1
  992. package/esm/production/route-registration-snapshot.mjs +1 -1
  993. package/esm/production/route-registration-snapshot.mjs.map +1 -1
  994. package/esm/production/tsconfig-path-aliases.mjs +1 -1
  995. package/esm/production/tsconfig-path-aliases.mjs.map +1 -1
  996. package/esm/react/index.d.mts +1 -1
  997. package/esm/react/index.d.mts.map +1 -1
  998. package/esm/react/index.mjs +1 -1
  999. package/esm/react/index.mjs.map +1 -1
  1000. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
  1001. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  1002. package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
  1003. package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
  1004. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
  1005. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  1006. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
  1007. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  1008. package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
  1009. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  1010. package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
  1011. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  1012. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
  1013. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  1014. package/esm/repositories/contracts/types.d.mts +1 -1
  1015. package/esm/repositories/contracts/types.d.mts.map +1 -1
  1016. package/esm/repositories/repository.manager.d.mts +1 -1
  1017. package/esm/repositories/repository.manager.d.mts.map +1 -1
  1018. package/esm/repositories/repository.manager.mjs +1 -1
  1019. package/esm/repositories/repository.manager.mjs.map +1 -1
  1020. package/esm/resource/define-resource.d.mts +1 -1
  1021. package/esm/resource/define-resource.d.mts.map +1 -1
  1022. package/esm/resource/define-resource.mjs +1 -1
  1023. package/esm/resource/define-resource.mjs.map +1 -1
  1024. package/esm/resource/index.d.mts +1 -0
  1025. package/esm/resource/index.mjs +1 -0
  1026. package/esm/resource/nullable-resource.d.mts +44 -0
  1027. package/esm/resource/nullable-resource.d.mts.map +1 -0
  1028. package/esm/resource/nullable-resource.mjs +38 -0
  1029. package/esm/resource/nullable-resource.mjs.map +1 -0
  1030. package/esm/resource/register-resource.d.mts +1 -1
  1031. package/esm/resource/register-resource.d.mts.map +1 -1
  1032. package/esm/resource/register-resource.mjs +1 -1
  1033. package/esm/resource/register-resource.mjs.map +1 -1
  1034. package/esm/resource/resource-field-builder.d.mts +1 -1
  1035. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  1036. package/esm/resource/resource-field-builder.mjs +1 -1
  1037. package/esm/resource/resource-field-builder.mjs.map +1 -1
  1038. package/esm/resource/resource.d.mts +1 -1
  1039. package/esm/resource/resource.d.mts.map +1 -1
  1040. package/esm/resource/resource.mjs +23 -4
  1041. package/esm/resource/resource.mjs.map +1 -1
  1042. package/esm/resource/types.d.mts +11 -6
  1043. package/esm/resource/types.d.mts.map +1 -1
  1044. package/esm/restful/restful.d.mts +1 -1
  1045. package/esm/restful/restful.d.mts.map +1 -1
  1046. package/esm/restful/restful.mjs +1 -1
  1047. package/esm/restful/restful.mjs.map +1 -1
  1048. package/esm/router/build-route-rate-limit.mjs +1 -1
  1049. package/esm/router/build-route-rate-limit.mjs.map +1 -1
  1050. package/esm/router/describe-route-for-log.mjs +1 -1
  1051. package/esm/router/describe-route-for-log.mjs.map +1 -1
  1052. package/esm/router/dev-dispatch.mjs +1 -1
  1053. package/esm/router/dev-dispatch.mjs.map +1 -1
  1054. package/esm/router/log-request-lifecycle.mjs +1 -1
  1055. package/esm/router/log-request-lifecycle.mjs.map +1 -1
  1056. package/esm/router/named-api-routes-with-responses.mjs +1 -1
  1057. package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
  1058. package/esm/router/normalize-request-path.d.mts +1 -1
  1059. package/esm/router/normalize-request-path.d.mts.map +1 -1
  1060. package/esm/router/normalize-request-path.mjs +1 -1
  1061. package/esm/router/normalize-request-path.mjs.map +1 -1
  1062. package/esm/router/normalize-route-path.d.mts +1 -1
  1063. package/esm/router/normalize-route-path.d.mts.map +1 -1
  1064. package/esm/router/normalize-route-path.mjs +1 -1
  1065. package/esm/router/normalize-route-path.mjs.map +1 -1
  1066. package/esm/router/positional-handler-diagnostics.d.mts +1 -1
  1067. package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
  1068. package/esm/router/positional-handler-diagnostics.mjs +1 -1
  1069. package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
  1070. package/esm/router/response-schema-types.mjs +3 -1
  1071. package/esm/router/response-schema-types.mjs.map +1 -1
  1072. package/esm/router/route-builder.d.mts +1 -1
  1073. package/esm/router/route-builder.d.mts.map +1 -1
  1074. package/esm/router/route-builder.mjs +1 -1
  1075. package/esm/router/route-builder.mjs.map +1 -1
  1076. package/esm/router/route-name-method-suffix.d.mts +1 -1
  1077. package/esm/router/route-name-method-suffix.d.mts.map +1 -1
  1078. package/esm/router/route-name-method-suffix.mjs +1 -1
  1079. package/esm/router/route-name-method-suffix.mjs.map +1 -1
  1080. package/esm/router/route-registry.d.mts +1 -1
  1081. package/esm/router/route-registry.d.mts.map +1 -1
  1082. package/esm/router/route-registry.mjs +1 -1
  1083. package/esm/router/route-registry.mjs.map +1 -1
  1084. package/esm/router/router.d.mts +8 -1
  1085. package/esm/router/router.d.mts.map +1 -1
  1086. package/esm/router/router.mjs +20 -15
  1087. package/esm/router/router.mjs.map +1 -1
  1088. package/esm/router/types.d.mts +13 -1
  1089. package/esm/router/types.d.mts.map +1 -1
  1090. package/esm/socket/types.d.mts +1 -1
  1091. package/esm/socket/types.d.mts.map +1 -1
  1092. package/esm/socket/utils.d.mts +1 -1
  1093. package/esm/socket/utils.d.mts.map +1 -1
  1094. package/esm/socket/utils.mjs +1 -1
  1095. package/esm/socket/utils.mjs.map +1 -1
  1096. package/esm/storage/config.d.mts +1 -1
  1097. package/esm/storage/config.d.mts.map +1 -1
  1098. package/esm/storage/config.mjs +1 -1
  1099. package/esm/storage/config.mjs.map +1 -1
  1100. package/esm/storage/context/storage-driver-context.d.mts +1 -1
  1101. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  1102. package/esm/storage/context/storage-driver-context.mjs +1 -1
  1103. package/esm/storage/context/storage-driver-context.mjs.map +1 -1
  1104. package/esm/storage/drivers/cloud-driver.d.mts +1 -1
  1105. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  1106. package/esm/storage/drivers/cloud-driver.mjs +1 -1
  1107. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  1108. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
  1109. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  1110. package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
  1111. package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
  1112. package/esm/storage/drivers/local-driver.d.mts +12 -1
  1113. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  1114. package/esm/storage/drivers/local-driver.mjs +33 -1
  1115. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  1116. package/esm/storage/drivers/r2-driver.d.mts +1 -1
  1117. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  1118. package/esm/storage/drivers/r2-driver.mjs +1 -1
  1119. package/esm/storage/drivers/r2-driver.mjs.map +1 -1
  1120. package/esm/storage/drivers/s3-driver.d.mts +1 -1
  1121. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  1122. package/esm/storage/drivers/s3-driver.mjs +1 -1
  1123. package/esm/storage/drivers/s3-driver.mjs.map +1 -1
  1124. package/esm/storage/index.d.mts +1 -1
  1125. package/esm/storage/scoped-storage.d.mts +1 -1
  1126. package/esm/storage/scoped-storage.d.mts.map +1 -1
  1127. package/esm/storage/scoped-storage.mjs +1 -1
  1128. package/esm/storage/scoped-storage.mjs.map +1 -1
  1129. package/esm/storage/storage-file.d.mts +1 -1
  1130. package/esm/storage/storage-file.d.mts.map +1 -1
  1131. package/esm/storage/storage-file.mjs +1 -1
  1132. package/esm/storage/storage-file.mjs.map +1 -1
  1133. package/esm/storage/storage.d.mts +3 -3
  1134. package/esm/storage/storage.d.mts.map +1 -1
  1135. package/esm/storage/storage.mjs +1 -1
  1136. package/esm/storage/storage.mjs.map +1 -1
  1137. package/esm/storage/types.d.mts +3 -2
  1138. package/esm/storage/types.d.mts.map +1 -1
  1139. package/esm/storage/utils/classify-ip-address.d.mts +1 -1
  1140. package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
  1141. package/esm/storage/utils/classify-ip-address.mjs +1 -1
  1142. package/esm/storage/utils/classify-ip-address.mjs.map +1 -1
  1143. package/esm/storage/utils/contain-path.d.mts +1 -1
  1144. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  1145. package/esm/storage/utils/contain-path.mjs +1 -1
  1146. package/esm/storage/utils/contain-path.mjs.map +1 -1
  1147. package/esm/storage/utils/mime.d.mts +1 -1
  1148. package/esm/storage/utils/mime.d.mts.map +1 -1
  1149. package/esm/storage/utils/mime.mjs +1 -1
  1150. package/esm/storage/utils/mime.mjs.map +1 -1
  1151. package/esm/storage/utils/safe-fetch.d.mts +1 -1
  1152. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  1153. package/esm/storage/utils/safe-fetch.mjs +1 -1
  1154. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  1155. package/esm/storage/utils/storage-capability-error.d.mts +1 -1
  1156. package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
  1157. package/esm/storage/utils/storage-capability-error.mjs +1 -1
  1158. package/esm/storage/utils/storage-capability-error.mjs.map +1 -1
  1159. package/esm/storage/utils/storage-error.d.mts +1 -1
  1160. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  1161. package/esm/storage/utils/storage-error.mjs +1 -1
  1162. package/esm/storage/utils/storage-error.mjs.map +1 -1
  1163. package/esm/storage/utils/storage-not-initialized-error.d.mts +1 -1
  1164. package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
  1165. package/esm/storage/utils/storage-not-initialized-error.mjs +1 -1
  1166. package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
  1167. package/esm/tests/start-http-development-server.d.mts +1 -1
  1168. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  1169. package/esm/tests/start-http-development-server.mjs +1 -1
  1170. package/esm/tests/start-http-development-server.mjs.map +1 -1
  1171. package/esm/tests/test-connectors-selection.d.mts +1 -1
  1172. package/esm/tests/test-connectors-selection.d.mts.map +1 -1
  1173. package/esm/tests/test-connectors-selection.mjs +1 -1
  1174. package/esm/tests/test-connectors-selection.mjs.map +1 -1
  1175. package/esm/tests/test-helpers.d.mts +1 -1
  1176. package/esm/tests/test-helpers.d.mts.map +1 -1
  1177. package/esm/tests/test-helpers.mjs +1 -1
  1178. package/esm/tests/test-helpers.mjs.map +1 -1
  1179. package/esm/tests/test-lifecycle-state.mjs +1 -1
  1180. package/esm/tests/test-lifecycle-state.mjs.map +1 -1
  1181. package/esm/tests/test-server-port-channel.mjs +1 -1
  1182. package/esm/tests/test-server-port-channel.mjs.map +1 -1
  1183. package/esm/tests/test-setup-timeout.mjs +1 -1
  1184. package/esm/tests/test-setup-timeout.mjs.map +1 -1
  1185. package/esm/tests/vitest-setup.d.mts +1 -1
  1186. package/esm/tests/vitest-setup.d.mts.map +1 -1
  1187. package/esm/tests/vitest-setup.mjs +1 -1
  1188. package/esm/tests/vitest-setup.mjs.map +1 -1
  1189. package/esm/updater/package-manager.mjs +1 -1
  1190. package/esm/updater/package-manager.mjs.map +1 -1
  1191. package/esm/updater/update-warlock-packages.mjs +1 -1
  1192. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  1193. package/esm/use-cases/types.d.mts +1 -1
  1194. package/esm/use-cases/types.d.mts.map +1 -1
  1195. package/esm/use-cases/use-case-broadcast.d.mts +1 -1
  1196. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  1197. package/esm/use-cases/use-case-broadcast.mjs +1 -1
  1198. package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
  1199. package/esm/use-cases/use-case-events.d.mts +1 -1
  1200. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  1201. package/esm/use-cases/use-case-events.mjs +1 -1
  1202. package/esm/use-cases/use-case-events.mjs.map +1 -1
  1203. package/esm/use-cases/use-case-pipeline.d.mts +1 -1
  1204. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  1205. package/esm/use-cases/use-case-pipeline.mjs +1 -1
  1206. package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
  1207. package/esm/use-cases/use-case.d.mts +1 -1
  1208. package/esm/use-cases/use-case.d.mts.map +1 -1
  1209. package/esm/use-cases/use-case.errors.d.mts +1 -1
  1210. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  1211. package/esm/use-cases/use-case.errors.mjs +1 -1
  1212. package/esm/use-cases/use-case.errors.mjs.map +1 -1
  1213. package/esm/use-cases/use-case.mjs +1 -1
  1214. package/esm/use-cases/use-case.mjs.map +1 -1
  1215. package/esm/use-cases/use-cases-registry.d.mts +1 -1
  1216. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  1217. package/esm/use-cases/use-cases-registry.mjs +1 -1
  1218. package/esm/use-cases/use-cases-registry.mjs.map +1 -1
  1219. package/esm/utils/app-log.d.mts +6 -6
  1220. package/esm/utils/app-log.d.mts.map +1 -1
  1221. package/esm/utils/app-log.mjs +1 -1
  1222. package/esm/utils/app-log.mjs.map +1 -1
  1223. package/esm/utils/database-log.d.mts +1 -1
  1224. package/esm/utils/database-log.d.mts.map +1 -1
  1225. package/esm/utils/database-log.mjs +1 -1
  1226. package/esm/utils/database-log.mjs.map +1 -1
  1227. package/esm/utils/detect-environment-overrides.mjs +1 -1
  1228. package/esm/utils/detect-environment-overrides.mjs.map +1 -1
  1229. package/esm/utils/environment.d.mts +1 -1
  1230. package/esm/utils/environment.d.mts.map +1 -1
  1231. package/esm/utils/environment.mjs +1 -1
  1232. package/esm/utils/environment.mjs.map +1 -1
  1233. package/esm/utils/framework-vesion.mjs +1 -1
  1234. package/esm/utils/framework-vesion.mjs.map +1 -1
  1235. package/esm/utils/get-localized.d.mts +1 -1
  1236. package/esm/utils/get-localized.d.mts.map +1 -1
  1237. package/esm/utils/get-localized.mjs +1 -1
  1238. package/esm/utils/get-localized.mjs.map +1 -1
  1239. package/esm/utils/is-test-file.mjs +1 -1
  1240. package/esm/utils/is-test-file.mjs.map +1 -1
  1241. package/esm/utils/load-environment.mjs +1 -1
  1242. package/esm/utils/load-environment.mjs.map +1 -1
  1243. package/esm/utils/normalized-path.d.mts +1 -1
  1244. package/esm/utils/normalized-path.d.mts.map +1 -1
  1245. package/esm/utils/normalized-path.mjs +1 -1
  1246. package/esm/utils/normalized-path.mjs.map +1 -1
  1247. package/esm/utils/npm-registry.d.mts +1 -1
  1248. package/esm/utils/npm-registry.d.mts.map +1 -1
  1249. package/esm/utils/npm-registry.mjs +1 -1
  1250. package/esm/utils/npm-registry.mjs.map +1 -1
  1251. package/esm/utils/paths.d.mts +1 -1
  1252. package/esm/utils/paths.d.mts.map +1 -1
  1253. package/esm/utils/paths.mjs +1 -1
  1254. package/esm/utils/paths.mjs.map +1 -1
  1255. package/esm/utils/promise-all-object.d.mts +1 -1
  1256. package/esm/utils/promise-all-object.d.mts.map +1 -1
  1257. package/esm/utils/promise-all-object.mjs +1 -1
  1258. package/esm/utils/promise-all-object.mjs.map +1 -1
  1259. package/esm/utils/queue.d.mts +1 -1
  1260. package/esm/utils/queue.d.mts.map +1 -1
  1261. package/esm/utils/queue.mjs +1 -1
  1262. package/esm/utils/queue.mjs.map +1 -1
  1263. package/esm/utils/recorded-environment-overrides.mjs +1 -1
  1264. package/esm/utils/recorded-environment-overrides.mjs.map +1 -1
  1265. package/esm/utils/report-environment-overrides.mjs +1 -1
  1266. package/esm/utils/report-environment-overrides.mjs.map +1 -1
  1267. package/esm/utils/sleep.d.mts +1 -1
  1268. package/esm/utils/sleep.d.mts.map +1 -1
  1269. package/esm/utils/sleep.mjs +1 -1
  1270. package/esm/utils/sleep.mjs.map +1 -1
  1271. package/esm/utils/sluggable.d.mts +1 -1
  1272. package/esm/utils/sluggable.d.mts.map +1 -1
  1273. package/esm/utils/sluggable.mjs +1 -1
  1274. package/esm/utils/sluggable.mjs.map +1 -1
  1275. package/esm/utils/to-json.d.mts +1 -1
  1276. package/esm/utils/to-json.d.mts.map +1 -1
  1277. package/esm/utils/to-json.mjs +1 -1
  1278. package/esm/utils/to-json.mjs.map +1 -1
  1279. package/esm/utils/types.d.mts +1 -1
  1280. package/esm/utils/types.d.mts.map +1 -1
  1281. package/esm/utils/urls.d.mts +1 -1
  1282. package/esm/utils/urls.d.mts.map +1 -1
  1283. package/esm/utils/urls.mjs +1 -1
  1284. package/esm/utils/urls.mjs.map +1 -1
  1285. package/esm/utils/version-compare.d.mts +1 -1
  1286. package/esm/utils/version-compare.d.mts.map +1 -1
  1287. package/esm/utils/version-compare.mjs +1 -1
  1288. package/esm/utils/version-compare.mjs.map +1 -1
  1289. package/esm/validation/database/exists-except-current-id.d.mts +1 -1
  1290. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  1291. package/esm/validation/database/exists-except-current-id.mjs +1 -1
  1292. package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
  1293. package/esm/validation/database/exists-except-current-user.d.mts +1 -1
  1294. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  1295. package/esm/validation/database/exists-except-current-user.mjs +1 -1
  1296. package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
  1297. package/esm/validation/database/types.d.mts +1 -1
  1298. package/esm/validation/database/types.d.mts.map +1 -1
  1299. package/esm/validation/database/unique-except-current-id.d.mts +1 -1
  1300. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  1301. package/esm/validation/database/unique-except-current-id.mjs +1 -1
  1302. package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
  1303. package/esm/validation/database/unique-except-current-user.d.mts +1 -1
  1304. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  1305. package/esm/validation/database/unique-except-current-user.mjs +1 -1
  1306. package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
  1307. package/esm/validation/file/file.d.mts +1 -1
  1308. package/esm/validation/file/file.d.mts.map +1 -1
  1309. package/esm/validation/file/file.mjs +1 -1
  1310. package/esm/validation/file/file.mjs.map +1 -1
  1311. package/esm/validation/init.mjs +1 -1
  1312. package/esm/validation/init.mjs.map +1 -1
  1313. package/esm/validation/plugins/database-plugin.mjs +1 -1
  1314. package/esm/validation/plugins/database-plugin.mjs.map +1 -1
  1315. package/esm/validation/plugins/file-plugin.mjs +1 -1
  1316. package/esm/validation/plugins/file-plugin.mjs.map +1 -1
  1317. package/esm/validation/plugins/localized-plugin.mjs +1 -1
  1318. package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
  1319. package/esm/validation/types.d.mts +1 -1
  1320. package/esm/validation/types.d.mts.map +1 -1
  1321. package/esm/validation/validateAll.mjs +1 -1
  1322. package/esm/validation/validateAll.mjs.map +1 -1
  1323. package/esm/validation/validators/file-validator.d.mts +44 -41
  1324. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  1325. package/esm/validation/validators/file-validator.mjs +4 -1
  1326. package/esm/validation/validators/file-validator.mjs.map +1 -1
  1327. package/esm/vite/lower-stage3-decorators.d.mts +1 -1
  1328. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  1329. package/esm/vite/lower-stage3-decorators.mjs +1 -1
  1330. package/esm/vite/lower-stage3-decorators.mjs.map +1 -1
  1331. package/esm/warlock-config/bundle-config.mjs +148 -0
  1332. package/esm/warlock-config/bundle-config.mjs.map +1 -0
  1333. package/esm/warlock-config/default-configurations.mjs +1 -1
  1334. package/esm/warlock-config/default-configurations.mjs.map +1 -1
  1335. package/esm/warlock-config/define-config.d.mts +1 -1
  1336. package/esm/warlock-config/define-config.d.mts.map +1 -1
  1337. package/esm/warlock-config/define-config.mjs +1 -1
  1338. package/esm/warlock-config/define-config.mjs.map +1 -1
  1339. package/esm/warlock-config/index.d.mts +1 -1
  1340. package/esm/warlock-config/index.mjs +1 -1
  1341. package/esm/warlock-config/normalize-build-config.mjs +1 -1
  1342. package/esm/warlock-config/normalize-build-config.mjs.map +1 -1
  1343. package/esm/warlock-config/types.d.mts +1 -1
  1344. package/esm/warlock-config/types.d.mts.map +1 -1
  1345. package/esm/warlock-config/warlock-config.manager.d.mts +32 -7
  1346. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  1347. package/esm/warlock-config/warlock-config.manager.mjs +94 -18
  1348. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  1349. package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
  1350. package/esm/warlock-config/warn-deprecated-config.mjs.map +1 -1
  1351. package/llms-full.txt +306 -249
  1352. package/llms.txt +42 -42
  1353. package/package.json +20 -13
  1354. package/skills/README.md +39 -39
  1355. package/skills/add-connector/SKILL.md +4 -4
  1356. package/skills/benchmark-code/SKILL.md +3 -3
  1357. package/skills/build-restful/SKILL.md +5 -5
  1358. package/skills/build-url/SKILL.md +7 -7
  1359. package/skills/configure-app/SKILL.md +30 -8
  1360. package/skills/create-controller/SKILL.md +12 -8
  1361. package/skills/create-module/SKILL.md +9 -9
  1362. package/skills/define-resource/SKILL.md +4 -4
  1363. package/skills/encrypt-data/SKILL.md +7 -7
  1364. package/skills/generate-openapi/SKILL.md +5 -5
  1365. package/skills/hash-password/SKILL.md +8 -8
  1366. package/skills/health-checks/SKILL.md +8 -6
  1367. package/skills/lower-stage3-decorators/SKILL.md +4 -4
  1368. package/skills/process-image/SKILL.md +5 -5
  1369. package/skills/register-route/SKILL.md +16 -6
  1370. package/skills/request-memo/SKILL.md +4 -4
  1371. package/skills/request-tracing/SKILL.md +6 -6
  1372. package/skills/resolve-path/SKILL.md +6 -6
  1373. package/skills/retry-operation/SKILL.md +4 -4
  1374. package/skills/run-app/SKILL.md +20 -13
  1375. package/skills/send-mail/SKILL.md +3 -3
  1376. package/skills/send-response/SKILL.md +16 -8
  1377. package/skills/store-file/SKILL.md +9 -5
  1378. package/skills/test-http/SKILL.md +5 -5
  1379. package/skills/test-service/SKILL.md +5 -5
  1380. package/skills/update-packages/SKILL.md +6 -6
  1381. package/skills/upload-file/SKILL.md +7 -7
  1382. package/skills/use-app-context/SKILL.md +7 -7
  1383. package/skills/use-localization/SKILL.md +6 -6
  1384. package/skills/use-middleware/SKILL.md +8 -8
  1385. package/skills/use-model-transformers/SKILL.md +6 -6
  1386. package/skills/use-repository/SKILL.md +7 -7
  1387. package/skills/use-request-locals/SKILL.md +4 -4
  1388. package/skills/validate-input/SKILL.md +7 -7
  1389. package/skills/warlock-conventions/SKILL.md +6 -6
  1390. package/skills/warlock-doctor/SKILL.md +5 -5
  1391. package/skills/warlock-routes/SKILL.md +6 -6
  1392. package/skills/wire-socket/SKILL.md +4 -4
  1393. package/skills/write-cli-command/SKILL.md +6 -6
  1394. package/skills/write-middleware/SKILL.md +8 -8
  1395. package/skills/write-seeder/SKILL.md +5 -5
  1396. package/skills/write-use-case/SKILL.md +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"register-locale-dictionary.mjs","names":[],"sources":["../../../../../../../core/src/localization/register-locale-dictionary.ts"],"sourcesContent":["import config from \"@mongez/config\";\nimport {\n getTranslationsList,\n groupedTranslations,\n setTranslationsList,\n} from \"@mongez/localization\";\nimport { parseLocaleDictionary } from \"./parse-locale-dictionary\";\n\ntype Owner = { sourceFile: string; kind: \"json\" | \"ts\" };\nconst owners = new Map<string, Owner>();\nconst keysBySource = new Map<string, string[]>();\n\nfunction claim(sourceFile: string, kind: Owner[\"kind\"], keys: readonly string[]): void {\n for (const key of keys) {\n const owner = owners.get(key);\n if (owner && owner.sourceFile !== sourceFile)\n throw new Error(\n `Translation key \"${key}\" is owned by both \"${owner.sourceFile}\" and \"${sourceFile}\".`,\n );\n }\n for (const key of keys) owners.set(key, { sourceFile, kind });\n keysBySource.set(sourceFile, [...keys]);\n}\n\nexport function registerGroupedTranslationKeys(sourceFile: string, keys: readonly string[]): void {\n claim(sourceFile, \"ts\", keys);\n}\n\n/** Undo JSON entries during HMR while preserving unrelated global translations. */\nexport function unregisterLocaleDictionary(sourceFile: string): void {\n const keys = keysBySource.get(sourceFile) ?? [];\n keysBySource.delete(sourceFile);\n for (const key of keys) owners.delete(key);\n const translations = getTranslationsList();\n for (const key of keys)\n for (const locale of Object.keys(translations)) {\n const segments = key.split(\".\");\n let target: Record<string, unknown> | undefined = translations[locale] as Record<\n string,\n unknown\n >;\n for (const segment of segments.slice(0, -1)) {\n const next = target?.[segment];\n if (!next || typeof next !== \"object\") {\n target = undefined;\n break;\n }\n target = next as Record<string, unknown>;\n }\n if (target) delete target[segments.at(-1)!];\n }\n setTranslationsList(translations);\n}\n\nexport function registerLocaleDictionary(input: {\n sourceFile: string;\n source: string;\n defaultNamespace: string;\n}): () => void {\n unregisterLocaleDictionary(input.sourceFile);\n const localeCodes = config.get(\"app.localeCodes\");\n const parsed = parseLocaleDictionary({\n ...input,\n localeCodes: Array.isArray(localeCodes) ? localeCodes : undefined,\n });\n const keys = Object.keys(parsed.entries);\n claim(input.sourceFile, \"json\", keys);\n groupedTranslations(parsed.entries);\n return () => unregisterLocaleDictionary(input.sourceFile);\n}\n"],"mappings":";;;;;AASA,MAAM,yBAAS,IAAI,IAAmB;AACtC,MAAM,+BAAe,IAAI,IAAsB;AAE/C,SAAS,MAAM,YAAoB,MAAqB,MAA+B;CACrF,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,QAAQ,OAAO,IAAI,GAAG;EAC5B,IAAI,SAAS,MAAM,eAAe,YAChC,MAAM,IAAI,MACR,oBAAoB,IAAI,sBAAsB,MAAM,WAAW,SAAS,WAAW,GACrF;CACJ;CACA,KAAK,MAAM,OAAO,MAAM,OAAO,IAAI,KAAK;EAAE;EAAY;CAAK,CAAC;CAC5D,aAAa,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC;AACxC;AAEA,SAAgB,+BAA+B,YAAoB,MAA+B;CAChG,MAAM,YAAY,MAAM,IAAI;AAC9B;;AAGA,SAAgB,2BAA2B,YAA0B;CACnE,MAAM,OAAO,aAAa,IAAI,UAAU,KAAK,CAAC;CAC9C,aAAa,OAAO,UAAU;CAC9B,KAAK,MAAM,OAAO,MAAM,OAAO,OAAO,GAAG;CACzC,MAAM,eAAe,oBAAoB;CACzC,KAAK,MAAM,OAAO,MAChB,KAAK,MAAM,UAAU,OAAO,KAAK,YAAY,GAAG;EAC9C,MAAM,WAAW,IAAI,MAAM,GAAG;EAC9B,IAAI,SAA8C,aAAa;EAI/D,KAAK,MAAM,WAAW,SAAS,MAAM,GAAG,EAAE,GAAG;GAC3C,MAAM,OAAO,SAAS;GACtB,IAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;IACrC,SAAS;IACT;GACF;GACA,SAAS;EACX;EACA,IAAI,QAAQ,OAAO,OAAO,SAAS,GAAG,EAAE;CAC1C;CACF,oBAAoB,YAAY;AAClC;AAEA,SAAgB,yBAAyB,OAI1B;CACb,2BAA2B,MAAM,UAAU;CAC3C,MAAM,cAAc,OAAO,IAAI,iBAAiB;CAChD,MAAM,SAAS,sBAAsB;EACnC,GAAG;EACH,aAAa,MAAM,QAAQ,WAAW,IAAI,cAAc;CAC1D,CAAC;CACD,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO;CACvC,MAAM,MAAM,YAAY,QAAQ,IAAI;CACpC,oBAAoB,OAAO,OAAO;CAClC,aAAa,2BAA2B,MAAM,UAAU;AAC1D"}
1
+ {"version":3,"file":"register-locale-dictionary.mjs","names":[],"sources":["../../../../../../../../packages/core/src/localization/register-locale-dictionary.ts"],"sourcesContent":["import config from \"@mongez/config\";\nimport {\n getTranslationsList,\n groupedTranslations,\n setTranslationsList,\n} from \"@mongez/localization\";\nimport { parseLocaleDictionary } from \"./parse-locale-dictionary\";\n\ntype Owner = { sourceFile: string; kind: \"json\" | \"ts\" };\nconst owners = new Map<string, Owner>();\nconst keysBySource = new Map<string, string[]>();\n\nfunction claim(sourceFile: string, kind: Owner[\"kind\"], keys: readonly string[]): void {\n for (const key of keys) {\n const owner = owners.get(key);\n if (owner && owner.sourceFile !== sourceFile)\n throw new Error(\n `Translation key \"${key}\" is owned by both \"${owner.sourceFile}\" and \"${sourceFile}\".`,\n );\n }\n for (const key of keys) owners.set(key, { sourceFile, kind });\n keysBySource.set(sourceFile, [...keys]);\n}\n\nexport function registerGroupedTranslationKeys(sourceFile: string, keys: readonly string[]): void {\n claim(sourceFile, \"ts\", keys);\n}\n\n/** Undo JSON entries during HMR while preserving unrelated global translations. */\nexport function unregisterLocaleDictionary(sourceFile: string): void {\n const keys = keysBySource.get(sourceFile) ?? [];\n keysBySource.delete(sourceFile);\n for (const key of keys) owners.delete(key);\n const translations = getTranslationsList();\n for (const key of keys)\n for (const locale of Object.keys(translations)) {\n const segments = key.split(\".\");\n let target: Record<string, unknown> | undefined = translations[locale] as Record<\n string,\n unknown\n >;\n for (const segment of segments.slice(0, -1)) {\n const next = target?.[segment];\n if (!next || typeof next !== \"object\") {\n target = undefined;\n break;\n }\n target = next as Record<string, unknown>;\n }\n if (target) delete target[segments.at(-1)!];\n }\n setTranslationsList(translations);\n}\n\nexport function registerLocaleDictionary(input: {\n sourceFile: string;\n source: string;\n defaultNamespace: string;\n}): () => void {\n unregisterLocaleDictionary(input.sourceFile);\n const localeCodes = config.get(\"app.localeCodes\");\n const parsed = parseLocaleDictionary({\n ...input,\n localeCodes: Array.isArray(localeCodes) ? localeCodes : undefined,\n });\n const keys = Object.keys(parsed.entries);\n claim(input.sourceFile, \"json\", keys);\n groupedTranslations(parsed.entries);\n return () => unregisterLocaleDictionary(input.sourceFile);\n}\n"],"mappings":";;;;;AASA,MAAM,yBAAS,IAAI,IAAmB;AACtC,MAAM,+BAAe,IAAI,IAAsB;AAE/C,SAAS,MAAM,YAAoB,MAAqB,MAA+B;CACrF,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,QAAQ,OAAO,IAAI,GAAG;EAC5B,IAAI,SAAS,MAAM,eAAe,YAChC,MAAM,IAAI,MACR,oBAAoB,IAAI,sBAAsB,MAAM,WAAW,SAAS,WAAW,GACrF;CACJ;CACA,KAAK,MAAM,OAAO,MAAM,OAAO,IAAI,KAAK;EAAE;EAAY;CAAK,CAAC;CAC5D,aAAa,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC;AACxC;AAEA,SAAgB,+BAA+B,YAAoB,MAA+B;CAChG,MAAM,YAAY,MAAM,IAAI;AAC9B;;AAGA,SAAgB,2BAA2B,YAA0B;CACnE,MAAM,OAAO,aAAa,IAAI,UAAU,KAAK,CAAC;CAC9C,aAAa,OAAO,UAAU;CAC9B,KAAK,MAAM,OAAO,MAAM,OAAO,OAAO,GAAG;CACzC,MAAM,eAAe,oBAAoB;CACzC,KAAK,MAAM,OAAO,MAChB,KAAK,MAAM,UAAU,OAAO,KAAK,YAAY,GAAG;EAC9C,MAAM,WAAW,IAAI,MAAM,GAAG;EAC9B,IAAI,SAA8C,aAAa;EAI/D,KAAK,MAAM,WAAW,SAAS,MAAM,GAAG,EAAE,GAAG;GAC3C,MAAM,OAAO,SAAS;GACtB,IAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;IACrC,SAAS;IACT;GACF;GACA,SAAS;EACX;EACA,IAAI,QAAQ,OAAO,OAAO,SAAS,GAAG,EAAE;CAC1C;CACF,oBAAoB,YAAY;AAClC;AAEA,SAAgB,yBAAyB,OAI1B;CACb,2BAA2B,MAAM,UAAU;CAC3C,MAAM,cAAc,OAAO,IAAI,iBAAiB;CAChD,MAAM,SAAS,sBAAsB;EACnC,GAAG;EACH,aAAa,MAAM,QAAQ,WAAW,IAAI,cAAc;CAC1D,CAAC;CACD,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO;CACvC,MAAM,MAAM,YAAY,QAAQ,IAAI;CACpC,oBAAoB,OAAO,OAAO;CAClC,aAAa,2BAA2B,MAAM,UAAU;AAC1D"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/logger/fatal-visibility.d.ts
1
+ //#region ../../packages/core/src/logger/fatal-visibility.d.ts
2
2
  /**
3
3
  * Guarantee a fatal boot error reaches the terminal.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fatal-visibility.d.mts","names":[],"sources":["../../../../../../../core/src/logger/fatal-visibility.ts"],"mappings":";;AAsBA;;;;AAAmD;;;;;;;;;;;;;;;iBAAnC,oBAAA,CAAqB,KAAc"}
1
+ {"version":3,"file":"fatal-visibility.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/logger/fatal-visibility.ts"],"mappings":";;AAsBA;;;;AAAmD;;;;;;;;;;;;;;;iBAAnC,oBAAA,CAAqB,KAAc"}
@@ -1,6 +1,6 @@
1
1
  import { log } from "@warlock.js/logger";
2
2
 
3
- //#region ../core/src/logger/fatal-visibility.ts
3
+ //#region ../../packages/core/src/logger/fatal-visibility.ts
4
4
  /**
5
5
  * Guarantee a fatal boot error reaches the terminal.
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fatal-visibility.mjs","names":[],"sources":["../../../../../../../core/src/logger/fatal-visibility.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\n\n/**\n * Guarantee a fatal boot error reaches the terminal.\n *\n * `log.fatal(...)` fans out over `Logger.channels` and does NOTHING when that\n * list is empty or holds only non-terminal channels — which is the normal\n * shape of a production `src/config/log.ts` (`production: { channels: [new\n * FileLog()] }`), and the shape of every app that ships no `log` config at all,\n * because `LoggerConnector.start()` returns early and never calls\n * `log.configure`. A boot failure reported only through `log.fatal` in that\n * window is a boot failure nobody ever sees: the process exits non-zero having\n * written nothing to stdout or stderr, and a supervising `warlock start` can\n * only report that no output was captured.\n *\n * This is the same guarantee `captureAnyUnhandledRejection` already makes for\n * an `uncaughtException` (see `@warlock.js/logger`), applied to the failures a\n * connector catches itself and therefore never lets reach that handler.\n *\n * Skipped when a terminal channel exists, so a configured `ConsoleLog` is\n * never doubled.\n */\nexport function ensureFatalIsVisible(error: unknown): void {\n const hasTerminalChannel = log.channels.some((channel) => channel.terminal !== false);\n\n if (hasTerminalChannel) {\n return;\n }\n\n console.error(error);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,qBAAqB,OAAsB;CAGzD,IAF2B,IAAI,SAAS,MAAM,YAAY,QAAQ,aAAa,KAE1D,GACnB;CAGF,QAAQ,MAAM,KAAK;AACrB"}
1
+ {"version":3,"file":"fatal-visibility.mjs","names":[],"sources":["../../../../../../../../packages/core/src/logger/fatal-visibility.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\n\n/**\n * Guarantee a fatal boot error reaches the terminal.\n *\n * `log.fatal(...)` fans out over `Logger.channels` and does NOTHING when that\n * list is empty or holds only non-terminal channels — which is the normal\n * shape of a production `src/config/log.ts` (`production: { channels: [new\n * FileLog()] }`), and the shape of every app that ships no `log` config at all,\n * because `LoggerConnector.start()` returns early and never calls\n * `log.configure`. A boot failure reported only through `log.fatal` in that\n * window is a boot failure nobody ever sees: the process exits non-zero having\n * written nothing to stdout or stderr, and a supervising `warlock start` can\n * only report that no output was captured.\n *\n * This is the same guarantee `captureAnyUnhandledRejection` already makes for\n * an `uncaughtException` (see `@warlock.js/logger`), applied to the failures a\n * connector catches itself and therefore never lets reach that handler.\n *\n * Skipped when a terminal channel exists, so a configured `ConsoleLog` is\n * never doubled.\n */\nexport function ensureFatalIsVisible(error: unknown): void {\n const hasTerminalChannel = log.channels.some((channel) => channel.terminal !== false);\n\n if (hasTerminalChannel) {\n return;\n }\n\n console.error(error);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,qBAAqB,OAAsB;CAGzD,IAF2B,IAAI,SAAS,MAAM,YAAY,QAAQ,aAAa,KAE1D,GACnB;CAGF,QAAQ,MAAM,KAAK;AACrB"}
@@ -1,6 +1,6 @@
1
1
  import { LogConfigurations } from "./types.mjs";
2
2
 
3
- //#region ../core/src/logger/logger.d.ts
3
+ //#region ../../packages/core/src/logger/logger.d.ts
4
4
  declare function setLogConfigurations(options: LogConfigurations): void;
5
5
  //#endregion
6
6
  export { setLogConfigurations };
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.mts","names":[],"sources":["../../../../../../../core/src/logger/logger.ts"],"mappings":";;;iBAKgB,oBAAA,CAAqB,OAA0B,EAAjB,iBAAiB"}
1
+ {"version":3,"file":"logger.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/logger/logger.ts"],"mappings":";;;iBAKgB,oBAAA,CAAqB,OAA0B,EAAjB,iBAAiB"}
@@ -2,7 +2,7 @@ import { environment } from "../utils/environment.mjs";
2
2
  import "../utils/index.mjs";
3
3
  import { log } from "@warlock.js/logger";
4
4
 
5
- //#region ../core/src/logger/logger.ts
5
+ //#region ../../packages/core/src/logger/logger.ts
6
6
  function setLogConfigurations(options) {
7
7
  const channels = [];
8
8
  const envOptions = options[environment()];
@@ -1 +1 @@
1
- {"version":3,"file":"logger.mjs","names":[],"sources":["../../../../../../../core/src/logger/logger.ts"],"sourcesContent":["import type { LogChannel } from \"@warlock.js/logger\";\nimport { log } from \"@warlock.js/logger\";\nimport { environment } from \"../utils\";\nimport type { LogConfigurations } from \"./types\";\n\nexport function setLogConfigurations(options: LogConfigurations) {\n // log configurations\n const channels: LogChannel[] = [];\n\n const env = environment();\n\n const envOptions = options[env as \"development\" | \"test\" | \"production\"];\n\n // the environment flag wins over the top-level flag\n const enabled = envOptions?.enabled ?? options.enabled ?? true;\n\n if (!enabled) {\n log.configure({ channels: [] });\n return;\n }\n\n const envChannels = envOptions?.channels;\n const defaultChannels = options.channels;\n\n if (defaultChannels) {\n channels.push(...defaultChannels);\n }\n\n if (envChannels) {\n channels.push(...envChannels);\n }\n\n log.configure({\n channels,\n });\n}\n"],"mappings":";;;;;AAKA,SAAgB,qBAAqB,SAA4B;CAE/D,MAAM,WAAyB,CAAC;CAIhC,MAAM,aAAa,QAFP,YAEiB;CAK7B,IAAI,EAFY,YAAY,WAAW,QAAQ,WAAW,OAE5C;EACZ,IAAI,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;EAC9B;CACF;CAEA,MAAM,cAAc,YAAY;CAChC,MAAM,kBAAkB,QAAQ;CAEhC,IAAI,iBACF,SAAS,KAAK,GAAG,eAAe;CAGlC,IAAI,aACF,SAAS,KAAK,GAAG,WAAW;CAG9B,IAAI,UAAU,EACZ,SACF,CAAC;AACH"}
1
+ {"version":3,"file":"logger.mjs","names":[],"sources":["../../../../../../../../packages/core/src/logger/logger.ts"],"sourcesContent":["import type { LogChannel } from \"@warlock.js/logger\";\nimport { log } from \"@warlock.js/logger\";\nimport { environment } from \"../utils\";\nimport type { LogConfigurations } from \"./types\";\n\nexport function setLogConfigurations(options: LogConfigurations) {\n // log configurations\n const channels: LogChannel[] = [];\n\n const env = environment();\n\n const envOptions = options[env as \"development\" | \"test\" | \"production\"];\n\n // the environment flag wins over the top-level flag\n const enabled = envOptions?.enabled ?? options.enabled ?? true;\n\n if (!enabled) {\n log.configure({ channels: [] });\n return;\n }\n\n const envChannels = envOptions?.channels;\n const defaultChannels = options.channels;\n\n if (defaultChannels) {\n channels.push(...defaultChannels);\n }\n\n if (envChannels) {\n channels.push(...envChannels);\n }\n\n log.configure({\n channels,\n });\n}\n"],"mappings":";;;;;AAKA,SAAgB,qBAAqB,SAA4B;CAE/D,MAAM,WAAyB,CAAC;CAIhC,MAAM,aAAa,QAFP,YAEiB;CAK7B,IAAI,EAFY,YAAY,WAAW,QAAQ,WAAW,OAE5C;EACZ,IAAI,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;EAC9B;CACF;CAEA,MAAM,cAAc,YAAY;CAChC,MAAM,kBAAkB,QAAQ;CAEhC,IAAI,iBACF,SAAS,KAAK,GAAG,eAAe;CAGlC,IAAI,aACF,SAAS,KAAK,GAAG,WAAW;CAG9B,IAAI,UAAU,EACZ,SACF,CAAC;AACH"}
@@ -1,6 +1,6 @@
1
1
  import { LogChannel } from "@warlock.js/logger";
2
2
 
3
- //#region ../core/src/logger/types.d.ts
3
+ //#region ../../packages/core/src/logger/types.d.ts
4
4
  type EnvironmentConfigurations = {
5
5
  /**
6
6
  * List of logging channels
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../core/src/logger/types.ts"],"mappings":";;;KAEK,yBAAA;;AAFgD;;EAMnD,QAAA,EAAU,UAAU;EAAA;;;;;EAMpB,OAAA;AAAA;AAAA,KAEU,iBAAA;;;;;EAKV,QAAA,GAAW,UAAA;EAiB2B;;;EAbtC,OAAA;EAAA;;;;EAKA,WAAA,GAAc,yBAAA;EAQd;;;EAJA,IAAA,GAAO,yBAAA;;;;EAIP,UAAA,GAAa,yBAAA;AAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/logger/types.ts"],"mappings":";;;KAEK,yBAAA;;AAFgD;;EAMnD,QAAA,EAAU,UAAU;EAAA;;;;;EAMpB,OAAA;AAAA;AAAA,KAEU,iBAAA;;;;;EAKV,QAAA,GAAW,UAAA;EAiB2B;;;EAbtC,OAAA;EAAA;;;;EAKA,WAAA,GAAc,yBAAA;EAQd;;;EAJA,IAAA,GAAO,yBAAA;;;;EAIP,UAAA,GAAa,yBAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { MailConfigurations, MailMode, MailersConfig } from "./types.mjs";
2
2
 
3
- //#region ../core/src/mail/config.d.ts
3
+ //#region ../../packages/core/src/mail/config.d.ts
4
4
  /**
5
5
  * Set the mail mode
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../../../core/src/mail/config.ts"],"mappings":";;;;;AAwDA;;;;AAA0C;AAO1C;;;;AAAuC;AAcvC;;;;AAAgC;AAOhC;iBA5BgB,WAAA,CAAY,IAAc,EAAR,QAAQ;;;AA4BT;iBArBjB,WAAA,IAAe,QAAQ;;;;iBAcvB,gBAAA;AA2ChB;;;AAAA,iBApCgB,iBAAA;;;;iBAOA,UAAA;AA6BgE;AAYhF;;;;AAA0D;AAW1D;;;;AAAiE;AAmBjE;;;;;;;;;;AAGsB;AAwBtB;;;AArEgF,iBAAhE,qBAAA,CAAsB,MAAA,EAAQ,kBAAA,GAAqB,aAAa;AAAA,iBAYhE,oBAAA,IAAwB,kBAAkB;;;;iBAW1C,eAAA,CAAgB,IAAA,WAAe,kBAAkB;;;;;iBAmBjD,iBAAA,CAAkB,OAAA;EAChC,MAAA,GAAS,kBAAA;EACT,MAAA;AAAA,IACE,kBAAkB;;;;iBAwBN,eAAA"}
1
+ {"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/config.ts"],"mappings":";;;;;AAwDA;;;;AAA0C;AAO1C;;;;AAAuC;AAcvC;;;;AAAgC;AAOhC;iBA5BgB,WAAA,CAAY,IAAc,EAAR,QAAQ;;;AA4BT;iBArBjB,WAAA,IAAe,QAAQ;;;;iBAcvB,gBAAA;AA2ChB;;;AAAA,iBApCgB,iBAAA;;;;iBAOA,UAAA;AA6BgE;AAYhF;;;;AAA0D;AAW1D;;;;AAAiE;AAmBjE;;;;;;;;;;AAGsB;AAwBtB;;;AArEgF,iBAAhE,qBAAA,CAAsB,MAAA,EAAQ,kBAAA,GAAqB,aAAa;AAAA,iBAYhE,oBAAA,IAAwB,kBAAkB;;;;iBAW1C,eAAA,CAAgB,IAAA,WAAe,kBAAkB;;;;;iBAmBjD,iBAAA,CAAkB,OAAA;EAChC,MAAA,GAAS,kBAAA;EACT,MAAA;AAAA,IACE,kBAAkB;;;;iBAwBN,eAAA"}
@@ -2,7 +2,7 @@ import { config } from "../config/config-getter.mjs";
2
2
  import "../config/index.mjs";
3
3
  import { environment } from "../utils/environment.mjs";
4
4
 
5
- //#region ../core/src/mail/config.ts
5
+ //#region ../../packages/core/src/mail/config.ts
6
6
  /**
7
7
  * Default mail configurations
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","names":[],"sources":["../../../../../../../core/src/mail/config.ts"],"sourcesContent":["import { config } from \"../config\";\nimport { environment } from \"../utils/environment\";\nimport type { MailConfigurations, MailersConfig, MailMode, SMTPConfigurations } from \"./types\";\n\n/**\n * Default mail configurations\n */\nconst defaultConfigurations: Partial<SMTPConfigurations> = {\n tls: true,\n driver: \"smtp\",\n};\n\n/**\n * Merge defaults into an SMTP config.\n * `secure` is derived from the port when not set explicitly:\n * 465 uses implicit TLS, every other port (e.g. 587) uses STARTTLS.\n */\nfunction withSmtpDefaults(config: MailConfigurations): SMTPConfigurations {\n const merged = { ...defaultConfigurations, ...config } as SMTPConfigurations;\n\n if (merged.secure === undefined) {\n merged.secure = Number(merged.port) === 465;\n }\n\n return merged;\n}\n\n/**\n * Mode set explicitly through `setMailMode`; when undefined the mode is\n * derived from the environment.\n */\nlet explicitMode: MailMode | undefined;\n\n/**\n * Registered mailers configuration\n */\nlet mailersConfig: MailersConfig = {};\n\n/**\n * Set the mail mode\n *\n * @param mode \"production\" | \"development\" | \"test\"\n *\n * - **production**: Actually sends emails via SMTP\n * - **development**: Logs emails to console without sending\n * - **test**: Captures emails to test mailbox for assertions\n *\n * @example\n * ```typescript\n * // In test setup\n * setMailMode(\"test\");\n *\n * // In development\n * setMailMode(\"development\");\n * ```\n */\nexport function setMailMode(mode: MailMode): void {\n explicitMode = mode;\n}\n\n/**\n * Get the current mail mode\n */\nexport function getMailMode(): MailMode {\n if (explicitMode) return explicitMode;\n\n // Development and test never send real mail unless `mail.sendInDevelopment` is true\n if (environment() !== \"production\" && config.key(\"mail.sendInDevelopment\") !== true) {\n return \"development\";\n }\n\n return \"production\";\n}\n\n/**\n * Check if in production mode\n */\nexport function isProductionMode(): boolean {\n return getMailMode() === \"production\";\n}\n\n/**\n * Check if in development mode\n */\nexport function isDevelopmentMode(): boolean {\n return getMailMode() === \"development\";\n}\n\n/**\n * Check if in test mode\n */\nexport function isTestMode(): boolean {\n return getMailMode() === \"test\";\n}\n\n/**\n * Set mail configurations\n *\n * Supports both simple config and named mailers.\n *\n * @example\n * ```typescript\n * // Simple config (sets as default)\n * setMailConfigurations({\n * host: \"smtp.gmail.com\",\n * port: 587,\n * username: \"...\",\n * password: \"...\",\n * });\n *\n * // Named mailers\n * setMailConfigurations({\n * default: { host: \"smtp.sendgrid.net\", ... },\n * mailers: {\n * marketing: { host: \"smtp.mailchimp.com\", ... },\n * transactional: { host: \"smtp.postmark.com\", ... },\n * },\n * });\n * ```\n */\nexport function setMailConfigurations(config: MailConfigurations | MailersConfig): void {\n // Check if it's a MailersConfig (has 'default' or 'mailers' key)\n if (\"default\" in config || \"mailers\" in config) {\n mailersConfig = config as MailersConfig;\n } else {\n // Simple config - set as default\n mailersConfig = {\n default: config as MailConfigurations,\n };\n }\n}\n\nexport function getDefaultMailConfig(): MailConfigurations {\n const config = mailersConfig.default;\n if (!config) return {} as MailConfigurations;\n if (\"driver\" in config && config.driver === \"ses\") return config;\n\n return withSmtpDefaults(config);\n}\n\n/**\n * Get a named mailer configuration\n */\nexport function getMailerConfig(name: string): MailConfigurations | undefined {\n if (name === \"default\") {\n return getDefaultMailConfig();\n }\n\n const config = mailersConfig.mailers?.[name];\n if (!config) {\n return undefined;\n }\n\n if (\"driver\" in config && config.driver === \"ses\") return config;\n\n return withSmtpDefaults(config);\n}\n\n/**\n * Resolve configuration from options\n * Priority: config > mailer > default\n */\nexport function resolveMailConfig(options: {\n config?: MailConfigurations;\n mailer?: string;\n}): MailConfigurations {\n if (options.config) {\n // SES config passes through as-is, no defaultConfigurations merge\n if (\"driver\" in options.config && options.config.driver === \"ses\") {\n return options.config;\n }\n\n return withSmtpDefaults(options.config);\n }\n\n if (options.mailer) {\n const config = getMailerConfig(options.mailer);\n if (!config) {\n throw new Error(`Mailer \"${options.mailer}\" not found in configuration`);\n }\n return config;\n }\n\n return getDefaultMailConfig();\n}\n\n/**\n * Reset all configurations (useful for testing)\n */\nexport function resetMailConfig(): void {\n explicitMode = undefined;\n mailersConfig = {};\n}\n"],"mappings":";;;;;;;;AAOA,MAAM,wBAAqD;CACzD,KAAK;CACL,QAAQ;AACV;;;;;;AAOA,SAAS,iBAAiB,QAAgD;CACxE,MAAM,SAAS;EAAE,GAAG;EAAuB,GAAG;CAAO;CAErD,IAAI,OAAO,WAAW,QACpB,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM;CAG1C,OAAO;AACT;;;;;AAMA,IAAI;;;;AAKJ,IAAI,gBAA+B,CAAC;;;;;;;;;;;;;;;;;;;AAoBpC,SAAgB,YAAY,MAAsB;CAChD,eAAe;AACjB;;;;AAKA,SAAgB,cAAwB;CACtC,IAAI,cAAc,OAAO;CAGzB,IAAI,YAAY,MAAM,gBAAgB,OAAO,IAAI,wBAAwB,MAAM,MAC7E,OAAO;CAGT,OAAO;AACT;;;;AAKA,SAAgB,mBAA4B;CAC1C,OAAO,YAAY,MAAM;AAC3B;;;;AAKA,SAAgB,oBAA6B;CAC3C,OAAO,YAAY,MAAM;AAC3B;;;;AAKA,SAAgB,aAAsB;CACpC,OAAO,YAAY,MAAM;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,sBAAsB,QAAkD;CAEtF,IAAI,aAAa,UAAU,aAAa,QACtC,gBAAgB;MAGhB,gBAAgB,EACd,SAAS,OACX;AAEJ;AAEA,SAAgB,uBAA2C;CACzD,MAAM,SAAS,cAAc;CAC7B,IAAI,CAAC,QAAQ,OAAO,CAAC;CACrB,IAAI,YAAY,UAAU,OAAO,WAAW,OAAO,OAAO;CAE1D,OAAO,iBAAiB,MAAM;AAChC;;;;AAKA,SAAgB,gBAAgB,MAA8C;CAC5E,IAAI,SAAS,WACX,OAAO,qBAAqB;CAG9B,MAAM,SAAS,cAAc,UAAU;CACvC,IAAI,CAAC,QACH;CAGF,IAAI,YAAY,UAAU,OAAO,WAAW,OAAO,OAAO;CAE1D,OAAO,iBAAiB,MAAM;AAChC;;;;;AAMA,SAAgB,kBAAkB,SAGX;CACrB,IAAI,QAAQ,QAAQ;EAElB,IAAI,YAAY,QAAQ,UAAU,QAAQ,OAAO,WAAW,OAC1D,OAAO,QAAQ;EAGjB,OAAO,iBAAiB,QAAQ,MAAM;CACxC;CAEA,IAAI,QAAQ,QAAQ;EAClB,MAAM,SAAS,gBAAgB,QAAQ,MAAM;EAC7C,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,WAAW,QAAQ,OAAO,6BAA6B;EAEzE,OAAO;CACT;CAEA,OAAO,qBAAqB;AAC9B;;;;AAKA,SAAgB,kBAAwB;CACtC,eAAe;CACf,gBAAgB,CAAC;AACnB"}
1
+ {"version":3,"file":"config.mjs","names":[],"sources":["../../../../../../../../packages/core/src/mail/config.ts"],"sourcesContent":["import { config } from \"../config\";\nimport { environment } from \"../utils/environment\";\nimport type { MailConfigurations, MailersConfig, MailMode, SMTPConfigurations } from \"./types\";\n\n/**\n * Default mail configurations\n */\nconst defaultConfigurations: Partial<SMTPConfigurations> = {\n tls: true,\n driver: \"smtp\",\n};\n\n/**\n * Merge defaults into an SMTP config.\n * `secure` is derived from the port when not set explicitly:\n * 465 uses implicit TLS, every other port (e.g. 587) uses STARTTLS.\n */\nfunction withSmtpDefaults(config: MailConfigurations): SMTPConfigurations {\n const merged = { ...defaultConfigurations, ...config } as SMTPConfigurations;\n\n if (merged.secure === undefined) {\n merged.secure = Number(merged.port) === 465;\n }\n\n return merged;\n}\n\n/**\n * Mode set explicitly through `setMailMode`; when undefined the mode is\n * derived from the environment.\n */\nlet explicitMode: MailMode | undefined;\n\n/**\n * Registered mailers configuration\n */\nlet mailersConfig: MailersConfig = {};\n\n/**\n * Set the mail mode\n *\n * @param mode \"production\" | \"development\" | \"test\"\n *\n * - **production**: Actually sends emails via SMTP\n * - **development**: Logs emails to console without sending\n * - **test**: Captures emails to test mailbox for assertions\n *\n * @example\n * ```typescript\n * // In test setup\n * setMailMode(\"test\");\n *\n * // In development\n * setMailMode(\"development\");\n * ```\n */\nexport function setMailMode(mode: MailMode): void {\n explicitMode = mode;\n}\n\n/**\n * Get the current mail mode\n */\nexport function getMailMode(): MailMode {\n if (explicitMode) return explicitMode;\n\n // Development and test never send real mail unless `mail.sendInDevelopment` is true\n if (environment() !== \"production\" && config.key(\"mail.sendInDevelopment\") !== true) {\n return \"development\";\n }\n\n return \"production\";\n}\n\n/**\n * Check if in production mode\n */\nexport function isProductionMode(): boolean {\n return getMailMode() === \"production\";\n}\n\n/**\n * Check if in development mode\n */\nexport function isDevelopmentMode(): boolean {\n return getMailMode() === \"development\";\n}\n\n/**\n * Check if in test mode\n */\nexport function isTestMode(): boolean {\n return getMailMode() === \"test\";\n}\n\n/**\n * Set mail configurations\n *\n * Supports both simple config and named mailers.\n *\n * @example\n * ```typescript\n * // Simple config (sets as default)\n * setMailConfigurations({\n * host: \"smtp.gmail.com\",\n * port: 587,\n * username: \"...\",\n * password: \"...\",\n * });\n *\n * // Named mailers\n * setMailConfigurations({\n * default: { host: \"smtp.sendgrid.net\", ... },\n * mailers: {\n * marketing: { host: \"smtp.mailchimp.com\", ... },\n * transactional: { host: \"smtp.postmark.com\", ... },\n * },\n * });\n * ```\n */\nexport function setMailConfigurations(config: MailConfigurations | MailersConfig): void {\n // Check if it's a MailersConfig (has 'default' or 'mailers' key)\n if (\"default\" in config || \"mailers\" in config) {\n mailersConfig = config as MailersConfig;\n } else {\n // Simple config - set as default\n mailersConfig = {\n default: config as MailConfigurations,\n };\n }\n}\n\nexport function getDefaultMailConfig(): MailConfigurations {\n const config = mailersConfig.default;\n if (!config) return {} as MailConfigurations;\n if (\"driver\" in config && config.driver === \"ses\") return config;\n\n return withSmtpDefaults(config);\n}\n\n/**\n * Get a named mailer configuration\n */\nexport function getMailerConfig(name: string): MailConfigurations | undefined {\n if (name === \"default\") {\n return getDefaultMailConfig();\n }\n\n const config = mailersConfig.mailers?.[name];\n if (!config) {\n return undefined;\n }\n\n if (\"driver\" in config && config.driver === \"ses\") return config;\n\n return withSmtpDefaults(config);\n}\n\n/**\n * Resolve configuration from options\n * Priority: config > mailer > default\n */\nexport function resolveMailConfig(options: {\n config?: MailConfigurations;\n mailer?: string;\n}): MailConfigurations {\n if (options.config) {\n // SES config passes through as-is, no defaultConfigurations merge\n if (\"driver\" in options.config && options.config.driver === \"ses\") {\n return options.config;\n }\n\n return withSmtpDefaults(options.config);\n }\n\n if (options.mailer) {\n const config = getMailerConfig(options.mailer);\n if (!config) {\n throw new Error(`Mailer \"${options.mailer}\" not found in configuration`);\n }\n return config;\n }\n\n return getDefaultMailConfig();\n}\n\n/**\n * Reset all configurations (useful for testing)\n */\nexport function resetMailConfig(): void {\n explicitMode = undefined;\n mailersConfig = {};\n}\n"],"mappings":";;;;;;;;AAOA,MAAM,wBAAqD;CACzD,KAAK;CACL,QAAQ;AACV;;;;;;AAOA,SAAS,iBAAiB,QAAgD;CACxE,MAAM,SAAS;EAAE,GAAG;EAAuB,GAAG;CAAO;CAErD,IAAI,OAAO,WAAW,QACpB,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM;CAG1C,OAAO;AACT;;;;;AAMA,IAAI;;;;AAKJ,IAAI,gBAA+B,CAAC;;;;;;;;;;;;;;;;;;;AAoBpC,SAAgB,YAAY,MAAsB;CAChD,eAAe;AACjB;;;;AAKA,SAAgB,cAAwB;CACtC,IAAI,cAAc,OAAO;CAGzB,IAAI,YAAY,MAAM,gBAAgB,OAAO,IAAI,wBAAwB,MAAM,MAC7E,OAAO;CAGT,OAAO;AACT;;;;AAKA,SAAgB,mBAA4B;CAC1C,OAAO,YAAY,MAAM;AAC3B;;;;AAKA,SAAgB,oBAA6B;CAC3C,OAAO,YAAY,MAAM;AAC3B;;;;AAKA,SAAgB,aAAsB;CACpC,OAAO,YAAY,MAAM;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,sBAAsB,QAAkD;CAEtF,IAAI,aAAa,UAAU,aAAa,QACtC,gBAAgB;MAGhB,gBAAgB,EACd,SAAS,OACX;AAEJ;AAEA,SAAgB,uBAA2C;CACzD,MAAM,SAAS,cAAc;CAC7B,IAAI,CAAC,QAAQ,OAAO,CAAC;CACrB,IAAI,YAAY,UAAU,OAAO,WAAW,OAAO,OAAO;CAE1D,OAAO,iBAAiB,MAAM;AAChC;;;;AAKA,SAAgB,gBAAgB,MAA8C;CAC5E,IAAI,SAAS,WACX,OAAO,qBAAqB;CAG9B,MAAM,SAAS,cAAc,UAAU;CACvC,IAAI,CAAC,QACH;CAGF,IAAI,YAAY,UAAU,OAAO,WAAW,OAAO,OAAO;CAE1D,OAAO,iBAAiB,MAAM;AAChC;;;;;AAMA,SAAgB,kBAAkB,SAGX;CACrB,IAAI,QAAQ,QAAQ;EAElB,IAAI,YAAY,QAAQ,UAAU,QAAQ,OAAO,WAAW,OAC1D,OAAO,QAAQ;EAGjB,OAAO,iBAAiB,QAAQ,MAAM;CACxC;CAEA,IAAI,QAAQ,QAAQ;EAClB,MAAM,SAAS,gBAAgB,QAAQ,MAAM;EAC7C,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,WAAW,QAAQ,OAAO,6BAA6B;EAEzE,OAAO;CACT;CAEA,OAAO,qBAAqB;AAC9B;;;;AAKA,SAAgB,kBAAwB;CACtC,eAAe;CACf,gBAAgB,CAAC;AACnB"}
@@ -1,6 +1,6 @@
1
1
  import { CapturedMail } from "./types.mjs";
2
2
 
3
- //#region ../core/src/mail/events.d.ts
3
+ //#region ../../packages/core/src/mail/events.d.ts
4
4
  /**
5
5
  * Generate a unique mail ID for event namespacing
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.mts","names":[],"sources":["../../../../../../../core/src/mail/events.ts"],"mappings":";;;;;AAOA;iBAAgB,cAAA;;;AAAc;cAOjB,WAAA;EAAA;;;;;;;;;;AAcb;;iBAAgB,gBAAA,CACd,MAAA,UACA,KAAqD;;AAAA;AAkCvD;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,UAAA;;;;oCAIuB,WAAA,KAAW,IAAA;;;;mCAQ7B,KAAA,qDACuC,IAAA;EAkBJ;;;+BATtB,WAAA,EAAW,QAAA,MAAgB,IAAA,8CAAoB,iBAAA;EAgBF;;;0BAPlD,IAAA,EAAM,YAAA,uCAAqB,iBAAA;EAc/B;;;+BAPS,IAAA,iBAAqB,OAAA,iBAAwB,OAAA,qCAAc,iBAAA;;;;sBAOpE,IAAA,OAAW,MAAA,OAAa,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;EAO7C;;;yBAAX,IAAA,OAAW,MAAA,iBAAuB,OAAA,oCAAa,iBAAA;;;;uBAOjD,IAAA,OAAW,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;;;;wCAUnD,QAAA,GACH,IAAA,iBAAqB,OAAA,iBAAwB,OAAA,qCAAc,iBAAA;EAA3D;;;+BASG,QAAA,GACH,IAAA,OAAW,MAAA,OAAa,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;EAVA;;;kCAkB1C,QAAA,GAAa,IAAA,OAAW,MAAA,iBAAuB,OAAA,oCAAa,iBAAA;EARlE;;;gCAeI,QAAA,GAAa,IAAA,OAAW,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;AAAA"}
1
+ {"version":3,"file":"events.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/events.ts"],"mappings":";;;;;AAOA;iBAAgB,cAAA;;;AAAc;cAOjB,WAAA;EAAA;;;;;;;;;;AAcb;;iBAAgB,gBAAA,CACd,MAAA,UACA,KAAqD;;AAAA;AAkCvD;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,UAAA;;;;oCAIuB,WAAA,KAAW,IAAA;;;;mCAQ7B,KAAA,qDACuC,IAAA;EAkBJ;;;+BATtB,WAAA,EAAW,QAAA,MAAgB,IAAA,8CAAoB,iBAAA;EAgBF;;;0BAPlD,IAAA,EAAM,YAAA,uCAAqB,iBAAA;EAc/B;;;+BAPS,IAAA,iBAAqB,OAAA,iBAAwB,OAAA,qCAAc,iBAAA;;;;sBAOpE,IAAA,OAAW,MAAA,OAAa,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;EAO7C;;;yBAAX,IAAA,OAAW,MAAA,iBAAuB,OAAA,oCAAa,iBAAA;;;;uBAOjD,IAAA,OAAW,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;;;;wCAUnD,QAAA,GACH,IAAA,iBAAqB,OAAA,iBAAwB,OAAA,qCAAc,iBAAA;EAA3D;;;+BASG,QAAA,GACH,IAAA,OAAW,MAAA,OAAa,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;EAVA;;;kCAkB1C,QAAA,GAAa,IAAA,OAAW,MAAA,iBAAuB,OAAA,oCAAa,iBAAA;EARlE;;;gCAeI,QAAA,GAAa,IAAA,OAAW,KAAA,iBAAsB,OAAA,oCAAa,iBAAA;AAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Random } from "@mongez/reinforcements";
2
2
  import events from "@mongez/events";
3
3
 
4
- //#region ../core/src/mail/events.ts
4
+ //#region ../../packages/core/src/mail/events.ts
5
5
  /**
6
6
  * Generate a unique mail ID for event namespacing
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"events.mjs","names":[],"sources":["../../../../../../../core/src/mail/events.ts"],"sourcesContent":["import events from \"@mongez/events\";\nimport { Random } from \"@mongez/reinforcements\";\nimport type { CapturedMail } from \"./types\";\n\n/**\n * Generate a unique mail ID for event namespacing\n */\nexport function generateMailId(): string {\n return \"M\" + Random.int(32);\n}\n\n/**\n * Mail event names (global events)\n */\nexport const MAIL_EVENTS = {\n BEFORE_SENDING: \"mail.beforeSending\",\n CAPTURED: \"mail.captured\",\n SENT: \"mail.sent\",\n SUCCESS: \"mail.success\",\n ERROR: \"mail.error\",\n} as const;\n\n/**\n * Get namespaced event name for a specific mail\n * @param mailId Unique mail identifier\n * @param event Event type\n * @returns Namespaced event name (e.g., \"mail.abc123.success\")\n */\nexport function getMailEventName(\n mailId: string,\n event: \"beforeSending\" | \"sent\" | \"success\" | \"error\",\n): string {\n return `mail.${mailId}.${event}`;\n}\n\n/**\n * Mail events wrapper\n *\n * Supports two event patterns:\n * 1. Global events: `mail.success` - fires for ALL emails\n * 2. Specific events: `mail.$mailId.success` - fires for ONE email\n *\n * ## Usage\n *\n * ```typescript\n * // Global listener - all emails\n * mailEvents.onSuccess((mail, result) => {\n * console.log(\"Any mail sent:\", result.messageId);\n * });\n *\n * // Specific listener - one email by ID\n * const mailId = generateMailId();\n * mailEvents.onMailSuccess(mailId, (mail, result) => {\n * console.log(\"This specific mail sent:\", result.messageId);\n * });\n *\n * await sendMail({\n * id: mailId, // Use the same ID\n * to: \"user@example.com\",\n * subject: \"Hello\",\n * html: \"<p>World</p>\",\n * });\n * ```\n */\nexport const mailEvents = {\n /**\n * Trigger a global mail event\n */\n trigger: (eventName: keyof typeof MAIL_EVENTS, ...args: any[]) => {\n return events.trigger(MAIL_EVENTS[eventName], ...args);\n },\n\n /**\n * Trigger a specific mail event (by mail ID)\n */\n triggerForMail: (\n mailId: string,\n event: \"beforeSending\" | \"sent\" | \"success\" | \"error\",\n ...args: any[]\n ) => {\n return events.trigger(getMailEventName(mailId, event), ...args);\n },\n\n /**\n * Subscribe to global mail events\n */\n on: (eventName: keyof typeof MAIL_EVENTS, callback: (...args: any[]) => void) => {\n return events.subscribe(MAIL_EVENTS[eventName], callback);\n },\n\n // === GLOBAL EVENT HELPERS ===\n\n /**\n * Subscribe to mail captured in development or test mode.\n */\n onCaptured: (callback: (mail: CapturedMail) => void) => {\n return events.subscribe(MAIL_EVENTS.CAPTURED, callback);\n },\n\n /**\n * Subscribe to beforeSending event (all mails)\n */\n onBeforeSending: (callback: (mail: any) => void | Promise<void> | false | Promise<false>) => {\n return events.subscribe(MAIL_EVENTS.BEFORE_SENDING, callback);\n },\n\n /**\n * Subscribe to sent event (all mails, after attempt)\n */\n onSent: (callback: (mail: any, result: any, error: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.SENT, callback);\n },\n\n /**\n * Subscribe to success event (all mails)\n */\n onSuccess: (callback: (mail: any, result: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.SUCCESS, callback);\n },\n\n /**\n * Subscribe to error event (all mails)\n */\n onError: (callback: (mail: any, error: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.ERROR, callback);\n },\n\n // === SPECIFIC MAIL EVENT HELPERS ===\n\n /**\n * Subscribe to beforeSending event for a specific mail\n */\n onMailBeforeSending: (\n mailId: string,\n callback: (mail: any) => void | Promise<void> | false | Promise<false>,\n ) => {\n return events.subscribe(getMailEventName(mailId, \"beforeSending\"), callback);\n },\n\n /**\n * Subscribe to sent event for a specific mail\n */\n onMailSent: (\n mailId: string,\n callback: (mail: any, result: any, error: any) => void | Promise<void>,\n ) => {\n return events.subscribe(getMailEventName(mailId, \"sent\"), callback);\n },\n\n /**\n * Subscribe to success event for a specific mail\n */\n onMailSuccess: (mailId: string, callback: (mail: any, result: any) => void | Promise<void>) => {\n return events.subscribe(getMailEventName(mailId, \"success\"), callback);\n },\n\n /**\n * Subscribe to error event for a specific mail\n */\n onMailError: (mailId: string, callback: (mail: any, error: any) => void | Promise<void>) => {\n return events.subscribe(getMailEventName(mailId, \"error\"), callback);\n },\n};\n"],"mappings":";;;;;;;AAOA,SAAgB,iBAAyB;CACvC,OAAO,MAAM,OAAO,IAAI,EAAE;AAC5B;;;;AAKA,MAAa,cAAc;CACzB,gBAAgB;CAChB,UAAU;CACV,MAAM;CACN,SAAS;CACT,OAAO;AACT;;;;;;;AAQA,SAAgB,iBACd,QACA,OACQ;CACR,OAAO,QAAQ,OAAO,GAAG;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,aAAa;;;;CAIxB,UAAU,WAAqC,GAAG,SAAgB;EAChE,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,IAAI;CACvD;;;;CAKA,iBACE,QACA,OACA,GAAG,SACA;EACH,OAAO,OAAO,QAAQ,iBAAiB,QAAQ,KAAK,GAAG,GAAG,IAAI;CAChE;;;;CAKA,KAAK,WAAqC,aAAuC;EAC/E,OAAO,OAAO,UAAU,YAAY,YAAY,QAAQ;CAC1D;;;;CAOA,aAAa,aAA2C;EACtD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ;CACxD;;;;CAKA,kBAAkB,aAA2E;EAC3F,OAAO,OAAO,UAAU,YAAY,gBAAgB,QAAQ;CAC9D;;;;CAKA,SAAS,aAA2E;EAClF,OAAO,OAAO,UAAU,YAAY,MAAM,QAAQ;CACpD;;;;CAKA,YAAY,aAA+D;EACzE,OAAO,OAAO,UAAU,YAAY,SAAS,QAAQ;CACvD;;;;CAKA,UAAU,aAA8D;EACtE,OAAO,OAAO,UAAU,YAAY,OAAO,QAAQ;CACrD;;;;CAOA,sBACE,QACA,aACG;EACH,OAAO,OAAO,UAAU,iBAAiB,QAAQ,eAAe,GAAG,QAAQ;CAC7E;;;;CAKA,aACE,QACA,aACG;EACH,OAAO,OAAO,UAAU,iBAAiB,QAAQ,MAAM,GAAG,QAAQ;CACpE;;;;CAKA,gBAAgB,QAAgB,aAA+D;EAC7F,OAAO,OAAO,UAAU,iBAAiB,QAAQ,SAAS,GAAG,QAAQ;CACvE;;;;CAKA,cAAc,QAAgB,aAA8D;EAC1F,OAAO,OAAO,UAAU,iBAAiB,QAAQ,OAAO,GAAG,QAAQ;CACrE;AACF"}
1
+ {"version":3,"file":"events.mjs","names":[],"sources":["../../../../../../../../packages/core/src/mail/events.ts"],"sourcesContent":["import events from \"@mongez/events\";\nimport { Random } from \"@mongez/reinforcements\";\nimport type { CapturedMail } from \"./types\";\n\n/**\n * Generate a unique mail ID for event namespacing\n */\nexport function generateMailId(): string {\n return \"M\" + Random.int(32);\n}\n\n/**\n * Mail event names (global events)\n */\nexport const MAIL_EVENTS = {\n BEFORE_SENDING: \"mail.beforeSending\",\n CAPTURED: \"mail.captured\",\n SENT: \"mail.sent\",\n SUCCESS: \"mail.success\",\n ERROR: \"mail.error\",\n} as const;\n\n/**\n * Get namespaced event name for a specific mail\n * @param mailId Unique mail identifier\n * @param event Event type\n * @returns Namespaced event name (e.g., \"mail.abc123.success\")\n */\nexport function getMailEventName(\n mailId: string,\n event: \"beforeSending\" | \"sent\" | \"success\" | \"error\",\n): string {\n return `mail.${mailId}.${event}`;\n}\n\n/**\n * Mail events wrapper\n *\n * Supports two event patterns:\n * 1. Global events: `mail.success` - fires for ALL emails\n * 2. Specific events: `mail.$mailId.success` - fires for ONE email\n *\n * ## Usage\n *\n * ```typescript\n * // Global listener - all emails\n * mailEvents.onSuccess((mail, result) => {\n * console.log(\"Any mail sent:\", result.messageId);\n * });\n *\n * // Specific listener - one email by ID\n * const mailId = generateMailId();\n * mailEvents.onMailSuccess(mailId, (mail, result) => {\n * console.log(\"This specific mail sent:\", result.messageId);\n * });\n *\n * await sendMail({\n * id: mailId, // Use the same ID\n * to: \"user@example.com\",\n * subject: \"Hello\",\n * html: \"<p>World</p>\",\n * });\n * ```\n */\nexport const mailEvents = {\n /**\n * Trigger a global mail event\n */\n trigger: (eventName: keyof typeof MAIL_EVENTS, ...args: any[]) => {\n return events.trigger(MAIL_EVENTS[eventName], ...args);\n },\n\n /**\n * Trigger a specific mail event (by mail ID)\n */\n triggerForMail: (\n mailId: string,\n event: \"beforeSending\" | \"sent\" | \"success\" | \"error\",\n ...args: any[]\n ) => {\n return events.trigger(getMailEventName(mailId, event), ...args);\n },\n\n /**\n * Subscribe to global mail events\n */\n on: (eventName: keyof typeof MAIL_EVENTS, callback: (...args: any[]) => void) => {\n return events.subscribe(MAIL_EVENTS[eventName], callback);\n },\n\n // === GLOBAL EVENT HELPERS ===\n\n /**\n * Subscribe to mail captured in development or test mode.\n */\n onCaptured: (callback: (mail: CapturedMail) => void) => {\n return events.subscribe(MAIL_EVENTS.CAPTURED, callback);\n },\n\n /**\n * Subscribe to beforeSending event (all mails)\n */\n onBeforeSending: (callback: (mail: any) => void | Promise<void> | false | Promise<false>) => {\n return events.subscribe(MAIL_EVENTS.BEFORE_SENDING, callback);\n },\n\n /**\n * Subscribe to sent event (all mails, after attempt)\n */\n onSent: (callback: (mail: any, result: any, error: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.SENT, callback);\n },\n\n /**\n * Subscribe to success event (all mails)\n */\n onSuccess: (callback: (mail: any, result: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.SUCCESS, callback);\n },\n\n /**\n * Subscribe to error event (all mails)\n */\n onError: (callback: (mail: any, error: any) => void | Promise<void>) => {\n return events.subscribe(MAIL_EVENTS.ERROR, callback);\n },\n\n // === SPECIFIC MAIL EVENT HELPERS ===\n\n /**\n * Subscribe to beforeSending event for a specific mail\n */\n onMailBeforeSending: (\n mailId: string,\n callback: (mail: any) => void | Promise<void> | false | Promise<false>,\n ) => {\n return events.subscribe(getMailEventName(mailId, \"beforeSending\"), callback);\n },\n\n /**\n * Subscribe to sent event for a specific mail\n */\n onMailSent: (\n mailId: string,\n callback: (mail: any, result: any, error: any) => void | Promise<void>,\n ) => {\n return events.subscribe(getMailEventName(mailId, \"sent\"), callback);\n },\n\n /**\n * Subscribe to success event for a specific mail\n */\n onMailSuccess: (mailId: string, callback: (mail: any, result: any) => void | Promise<void>) => {\n return events.subscribe(getMailEventName(mailId, \"success\"), callback);\n },\n\n /**\n * Subscribe to error event for a specific mail\n */\n onMailError: (mailId: string, callback: (mail: any, error: any) => void | Promise<void>) => {\n return events.subscribe(getMailEventName(mailId, \"error\"), callback);\n },\n};\n"],"mappings":";;;;;;;AAOA,SAAgB,iBAAyB;CACvC,OAAO,MAAM,OAAO,IAAI,EAAE;AAC5B;;;;AAKA,MAAa,cAAc;CACzB,gBAAgB;CAChB,UAAU;CACV,MAAM;CACN,SAAS;CACT,OAAO;AACT;;;;;;;AAQA,SAAgB,iBACd,QACA,OACQ;CACR,OAAO,QAAQ,OAAO,GAAG;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,aAAa;;;;CAIxB,UAAU,WAAqC,GAAG,SAAgB;EAChE,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,IAAI;CACvD;;;;CAKA,iBACE,QACA,OACA,GAAG,SACA;EACH,OAAO,OAAO,QAAQ,iBAAiB,QAAQ,KAAK,GAAG,GAAG,IAAI;CAChE;;;;CAKA,KAAK,WAAqC,aAAuC;EAC/E,OAAO,OAAO,UAAU,YAAY,YAAY,QAAQ;CAC1D;;;;CAOA,aAAa,aAA2C;EACtD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ;CACxD;;;;CAKA,kBAAkB,aAA2E;EAC3F,OAAO,OAAO,UAAU,YAAY,gBAAgB,QAAQ;CAC9D;;;;CAKA,SAAS,aAA2E;EAClF,OAAO,OAAO,UAAU,YAAY,MAAM,QAAQ;CACpD;;;;CAKA,YAAY,aAA+D;EACzE,OAAO,OAAO,UAAU,YAAY,SAAS,QAAQ;CACvD;;;;CAKA,UAAU,aAA8D;EACtE,OAAO,OAAO,UAAU,YAAY,OAAO,QAAQ;CACrD;;;;CAOA,sBACE,QACA,aACG;EACH,OAAO,OAAO,UAAU,iBAAiB,QAAQ,eAAe,GAAG,QAAQ;CAC7E;;;;CAKA,aACE,QACA,aACG;EACH,OAAO,OAAO,UAAU,iBAAiB,QAAQ,MAAM,GAAG,QAAQ;CACpE;;;;CAKA,gBAAgB,QAAgB,aAA+D;EAC7F,OAAO,OAAO,UAAU,iBAAiB,QAAQ,SAAS,GAAG,QAAQ;CACvE;;;;CAKA,cAAc,QAAgB,aAA8D;EAC1F,OAAO,OAAO,UAAU,iBAAiB,QAAQ,OAAO,GAAG,QAAQ;CACrE;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { MailAddress, MailAttachment, MailConfigurations, MailEvents, MailOptions, MailPriority, MailResult } from "./types.mjs";
2
2
  import React from "react";
3
3
 
4
- //#region ../core/src/mail/mail.d.ts
4
+ //#region ../../packages/core/src/mail/mail.d.ts
5
5
  /**
6
6
  * Fluent Mail Builder
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mail.d.mts","names":[],"sources":["../../../../../../../core/src/mail/mail.ts"],"mappings":";;;;;;AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,IAAA;EAAA,QACH,OAAA;EAUwC;;;EAAA,QALzC,WAAA;EAe2C;;;EAAA,OAVpC,EAAA,CAAG,SAAA,sBAA+B,IAAA;EA8BzC;;;EAAA,OApBO,MAAA,CAAO,MAAA,EAAQ,kBAAA,GAAqB,IAAA;EAsC3C;;;EAAA,OA5BO,MAAA,CAAO,IAAA,WAAe,IAAA;EA8C7B;;;EApCA,EAAA,CAAG,SAAA;EA6CK;;;EApCR,EAAA,CAAG,SAAA;EAsDE;;;EA7CL,GAAA,CAAI,SAAA;EAsDM;;;EA7CV,OAAA,CAAQ,OAAA;EAsDyB;;;EA7CjC,IAAA,CAAK,OAAA,EAAS,WAAA;EA8DF;;;EArDZ,OAAA,CAAQ,OAAA;EA8EoC;;;EArE5C,IAAA,CAAK,OAAA;EAkGL;;;EAzFA,IAAA,CAAK,OAAA;EAkGE;;;EAzFP,SAAA,CAAU,OAAA,EAAS,KAAA,CAAM,YAAA;EA2GzB;;;EAlGA,MAAA,CAAO,OAAA,EAAS,MAAA,WAAiB,QAAA,UAAkB,WAAA;EAoHnD;;;EAnGA,WAAA,CAAY,WAAA,EAAa,cAAA;EA4Gd;;;;;;;;;;;;;;;;;;;EAnFX,UAAA,CAAW,IAAA,UAAc,QAAA,WAAmB,WAAA;EAwJZ;AAAA;;EApIhC,QAAA,CAAS,KAAA,EAAO,YAAA;;;;EAShB,OAAA,CAAQ,OAAA,EAAS,MAAA;;;;EASjB,MAAA,CAAO,IAAA,UAAc,KAAA;;;;EASrB,IAAA,CAAK,IAAA;;;;EASL,GAAA,CAAI,GAAA;;;;EASJ,aAAA,CAAc,EAAA;;;;EASd,UAAA,CAAW,MAAA,EAAQ,kBAAA;;;;EASnB,UAAA,CAAW,IAAA;;;;EASX,aAAA,CAAc,OAAA,EAAS,UAAA;;;;EASvB,MAAA,CAAO,OAAA,EAAS,UAAA;;;;EAShB,SAAA,CAAU,OAAA,EAAS,UAAA;;;;EASnB,OAAA,CAAQ,OAAA,EAAS,UAAA;;;;EASjB,UAAA,IAAc,OAAA,CAAQ,WAAA;;;;UAOrB,QAAA;;;;EAiBK,IAAA,IAAQ,OAAA,CAAQ,UAAA;AAAA"}
1
+ {"version":3,"file":"mail.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/mail.ts"],"mappings":";;;;;;AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,IAAA;EAAA,QACH,OAAA;EAUwC;;;EAAA,QALzC,WAAA;EAe2C;;;EAAA,OAVpC,EAAA,CAAG,SAAA,sBAA+B,IAAA;EA8BzC;;;EAAA,OApBO,MAAA,CAAO,MAAA,EAAQ,kBAAA,GAAqB,IAAA;EAsC3C;;;EAAA,OA5BO,MAAA,CAAO,IAAA,WAAe,IAAA;EA8C7B;;;EApCA,EAAA,CAAG,SAAA;EA6CK;;;EApCR,EAAA,CAAG,SAAA;EAsDE;;;EA7CL,GAAA,CAAI,SAAA;EAsDM;;;EA7CV,OAAA,CAAQ,OAAA;EAsDyB;;;EA7CjC,IAAA,CAAK,OAAA,EAAS,WAAA;EA8DF;;;EArDZ,OAAA,CAAQ,OAAA;EA8EoC;;;EArE5C,IAAA,CAAK,OAAA;EAkGL;;;EAzFA,IAAA,CAAK,OAAA;EAkGE;;;EAzFP,SAAA,CAAU,OAAA,EAAS,KAAA,CAAM,YAAA;EA2GzB;;;EAlGA,MAAA,CAAO,OAAA,EAAS,MAAA,WAAiB,QAAA,UAAkB,WAAA;EAoHnD;;;EAnGA,WAAA,CAAY,WAAA,EAAa,cAAA;EA4Gd;;;;;;;;;;;;;;;;;;;EAnFX,UAAA,CAAW,IAAA,UAAc,QAAA,WAAmB,WAAA;EAwJZ;AAAA;;EApIhC,QAAA,CAAS,KAAA,EAAO,YAAA;;;;EAShB,OAAA,CAAQ,OAAA,EAAS,MAAA;;;;EASjB,MAAA,CAAO,IAAA,UAAc,KAAA;;;;EASrB,IAAA,CAAK,IAAA;;;;EASL,GAAA,CAAI,GAAA;;;;EASJ,aAAA,CAAc,EAAA;;;;EASd,UAAA,CAAW,MAAA,EAAQ,kBAAA;;;;EASnB,UAAA,CAAW,IAAA;;;;EASX,aAAA,CAAc,OAAA,EAAS,UAAA;;;;EASvB,MAAA,CAAO,OAAA,EAAS,UAAA;;;;EAShB,SAAA,CAAU,OAAA,EAAS,UAAA;;;;EASnB,OAAA,CAAQ,OAAA,EAAS,UAAA;;;;EASjB,UAAA,IAAc,OAAA,CAAQ,WAAA;;;;UAOrB,QAAA;;;;EAiBK,IAAA,IAAQ,OAAA,CAAQ,UAAA;AAAA"}
package/esm/mail/mail.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { sendMail } from "./send-mail.mjs";
2
2
 
3
- //#region ../core/src/mail/mail.ts
3
+ //#region ../../packages/core/src/mail/mail.ts
4
4
  /**
5
5
  * Fluent Mail Builder
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mail.mjs","names":[],"sources":["../../../../../../../core/src/mail/mail.ts"],"sourcesContent":["import type React from \"react\";\nimport { sendMail } from \"./send-mail\";\nimport type {\n MailAddress,\n MailAttachment,\n MailConfigurations,\n MailEvents,\n MailOptions,\n MailPriority,\n MailResult,\n} from \"./types\";\n\n/**\n * Fluent Mail Builder\n *\n * Provides a chainable API for building and sending emails.\n *\n * @example\n * ```typescript\n * await Mail.to(\"user@example.com\")\n * .subject(\"Welcome!\")\n * .component(<WelcomeEmail name=\"John\" />)\n * .send();\n *\n * // With attachments\n * await Mail.to(\"user@example.com\")\n * .cc(\"manager@example.com\")\n * .subject(\"Invoice\")\n * .component(<InvoiceEmail order={order} />)\n * .attach(pdfBuffer, \"invoice.pdf\")\n * .send();\n *\n * // Multi-tenant\n * await Mail.config(tenant.mailSettings)\n * .to(\"user@example.com\")\n * .subject(\"Hello\")\n * .html(\"<p>World</p>\")\n * .send();\n * ```\n */\nexport class Mail {\n private options: Partial<MailOptions> = {};\n\n /**\n * Private constructor - use static factory methods\n */\n private constructor() {}\n\n /**\n * Create a new mail with recipient\n */\n public static to(recipient: string | string[]): Mail {\n const mail = new Mail();\n mail.options.to = recipient;\n\n return mail;\n }\n\n /**\n * Create a new mail with custom configuration (multi-tenant)\n */\n public static config(config: MailConfigurations): Mail {\n const mail = new Mail();\n mail.options.config = config;\n\n return mail;\n }\n\n /**\n * Create a new mail with named mailer\n */\n public static mailer(name: string): Mail {\n const mail = new Mail();\n mail.options.mailer = name;\n\n return mail;\n }\n\n /**\n * Set recipient(s)\n */\n public to(recipient: string | string[]): this {\n this.options.to = recipient;\n\n return this;\n }\n\n /**\n * Set CC recipient(s)\n */\n public cc(recipient: string | string[]): this {\n this.options.cc = recipient;\n\n return this;\n }\n\n /**\n * Set BCC recipient(s)\n */\n public bcc(recipient: string | string[]): this {\n this.options.bcc = recipient;\n\n return this;\n }\n\n /**\n * Set reply-to address\n */\n public replyTo(address: string): this {\n this.options.replyTo = address;\n\n return this;\n }\n\n /**\n * Set from address\n */\n public from(address: MailAddress): this {\n this.options.from = address;\n\n return this;\n }\n\n /**\n * Set subject\n */\n public subject(subject: string): this {\n this.options.subject = subject;\n\n return this;\n }\n\n /**\n * Set HTML content\n */\n public html(content: string): this {\n this.options.html = content;\n\n return this;\n }\n\n /**\n * Set plain text content\n */\n public text(content: string): this {\n this.options.text = content;\n\n return this;\n }\n\n /**\n * Set React component as content\n */\n public component(element: React.ReactElement): this {\n this.options.component = element;\n\n return this;\n }\n\n /**\n * Add attachment\n */\n public attach(content: Buffer | string, filename: string, contentType?: string): this {\n if (!this.options.attachments) {\n this.options.attachments = [];\n }\n\n this.options.attachments.push({\n filename,\n content,\n contentType,\n });\n\n return this;\n }\n\n /**\n * Add multiple attachments\n */\n public attachments(attachments: MailAttachment[]): this {\n this.options.attachments = [...(this.options.attachments || []), ...attachments];\n\n return this;\n }\n\n /**\n * Attach a file by path\n *\n * The file will be read automatically when the email is sent.\n *\n * @param path Path to the file\n * @param filename Optional custom filename (defaults to basename of path)\n * @param contentType Optional MIME type\n *\n * @example\n * ```typescript\n * Mail.to(\"user@example.com\")\n * .subject(\"Invoice\")\n * .html(\"<p>Please see attached</p>\")\n * .attachFile(\"./invoices/2024-001.pdf\")\n * .attachFile(\"./terms.pdf\", \"terms-and-conditions.pdf\")\n * .send();\n * ```\n */\n public attachFile(path: string, filename?: string, contentType?: string): this {\n if (!this.options.attachments) {\n this.options.attachments = [];\n }\n\n // Extract filename from path if not provided\n const resolvedFilename = filename || path.split(/[/\\\\]/).pop() || \"attachment\";\n\n this.options.attachments.push({\n path,\n filename: resolvedFilename,\n contentType,\n });\n\n return this;\n }\n\n /**\n * Set priority\n */\n public priority(level: MailPriority): this {\n this.options.priority = level;\n\n return this;\n }\n\n /**\n * Set custom headers\n */\n public headers(headers: Record<string, string>): this {\n this.options.headers = { ...this.options.headers, ...headers };\n\n return this;\n }\n\n /**\n * Add a custom header\n */\n public header(name: string, value: string): this {\n this.options.headers = { ...this.options.headers, [name]: value };\n\n return this;\n }\n\n /**\n * Set tags for categorization\n */\n public tags(tags: string[]): this {\n this.options.tags = tags;\n\n return this;\n }\n\n /**\n * Add a tag\n */\n public tag(tag: string): this {\n this.options.tags = [...(this.options.tags || []), tag];\n\n return this;\n }\n\n /**\n * Set correlation ID for tracking\n */\n public correlationId(id: string): this {\n this.options.correlationId = id;\n\n return this;\n }\n\n /**\n * Set configuration (multi-tenant)\n */\n public withConfig(config: MailConfigurations): this {\n this.options.config = config;\n\n return this;\n }\n\n /**\n * Set named mailer\n */\n public withMailer(name: string): this {\n this.options.mailer = name;\n\n return this;\n }\n\n /**\n * Set beforeSending event handler\n */\n public beforeSending(handler: MailEvents[\"beforeSending\"]): this {\n this.options.beforeSending = handler;\n\n return this;\n }\n\n /**\n * Set onSent event handler\n */\n public onSent(handler: MailEvents[\"onSent\"]): this {\n this.options.onSent = handler;\n\n return this;\n }\n\n /**\n * Set onSuccess event handler\n */\n public onSuccess(handler: MailEvents[\"onSuccess\"]): this {\n this.options.onSuccess = handler;\n\n return this;\n }\n\n /**\n * Set onError event handler\n */\n public onError(handler: MailEvents[\"onError\"]): this {\n this.options.onError = handler;\n\n return this;\n }\n\n /**\n * Get the built options (for debugging)\n */\n public getOptions(): Partial<MailOptions> {\n return { ...this.options };\n }\n\n /**\n * Validate the mail before sending\n */\n private validate(): void {\n if (!this.options.to) {\n throw new Error(\"Mail recipient (to) is required\");\n }\n\n if (!this.options.subject) {\n throw new Error(\"Mail subject is required\");\n }\n\n if (!this.options.html && !this.options.text && !this.options.component) {\n throw new Error(\"Mail content (html, text, or component) is required\");\n }\n }\n\n /**\n * Send the email\n */\n public async send(): Promise<MailResult> {\n this.validate();\n\n return sendMail(this.options as MailOptions);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mail.mjs","names":[],"sources":["../../../../../../../../packages/core/src/mail/mail.ts"],"sourcesContent":["import type React from \"react\";\nimport { sendMail } from \"./send-mail\";\nimport type {\n MailAddress,\n MailAttachment,\n MailConfigurations,\n MailEvents,\n MailOptions,\n MailPriority,\n MailResult,\n} from \"./types\";\n\n/**\n * Fluent Mail Builder\n *\n * Provides a chainable API for building and sending emails.\n *\n * @example\n * ```typescript\n * await Mail.to(\"user@example.com\")\n * .subject(\"Welcome!\")\n * .component(<WelcomeEmail name=\"John\" />)\n * .send();\n *\n * // With attachments\n * await Mail.to(\"user@example.com\")\n * .cc(\"manager@example.com\")\n * .subject(\"Invoice\")\n * .component(<InvoiceEmail order={order} />)\n * .attach(pdfBuffer, \"invoice.pdf\")\n * .send();\n *\n * // Multi-tenant\n * await Mail.config(tenant.mailSettings)\n * .to(\"user@example.com\")\n * .subject(\"Hello\")\n * .html(\"<p>World</p>\")\n * .send();\n * ```\n */\nexport class Mail {\n private options: Partial<MailOptions> = {};\n\n /**\n * Private constructor - use static factory methods\n */\n private constructor() {}\n\n /**\n * Create a new mail with recipient\n */\n public static to(recipient: string | string[]): Mail {\n const mail = new Mail();\n mail.options.to = recipient;\n\n return mail;\n }\n\n /**\n * Create a new mail with custom configuration (multi-tenant)\n */\n public static config(config: MailConfigurations): Mail {\n const mail = new Mail();\n mail.options.config = config;\n\n return mail;\n }\n\n /**\n * Create a new mail with named mailer\n */\n public static mailer(name: string): Mail {\n const mail = new Mail();\n mail.options.mailer = name;\n\n return mail;\n }\n\n /**\n * Set recipient(s)\n */\n public to(recipient: string | string[]): this {\n this.options.to = recipient;\n\n return this;\n }\n\n /**\n * Set CC recipient(s)\n */\n public cc(recipient: string | string[]): this {\n this.options.cc = recipient;\n\n return this;\n }\n\n /**\n * Set BCC recipient(s)\n */\n public bcc(recipient: string | string[]): this {\n this.options.bcc = recipient;\n\n return this;\n }\n\n /**\n * Set reply-to address\n */\n public replyTo(address: string): this {\n this.options.replyTo = address;\n\n return this;\n }\n\n /**\n * Set from address\n */\n public from(address: MailAddress): this {\n this.options.from = address;\n\n return this;\n }\n\n /**\n * Set subject\n */\n public subject(subject: string): this {\n this.options.subject = subject;\n\n return this;\n }\n\n /**\n * Set HTML content\n */\n public html(content: string): this {\n this.options.html = content;\n\n return this;\n }\n\n /**\n * Set plain text content\n */\n public text(content: string): this {\n this.options.text = content;\n\n return this;\n }\n\n /**\n * Set React component as content\n */\n public component(element: React.ReactElement): this {\n this.options.component = element;\n\n return this;\n }\n\n /**\n * Add attachment\n */\n public attach(content: Buffer | string, filename: string, contentType?: string): this {\n if (!this.options.attachments) {\n this.options.attachments = [];\n }\n\n this.options.attachments.push({\n filename,\n content,\n contentType,\n });\n\n return this;\n }\n\n /**\n * Add multiple attachments\n */\n public attachments(attachments: MailAttachment[]): this {\n this.options.attachments = [...(this.options.attachments || []), ...attachments];\n\n return this;\n }\n\n /**\n * Attach a file by path\n *\n * The file will be read automatically when the email is sent.\n *\n * @param path Path to the file\n * @param filename Optional custom filename (defaults to basename of path)\n * @param contentType Optional MIME type\n *\n * @example\n * ```typescript\n * Mail.to(\"user@example.com\")\n * .subject(\"Invoice\")\n * .html(\"<p>Please see attached</p>\")\n * .attachFile(\"./invoices/2024-001.pdf\")\n * .attachFile(\"./terms.pdf\", \"terms-and-conditions.pdf\")\n * .send();\n * ```\n */\n public attachFile(path: string, filename?: string, contentType?: string): this {\n if (!this.options.attachments) {\n this.options.attachments = [];\n }\n\n // Extract filename from path if not provided\n const resolvedFilename = filename || path.split(/[/\\\\]/).pop() || \"attachment\";\n\n this.options.attachments.push({\n path,\n filename: resolvedFilename,\n contentType,\n });\n\n return this;\n }\n\n /**\n * Set priority\n */\n public priority(level: MailPriority): this {\n this.options.priority = level;\n\n return this;\n }\n\n /**\n * Set custom headers\n */\n public headers(headers: Record<string, string>): this {\n this.options.headers = { ...this.options.headers, ...headers };\n\n return this;\n }\n\n /**\n * Add a custom header\n */\n public header(name: string, value: string): this {\n this.options.headers = { ...this.options.headers, [name]: value };\n\n return this;\n }\n\n /**\n * Set tags for categorization\n */\n public tags(tags: string[]): this {\n this.options.tags = tags;\n\n return this;\n }\n\n /**\n * Add a tag\n */\n public tag(tag: string): this {\n this.options.tags = [...(this.options.tags || []), tag];\n\n return this;\n }\n\n /**\n * Set correlation ID for tracking\n */\n public correlationId(id: string): this {\n this.options.correlationId = id;\n\n return this;\n }\n\n /**\n * Set configuration (multi-tenant)\n */\n public withConfig(config: MailConfigurations): this {\n this.options.config = config;\n\n return this;\n }\n\n /**\n * Set named mailer\n */\n public withMailer(name: string): this {\n this.options.mailer = name;\n\n return this;\n }\n\n /**\n * Set beforeSending event handler\n */\n public beforeSending(handler: MailEvents[\"beforeSending\"]): this {\n this.options.beforeSending = handler;\n\n return this;\n }\n\n /**\n * Set onSent event handler\n */\n public onSent(handler: MailEvents[\"onSent\"]): this {\n this.options.onSent = handler;\n\n return this;\n }\n\n /**\n * Set onSuccess event handler\n */\n public onSuccess(handler: MailEvents[\"onSuccess\"]): this {\n this.options.onSuccess = handler;\n\n return this;\n }\n\n /**\n * Set onError event handler\n */\n public onError(handler: MailEvents[\"onError\"]): this {\n this.options.onError = handler;\n\n return this;\n }\n\n /**\n * Get the built options (for debugging)\n */\n public getOptions(): Partial<MailOptions> {\n return { ...this.options };\n }\n\n /**\n * Validate the mail before sending\n */\n private validate(): void {\n if (!this.options.to) {\n throw new Error(\"Mail recipient (to) is required\");\n }\n\n if (!this.options.subject) {\n throw new Error(\"Mail subject is required\");\n }\n\n if (!this.options.html && !this.options.text && !this.options.component) {\n throw new Error(\"Mail content (html, text, or component) is required\");\n }\n }\n\n /**\n * Send the email\n */\n public async send(): Promise<MailResult> {\n this.validate();\n\n return sendMail(this.options as MailOptions);\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { MailConfigurations } from "./types.mjs";
2
2
  import { Transporter } from "nodemailer";
3
3
 
4
- //#region ../core/src/mail/mailer-pool.d.ts
4
+ //#region ../../packages/core/src/mail/mailer-pool.d.ts
5
5
  /**
6
6
  * Get or create a mailer transporter from the pool
7
7
  * Nodemailer is eagerly loaded at import time
@@ -1 +1 @@
1
- {"version":3,"file":"mailer-pool.d.mts","names":[],"sources":["../../../../../../../core/src/mail/mailer-pool.ts"],"mappings":";;;;;;AAoLA;;iBAAsB,SAAA,CAAU,MAAA,EAAQ,kBAAA,GAAqB,OAAA,CAAQ,WAAA;;;;iBA6C/C,YAAA,CAAa,MAAA,EAAQ,kBAAA,GAAqB,OAAO;;;;iBAcvD,WAAA,CAAY,MAA0B,EAAlB,kBAAkB;;;AA3D0B;iBAyEhE,eAAA;;;;iBAYA,YAAA;EAAkB,IAAA;EAAc,MAAM;AAAA"}
1
+ {"version":3,"file":"mailer-pool.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/mailer-pool.ts"],"mappings":";;;;;;AAoLA;;iBAAsB,SAAA,CAAU,MAAA,EAAQ,kBAAA,GAAqB,OAAA,CAAQ,WAAA;;;;iBA6C/C,YAAA,CAAa,MAAA,EAAQ,kBAAA,GAAqB,OAAO;;;;iBAcvD,WAAA,CAAY,MAA0B,EAAlB,kBAAkB;;;AA3D0B;iBAyEhE,eAAA;;;;iBAYA,YAAA;EAAkB,IAAA;EAAc,MAAM;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { log } from "@warlock.js/logger";
2
2
 
3
- //#region ../core/src/mail/mailer-pool.ts
3
+ //#region ../../packages/core/src/mail/mailer-pool.ts
4
4
  /**
5
5
  * Installation instructions for nodemailer
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mailer-pool.mjs","names":[],"sources":["../../../../../../../core/src/mail/mailer-pool.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport type nodemailer from \"nodemailer\";\nimport type { Transporter } from \"nodemailer\";\nimport type { MailConfigurations, SESConfigurations, SMTPConfigurations } from \"./types\";\n\n// ============================================================\n// Eager-loaded Nodemailer Module\n// ============================================================\n\n/**\n * Installation instructions for nodemailer\n */\nconst NODEMAILER_INSTALL_INSTRUCTIONS = `\nEmail functionality requires the nodemailer package.\nInstall it with:\n\n warlock add mail\n\nOr manually:\n\n npm install nodemailer\n pnpm add nodemailer\n yarn add nodemailer\n`.trim();\n\n/**\n * Module availability flag\n */\nlet moduleExists: boolean | null = null;\n\n/**\n * Cached nodemailer module (loaded at import time)\n */\nlet nodemailerModule: typeof nodemailer;\n\nlet nodemailerLoadPromise: Promise<void> | null = null;\n\n/**\n * Eagerly load nodemailer module at import time\n */\nasync function loadNodemailerModule() {\n try {\n const module = await import(\"nodemailer\");\n nodemailerModule = module.default;\n moduleExists = true;\n } catch {\n moduleExists = false;\n }\n}\n\n// Kick off eager loading immediately\nnodemailerLoadPromise = loadNodemailerModule();\n\nconst SES_INSTALL_INSTRUCTIONS = `\nAWS SES functionality requires the @aws-sdk/client-sesv2 package.\nInstall it with:\n\n warlock add ses\n\nOr manually:\n\n npm install @aws-sdk/client-sesv2\n pnpm add @aws-sdk/client-sesv2\n yarn add @aws-sdk/client-sesv2\n`.trim();\n\nlet sesModuleExists: boolean | null = null;\n\nlet sesModule: typeof import(\"@aws-sdk/client-sesv2\");\n\nlet sesLoadPromise: Promise<void> | null = null;\n\nasync function loadSesModule() {\n try {\n const module = await import(\"@aws-sdk/client-sesv2\");\n sesModule = module.default;\n sesModuleExists = true;\n } catch {\n sesModuleExists = false;\n }\n}\n\nsesLoadPromise = loadSesModule();\n\nfunction isSesConfig(config: MailConfigurations): config is SESConfigurations {\n return \"driver\" in config && config.driver === \"ses\";\n}\n\nasync function getSesMailer(config: SESConfigurations): Promise<Transporter> {\n if (sesModuleExists === null && sesLoadPromise) {\n await sesLoadPromise;\n }\n\n if (sesModuleExists === false) {\n throw new Error(`@aws-sdk/client-sesv2 is not installed.\\n\\n${SES_INSTALL_INSTRUCTIONS}`);\n }\n\n if (moduleExists === null && nodemailerLoadPromise) {\n await nodemailerLoadPromise;\n }\n\n if (moduleExists === false) {\n throw new Error(`nodemailer is not installed.\\n\\n${NODEMAILER_INSTALL_INSTRUCTIONS}`);\n }\n\n const hash = `ses_${config.region}_${config.accessKeyId}`;\n\n const existingTransporter = mailerPool.get(hash);\n if (existingTransporter) {\n return existingTransporter;\n }\n\n log.info(\"mail\", \"pool\", `Creating new SES mailer transport (pool size: ${mailerPool.size + 1})`);\n\n const ses = new sesModule!.SESv2Client({\n region: config.region,\n credentials: {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n },\n });\n\n const transporter = nodemailerModule.createTransport({\n SES: { sesClient: ses, SendEmailCommand: sesModule.SendEmailCommand },\n });\n\n mailerPool.set(hash, transporter);\n\n return transporter;\n}\n\n// ============================================================\n// Mailer Pool\n// ============================================================\n\n/**\n * Mailer pool for connection reuse\n * Maps config hash to transporter instance\n */\nconst mailerPool = new Map<string, Transporter>();\n\n/**\n * Create a hash from mail configuration for pooling\n */\nfunction createConfigHash(config: SMTPConfigurations): string {\n const key = JSON.stringify({\n // SMTP specific fields\n host: config.host,\n port: config.port,\n secure: config.secure,\n auth: config.auth,\n username: config.username,\n password: config.password,\n });\n\n // Simple hash function\n let hash = 0;\n for (let i = 0; i < key.length; i++) {\n const char = key.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n return `mailer_${hash}`;\n}\n\n/**\n * Get hash for any mailer config\n */\nfunction getMailerHash(config: MailConfigurations): string {\n if (isSesConfig(config)) {\n return `ses_${config.region}_${config.accessKeyId}`;\n }\n return createConfigHash(config);\n}\n\n/**\n * Get or create a mailer transporter from the pool\n * Nodemailer is eagerly loaded at import time\n */\nexport async function getMailer(config: MailConfigurations): Promise<Transporter> {\n if (moduleExists === null && nodemailerLoadPromise) {\n await nodemailerLoadPromise;\n }\n\n if (moduleExists === false) {\n throw new Error(`nodemailer is not installed.\\n\\n${NODEMAILER_INSTALL_INSTRUCTIONS}`);\n }\n\n if (isSesConfig(config)) {\n return getSesMailer(config);\n }\n\n const hash = getMailerHash(config);\n\n // Return existing transporter if available\n const existingTransporter = mailerPool.get(hash);\n\n if (existingTransporter) {\n return existingTransporter;\n }\n\n // Create new transporter\n log.info(\"mail\", \"pool\", `Creating new mailer transport (pool size: ${mailerPool.size + 1})`);\n\n const { auth, username, password, requireTLS, tls, ...transportConfig } = config;\n\n const transporter = nodemailerModule.createTransport({\n requireTLS: requireTLS ?? tls,\n auth: auth ?? {\n user: username,\n pass: password,\n },\n ...transportConfig,\n });\n\n // Store in pool\n mailerPool.set(hash, transporter);\n\n return transporter;\n}\n\n/**\n * Verify a mailer connection\n */\nexport async function verifyMailer(config: MailConfigurations): Promise<boolean> {\n const transporter = await getMailer(config);\n\n try {\n await transporter.verify();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Close a specific mailer connection\n */\nexport function closeMailer(config: MailConfigurations): void {\n const hash = getMailerHash(config);\n const transporter = mailerPool.get(hash);\n\n if (transporter) {\n transporter.close();\n mailerPool.delete(hash);\n log.info(\"mail\", \"pool\", `Closed mailer transport (pool size: ${mailerPool.size})`);\n }\n}\n\n/**\n * Close all mailer connections\n */\nexport function closeAllMailers(): void {\n for (const [hash, transporter] of mailerPool) {\n transporter.close();\n mailerPool.delete(hash);\n }\n\n log.info(\"mail\", \"pool\", \"Closed all mailer transports\");\n}\n\n/**\n * Get pool statistics\n */\nexport function getPoolStats(): { size: number; hashes: string[] } {\n return {\n size: mailerPool.size,\n hashes: Array.from(mailerPool.keys()),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mailer-pool.mjs","names":[],"sources":["../../../../../../../../packages/core/src/mail/mailer-pool.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport type nodemailer from \"nodemailer\";\nimport type { Transporter } from \"nodemailer\";\nimport type { MailConfigurations, SESConfigurations, SMTPConfigurations } from \"./types\";\n\n// ============================================================\n// Eager-loaded Nodemailer Module\n// ============================================================\n\n/**\n * Installation instructions for nodemailer\n */\nconst NODEMAILER_INSTALL_INSTRUCTIONS = `\nEmail functionality requires the nodemailer package.\nInstall it with:\n\n warlock add mail\n\nOr manually:\n\n npm install nodemailer\n pnpm add nodemailer\n yarn add nodemailer\n`.trim();\n\n/**\n * Module availability flag\n */\nlet moduleExists: boolean | null = null;\n\n/**\n * Cached nodemailer module (loaded at import time)\n */\nlet nodemailerModule: typeof nodemailer;\n\nlet nodemailerLoadPromise: Promise<void> | null = null;\n\n/**\n * Eagerly load nodemailer module at import time\n */\nasync function loadNodemailerModule() {\n try {\n const module = await import(\"nodemailer\");\n nodemailerModule = module.default;\n moduleExists = true;\n } catch {\n moduleExists = false;\n }\n}\n\n// Kick off eager loading immediately\nnodemailerLoadPromise = loadNodemailerModule();\n\nconst SES_INSTALL_INSTRUCTIONS = `\nAWS SES functionality requires the @aws-sdk/client-sesv2 package.\nInstall it with:\n\n warlock add ses\n\nOr manually:\n\n npm install @aws-sdk/client-sesv2\n pnpm add @aws-sdk/client-sesv2\n yarn add @aws-sdk/client-sesv2\n`.trim();\n\nlet sesModuleExists: boolean | null = null;\n\nlet sesModule: typeof import(\"@aws-sdk/client-sesv2\");\n\nlet sesLoadPromise: Promise<void> | null = null;\n\nasync function loadSesModule() {\n try {\n const module = await import(\"@aws-sdk/client-sesv2\");\n sesModule = module.default;\n sesModuleExists = true;\n } catch {\n sesModuleExists = false;\n }\n}\n\nsesLoadPromise = loadSesModule();\n\nfunction isSesConfig(config: MailConfigurations): config is SESConfigurations {\n return \"driver\" in config && config.driver === \"ses\";\n}\n\nasync function getSesMailer(config: SESConfigurations): Promise<Transporter> {\n if (sesModuleExists === null && sesLoadPromise) {\n await sesLoadPromise;\n }\n\n if (sesModuleExists === false) {\n throw new Error(`@aws-sdk/client-sesv2 is not installed.\\n\\n${SES_INSTALL_INSTRUCTIONS}`);\n }\n\n if (moduleExists === null && nodemailerLoadPromise) {\n await nodemailerLoadPromise;\n }\n\n if (moduleExists === false) {\n throw new Error(`nodemailer is not installed.\\n\\n${NODEMAILER_INSTALL_INSTRUCTIONS}`);\n }\n\n const hash = `ses_${config.region}_${config.accessKeyId}`;\n\n const existingTransporter = mailerPool.get(hash);\n if (existingTransporter) {\n return existingTransporter;\n }\n\n log.info(\"mail\", \"pool\", `Creating new SES mailer transport (pool size: ${mailerPool.size + 1})`);\n\n const ses = new sesModule!.SESv2Client({\n region: config.region,\n credentials: {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n },\n });\n\n const transporter = nodemailerModule.createTransport({\n SES: { sesClient: ses, SendEmailCommand: sesModule.SendEmailCommand },\n });\n\n mailerPool.set(hash, transporter);\n\n return transporter;\n}\n\n// ============================================================\n// Mailer Pool\n// ============================================================\n\n/**\n * Mailer pool for connection reuse\n * Maps config hash to transporter instance\n */\nconst mailerPool = new Map<string, Transporter>();\n\n/**\n * Create a hash from mail configuration for pooling\n */\nfunction createConfigHash(config: SMTPConfigurations): string {\n const key = JSON.stringify({\n // SMTP specific fields\n host: config.host,\n port: config.port,\n secure: config.secure,\n auth: config.auth,\n username: config.username,\n password: config.password,\n });\n\n // Simple hash function\n let hash = 0;\n for (let i = 0; i < key.length; i++) {\n const char = key.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n return `mailer_${hash}`;\n}\n\n/**\n * Get hash for any mailer config\n */\nfunction getMailerHash(config: MailConfigurations): string {\n if (isSesConfig(config)) {\n return `ses_${config.region}_${config.accessKeyId}`;\n }\n return createConfigHash(config);\n}\n\n/**\n * Get or create a mailer transporter from the pool\n * Nodemailer is eagerly loaded at import time\n */\nexport async function getMailer(config: MailConfigurations): Promise<Transporter> {\n if (moduleExists === null && nodemailerLoadPromise) {\n await nodemailerLoadPromise;\n }\n\n if (moduleExists === false) {\n throw new Error(`nodemailer is not installed.\\n\\n${NODEMAILER_INSTALL_INSTRUCTIONS}`);\n }\n\n if (isSesConfig(config)) {\n return getSesMailer(config);\n }\n\n const hash = getMailerHash(config);\n\n // Return existing transporter if available\n const existingTransporter = mailerPool.get(hash);\n\n if (existingTransporter) {\n return existingTransporter;\n }\n\n // Create new transporter\n log.info(\"mail\", \"pool\", `Creating new mailer transport (pool size: ${mailerPool.size + 1})`);\n\n const { auth, username, password, requireTLS, tls, ...transportConfig } = config;\n\n const transporter = nodemailerModule.createTransport({\n requireTLS: requireTLS ?? tls,\n auth: auth ?? {\n user: username,\n pass: password,\n },\n ...transportConfig,\n });\n\n // Store in pool\n mailerPool.set(hash, transporter);\n\n return transporter;\n}\n\n/**\n * Verify a mailer connection\n */\nexport async function verifyMailer(config: MailConfigurations): Promise<boolean> {\n const transporter = await getMailer(config);\n\n try {\n await transporter.verify();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Close a specific mailer connection\n */\nexport function closeMailer(config: MailConfigurations): void {\n const hash = getMailerHash(config);\n const transporter = mailerPool.get(hash);\n\n if (transporter) {\n transporter.close();\n mailerPool.delete(hash);\n log.info(\"mail\", \"pool\", `Closed mailer transport (pool size: ${mailerPool.size})`);\n }\n}\n\n/**\n * Close all mailer connections\n */\nexport function closeAllMailers(): void {\n for (const [hash, transporter] of mailerPool) {\n transporter.close();\n mailerPool.delete(hash);\n }\n\n log.info(\"mail\", \"pool\", \"Closed all mailer transports\");\n}\n\n/**\n * Get pool statistics\n */\nexport function getPoolStats(): { size: number; hashes: string[] } {\n return {\n size: mailerPool.size,\n hashes: Array.from(mailerPool.keys()),\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
 
3
- //#region ../core/src/mail/react-mail.d.ts
3
+ //#region ../../packages/core/src/mail/react-mail.d.ts
4
4
  /**
5
5
  * Render a React element to HTML for email
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"react-mail.d.mts","names":[],"sources":["../../../../../../../core/src/mail/react-mail.ts"],"mappings":";;;;;AAiCA;;;;;;;iBAAsB,eAAA,CACpB,OAAA,EAAS,KAAA,CAAM,YAAA,GAAe,KAAA,CAAM,aAAA,GACnC,OAAA"}
1
+ {"version":3,"file":"react-mail.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/react-mail.ts"],"mappings":";;;;;AAiCA;;;;;;;iBAAsB,eAAA,CACpB,OAAA,EAAS,KAAA,CAAM,YAAA,GAAe,KAAA,CAAM,aAAA,GACnC,OAAA"}
@@ -1,6 +1,6 @@
1
1
  import { renderReact } from "../react/index.mjs";
2
2
 
3
- //#region ../core/src/mail/react-mail.ts
3
+ //#region ../../packages/core/src/mail/react-mail.ts
4
4
  /**
5
5
  * Create a complete HTML page from rendered content
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"react-mail.mjs","names":[],"sources":["../../../../../../../core/src/mail/react-mail.ts"],"sourcesContent":["import type React from \"react\";\nimport { renderReact } from \"../react\";\n\n/**\n * Create a complete HTML page from rendered content\n */\nfunction createHtmlPage(html: string): string {\n const styles: string[] = [];\n const links: string[] = [];\n\n const body = html.replace(/<style.*?<\\/style>|<link.*?>/gims, (match: string) => {\n if (match.startsWith(\"<style\")) {\n styles.push(match);\n } else {\n links.push(match);\n }\n return \"\";\n });\n\n const head = `<head>${links.join(\"\")}${styles.join(\"\")}</head>`;\n\n return `<!doctype html><html>${head}<body>${body}</body></html>`;\n}\n\n/**\n * Render a React element to HTML for email\n *\n * - Uses @react-email/render when installed (full react-email pipeline)\n * - Falls back to react-dom/server renderToStaticMarkup otherwise\n *\n * **Note:** This function requires React packages to be installed.\n * Install them with: `warlock add react` or `npm install react react-dom`\n */\nexport async function renderReactMail(\n element: React.ReactElement | React.ComponentType,\n): Promise<string> {\n const React = await import(\"react\");\n const reactElement = typeof element === \"function\" ? React.createElement(element) : element;\n\n let render: typeof import(\"@react-email/render\").render;\n\n try {\n ({ render } = await import(\"@react-email/render\"));\n } catch (error) {\n const code = (error as { code?: string } | null)?.code;\n\n if (code !== \"ERR_MODULE_NOT_FOUND\" && code !== \"MODULE_NOT_FOUND\") {\n throw error;\n }\n\n // @react-email/render not installed — graceful fallback\n const content = renderReact(reactElement);\n return createHtmlPage(content);\n }\n\n // A throwing component must surface its real error, not fall back silently\n return await render(reactElement as React.ReactElement);\n}\n"],"mappings":";;;;;;AAMA,SAAS,eAAe,MAAsB;CAC5C,MAAM,SAAmB,CAAC;CAC1B,MAAM,QAAkB,CAAC;CAEzB,MAAM,OAAO,KAAK,QAAQ,qCAAqC,UAAkB;EAC/E,IAAI,MAAM,WAAW,QAAQ,GAC3B,OAAO,KAAK,KAAK;OAEjB,MAAM,KAAK,KAAK;EAElB,OAAO;CACT,CAAC;CAID,OAAO,wBAAwB,SAFT,MAAM,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,SAEnB,QAAQ,KAAK;AACnD;;;;;;;;;;AAWA,eAAsB,gBACpB,SACiB;CACjB,MAAM,QAAQ,MAAM,OAAO;CAC3B,MAAM,eAAe,OAAO,YAAY,aAAa,MAAM,cAAc,OAAO,IAAI;CAEpF,IAAI;CAEJ,IAAI;EACF,CAAC,CAAE,UAAW,MAAM,OAAO;CAC7B,SAAS,OAAO;EACd,MAAM,OAAQ,OAAoC;EAElD,IAAI,SAAS,0BAA0B,SAAS,oBAC9C,MAAM;EAKR,OAAO,eADS,YAAY,YACA,CAAC;CAC/B;CAGA,OAAO,MAAM,OAAO,YAAkC;AACxD"}
1
+ {"version":3,"file":"react-mail.mjs","names":[],"sources":["../../../../../../../../packages/core/src/mail/react-mail.ts"],"sourcesContent":["import type React from \"react\";\nimport { renderReact } from \"../react\";\n\n/**\n * Create a complete HTML page from rendered content\n */\nfunction createHtmlPage(html: string): string {\n const styles: string[] = [];\n const links: string[] = [];\n\n const body = html.replace(/<style.*?<\\/style>|<link.*?>/gims, (match: string) => {\n if (match.startsWith(\"<style\")) {\n styles.push(match);\n } else {\n links.push(match);\n }\n return \"\";\n });\n\n const head = `<head>${links.join(\"\")}${styles.join(\"\")}</head>`;\n\n return `<!doctype html><html>${head}<body>${body}</body></html>`;\n}\n\n/**\n * Render a React element to HTML for email\n *\n * - Uses @react-email/render when installed (full react-email pipeline)\n * - Falls back to react-dom/server renderToStaticMarkup otherwise\n *\n * **Note:** This function requires React packages to be installed.\n * Install them with: `warlock add react` or `npm install react react-dom`\n */\nexport async function renderReactMail(\n element: React.ReactElement | React.ComponentType,\n): Promise<string> {\n const React = await import(\"react\");\n const reactElement = typeof element === \"function\" ? React.createElement(element) : element;\n\n let render: typeof import(\"@react-email/render\").render;\n\n try {\n ({ render } = await import(\"@react-email/render\"));\n } catch (error) {\n const code = (error as { code?: string } | null)?.code;\n\n if (code !== \"ERR_MODULE_NOT_FOUND\" && code !== \"MODULE_NOT_FOUND\") {\n throw error;\n }\n\n // @react-email/render not installed — graceful fallback\n const content = renderReact(reactElement);\n return createHtmlPage(content);\n }\n\n // A throwing component must surface its real error, not fall back silently\n return await render(reactElement as React.ReactElement);\n}\n"],"mappings":";;;;;;AAMA,SAAS,eAAe,MAAsB;CAC5C,MAAM,SAAmB,CAAC;CAC1B,MAAM,QAAkB,CAAC;CAEzB,MAAM,OAAO,KAAK,QAAQ,qCAAqC,UAAkB;EAC/E,IAAI,MAAM,WAAW,QAAQ,GAC3B,OAAO,KAAK,KAAK;OAEjB,MAAM,KAAK,KAAK;EAElB,OAAO;CACT,CAAC;CAID,OAAO,wBAAwB,SAFT,MAAM,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,SAEnB,QAAQ,KAAK;AACnD;;;;;;;;;;AAWA,eAAsB,gBACpB,SACiB;CACjB,MAAM,QAAQ,MAAM,OAAO;CAC3B,MAAM,eAAe,OAAO,YAAY,aAAa,MAAM,cAAc,OAAO,IAAI;CAEpF,IAAI;CAEJ,IAAI;EACF,CAAC,CAAE,UAAW,MAAM,OAAO;CAC7B,SAAS,OAAO;EACd,MAAM,OAAQ,OAAoC;EAElD,IAAI,SAAS,0BAA0B,SAAS,oBAC9C,MAAM;EAKR,OAAO,eADS,YAAY,YACA,CAAC;CAC/B;CAGA,OAAO,MAAM,OAAO,YAAkC;AACxD"}
@@ -1,6 +1,6 @@
1
1
  import { MailOptions, MailResult } from "./types.mjs";
2
2
 
3
- //#region ../core/src/mail/send-mail.d.ts
3
+ //#region ../../packages/core/src/mail/send-mail.d.ts
4
4
  /**
5
5
  * Send an email
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"send-mail.d.mts","names":[],"sources":["../../../../../../../core/src/mail/send-mail.ts"],"mappings":";;;;;AAuRA;;;;;;;;;;;;;AAAwE;;;;;;;;;;;;;;;iBAAlD,QAAA,CAAS,OAAA,EAAS,WAAA,GAAc,OAAA,CAAQ,UAAA"}
1
+ {"version":3,"file":"send-mail.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/mail/send-mail.ts"],"mappings":";;;;;AAuRA;;;;;;;;;;;;;AAAwE;;;;;;;;;;;;;;;iBAAlD,QAAA,CAAS,OAAA,EAAS,WAAA,GAAc,OAAA,CAAQ,UAAA"}
@@ -4,10 +4,10 @@ import { getMailer } from "./mailer-pool.mjs";
4
4
  import { renderReactMail } from "./react-mail.mjs";
5
5
  import { captureMail } from "./test-mailbox.mjs";
6
6
  import { MailError } from "./types.mjs";
7
- import { log } from "@warlock.js/logger";
7
+ import { log, maskEmail, maskEmailsInText } from "@warlock.js/logger";
8
8
  import { readFile } from "node:fs/promises";
9
9
 
10
- //#region ../core/src/mail/send-mail.ts
10
+ //#region ../../packages/core/src/mail/send-mail.ts
11
11
  /**
12
12
  * Normalize recipients to array
13
13
  */
@@ -218,7 +218,7 @@ async function sendMail(options) {
218
218
  };
219
219
  }
220
220
  if (isTestMode()) {
221
- log.info(`mail.${driver}`, "test", `[TEST MODE] Captured mail to: ${normalized.to.join(", ")}`);
221
+ log.info(`mail.${driver}`, "test", `[TEST MODE] Captured mail to: ${normalized.to.map(maskEmail).join(", ")}`);
222
222
  const result = {
223
223
  success: true,
224
224
  messageId: `test-${mailId}@localhost`,
@@ -242,7 +242,7 @@ async function sendMail(options) {
242
242
  return result;
243
243
  }
244
244
  if (isDevelopmentMode()) {
245
- log.info(`mail.${driver}`, "dev", `[DEV MODE] Would send mail to: ${normalized.to.join(", ")}`);
245
+ log.info(`mail.${driver}`, "dev", `[DEV MODE] Would send mail to: ${normalized.to.map(maskEmail).join(", ")}`);
246
246
  log.info(`mail.${driver}`, "dev", `Subject: ${normalized.subject}`);
247
247
  if (normalized.html) log.info(`mail.${driver}`, "dev", `HTML length: ${normalized.html.length} chars`);
248
248
  const result = {
@@ -268,7 +268,7 @@ async function sendMail(options) {
268
268
  try {
269
269
  const mailer = await getMailer(resolveMailConfig(options));
270
270
  const nodemailerOptions = await buildNodemailerOptions(normalized);
271
- log.info(`mail.${driver}`, "send", `Sending mail to: ${normalized.to.join(", ")}`);
271
+ log.info(`mail.${driver}`, "send", `Sending mail to ${normalized.to.length} recipient(s): ${normalized.to.map(maskEmail).join(", ")}`);
272
272
  const output = await mailer.sendMail(nodemailerOptions);
273
273
  const accepted = output.accepted || (output.messageId ? normalized.to : []);
274
274
  const rejected = output.rejected || [];
@@ -281,7 +281,7 @@ async function sendMail(options) {
281
281
  response: output.response,
282
282
  envelope: output.envelope
283
283
  };
284
- if (rejected.length > 0) log.warn(`mail.${driver}`, "partial", `Mail partially rejected: ${rejected.join(", ")}`);
284
+ if (rejected.length > 0) log.warn(`mail.${driver}`, "partial", `Mail partially rejected: ${rejected.map((address) => maskEmail(String(address))).join(", ")}`);
285
285
  log.success(`mail.${driver}`, "sent", `Mail sent successfully (ID: ${result.messageId})`);
286
286
  await runMailEvent(options.onSuccess, options, result);
287
287
  await triggerEvents(mailId, "success", options, result);
@@ -292,7 +292,7 @@ async function sendMail(options) {
292
292
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
293
293
  const code = detectErrorCode(error);
294
294
  const mailError = new MailError(`Failed to send mail: ${errorMessage}`, code, error instanceof Error ? error : void 0);
295
- log.error(`mail.${driver}`, "error", mailError.message);
295
+ log.error(`mail.${driver}`, "error", maskEmailsInText(mailError.message));
296
296
  await runMailEvent(options.onError, options, mailError);
297
297
  await triggerEvents(mailId, "error", options, mailError);
298
298
  await runMailEvent(options.onSent, options, null, mailError);