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,206 @@
1
+ /**
2
+ * Type definitions and constants for the @blendsdk/webafx-cache package.
3
+ *
4
+ * Defines configuration interfaces for all cache and pub/sub providers
5
+ * (Redis, In-Memory) and their environment-based factories. Constants
6
+ * provide sensible defaults for service naming, TTL, key formatting,
7
+ * and channel prefix handling.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ /**
12
+ * Shared Redis connection configuration.
13
+ *
14
+ * Extracted as a common base so both cache and pub/sub Redis providers
15
+ * can share the same connection field definitions without duplication.
16
+ *
17
+ * When `url` is provided, it takes precedence over host/port/password/db.
18
+ */
19
+ export interface RedisConnectionConfig {
20
+ /** Redis host. Default: 'localhost' */
21
+ host?: string;
22
+ /** Redis port. Default: 6379 */
23
+ port?: number;
24
+ /** Redis password (optional) */
25
+ password?: string;
26
+ /** Redis database index (0-15). Default: 0 */
27
+ db?: number;
28
+ /** Redis connection URL (overrides host/port/password/db if provided) */
29
+ url?: string;
30
+ /** Connection timeout in milliseconds. Default: 5000 */
31
+ connectTimeout?: number;
32
+ /** Maximum number of reconnection attempts. Default: 3 */
33
+ maxRetriesPerRequest?: number;
34
+ }
35
+ /**
36
+ * Base configuration shared by all cache providers.
37
+ * Every provider requires at minimum a rootKey for namespace isolation.
38
+ */
39
+ export interface CacheProviderConfig {
40
+ /** Root key prefix for all cache keys (e.g., 'MyApp') */
41
+ rootKey: string;
42
+ /**
43
+ * Service name for WebAFX service container registration.
44
+ * Defaults to 'cache'. Use different names for multi-cache scenarios.
45
+ */
46
+ serviceName?: string;
47
+ /** Default TTL in seconds. 0 means no expiry. Default: 0 */
48
+ defaultTTL?: number;
49
+ }
50
+ /**
51
+ * Redis-specific cache configuration.
52
+ *
53
+ * Extends base cache config with shared Redis connection options.
54
+ * This is a non-breaking refactor — the interface exposes the exact
55
+ * same fields as before, but Redis connection fields now come from
56
+ * the shared `RedisConnectionConfig` base.
57
+ *
58
+ * When `url` is provided, it takes precedence over host/port/password/db.
59
+ */
60
+ export interface RedisCacheConfig extends CacheProviderConfig, RedisConnectionConfig {
61
+ }
62
+ /**
63
+ * In-memory specific configuration.
64
+ * Extends base config with memory management options.
65
+ */
66
+ export interface MemoryCacheConfig extends CacheProviderConfig {
67
+ /** Cleanup interval for expired entries in milliseconds. Default: 60000 (1 min) */
68
+ cleanupIntervalMs?: number;
69
+ }
70
+ /**
71
+ * Configuration for the createCache() environment-based factory.
72
+ * Determines which backend to create based on the 'type' field.
73
+ *
74
+ * Redis-specific fields are only used when type === 'redis'.
75
+ * Memory-specific fields are only used when type === 'memory'.
76
+ */
77
+ export interface CacheFactoryConfig {
78
+ /** Cache backend type */
79
+ type: "redis" | "memory";
80
+ /** Root key prefix for all cache keys */
81
+ rootKey: string;
82
+ /** Service name for WebAFX service container. Default: 'cache' */
83
+ serviceName?: string;
84
+ /** Default TTL in seconds. Default: 0 */
85
+ defaultTTL?: number;
86
+ /** Redis host */
87
+ host?: string;
88
+ /** Redis port */
89
+ port?: number;
90
+ /** Redis password */
91
+ password?: string;
92
+ /** Redis database index */
93
+ db?: number;
94
+ /** Redis connection URL */
95
+ url?: string;
96
+ /** Cleanup interval in ms */
97
+ cleanupIntervalMs?: number;
98
+ }
99
+ /**
100
+ * Base configuration shared by all pub/sub providers.
101
+ *
102
+ * The `channelPrefix` provides namespace isolation — all channels are
103
+ * automatically prefixed so multiple applications can share the same
104
+ * Redis instance without channel name collisions.
105
+ */
106
+ export interface PubSubProviderConfig {
107
+ /**
108
+ * Channel prefix for namespace isolation.
109
+ * Applied to all channels automatically.
110
+ *
111
+ * @example
112
+ * // prefix='MyApp' → channel 'order:new' becomes 'MyApp:order:new'
113
+ */
114
+ channelPrefix?: string;
115
+ /**
116
+ * Service name for WebAFX service container registration.
117
+ * Default: 'pubsub'. Use different names for multi-pubsub scenarios.
118
+ */
119
+ serviceName?: string;
120
+ }
121
+ /**
122
+ * Redis-specific pub/sub configuration.
123
+ *
124
+ * Extends base pub/sub config with shared Redis connection options.
125
+ * The provider creates **two** ioredis connections internally:
126
+ * one for publishing and one for subscribing (Redis requires
127
+ * a dedicated connection once it enters subscriber mode).
128
+ */
129
+ export interface RedisPubSubConfig extends PubSubProviderConfig, RedisConnectionConfig {
130
+ }
131
+ /**
132
+ * In-memory specific pub/sub configuration.
133
+ * No additional fields beyond the base config.
134
+ */
135
+ export interface MemoryPubSubConfig extends PubSubProviderConfig {
136
+ }
137
+ /**
138
+ * Configuration for the createPubSub() environment-based factory.
139
+ * Determines which backend to create based on the 'type' field.
140
+ *
141
+ * Redis-specific fields are only used when type === 'redis'.
142
+ */
143
+ export interface PubSubFactoryConfig extends PubSubProviderConfig {
144
+ /** Pub/sub backend type */
145
+ type: "redis" | "memory";
146
+ /** Redis host */
147
+ host?: string;
148
+ /** Redis port */
149
+ port?: number;
150
+ /** Redis password */
151
+ password?: string;
152
+ /** Redis database index */
153
+ db?: number;
154
+ /** Redis connection URL */
155
+ url?: string;
156
+ }
157
+ /**
158
+ * Message envelope delivered to subscription handlers.
159
+ *
160
+ * Contains the deserialized payload and metadata about the channel
161
+ * and (for pattern subscriptions) the pattern that matched.
162
+ * The `channel` field always contains the user-facing name
163
+ * (prefix stripped), not the internal prefixed name.
164
+ */
165
+ export interface PubSubMessage<T = unknown> {
166
+ /** The channel the message was published to (prefix stripped) */
167
+ channel: string;
168
+ /** The deserialized message payload */
169
+ data: T;
170
+ /** For pattern subscriptions: the pattern that matched (prefix stripped) */
171
+ pattern?: string;
172
+ }
173
+ /**
174
+ * Handler function for pub/sub messages.
175
+ *
176
+ * Can be synchronous or asynchronous. Errors thrown by handlers are
177
+ * caught and logged — they do not break other subscribers or crash
178
+ * the subscriber connection.
179
+ */
180
+ export type MessageHandler<T = unknown> = (message: PubSubMessage<T>) => void | Promise<void>;
181
+ /**
182
+ * Subscription definition for declarative registration via plugin config.
183
+ *
184
+ * Exactly one of `channel` or `pattern` must be provided.
185
+ * - `channel` subscribes to an exact channel (SUBSCRIBE)
186
+ * - `pattern` subscribes to a glob pattern (PSUBSCRIBE)
187
+ */
188
+ export interface SubscriptionDefinition<T = unknown> {
189
+ /** Exact channel name (mutually exclusive with `pattern`) */
190
+ channel?: string;
191
+ /** Channel pattern with glob wildcards (mutually exclusive with `channel`) */
192
+ pattern?: string;
193
+ /** Handler function invoked when a matching message arrives */
194
+ handler: MessageHandler<T>;
195
+ }
196
+ /** Default service name for cache when not specified */
197
+ export declare const DEFAULT_SERVICE_NAME = "cache";
198
+ /** Default TTL (0 = no expiry) */
199
+ export declare const DEFAULT_TTL = 0;
200
+ /** Key separator between rootKey and user-provided key */
201
+ export declare const KEY_SEPARATOR = ":";
202
+ /** Default service name for pub/sub when not specified */
203
+ export declare const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
204
+ /** Channel prefix separator (same as key separator for consistency) */
205
+ export declare const CHANNEL_SEPARATOR = ":";
206
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Type definitions and constants for the @blendsdk/webafx-cache package.
3
+ *
4
+ * Defines configuration interfaces for all cache and pub/sub providers
5
+ * (Redis, In-Memory) and their environment-based factories. Constants
6
+ * provide sensible defaults for service naming, TTL, key formatting,
7
+ * and channel prefix handling.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Cache Constants
13
+ // ---------------------------------------------------------------------------
14
+ /** Default service name for cache when not specified */
15
+ export const DEFAULT_SERVICE_NAME = "cache";
16
+ /** Default TTL (0 = no expiry) */
17
+ export const DEFAULT_TTL = 0;
18
+ /** Key separator between rootKey and user-provided key */
19
+ export const KEY_SEPARATOR = ":";
20
+ // ---------------------------------------------------------------------------
21
+ // Pub/Sub Constants
22
+ // ---------------------------------------------------------------------------
23
+ /** Default service name for pub/sub when not specified */
24
+ export const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
25
+ /** Channel prefix separator (same as key separator for consistency) */
26
+ export const CHANNEL_SEPARATOR = ":";
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqPH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,kCAAkC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { PluginDefinition } from "../webafx/index.js";
2
+ import type { I18nPluginConfig } from "./types.js";
3
+ /**
4
+ * Create a WebAFX PluginDefinition for i18n.
5
+ *
6
+ * This is the main entry point. It:
7
+ * 1. Loads translations from all configured sources at startup
8
+ * 2. Creates a Translator with the merged catalog
9
+ * 3. Registers the Translator as a singleton service
10
+ * 4. Registers a per-request "locale" service that resolves the request locale
11
+ * 5. Optionally subscribes to a pub/sub reload channel
12
+ *
13
+ * @param config - Plugin configuration
14
+ * @returns WebAFX PluginDefinition
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { createI18nPlugin, jsonFileSource } from "./index.js";
19
+ *
20
+ * app.use(createI18nPlugin({
21
+ * defaultLocale: "en",
22
+ * sources: [
23
+ * jsonFileSource({ paths: ["./translations/*.json"] }),
24
+ * ],
25
+ * }));
26
+ * ```
27
+ */
28
+ export declare function createI18nPlugin(config: I18nPluginConfig): PluginDefinition;
29
+ //# sourceMappingURL=i18n-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-plugin.d.ts","sourceRoot":"","sources":["../src/i18n-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,kBAAkB,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAYnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAwF3E"}
@@ -0,0 +1,145 @@
1
+ import { Translator, mergeCatalogs } from "../i18n/index.js";
2
+ import { resolveLocale } from "./locale-resolver.js";
3
+ /** Default plugin priority */
4
+ const DEFAULT_PRIORITY = 40;
5
+ /** Default service names */
6
+ const DEFAULT_SERVICE_NAME = "i18n";
7
+ const DEFAULT_LOCALE_SERVICE_NAME = "locale";
8
+ const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
9
+ const DEFAULT_COOKIE_NAME = "locale";
10
+ /**
11
+ * Create a WebAFX PluginDefinition for i18n.
12
+ *
13
+ * This is the main entry point. It:
14
+ * 1. Loads translations from all configured sources at startup
15
+ * 2. Creates a Translator with the merged catalog
16
+ * 3. Registers the Translator as a singleton service
17
+ * 4. Registers a per-request "locale" service that resolves the request locale
18
+ * 5. Optionally subscribes to a pub/sub reload channel
19
+ *
20
+ * @param config - Plugin configuration
21
+ * @returns WebAFX PluginDefinition
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { createI18nPlugin, jsonFileSource } from "./index.js";
26
+ *
27
+ * app.use(createI18nPlugin({
28
+ * defaultLocale: "en",
29
+ * sources: [
30
+ * jsonFileSource({ paths: ["./translations/*.json"] }),
31
+ * ],
32
+ * }));
33
+ * ```
34
+ */
35
+ export function createI18nPlugin(config) {
36
+ const serviceName = config.serviceName ?? DEFAULT_SERVICE_NAME;
37
+ const localeServiceName = config.localeServiceName ?? DEFAULT_LOCALE_SERVICE_NAME;
38
+ const defaultLocale = config.defaultLocale ?? "en";
39
+ const cookieName = config.localeCookieName ?? DEFAULT_COOKIE_NAME;
40
+ return {
41
+ name: serviceName,
42
+ priority: config.priority ?? DEFAULT_PRIORITY,
43
+ factory: async ({ app, logger }) => {
44
+ // --- Step 1: Load translations from all sources ---
45
+ const catalog = await loadAllSources(config.sources, logger);
46
+ // --- Step 2: Create Translator ---
47
+ const translator = new Translator({
48
+ defaultLocale,
49
+ catalog,
50
+ onMissingTranslation: config.onMissingTranslation,
51
+ });
52
+ await logger.info(`I18n plugin: loaded ${Object.keys(catalog).length} translation keys ` +
53
+ `from ${config.sources.length} source(s)`);
54
+ // --- Step 3: Register Translator as singleton service ---
55
+ app.registerService({
56
+ name: serviceName,
57
+ type: "singleton",
58
+ factory: () => translator,
59
+ });
60
+ // --- Step 4: Register per-request locale service ---
61
+ app.registerService({
62
+ name: localeServiceName,
63
+ type: "per-request",
64
+ factory: (_container, _settings, req, res) => {
65
+ const locale = resolveLocale(req, defaultLocale, cookieName);
66
+ // Persist locale in cookie (if configured)
67
+ if (cookieName) {
68
+ res.cookie(cookieName, locale, {
69
+ httpOnly: false,
70
+ sameSite: "lax",
71
+ maxAge: 365 * 24 * 60 * 60 * 1000, // 1 year
72
+ });
73
+ }
74
+ return locale;
75
+ },
76
+ });
77
+ // --- Step 5: Optional pub/sub reload ---
78
+ if (config.reloadChannel) {
79
+ const pubsubName = config.pubsubServiceName ?? DEFAULT_PUBSUB_SERVICE_NAME;
80
+ try {
81
+ // Access service container via cast — services is protected on WebApplication
82
+ // but plugins are trusted framework code that need service resolution
83
+ const pubsub = await app.services.get(pubsubName);
84
+ if (pubsub && typeof pubsub.subscribe === "function") {
85
+ await pubsub.subscribe(config.reloadChannel, async () => {
86
+ await logger.info(`I18n reload triggered via pub/sub`);
87
+ await reloadSources(config.sources, translator, logger);
88
+ });
89
+ await logger.info(`I18n plugin: subscribed to reload channel "${config.reloadChannel}"`);
90
+ }
91
+ }
92
+ catch {
93
+ await logger.info(`I18n plugin: pub/sub service "${pubsubName}" not available — ` +
94
+ `reload channel "${config.reloadChannel}" will not be active`);
95
+ }
96
+ }
97
+ await logger.info(`I18n plugin "${serviceName}" initialized`);
98
+ // --- Return Plugin hooks ---
99
+ return {
100
+ health: async () => true,
101
+ };
102
+ },
103
+ };
104
+ }
105
+ /**
106
+ * Load all translation sources and merge their catalogs.
107
+ *
108
+ * Sources are loaded in order. Later sources override earlier ones
109
+ * for the same key+locale pair.
110
+ *
111
+ * @param sources - Array of translation sources
112
+ * @param logger - Logger for progress messages
113
+ * @returns Merged translation catalog
114
+ */
115
+ async function loadAllSources(sources, logger) {
116
+ const catalogs = [];
117
+ for (const source of sources) {
118
+ await logger.info(`I18n: loading from ${source.name}...`);
119
+ const catalog = await source.load();
120
+ await logger.info(`I18n: ${source.name} loaded ${Object.keys(catalog).length} keys`);
121
+ catalogs.push(catalog);
122
+ }
123
+ return mergeCatalogs(catalogs);
124
+ }
125
+ /**
126
+ * Reload all sources and atomically swap the translator's catalog.
127
+ *
128
+ * On failure, logs the error but keeps the old catalog (graceful degradation).
129
+ *
130
+ * @param sources - Array of translation sources
131
+ * @param translator - The Translator instance to update
132
+ * @param logger - Logger for progress messages
133
+ */
134
+ async function reloadSources(sources, translator, logger) {
135
+ try {
136
+ const catalog = await loadAllSources(sources, logger);
137
+ translator.setCatalog(catalog);
138
+ await logger.info(`I18n: reload complete — ${Object.keys(catalog).length} keys loaded`);
139
+ }
140
+ catch (error) {
141
+ // Log the error but don't crash — keep the old catalog
142
+ await logger.error(`I18n: reload failed, keeping previous catalog: ${error instanceof Error ? error.message : String(error)}`);
143
+ }
144
+ }
145
+ //# sourceMappingURL=i18n-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-plugin.js","sourceRoot":"","sources":["../src/i18n-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { createI18nPlugin } from "./i18n-plugin.js";
2
+ export type { I18nPluginConfig } from "./types.js";
3
+ export { PostgreSQLSource, postgresqlSource } from "./postgresql-source.js";
4
+ export type { PostgreSQLSourceConfig } from "./postgresql-source.js";
5
+ export { resolveLocale, parseAcceptLanguage } from "./locale-resolver.js";
6
+ export { Translator, mergeCatalogs } from "../i18n/index.js";
7
+ export type { TranslationCatalog, TranslationEntry, TranslationValue, TranslationSource, TranslatorConfig, } from "../i18n/index.js";
8
+ export { JsonFileSource, jsonFileSource } from "../i18n/node.js";
9
+ export type { JsonFileSourceConfig } from "../i18n/node.js";
10
+ export { ContentFileSource, contentFileSource } from "../i18n/node.js";
11
+ export type { ContentFileSourceConfig } from "../i18n/node.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EACR,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // Plugin
2
+ export { createI18nPlugin } from "./i18n-plugin.js";
3
+ // Sources
4
+ export { PostgreSQLSource, postgresqlSource } from "./postgresql-source.js";
5
+ // Locale resolver (exported for testing and custom use)
6
+ export { resolveLocale, parseAcceptLanguage } from "./locale-resolver.js";
7
+ // Re-export browser-safe i18n core for convenience
8
+ export { Translator, mergeCatalogs } from "../i18n/index.js";
9
+ // Re-export Node.js-only file sources from the /node subpath
10
+ export { JsonFileSource, jsonFileSource } from "../i18n/node.js";
11
+ export { ContentFileSource, contentFileSource } from "../i18n/node.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKpD,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS3D,6DAA6D;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { Request } from "express";
2
+ /**
3
+ * Resolve the locale for an incoming HTTP request.
4
+ *
5
+ * Resolution priority (first match wins):
6
+ * 1. Query parameter: `?locale=nl`
7
+ * 2. Accept-Language header: `Accept-Language: nl, en;q=0.8`
8
+ * 3. Cookie: `locale=nl` (cookie name configurable)
9
+ * 4. Default locale from config
10
+ *
11
+ * @param req - Express Request object
12
+ * @param defaultLocale - Fallback locale
13
+ * @param cookieName - Cookie name to check (false to skip)
14
+ * @returns The resolved locale string
15
+ *
16
+ * @example
17
+ * resolveLocale(req, "en", "locale") // → "nl" (if ?locale=nl)
18
+ */
19
+ export declare function resolveLocale(req: Request, defaultLocale: string, cookieName: string | false): string;
20
+ /**
21
+ * Parse the Accept-Language header and return the highest-priority locale.
22
+ *
23
+ * Handles formats like:
24
+ * - "nl" → "nl"
25
+ * - "nl, en;q=0.8" → "nl"
26
+ * - "en-US,en;q=0.9,nl;q=0.8" → "en_US" (normalized)
27
+ * - "*" → null (wildcard, use default)
28
+ *
29
+ * @param header - The Accept-Language header value
30
+ * @returns The best locale, or null if none can be determined
31
+ */
32
+ export declare function parseAcceptLanguage(header: string): string | null;
33
+ //# sourceMappingURL=locale-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-resolver.d.ts","sourceRoot":"","sources":["../src/locale-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CACzB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GAAG,KAAK,GAC3B,MAAM,CAuBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBjE"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Resolve the locale for an incoming HTTP request.
3
+ *
4
+ * Resolution priority (first match wins):
5
+ * 1. Query parameter: `?locale=nl`
6
+ * 2. Accept-Language header: `Accept-Language: nl, en;q=0.8`
7
+ * 3. Cookie: `locale=nl` (cookie name configurable)
8
+ * 4. Default locale from config
9
+ *
10
+ * @param req - Express Request object
11
+ * @param defaultLocale - Fallback locale
12
+ * @param cookieName - Cookie name to check (false to skip)
13
+ * @returns The resolved locale string
14
+ *
15
+ * @example
16
+ * resolveLocale(req, "en", "locale") // → "nl" (if ?locale=nl)
17
+ */
18
+ export function resolveLocale(req, defaultLocale, cookieName) {
19
+ // 1. Query parameter
20
+ const queryLocale = req.query?.locale;
21
+ if (typeof queryLocale === "string" && queryLocale.trim()) {
22
+ return queryLocale.trim();
23
+ }
24
+ // 2. Accept-Language header
25
+ const acceptLanguage = req.headers["accept-language"];
26
+ if (acceptLanguage) {
27
+ const parsed = parseAcceptLanguage(acceptLanguage);
28
+ if (parsed) {
29
+ return parsed;
30
+ }
31
+ }
32
+ // 3. Cookie
33
+ if (cookieName && req.cookies?.[cookieName]) {
34
+ return req.cookies[cookieName];
35
+ }
36
+ // 4. Default
37
+ return defaultLocale;
38
+ }
39
+ /**
40
+ * Parse the Accept-Language header and return the highest-priority locale.
41
+ *
42
+ * Handles formats like:
43
+ * - "nl" → "nl"
44
+ * - "nl, en;q=0.8" → "nl"
45
+ * - "en-US,en;q=0.9,nl;q=0.8" → "en_US" (normalized)
46
+ * - "*" → null (wildcard, use default)
47
+ *
48
+ * @param header - The Accept-Language header value
49
+ * @returns The best locale, or null if none can be determined
50
+ */
51
+ export function parseAcceptLanguage(header) {
52
+ const entries = header
53
+ .split(",")
54
+ .map((entry) => {
55
+ const [locale, ...params] = entry.trim().split(";");
56
+ const qParam = params.find((p) => p.trim().startsWith("q="));
57
+ const quality = qParam ? parseFloat(qParam.trim().slice(2)) : 1.0;
58
+ return { locale: locale.trim(), quality };
59
+ })
60
+ .filter((e) => e.locale !== "*" && e.locale !== "" && e.quality > 0)
61
+ .sort((a, b) => b.quality - a.quality);
62
+ if (entries.length === 0)
63
+ return null;
64
+ // Normalize: "en-US" → "en_US"
65
+ return entries[0].locale.replace("-", "_");
66
+ }
67
+ //# sourceMappingURL=locale-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-resolver.js","sourceRoot":"","sources":["../src/locale-resolver.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CACzB,GAAY,EACZ,aAAqB,EACrB,UAA0B;IAE1B,qBAAqB;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;IACtC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,YAAY;IACZ,IAAI,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,aAAa;IACb,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,MAAM;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACX,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,+BAA+B;IAC/B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC"}