blendsdk 5.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +125 -0
  2. package/dist/cmdline/cmdline.d.ts +144 -0
  3. package/dist/cmdline/cmdline.d.ts.map +1 -0
  4. package/dist/cmdline/cmdline.js +683 -0
  5. package/dist/cmdline/cmdline.js.map +1 -0
  6. package/dist/cmdline/errors.d.ts +105 -0
  7. package/dist/cmdline/errors.d.ts.map +1 -0
  8. package/dist/cmdline/errors.js +153 -0
  9. package/dist/cmdline/errors.js.map +1 -0
  10. package/dist/cmdline/index.d.ts +5 -0
  11. package/dist/cmdline/index.d.ts.map +1 -0
  12. package/dist/cmdline/index.js +5 -0
  13. package/dist/cmdline/index.js.map +1 -0
  14. package/dist/cmdline/types.d.ts +260 -0
  15. package/dist/cmdline/types.d.ts.map +1 -0
  16. package/dist/cmdline/types.js +9 -0
  17. package/dist/cmdline/types.js.map +1 -0
  18. package/dist/cmdline/validators.d.ts +28 -0
  19. package/dist/cmdline/validators.d.ts.map +1 -0
  20. package/dist/cmdline/validators.js +211 -0
  21. package/dist/cmdline/validators.js.map +1 -0
  22. package/dist/codegen/database/index.d.ts +3 -0
  23. package/dist/codegen/database/index.d.ts.map +1 -0
  24. package/dist/codegen/database/index.js +3 -0
  25. package/dist/codegen/database/index.js.map +1 -0
  26. package/dist/codegen/database/introspect/index.d.ts +3 -0
  27. package/dist/codegen/database/introspect/index.d.ts.map +1 -0
  28. package/dist/codegen/database/introspect/index.js +3 -0
  29. package/dist/codegen/database/introspect/index.js.map +1 -0
  30. package/dist/codegen/database/introspect/introspect-query.d.ts +2 -0
  31. package/dist/codegen/database/introspect/introspect-query.d.ts.map +1 -0
  32. package/dist/codegen/database/introspect/introspect-query.js +416 -0
  33. package/dist/codegen/database/introspect/introspect-query.js.map +1 -0
  34. package/dist/codegen/database/introspect/introspect-types.d.ts +45 -0
  35. package/dist/codegen/database/introspect/introspect-types.d.ts.map +1 -0
  36. package/dist/codegen/database/introspect/introspect-types.js +2 -0
  37. package/dist/codegen/database/introspect/introspect-types.js.map +1 -0
  38. package/dist/codegen/database/introspect/introspect.d.ts +21 -0
  39. package/dist/codegen/database/introspect/introspect.d.ts.map +1 -0
  40. package/dist/codegen/database/introspect/introspect.js +223 -0
  41. package/dist/codegen/database/introspect/introspect.js.map +1 -0
  42. package/dist/codegen/database/schema/check-constraint.d.ts +8 -0
  43. package/dist/codegen/database/schema/check-constraint.d.ts.map +1 -0
  44. package/dist/codegen/database/schema/check-constraint.js +12 -0
  45. package/dist/codegen/database/schema/check-constraint.js.map +1 -0
  46. package/dist/codegen/database/schema/column-schema.d.ts +7 -0
  47. package/dist/codegen/database/schema/column-schema.d.ts.map +1 -0
  48. package/dist/codegen/database/schema/column-schema.js +9 -0
  49. package/dist/codegen/database/schema/column-schema.js.map +1 -0
  50. package/dist/codegen/database/schema/constraint-base.d.ts +13 -0
  51. package/dist/codegen/database/schema/constraint-base.d.ts.map +1 -0
  52. package/dist/codegen/database/schema/constraint-base.js +32 -0
  53. package/dist/codegen/database/schema/constraint-base.js.map +1 -0
  54. package/dist/codegen/database/schema/database-schema.d.ts +19 -0
  55. package/dist/codegen/database/schema/database-schema.d.ts.map +1 -0
  56. package/dist/codegen/database/schema/database-schema.js +48 -0
  57. package/dist/codegen/database/schema/database-schema.js.map +1 -0
  58. package/dist/codegen/database/schema/dataobject-schema.d.ts +9 -0
  59. package/dist/codegen/database/schema/dataobject-schema.d.ts.map +1 -0
  60. package/dist/codegen/database/schema/dataobject-schema.js +18 -0
  61. package/dist/codegen/database/schema/dataobject-schema.js.map +1 -0
  62. package/dist/codegen/database/schema/fkey-constraints.d.ts +21 -0
  63. package/dist/codegen/database/schema/fkey-constraints.d.ts.map +1 -0
  64. package/dist/codegen/database/schema/fkey-constraints.js +58 -0
  65. package/dist/codegen/database/schema/fkey-constraints.js.map +1 -0
  66. package/dist/codegen/database/schema/index-constraint.d.ts +34 -0
  67. package/dist/codegen/database/schema/index-constraint.d.ts.map +1 -0
  68. package/dist/codegen/database/schema/index-constraint.js +79 -0
  69. package/dist/codegen/database/schema/index-constraint.js.map +1 -0
  70. package/dist/codegen/database/schema/index.d.ts +5 -0
  71. package/dist/codegen/database/schema/index.d.ts.map +1 -0
  72. package/dist/codegen/database/schema/index.js +5 -0
  73. package/dist/codegen/database/schema/index.js.map +1 -0
  74. package/dist/codegen/database/schema/primarykey-constraint.d.ts +4 -0
  75. package/dist/codegen/database/schema/primarykey-constraint.d.ts.map +1 -0
  76. package/dist/codegen/database/schema/primarykey-constraint.js +4 -0
  77. package/dist/codegen/database/schema/primarykey-constraint.js.map +1 -0
  78. package/dist/codegen/database/schema/relation-schema.d.ts +16 -0
  79. package/dist/codegen/database/schema/relation-schema.d.ts.map +1 -0
  80. package/dist/codegen/database/schema/relation-schema.js +32 -0
  81. package/dist/codegen/database/schema/relation-schema.js.map +1 -0
  82. package/dist/codegen/database/schema/table-column-schema.d.ts +59 -0
  83. package/dist/codegen/database/schema/table-column-schema.d.ts.map +1 -0
  84. package/dist/codegen/database/schema/table-column-schema.js +137 -0
  85. package/dist/codegen/database/schema/table-column-schema.js.map +1 -0
  86. package/dist/codegen/database/schema/table-schema.d.ts +48 -0
  87. package/dist/codegen/database/schema/table-schema.d.ts.map +1 -0
  88. package/dist/codegen/database/schema/table-schema.js +219 -0
  89. package/dist/codegen/database/schema/table-schema.js.map +1 -0
  90. package/dist/codegen/database/schema/types.d.ts +13 -0
  91. package/dist/codegen/database/schema/types.d.ts.map +1 -0
  92. package/dist/codegen/database/schema/types.js +175 -0
  93. package/dist/codegen/database/schema/types.js.map +1 -0
  94. package/dist/codegen/database/schema/unique-constraint.d.ts +4 -0
  95. package/dist/codegen/database/schema/unique-constraint.d.ts.map +1 -0
  96. package/dist/codegen/database/schema/unique-constraint.js +4 -0
  97. package/dist/codegen/database/schema/unique-constraint.js.map +1 -0
  98. package/dist/codegen/database/schema/view-schema.d.ts +14 -0
  99. package/dist/codegen/database/schema/view-schema.d.ts.map +1 -0
  100. package/dist/codegen/database/schema/view-schema.js +32 -0
  101. package/dist/codegen/database/schema/view-schema.js.map +1 -0
  102. package/dist/codegen/generator/ctype-generator.d.ts +5 -0
  103. package/dist/codegen/generator/ctype-generator.d.ts.map +1 -0
  104. package/dist/codegen/generator/ctype-generator.js +26 -0
  105. package/dist/codegen/generator/ctype-generator.js.map +1 -0
  106. package/dist/codegen/generator/generator.d.ts +17 -0
  107. package/dist/codegen/generator/generator.d.ts.map +1 -0
  108. package/dist/codegen/generator/generator.js +57 -0
  109. package/dist/codegen/generator/generator.js.map +1 -0
  110. package/dist/codegen/generator/index.d.ts +8 -0
  111. package/dist/codegen/generator/index.d.ts.map +1 -0
  112. package/dist/codegen/generator/index.js +8 -0
  113. package/dist/codegen/generator/index.js.map +1 -0
  114. package/dist/codegen/generator/openapi-generator.d.ts +239 -0
  115. package/dist/codegen/generator/openapi-generator.d.ts.map +1 -0
  116. package/dist/codegen/generator/openapi-generator.js +434 -0
  117. package/dist/codegen/generator/openapi-generator.js.map +1 -0
  118. package/dist/codegen/generator/openapi-types.d.ts +263 -0
  119. package/dist/codegen/generator/openapi-types.d.ts.map +1 -0
  120. package/dist/codegen/generator/openapi-types.js +11 -0
  121. package/dist/codegen/generator/openapi-types.js.map +1 -0
  122. package/dist/codegen/generator/postgres-schema-generator.d.ts +48 -0
  123. package/dist/codegen/generator/postgres-schema-generator.d.ts.map +1 -0
  124. package/dist/codegen/generator/postgres-schema-generator.js +339 -0
  125. package/dist/codegen/generator/postgres-schema-generator.js.map +1 -0
  126. package/dist/codegen/generator/type-generator.d.ts +113 -0
  127. package/dist/codegen/generator/type-generator.d.ts.map +1 -0
  128. package/dist/codegen/generator/type-generator.js +249 -0
  129. package/dist/codegen/generator/type-generator.js.map +1 -0
  130. package/dist/codegen/generator/zod-generator.d.ts +15 -0
  131. package/dist/codegen/generator/zod-generator.d.ts.map +1 -0
  132. package/dist/codegen/generator/zod-generator.js +86 -0
  133. package/dist/codegen/generator/zod-generator.js.map +1 -0
  134. package/dist/codegen/generator/zod-to-openapi.d.ts +69 -0
  135. package/dist/codegen/generator/zod-to-openapi.d.ts.map +1 -0
  136. package/dist/codegen/generator/zod-to-openapi.js +480 -0
  137. package/dist/codegen/generator/zod-to-openapi.js.map +1 -0
  138. package/dist/codegen/index.d.ts +4 -0
  139. package/dist/codegen/index.d.ts.map +1 -0
  140. package/dist/codegen/index.js +4 -0
  141. package/dist/codegen/index.js.map +1 -0
  142. package/dist/codegen/schema/any-schema.d.ts +6 -0
  143. package/dist/codegen/schema/any-schema.d.ts.map +1 -0
  144. package/dist/codegen/schema/any-schema.js +12 -0
  145. package/dist/codegen/schema/any-schema.js.map +1 -0
  146. package/dist/codegen/schema/boolean-schema.d.ts +6 -0
  147. package/dist/codegen/schema/boolean-schema.d.ts.map +1 -0
  148. package/dist/codegen/schema/boolean-schema.js +12 -0
  149. package/dist/codegen/schema/boolean-schema.js.map +1 -0
  150. package/dist/codegen/schema/date-schema.d.ts +6 -0
  151. package/dist/codegen/schema/date-schema.d.ts.map +1 -0
  152. package/dist/codegen/schema/date-schema.js +12 -0
  153. package/dist/codegen/schema/date-schema.js.map +1 -0
  154. package/dist/codegen/schema/index.d.ts +10 -0
  155. package/dist/codegen/schema/index.d.ts.map +1 -0
  156. package/dist/codegen/schema/index.js +10 -0
  157. package/dist/codegen/schema/index.js.map +1 -0
  158. package/dist/codegen/schema/object-schema.d.ts +10 -0
  159. package/dist/codegen/schema/object-schema.d.ts.map +1 -0
  160. package/dist/codegen/schema/object-schema.js +21 -0
  161. package/dist/codegen/schema/object-schema.js.map +1 -0
  162. package/dist/codegen/schema/primitive-schema.d.ts +20 -0
  163. package/dist/codegen/schema/primitive-schema.d.ts.map +1 -0
  164. package/dist/codegen/schema/primitive-schema.js +48 -0
  165. package/dist/codegen/schema/primitive-schema.js.map +1 -0
  166. package/dist/codegen/schema/ref-schema.d.ts +6 -0
  167. package/dist/codegen/schema/ref-schema.d.ts.map +1 -0
  168. package/dist/codegen/schema/ref-schema.js +11 -0
  169. package/dist/codegen/schema/ref-schema.js.map +1 -0
  170. package/dist/codegen/schema/schema-container.d.ts +14 -0
  171. package/dist/codegen/schema/schema-container.d.ts.map +1 -0
  172. package/dist/codegen/schema/schema-container.js +38 -0
  173. package/dist/codegen/schema/schema-container.js.map +1 -0
  174. package/dist/codegen/schema/schema-object.d.ts +42 -0
  175. package/dist/codegen/schema/schema-object.d.ts.map +1 -0
  176. package/dist/codegen/schema/schema-object.js +90 -0
  177. package/dist/codegen/schema/schema-object.js.map +1 -0
  178. package/dist/codegen/schema/schema-scope.d.ts +23 -0
  179. package/dist/codegen/schema/schema-scope.d.ts.map +1 -0
  180. package/dist/codegen/schema/schema-scope.js +67 -0
  181. package/dist/codegen/schema/schema-scope.js.map +1 -0
  182. package/dist/codegen/schema/utils.d.ts +17 -0
  183. package/dist/codegen/schema/utils.d.ts.map +1 -0
  184. package/dist/codegen/schema/utils.js +47 -0
  185. package/dist/codegen/schema/utils.js.map +1 -0
  186. package/dist/dbcore/crud-statement.d.ts +67 -0
  187. package/dist/dbcore/crud-statement.d.ts.map +1 -0
  188. package/dist/dbcore/crud-statement.js +75 -0
  189. package/dist/dbcore/crud-statement.js.map +1 -0
  190. package/dist/dbcore/database.d.ts +272 -0
  191. package/dist/dbcore/database.d.ts.map +1 -0
  192. package/dist/dbcore/database.js +53 -0
  193. package/dist/dbcore/database.js.map +1 -0
  194. package/dist/dbcore/dataservice-base.d.ts +18 -0
  195. package/dist/dbcore/dataservice-base.d.ts.map +1 -0
  196. package/dist/dbcore/dataservice-base.js +19 -0
  197. package/dist/dbcore/dataservice-base.js.map +1 -0
  198. package/dist/dbcore/delete-statement.d.ts +29 -0
  199. package/dist/dbcore/delete-statement.d.ts.map +1 -0
  200. package/dist/dbcore/delete-statement.js +30 -0
  201. package/dist/dbcore/delete-statement.js.map +1 -0
  202. package/dist/dbcore/filterable-statement.d.ts +126 -0
  203. package/dist/dbcore/filterable-statement.d.ts.map +1 -0
  204. package/dist/dbcore/filterable-statement.js +178 -0
  205. package/dist/dbcore/filterable-statement.js.map +1 -0
  206. package/dist/dbcore/from-statement.d.ts +120 -0
  207. package/dist/dbcore/from-statement.d.ts.map +1 -0
  208. package/dist/dbcore/from-statement.js +150 -0
  209. package/dist/dbcore/from-statement.js.map +1 -0
  210. package/dist/dbcore/index.d.ts +21 -0
  211. package/dist/dbcore/index.d.ts.map +1 -0
  212. package/dist/dbcore/index.js +21 -0
  213. package/dist/dbcore/index.js.map +1 -0
  214. package/dist/dbcore/insert-statement.d.ts +48 -0
  215. package/dist/dbcore/insert-statement.d.ts.map +1 -0
  216. package/dist/dbcore/insert-statement.js +52 -0
  217. package/dist/dbcore/insert-statement.js.map +1 -0
  218. package/dist/dbcore/query-dataservice.d.ts +144 -0
  219. package/dist/dbcore/query-dataservice.d.ts.map +1 -0
  220. package/dist/dbcore/query-dataservice.js +144 -0
  221. package/dist/dbcore/query-dataservice.js.map +1 -0
  222. package/dist/dbcore/statement.d.ts +133 -0
  223. package/dist/dbcore/statement.d.ts.map +1 -0
  224. package/dist/dbcore/statement.js +138 -0
  225. package/dist/dbcore/statement.js.map +1 -0
  226. package/dist/dbcore/update-statement.d.ts +48 -0
  227. package/dist/dbcore/update-statement.d.ts.map +1 -0
  228. package/dist/dbcore/update-statement.js +52 -0
  229. package/dist/dbcore/update-statement.js.map +1 -0
  230. package/dist/expression/builders/comparison-builder.d.ts +47 -0
  231. package/dist/expression/builders/comparison-builder.d.ts.map +1 -0
  232. package/dist/expression/builders/comparison-builder.js +197 -0
  233. package/dist/expression/builders/comparison-builder.js.map +1 -0
  234. package/dist/expression/builders/query-builder.d.ts +80 -0
  235. package/dist/expression/builders/query-builder.d.ts.map +1 -0
  236. package/dist/expression/builders/query-builder.js +229 -0
  237. package/dist/expression/builders/query-builder.js.map +1 -0
  238. package/dist/expression/compiler/postgresql-compiler.d.ts +56 -0
  239. package/dist/expression/compiler/postgresql-compiler.d.ts.map +1 -0
  240. package/dist/expression/compiler/postgresql-compiler.js +217 -0
  241. package/dist/expression/compiler/postgresql-compiler.js.map +1 -0
  242. package/dist/expression/core/ast-node.d.ts +47 -0
  243. package/dist/expression/core/ast-node.d.ts.map +1 -0
  244. package/dist/expression/core/ast-node.js +154 -0
  245. package/dist/expression/core/ast-node.js.map +1 -0
  246. package/dist/expression/core/parameter-manager.d.ts +84 -0
  247. package/dist/expression/core/parameter-manager.d.ts.map +1 -0
  248. package/dist/expression/core/parameter-manager.js +164 -0
  249. package/dist/expression/core/parameter-manager.js.map +1 -0
  250. package/dist/expression/core/query-builder-interfaces.d.ts +188 -0
  251. package/dist/expression/core/query-builder-interfaces.d.ts.map +1 -0
  252. package/dist/expression/core/query-builder-interfaces.js +6 -0
  253. package/dist/expression/core/query-builder-interfaces.js.map +1 -0
  254. package/dist/expression/core/types.d.ts +239 -0
  255. package/dist/expression/core/types.d.ts.map +1 -0
  256. package/dist/expression/core/types.js +121 -0
  257. package/dist/expression/core/types.js.map +1 -0
  258. package/dist/expression/index.d.ts +11 -0
  259. package/dist/expression/index.d.ts.map +1 -0
  260. package/dist/expression/index.js +11 -0
  261. package/dist/expression/index.js.map +1 -0
  262. package/dist/i18n/content-file-source.d.ts +109 -0
  263. package/dist/i18n/content-file-source.d.ts.map +1 -0
  264. package/dist/i18n/content-file-source.js +218 -0
  265. package/dist/i18n/content-file-source.js.map +1 -0
  266. package/dist/i18n/index.d.ts +19 -0
  267. package/dist/i18n/index.d.ts.map +1 -0
  268. package/dist/i18n/index.js +21 -0
  269. package/dist/i18n/index.js.map +1 -0
  270. package/dist/i18n/json-file-source.d.ts +96 -0
  271. package/dist/i18n/json-file-source.d.ts.map +1 -0
  272. package/dist/i18n/json-file-source.js +258 -0
  273. package/dist/i18n/json-file-source.js.map +1 -0
  274. package/dist/i18n/merge-catalogs.d.ts +20 -0
  275. package/dist/i18n/merge-catalogs.d.ts.map +1 -0
  276. package/dist/i18n/merge-catalogs.js +34 -0
  277. package/dist/i18n/merge-catalogs.js.map +1 -0
  278. package/dist/i18n/node.d.ts +20 -0
  279. package/dist/i18n/node.d.ts.map +1 -0
  280. package/dist/i18n/node.js +19 -0
  281. package/dist/i18n/node.js.map +1 -0
  282. package/dist/i18n/translation-source.d.ts +35 -0
  283. package/dist/i18n/translation-source.d.ts.map +1 -0
  284. package/dist/i18n/translation-source.js +2 -0
  285. package/dist/i18n/translation-source.js.map +1 -0
  286. package/dist/i18n/translator.d.ts +162 -0
  287. package/dist/i18n/translator.d.ts.map +1 -0
  288. package/dist/i18n/translator.js +259 -0
  289. package/dist/i18n/translator.js.map +1 -0
  290. package/dist/i18n/types.d.ts +80 -0
  291. package/dist/i18n/types.d.ts.map +1 -0
  292. package/dist/i18n/types.js +2 -0
  293. package/dist/i18n/types.js.map +1 -0
  294. package/dist/postgresql/database.d.ts +204 -0
  295. package/dist/postgresql/database.d.ts.map +1 -0
  296. package/dist/postgresql/database.js +321 -0
  297. package/dist/postgresql/database.js.map +1 -0
  298. package/dist/postgresql/delete-statement.d.ts +36 -0
  299. package/dist/postgresql/delete-statement.d.ts.map +1 -0
  300. package/dist/postgresql/delete-statement.js +54 -0
  301. package/dist/postgresql/delete-statement.js.map +1 -0
  302. package/dist/postgresql/index.d.ts +12 -0
  303. package/dist/postgresql/index.d.ts.map +1 -0
  304. package/dist/postgresql/index.js +12 -0
  305. package/dist/postgresql/index.js.map +1 -0
  306. package/dist/postgresql/insert-statement.d.ts +34 -0
  307. package/dist/postgresql/insert-statement.d.ts.map +1 -0
  308. package/dist/postgresql/insert-statement.js +48 -0
  309. package/dist/postgresql/insert-statement.js.map +1 -0
  310. package/dist/postgresql/update-statement.d.ts +38 -0
  311. package/dist/postgresql/update-statement.d.ts.map +1 -0
  312. package/dist/postgresql/update-statement.js +75 -0
  313. package/dist/postgresql/update-statement.js.map +1 -0
  314. package/dist/stdlib/formatString.d.ts +52 -0
  315. package/dist/stdlib/formatString.d.ts.map +1 -0
  316. package/dist/stdlib/formatString.js +118 -0
  317. package/dist/stdlib/formatString.js.map +1 -0
  318. package/dist/stdlib/index.d.ts +8 -0
  319. package/dist/stdlib/index.d.ts.map +1 -0
  320. package/dist/stdlib/index.js +8 -0
  321. package/dist/stdlib/index.js.map +1 -0
  322. package/dist/stdlib/isBoolean.d.ts +15 -0
  323. package/dist/stdlib/isBoolean.d.ts.map +1 -0
  324. package/dist/stdlib/isBoolean.js +17 -0
  325. package/dist/stdlib/isBoolean.js.map +1 -0
  326. package/dist/stdlib/isNullOrUndef.d.ts +24 -0
  327. package/dist/stdlib/isNullOrUndef.d.ts.map +1 -0
  328. package/dist/stdlib/isNullOrUndef.js +28 -0
  329. package/dist/stdlib/isNullOrUndef.js.map +1 -0
  330. package/dist/stdlib/isNumeric.d.ts +20 -0
  331. package/dist/stdlib/isNumeric.d.ts.map +1 -0
  332. package/dist/stdlib/isNumeric.js +39 -0
  333. package/dist/stdlib/isNumeric.js.map +1 -0
  334. package/dist/stdlib/isString.d.ts +15 -0
  335. package/dist/stdlib/isString.d.ts.map +1 -0
  336. package/dist/stdlib/isString.js +17 -0
  337. package/dist/stdlib/isString.js.map +1 -0
  338. package/dist/stdlib/isTemplateString.d.ts +18 -0
  339. package/dist/stdlib/isTemplateString.d.ts.map +1 -0
  340. package/dist/stdlib/isTemplateString.js +38 -0
  341. package/dist/stdlib/isTemplateString.js.map +1 -0
  342. package/dist/stdlib/wrapInArray.d.ts +14 -0
  343. package/dist/stdlib/wrapInArray.d.ts.map +1 -0
  344. package/dist/stdlib/wrapInArray.js +17 -0
  345. package/dist/stdlib/wrapInArray.js.map +1 -0
  346. package/dist/webafx/application/application-settings.d.ts +129 -0
  347. package/dist/webafx/application/application-settings.d.ts.map +1 -0
  348. package/dist/webafx/application/application-settings.js +162 -0
  349. package/dist/webafx/application/application-settings.js.map +1 -0
  350. package/dist/webafx/application/base-controller.d.ts +128 -0
  351. package/dist/webafx/application/base-controller.d.ts.map +1 -0
  352. package/dist/webafx/application/base-controller.js +122 -0
  353. package/dist/webafx/application/base-controller.js.map +1 -0
  354. package/dist/webafx/application/console-logger.d.ts +81 -0
  355. package/dist/webafx/application/console-logger.d.ts.map +1 -0
  356. package/dist/webafx/application/console-logger.js +111 -0
  357. package/dist/webafx/application/console-logger.js.map +1 -0
  358. package/dist/webafx/application/controller-registry.d.ts +34 -0
  359. package/dist/webafx/application/controller-registry.d.ts.map +1 -0
  360. package/dist/webafx/application/controller-registry.js +32 -0
  361. package/dist/webafx/application/controller-registry.js.map +1 -0
  362. package/dist/webafx/application/error-handler-middleware.d.ts +22 -0
  363. package/dist/webafx/application/error-handler-middleware.d.ts.map +1 -0
  364. package/dist/webafx/application/error-handler-middleware.js +70 -0
  365. package/dist/webafx/application/error-handler-middleware.js.map +1 -0
  366. package/dist/webafx/application/index.d.ts +13 -0
  367. package/dist/webafx/application/index.d.ts.map +1 -0
  368. package/dist/webafx/application/index.js +13 -0
  369. package/dist/webafx/application/index.js.map +1 -0
  370. package/dist/webafx/application/logger.d.ts +2 -0
  371. package/dist/webafx/application/logger.d.ts.map +1 -0
  372. package/dist/webafx/application/logger.js +2 -0
  373. package/dist/webafx/application/logger.js.map +1 -0
  374. package/dist/webafx/application/plugin.d.ts +73 -0
  375. package/dist/webafx/application/plugin.d.ts.map +1 -0
  376. package/dist/webafx/application/plugin.js +90 -0
  377. package/dist/webafx/application/plugin.js.map +1 -0
  378. package/dist/webafx/application/rate-limiter.d.ts +35 -0
  379. package/dist/webafx/application/rate-limiter.d.ts.map +1 -0
  380. package/dist/webafx/application/rate-limiter.js +74 -0
  381. package/dist/webafx/application/rate-limiter.js.map +1 -0
  382. package/dist/webafx/application/request-context.d.ts +62 -0
  383. package/dist/webafx/application/request-context.d.ts.map +1 -0
  384. package/dist/webafx/application/request-context.js +54 -0
  385. package/dist/webafx/application/request-context.js.map +1 -0
  386. package/dist/webafx/application/request-id-middleware.d.ts +30 -0
  387. package/dist/webafx/application/request-id-middleware.d.ts.map +1 -0
  388. package/dist/webafx/application/request-id-middleware.js +57 -0
  389. package/dist/webafx/application/request-id-middleware.js.map +1 -0
  390. package/dist/webafx/application/route-builder.d.ts +231 -0
  391. package/dist/webafx/application/route-builder.d.ts.map +1 -0
  392. package/dist/webafx/application/route-builder.js +182 -0
  393. package/dist/webafx/application/route-builder.js.map +1 -0
  394. package/dist/webafx/application/service-container.d.ts +144 -0
  395. package/dist/webafx/application/service-container.d.ts.map +1 -0
  396. package/dist/webafx/application/service-container.js +192 -0
  397. package/dist/webafx/application/service-container.js.map +1 -0
  398. package/dist/webafx/application/services.d.ts +27 -0
  399. package/dist/webafx/application/services.d.ts.map +1 -0
  400. package/dist/webafx/application/services.js +33 -0
  401. package/dist/webafx/application/services.js.map +1 -0
  402. package/dist/webafx/application/structured-logger.d.ts +99 -0
  403. package/dist/webafx/application/structured-logger.d.ts.map +1 -0
  404. package/dist/webafx/application/structured-logger.js +132 -0
  405. package/dist/webafx/application/structured-logger.js.map +1 -0
  406. package/dist/webafx/application/type.d.ts +29 -0
  407. package/dist/webafx/application/type.d.ts.map +1 -0
  408. package/dist/webafx/application/type.js +2 -0
  409. package/dist/webafx/application/type.js.map +1 -0
  410. package/dist/webafx/application/web-application.d.ts +257 -0
  411. package/dist/webafx/application/web-application.d.ts.map +1 -0
  412. package/dist/webafx/application/web-application.js +611 -0
  413. package/dist/webafx/application/web-application.js.map +1 -0
  414. package/dist/webafx/errors/api-error.d.ts +21 -0
  415. package/dist/webafx/errors/api-error.d.ts.map +1 -0
  416. package/dist/webafx/errors/api-error.js +38 -0
  417. package/dist/webafx/errors/api-error.js.map +1 -0
  418. package/dist/webafx/errors/http-errors.d.ts +56 -0
  419. package/dist/webafx/errors/http-errors.d.ts.map +1 -0
  420. package/dist/webafx/errors/http-errors.js +74 -0
  421. package/dist/webafx/errors/http-errors.js.map +1 -0
  422. package/dist/webafx/errors/index.d.ts +4 -0
  423. package/dist/webafx/errors/index.d.ts.map +1 -0
  424. package/dist/webafx/errors/index.js +4 -0
  425. package/dist/webafx/errors/index.js.map +1 -0
  426. package/dist/webafx/errors/types.d.ts +42 -0
  427. package/dist/webafx/errors/types.d.ts.map +1 -0
  428. package/dist/webafx/errors/types.js +2 -0
  429. package/dist/webafx/errors/types.js.map +1 -0
  430. package/dist/webafx/index.d.ts +3 -0
  431. package/dist/webafx/index.d.ts.map +1 -0
  432. package/dist/webafx/index.js +3 -0
  433. package/dist/webafx/index.js.map +1 -0
  434. package/dist/webafx-auth/abstract-auth-provider.d.ts +178 -0
  435. package/dist/webafx-auth/abstract-auth-provider.d.ts.map +1 -0
  436. package/dist/webafx-auth/abstract-auth-provider.js +240 -0
  437. package/dist/webafx-auth/abstract-auth-provider.js.map +1 -0
  438. package/dist/webafx-auth/index.d.ts +27 -0
  439. package/dist/webafx-auth/index.d.ts.map +1 -0
  440. package/dist/webafx-auth/index.js +32 -0
  441. package/dist/webafx-auth/index.js.map +1 -0
  442. package/dist/webafx-auth/jwt-auth-provider.d.ts +100 -0
  443. package/dist/webafx-auth/jwt-auth-provider.d.ts.map +1 -0
  444. package/dist/webafx-auth/jwt-auth-provider.js +154 -0
  445. package/dist/webafx-auth/jwt-auth-provider.js.map +1 -0
  446. package/dist/webafx-auth/memory-auth-provider.d.ts +100 -0
  447. package/dist/webafx-auth/memory-auth-provider.d.ts.map +1 -0
  448. package/dist/webafx-auth/memory-auth-provider.js +122 -0
  449. package/dist/webafx-auth/memory-auth-provider.js.map +1 -0
  450. package/dist/webafx-auth/types.d.ts +333 -0
  451. package/dist/webafx-auth/types.d.ts.map +1 -0
  452. package/dist/webafx-auth/types.js +24 -0
  453. package/dist/webafx-auth/types.js.map +1 -0
  454. package/dist/webafx-cache/abstract-cache-provider.d.ts +185 -0
  455. package/dist/webafx-cache/abstract-cache-provider.d.ts.map +1 -0
  456. package/dist/webafx-cache/abstract-cache-provider.js +133 -0
  457. package/dist/webafx-cache/abstract-cache-provider.js.map +1 -0
  458. package/dist/webafx-cache/abstract-pubsub-provider.d.ts +170 -0
  459. package/dist/webafx-cache/abstract-pubsub-provider.d.ts.map +1 -0
  460. package/dist/webafx-cache/abstract-pubsub-provider.js +132 -0
  461. package/dist/webafx-cache/abstract-pubsub-provider.js.map +1 -0
  462. package/dist/webafx-cache/cache-plugin.d.ts +114 -0
  463. package/dist/webafx-cache/cache-plugin.d.ts.map +1 -0
  464. package/dist/webafx-cache/cache-plugin.js +176 -0
  465. package/dist/webafx-cache/cache-plugin.js.map +1 -0
  466. package/dist/webafx-cache/index.d.ts +33 -0
  467. package/dist/webafx-cache/index.d.ts.map +1 -0
  468. package/dist/webafx-cache/index.js +44 -0
  469. package/dist/webafx-cache/index.js.map +1 -0
  470. package/dist/webafx-cache/memory-cache-provider.d.ts +99 -0
  471. package/dist/webafx-cache/memory-cache-provider.d.ts.map +1 -0
  472. package/dist/webafx-cache/memory-cache-provider.js +251 -0
  473. package/dist/webafx-cache/memory-cache-provider.js.map +1 -0
  474. package/dist/webafx-cache/memory-pubsub-provider.d.ts +124 -0
  475. package/dist/webafx-cache/memory-pubsub-provider.d.ts.map +1 -0
  476. package/dist/webafx-cache/memory-pubsub-provider.js +195 -0
  477. package/dist/webafx-cache/memory-pubsub-provider.js.map +1 -0
  478. package/dist/webafx-cache/pubsub-plugin.d.ts +128 -0
  479. package/dist/webafx-cache/pubsub-plugin.d.ts.map +1 -0
  480. package/dist/webafx-cache/pubsub-plugin.js +182 -0
  481. package/dist/webafx-cache/pubsub-plugin.js.map +1 -0
  482. package/dist/webafx-cache/redis-cache-provider.d.ts +81 -0
  483. package/dist/webafx-cache/redis-cache-provider.d.ts.map +1 -0
  484. package/dist/webafx-cache/redis-cache-provider.js +209 -0
  485. package/dist/webafx-cache/redis-cache-provider.js.map +1 -0
  486. package/dist/webafx-cache/redis-pubsub-provider.d.ts +164 -0
  487. package/dist/webafx-cache/redis-pubsub-provider.d.ts.map +1 -0
  488. package/dist/webafx-cache/redis-pubsub-provider.js +329 -0
  489. package/dist/webafx-cache/redis-pubsub-provider.js.map +1 -0
  490. package/dist/webafx-cache/types.d.ts +206 -0
  491. package/dist/webafx-cache/types.d.ts.map +1 -0
  492. package/dist/webafx-cache/types.js +27 -0
  493. package/dist/webafx-cache/types.js.map +1 -0
  494. package/dist/webafx-i18n/i18n-plugin.d.ts +29 -0
  495. package/dist/webafx-i18n/i18n-plugin.d.ts.map +1 -0
  496. package/dist/webafx-i18n/i18n-plugin.js +145 -0
  497. package/dist/webafx-i18n/i18n-plugin.js.map +1 -0
  498. package/dist/webafx-i18n/index.d.ts +12 -0
  499. package/dist/webafx-i18n/index.d.ts.map +1 -0
  500. package/dist/webafx-i18n/index.js +12 -0
  501. package/dist/webafx-i18n/index.js.map +1 -0
  502. package/dist/webafx-i18n/locale-resolver.d.ts +33 -0
  503. package/dist/webafx-i18n/locale-resolver.d.ts.map +1 -0
  504. package/dist/webafx-i18n/locale-resolver.js +67 -0
  505. package/dist/webafx-i18n/locale-resolver.js.map +1 -0
  506. package/dist/webafx-i18n/postgresql-source.d.ts +101 -0
  507. package/dist/webafx-i18n/postgresql-source.d.ts.map +1 -0
  508. package/dist/webafx-i18n/postgresql-source.js +101 -0
  509. package/dist/webafx-i18n/postgresql-source.js.map +1 -0
  510. package/dist/webafx-i18n/types.d.ts +70 -0
  511. package/dist/webafx-i18n/types.d.ts.map +1 -0
  512. package/dist/webafx-i18n/types.js +2 -0
  513. package/dist/webafx-i18n/types.js.map +1 -0
  514. package/dist/webafx-mailer/abstract-mail-provider.d.ts +55 -0
  515. package/dist/webafx-mailer/abstract-mail-provider.d.ts.map +1 -0
  516. package/dist/webafx-mailer/abstract-mail-provider.js +37 -0
  517. package/dist/webafx-mailer/abstract-mail-provider.js.map +1 -0
  518. package/dist/webafx-mailer/index.d.ts +24 -0
  519. package/dist/webafx-mailer/index.d.ts.map +1 -0
  520. package/dist/webafx-mailer/index.js +34 -0
  521. package/dist/webafx-mailer/index.js.map +1 -0
  522. package/dist/webafx-mailer/mail-plugin.d.ts +98 -0
  523. package/dist/webafx-mailer/mail-plugin.d.ts.map +1 -0
  524. package/dist/webafx-mailer/mail-plugin.js +155 -0
  525. package/dist/webafx-mailer/mail-plugin.js.map +1 -0
  526. package/dist/webafx-mailer/memory-mail-provider.d.ts +85 -0
  527. package/dist/webafx-mailer/memory-mail-provider.d.ts.map +1 -0
  528. package/dist/webafx-mailer/memory-mail-provider.js +111 -0
  529. package/dist/webafx-mailer/memory-mail-provider.js.map +1 -0
  530. package/dist/webafx-mailer/smtp-mail-provider.d.ts +65 -0
  531. package/dist/webafx-mailer/smtp-mail-provider.d.ts.map +1 -0
  532. package/dist/webafx-mailer/smtp-mail-provider.js +113 -0
  533. package/dist/webafx-mailer/smtp-mail-provider.js.map +1 -0
  534. package/dist/webafx-mailer/types.d.ts +136 -0
  535. package/dist/webafx-mailer/types.d.ts.map +1 -0
  536. package/dist/webafx-mailer/types.js +13 -0
  537. package/dist/webafx-mailer/types.js.map +1 -0
  538. package/package.json +159 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Map log level names to numeric values for comparison.
3
+ * Lower numbers = higher priority (ERROR is highest).
4
+ */
5
+ const LOG_LEVEL_MAP = {
6
+ ERROR: 1,
7
+ WARN: 2,
8
+ INFO: 3,
9
+ DEBUG: 4,
10
+ };
11
+ /**
12
+ * Console-based logger implementation.
13
+ * Provides structured logging with configurable log levels and prefixes.
14
+ *
15
+ * @remarks
16
+ * Log levels:
17
+ * - ERROR (1): Errors only
18
+ * - WARN (2): Errors and warnings
19
+ * - INFO (3): Errors, warnings, and info
20
+ * - DEBUG (4): All messages including debug
21
+ *
22
+ * DEBUG mode can also be enabled via DEBUG=true environment variable.
23
+ */
24
+ export class ConsoleLogger {
25
+ prefix;
26
+ level;
27
+ /**
28
+ * Creates a new ConsoleLogger instance.
29
+ *
30
+ * @param prefix - Optional prefix for log messages (e.g., 'APP', 'Plugin:Auth')
31
+ * @param logLevel - Optional log level (defaults to process.env.LOG_LEVEL or 'ERROR')
32
+ */
33
+ constructor(prefix, logLevel) {
34
+ this.prefix = prefix;
35
+ // Use provided log level, fall back to process.env.LOG_LEVEL, then default to ERROR
36
+ const levelFromEnv = (process.env.LOG_LEVEL || 'ERROR').toUpperCase();
37
+ this.level = LOG_LEVEL_MAP[logLevel || levelFromEnv] ?? 1;
38
+ }
39
+ /**
40
+ * Logs an error message.
41
+ *
42
+ * @param message - Error message
43
+ * @param data - Optional additional data to log
44
+ */
45
+ async error(message, data) {
46
+ if (this.shouldLog(1)) {
47
+ console.error(this.message('ERROR', message, data));
48
+ }
49
+ }
50
+ /**
51
+ * Logs a warning message.
52
+ *
53
+ * @param message - Warning message
54
+ * @param data - Optional additional data to log
55
+ */
56
+ async warn(message, data) {
57
+ if (this.shouldLog(2)) {
58
+ console.log(this.message('WARN', message, data));
59
+ }
60
+ }
61
+ /**
62
+ * Logs an informational message.
63
+ *
64
+ * @param message - Info message
65
+ * @param data - Optional additional data to log
66
+ */
67
+ async info(message, data) {
68
+ if (this.shouldLog(3)) {
69
+ console.log(this.message('INFO', message, data));
70
+ }
71
+ }
72
+ /**
73
+ * Logs a debug message.
74
+ * Only logged if LOG_LEVEL >= 4 or DEBUG=true.
75
+ *
76
+ * @param message - Debug message
77
+ * @param data - Optional additional data to log
78
+ */
79
+ async debug(message, data) {
80
+ if (this.shouldLog(4) || process.env.DEBUG === 'true') {
81
+ console.log(this.message('DEBUG', message, data));
82
+ }
83
+ }
84
+ /**
85
+ * Determines if a message at the given level should be logged.
86
+ *
87
+ * The configured level acts as a threshold: all messages at or below
88
+ * the configured level are logged. For example, if LOG_LEVEL=WARN (2),
89
+ * then ERROR (1) and WARN (2) are logged, but INFO (3) and DEBUG (4) are not.
90
+ *
91
+ * @param level - Log level of the message (1=ERROR, 2=WARN, 3=INFO, 4=DEBUG)
92
+ * @returns True if message should be logged
93
+ * @internal
94
+ */
95
+ shouldLog(level) {
96
+ return level <= this.level;
97
+ }
98
+ /**
99
+ * Formats a log message with type, prefix, and optional data.
100
+ *
101
+ * @param type - Log type (ERROR, WARN, INFO, DEBUG)
102
+ * @param message - Log message
103
+ * @param data - Optional additional data
104
+ * @returns Formatted log message
105
+ * @internal
106
+ */
107
+ message(type, message, data) {
108
+ return `[${type}${this.prefix ? `:${this.prefix.toUpperCase()}` : ''}]: ${message}${data ? ` - ${JSON.stringify(data)}` : ''}`;
109
+ }
110
+ }
111
+ //# sourceMappingURL=console-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/application/console-logger.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,aAAa;IACd,MAAM,CAAqB;IAC3B,KAAK,CAAS;IAExB;;;;;OAKG;IACH,YAAY,MAAe,EAAE,QAAmB;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,oFAAoF;QACpF,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,WAAW,EAAc,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAA0B;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAA0B;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACO,SAAS,CAAC,KAAa;QAC/B,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACO,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,IAA0B;QACzE,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjI,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ import { ApplicationSettings } from './application-settings.js';
2
+ import { ServiceContainer } from './service-container.js';
3
+ /**
4
+ * Controller definition for registering controllers with WebApplication.
5
+ */
6
+ export interface ControllerDefinition {
7
+ /** Base URL path for all controller routes */
8
+ basePath: string;
9
+ /** Controller class constructor */
10
+ ControllerClass: new (settings: ApplicationSettings, services: ServiceContainer) => any;
11
+ }
12
+ /**
13
+ * Registry for managing application controllers.
14
+ *
15
+ * @internal
16
+ */
17
+ export declare class ControllerRegistry {
18
+ protected controllers: ControllerDefinition[];
19
+ constructor();
20
+ /**
21
+ * Gets all registered controllers.
22
+ *
23
+ * @returns Array of controller definitions
24
+ */
25
+ getAll(): ControllerDefinition[];
26
+ /**
27
+ * Registers a controller with a base path.
28
+ *
29
+ * @param basePath - Base URL path for all controller routes
30
+ * @param ControllerClass - Controller class constructor
31
+ */
32
+ register(basePath: string, ControllerClass: new (settings: ApplicationSettings, services: ServiceContainer) => any): void;
33
+ }
34
+ //# sourceMappingURL=controller-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-registry.d.ts","sourceRoot":"","sources":["../../src/application/controller-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,eAAe,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,KAAK,GAAG,CAAC;CACzF;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,SAAS,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC;;IAK9C;;;;OAIG;IACH,MAAM;IAIN;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,KAAK,GAAG;CAMnH"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Registry for managing application controllers.
3
+ *
4
+ * @internal
5
+ */
6
+ export class ControllerRegistry {
7
+ controllers;
8
+ constructor() {
9
+ this.controllers = [];
10
+ }
11
+ /**
12
+ * Gets all registered controllers.
13
+ *
14
+ * @returns Array of controller definitions
15
+ */
16
+ getAll() {
17
+ return this.controllers;
18
+ }
19
+ /**
20
+ * Registers a controller with a base path.
21
+ *
22
+ * @param basePath - Base URL path for all controller routes
23
+ * @param ControllerClass - Controller class constructor
24
+ */
25
+ register(basePath, ControllerClass) {
26
+ this.controllers.push({
27
+ basePath,
28
+ ControllerClass,
29
+ });
30
+ }
31
+ }
32
+ //# sourceMappingURL=controller-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-registry.js","sourceRoot":"","sources":["../../src/application/controller-registry.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACnB,WAAW,CAAyB;IAC9C;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,QAAgB,EAAE,eAAuF;QAChH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,QAAQ;YACR,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { ErrorRequestHandler, Request } from 'express';
2
+ /**
3
+ * Error handler middleware options
4
+ */
5
+ export type onErrorLog = (req: Request, error: Error, data: Record<any, string>) => Promise<void>;
6
+ /**
7
+ * Error handler middleware
8
+ * Formats errors and sends appropriate responses using StandardErrorResponse format
9
+ *
10
+ * @param logger - Logger function for error logging
11
+ * @param includeStack - Whether to include stack traces in responses
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * app.use(errorHandlerMiddleware(
16
+ * async (req, err, data) => logger.error(data.error, data),
17
+ * process.env.NODE_ENV === 'development'
18
+ * ));
19
+ * ```
20
+ */
21
+ export declare function errorHandlerMiddleware(logger: onErrorLog, includeStack: boolean): ErrorRequestHandler;
22
+ //# sourceMappingURL=error-handler-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler-middleware.d.ts","sourceRoot":"","sources":["../../src/application/error-handler-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAgB,OAAO,EAAY,MAAM,SAAS,CAAC;AAI/E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,OAAO,GACpB,mBAAmB,CAwDrB"}
@@ -0,0 +1,70 @@
1
+ import { ApiError } from '../errors/api-error.js';
2
+ /**
3
+ * Error handler middleware
4
+ * Formats errors and sends appropriate responses using StandardErrorResponse format
5
+ *
6
+ * @param logger - Logger function for error logging
7
+ * @param includeStack - Whether to include stack traces in responses
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * app.use(errorHandlerMiddleware(
12
+ * async (req, err, data) => logger.error(data.error, data),
13
+ * process.env.NODE_ENV === 'development'
14
+ * ));
15
+ * ```
16
+ */
17
+ export function errorHandlerMiddleware(logger, includeStack) {
18
+ return (async (err, req, res, next) => {
19
+ // Handle ApiError
20
+ if (err instanceof ApiError) {
21
+ const response = {
22
+ success: false,
23
+ error: {
24
+ code: err.code,
25
+ message: err.message,
26
+ statusCode: err.statusCode,
27
+ timestamp: new Date().toISOString(),
28
+ requestId: req.id,
29
+ path: req.path,
30
+ ...(err.details && { details: err.details }),
31
+ ...(includeStack && { stack: err.stack }),
32
+ },
33
+ };
34
+ // Wrap logger in try-catch to prevent logger failures from
35
+ // crashing error handling — the client must always get a response
36
+ try {
37
+ await logger(req, err, response.error);
38
+ }
39
+ catch {
40
+ // Logger failed — silently continue to send the error response
41
+ }
42
+ return res.status(err.statusCode).json(response);
43
+ }
44
+ // Handle unknown errors
45
+ const statusCode = 500;
46
+ const message = includeStack ? err.message : 'Internal Server Error';
47
+ const response = {
48
+ success: false,
49
+ error: {
50
+ code: 'INTERNAL_SERVER_ERROR',
51
+ message,
52
+ statusCode,
53
+ timestamp: new Date().toISOString(),
54
+ requestId: req.id,
55
+ path: req.path,
56
+ ...(includeStack && { stack: err.stack }),
57
+ },
58
+ };
59
+ // Wrap logger in try-catch to prevent logger failures from
60
+ // crashing error handling — the client must always get a response
61
+ try {
62
+ await logger(req, err, response.error);
63
+ }
64
+ catch {
65
+ // Logger failed — silently continue to send the error response
66
+ }
67
+ res.status(statusCode).json(response);
68
+ });
69
+ }
70
+ //# sourceMappingURL=error-handler-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler-middleware.js","sourceRoot":"","sources":["../../src/application/error-handler-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAQlD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAkB,EAClB,YAAqB;IAErB,OAAO,CAAC,KAAK,EAAE,GAAU,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC5E,kBAAkB;QAClB,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAA0B;gBACtC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,GAAG,CAAC,EAAE;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC5C,GAAG,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;iBAC1C;aACF,CAAC;YAEF,2DAA2D;YAC3D,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAY,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;YAED,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAErE,MAAM,QAAQ,GAA0B;YACtC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,uBAAuB;gBAC7B,OAAO;gBACP,UAAU;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,GAAG,CAAC,EAAE;gBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aAC1C;SACF,CAAC;QAEF,2DAA2D;QAC3D,kEAAkE;QAClE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAY,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAwB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from './application-settings.js';
2
+ export * from './base-controller.js';
3
+ export * from './console-logger.js';
4
+ export * from './plugin.js';
5
+ export * from './rate-limiter.js';
6
+ export * from './request-context.js';
7
+ export * from './route-builder.js';
8
+ export * from './service-container.js';
9
+ export * from './services.js';
10
+ export * from './structured-logger.js';
11
+ export * from './type.js';
12
+ export * from './web-application.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from './application-settings.js';
2
+ export * from './base-controller.js';
3
+ export * from './console-logger.js';
4
+ export * from './plugin.js';
5
+ export * from './rate-limiter.js';
6
+ export * from './request-context.js';
7
+ export * from './route-builder.js';
8
+ export * from './service-container.js';
9
+ export * from './services.js';
10
+ export * from './structured-logger.js';
11
+ export * from './type.js';
12
+ export * from './web-application.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/application/logger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/application/logger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { Express } from 'express';
2
+ import { ConsoleLogger } from './console-logger.js';
3
+ import { Logger } from './type.js';
4
+ import { WebApplication } from './web-application.js';
5
+ /**
6
+ * Plugin interface for extending WebApplication functionality.
7
+ * Plugins can provide health checks and cleanup on shutdown.
8
+ */
9
+ export interface Plugin {
10
+ /** Optional health check function */
11
+ health?: () => Promise<boolean>;
12
+ /** Optional cleanup function called on application shutdown */
13
+ shutdown?: () => Promise<void>;
14
+ }
15
+ /**
16
+ * Plugin definition for registering plugins with WebApplication.
17
+ */
18
+ export interface PluginDefinition {
19
+ /** Unique plugin name */
20
+ name: string;
21
+ /** Factory function that creates and initializes the plugin */
22
+ factory: (params: {
23
+ app: WebApplication;
24
+ express: Express;
25
+ logger: Logger;
26
+ }) => Promise<Plugin | void>;
27
+ /** Plugin priority. Lower numbers install first. Default: 100 */
28
+ priority?: number;
29
+ }
30
+ /**
31
+ * Registry for managing application plugins.
32
+ * Handles plugin installation, health checks, and shutdown.
33
+ *
34
+ * @internal
35
+ */
36
+ export declare class PluginRegistry {
37
+ protected registry: Record<string, PluginDefinition>;
38
+ protected _shutdown: {
39
+ shutdown: () => Promise<void>;
40
+ name: string;
41
+ }[];
42
+ protected _health: {
43
+ health: () => Promise<boolean>;
44
+ name: string;
45
+ }[];
46
+ protected logger: ConsoleLogger;
47
+ constructor();
48
+ /**
49
+ * Installs all registered plugins.
50
+ * Plugins are installed in priority order (lower priority values first).
51
+ *
52
+ * @param app - WebApplication instance
53
+ * @param express - Express application instance
54
+ */
55
+ install(app: WebApplication, express: Express): Promise<void>;
56
+ /**
57
+ * Checks health status of all plugins.
58
+ *
59
+ * @returns True if all plugins are healthy, false otherwise
60
+ */
61
+ health(): Promise<boolean>;
62
+ /**
63
+ * Shuts down all plugins in order.
64
+ */
65
+ shutdown(): Promise<void>;
66
+ /**
67
+ * Registers a plugin definition.
68
+ *
69
+ * @param def - Plugin definition to register
70
+ */
71
+ register(def: PluginDefinition): void;
72
+ }
73
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/application/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,CAAC,MAAM,EAAE;QAChB,GAAG,EAAE,cAAc,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACrD,SAAS,CAAC,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,SAAS,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAEtE,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;;IAQhC;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO;IA4BnD;;;;OAIG;IACG,MAAM;IAkBZ;;OAEG;IACG,QAAQ;IAOd;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,gBAAgB;CAG/B"}
@@ -0,0 +1,90 @@
1
+ import { ConsoleLogger } from './console-logger.js';
2
+ /**
3
+ * Registry for managing application plugins.
4
+ * Handles plugin installation, health checks, and shutdown.
5
+ *
6
+ * @internal
7
+ */
8
+ export class PluginRegistry {
9
+ registry;
10
+ _shutdown;
11
+ _health;
12
+ logger;
13
+ constructor() {
14
+ this.registry = {};
15
+ this._shutdown = [];
16
+ this._health = [];
17
+ this.logger = new ConsoleLogger('Plugins');
18
+ }
19
+ /**
20
+ * Installs all registered plugins.
21
+ * Plugins are installed in priority order (lower priority values first).
22
+ *
23
+ * @param app - WebApplication instance
24
+ * @param express - Express application instance
25
+ */
26
+ async install(app, express) {
27
+ // Sort plugins by priority (lower numbers first)
28
+ const items = Object.values(this.registry).sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));
29
+ for (const item of items) {
30
+ const plugin = (await item.factory({
31
+ app,
32
+ express,
33
+ logger: new ConsoleLogger(`Plugin:${item.name}`),
34
+ }));
35
+ if (plugin?.shutdown) {
36
+ this._shutdown.push({
37
+ name: item.name,
38
+ shutdown: plugin.shutdown,
39
+ });
40
+ }
41
+ if (plugin?.health) {
42
+ this._health.push({
43
+ name: item.name,
44
+ health: plugin.health,
45
+ });
46
+ }
47
+ await this.logger.info(`Plugin ${item.name} installed.`);
48
+ }
49
+ }
50
+ /**
51
+ * Checks health status of all plugins.
52
+ *
53
+ * @returns True if all plugins are healthy, false otherwise
54
+ */
55
+ async health() {
56
+ // If no health checks registered, consider system healthy
57
+ if (this._health.length === 0) {
58
+ return true;
59
+ }
60
+ let count = 0;
61
+ for (const item of this._health) {
62
+ const healthy = await item.health();
63
+ if (!healthy) {
64
+ await this.logger.debug(`${item.name} plugin is not healthy`);
65
+ }
66
+ else {
67
+ count += 1;
68
+ }
69
+ }
70
+ return count === this._health.length;
71
+ }
72
+ /**
73
+ * Shuts down all plugins in order.
74
+ */
75
+ async shutdown() {
76
+ for (const item of this._shutdown) {
77
+ await this.logger.info(`Shutting down ${item.name} plugin.`);
78
+ await item.shutdown();
79
+ }
80
+ }
81
+ /**
82
+ * Registers a plugin definition.
83
+ *
84
+ * @param def - Plugin definition to register
85
+ */
86
+ register(def) {
87
+ this.registry[def.name] = def;
88
+ }
89
+ }
90
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/application/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+BpD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACf,QAAQ,CAAmC;IAC3C,SAAS,CAAoD;IAC7D,OAAO,CAAqD;IAE5D,MAAM,CAAgB;IAChC;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,GAAmB,EAAE,OAAgB;QACjD,iDAAiD;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CACpD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;gBACjC,GAAG;gBACH,OAAO;gBACP,MAAM,EAAE,IAAI,aAAa,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;aACjD,CAAC,CAAW,CAAC;YACd,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,0DAA0D;QAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,GAAqB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ /**
3
+ * Configuration options for rate limiting middleware.
4
+ */
5
+ export interface RateLimitOptions {
6
+ /** Maximum requests per window. Default: 100 */
7
+ maxRequests?: number;
8
+ /** Window duration in milliseconds. Default: 60000 (1 minute) */
9
+ windowMs?: number;
10
+ /** Key extractor function. Default: uses IP address */
11
+ keyExtractor?: (req: Request) => string;
12
+ /** Optional message for rate limit errors */
13
+ message?: string;
14
+ }
15
+ /**
16
+ * Creates a rate limiting middleware.
17
+ * Uses in-memory storage — suitable for single-instance deployments.
18
+ * For multi-instance deployments, use a Redis-backed implementation via plugins.
19
+ *
20
+ * @param options - Rate limiting configuration options
21
+ * @returns Express middleware function
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // Global rate limiting
26
+ * app.express.use(rateLimitMiddleware({ maxRequests: 100, windowMs: 60000 }));
27
+ *
28
+ * // Per-route rate limiting
29
+ * this.route().get('/api/search')
30
+ * .middleware(rateLimitMiddleware({ maxRequests: 10, windowMs: 60000 }))
31
+ * .handle(this.search);
32
+ * ```
33
+ */
34
+ export declare function rateLimitMiddleware(options?: RateLimitOptions): (req: Request, res: Response, next: NextFunction) => void;
35
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/application/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,IAyBpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UAyBxD"}
@@ -0,0 +1,74 @@
1
+ import { RateLimitError } from '../errors/http-errors.js';
2
+ /**
3
+ * Creates a rate limiting middleware.
4
+ * Uses in-memory storage — suitable for single-instance deployments.
5
+ * For multi-instance deployments, use a Redis-backed implementation via plugins.
6
+ *
7
+ * @param options - Rate limiting configuration options
8
+ * @returns Express middleware function
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Global rate limiting
13
+ * app.express.use(rateLimitMiddleware({ maxRequests: 100, windowMs: 60000 }));
14
+ *
15
+ * // Per-route rate limiting
16
+ * this.route().get('/api/search')
17
+ * .middleware(rateLimitMiddleware({ maxRequests: 10, windowMs: 60000 }))
18
+ * .handle(this.search);
19
+ * ```
20
+ */
21
+ export function rateLimitMiddleware(options) {
22
+ const { maxRequests = 100, windowMs = 60_000, keyExtractor = (req) => req.ip || 'unknown', message = 'Rate limit exceeded', } = options || {};
23
+ // In-memory storage: key -> { count, resetTime }
24
+ const hits = new Map();
25
+ // Periodic cleanup to prevent memory leaks
26
+ // Runs every windowMs to remove expired entries
27
+ const cleanup = setInterval(() => {
28
+ const now = Date.now();
29
+ for (const [key, value] of hits) {
30
+ if (value.resetTime <= now) {
31
+ hits.delete(key);
32
+ }
33
+ }
34
+ }, windowMs);
35
+ // Prevent cleanup interval from keeping process alive
36
+ if (cleanup.unref)
37
+ cleanup.unref();
38
+ return (req, res, next) => {
39
+ const key = keyExtractor(req);
40
+ const now = Date.now();
41
+ const record = hits.get(key);
42
+ // First request or window expired — create new record
43
+ if (!record || record.resetTime <= now) {
44
+ hits.set(key, { count: 1, resetTime: now + windowMs });
45
+ setRateLimitHeaders(res, maxRequests, maxRequests - 1, now + windowMs);
46
+ return next();
47
+ }
48
+ // Increment counter for existing window
49
+ record.count += 1;
50
+ // Rate limit exceeded
51
+ if (record.count > maxRequests) {
52
+ setRateLimitHeaders(res, maxRequests, 0, record.resetTime);
53
+ throw new RateLimitError(message);
54
+ }
55
+ // Within limit
56
+ setRateLimitHeaders(res, maxRequests, maxRequests - record.count, record.resetTime);
57
+ next();
58
+ };
59
+ }
60
+ /**
61
+ * Sets standard rate limit headers on the response.
62
+ *
63
+ * @param res - Express response object
64
+ * @param limit - Maximum requests allowed
65
+ * @param remaining - Remaining requests in current window
66
+ * @param reset - Unix timestamp (seconds) when the window resets
67
+ * @internal
68
+ */
69
+ function setRateLimitHeaders(res, limit, remaining, reset) {
70
+ res.setHeader('X-RateLimit-Limit', limit);
71
+ res.setHeader('X-RateLimit-Remaining', Math.max(0, remaining));
72
+ res.setHeader('X-RateLimit-Reset', Math.ceil(reset / 1000));
73
+ }
74
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/application/rate-limiter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAgB1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,MAAM,EACJ,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,MAAM,EACjB,YAAY,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,SAAS,EACpD,OAAO,GAAG,qBAAqB,GAChC,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,iDAAiD;IACjD,MAAM,IAAI,GAAsD,IAAI,GAAG,EAAE,CAAC;IAE1E,2CAA2C;IAC3C,gDAAgD;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEb,sDAAsD;IACtD,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,sDAAsD;QACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;YACvD,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;YACvE,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAElB,sBAAsB;QACtB,IAAI,MAAM,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;YAC/B,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,eAAe;QACf,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,GAAa,EAAE,KAAa,EAAE,SAAiB,EAAE,KAAa;IACzF,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC"}