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,251 @@
1
+ /**
2
+ * In-memory cache provider with TTL support.
3
+ *
4
+ * Zero external dependencies — suitable for development, testing,
5
+ * and single-instance applications. Mimics Redis behavior:
6
+ * - TTL in seconds (stored as expiration timestamps)
7
+ * - Returns -1 for no expiry, -2 for missing key (ttl method)
8
+ * - Pattern matching with * wildcard
9
+ * - Periodic cleanup of expired entries
10
+ *
11
+ * Values are JSON-serialized/deserialized to match Redis behavior,
12
+ * ensuring what goes in is what comes out with no reference sharing.
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { CacheProvider } from "./abstract-cache-provider.js";
17
+ // ---------------------------------------------------------------------------
18
+ // Default Constants
19
+ // ---------------------------------------------------------------------------
20
+ /** Default cleanup interval: 60 seconds */
21
+ const DEFAULT_CLEANUP_INTERVAL_MS = 60_000;
22
+ // ---------------------------------------------------------------------------
23
+ // MemoryCacheProvider
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * In-memory cache provider with TTL support.
27
+ *
28
+ * Uses a `Map<string, MemoryCacheEntry>` for storage with JSON serialization
29
+ * to match Redis behavior. Expired entries are lazily evicted on access and
30
+ * periodically cleaned up via a configurable interval timer.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const cache = new MemoryCacheProvider({
35
+ * rootKey: 'TestApp',
36
+ * defaultTTL: 60,
37
+ * cleanupIntervalMs: 5000,
38
+ * });
39
+ *
40
+ * await cache.set('key', { data: true });
41
+ * const value = await cache.get<{ data: boolean }>('key');
42
+ * ```
43
+ */
44
+ export class MemoryCacheProvider extends CacheProvider {
45
+ /** Internal storage map: prefixed key → cache entry */
46
+ store;
47
+ /** Handle for the periodic cleanup interval (undefined if stopped) */
48
+ cleanupInterval;
49
+ /** Cleanup interval in milliseconds */
50
+ cleanupIntervalMs;
51
+ /**
52
+ * Create a new in-memory cache provider.
53
+ *
54
+ * @param config - Memory cache configuration with rootKey and optional cleanup interval
55
+ */
56
+ constructor(config) {
57
+ super(config);
58
+ this.store = new Map();
59
+ this.cleanupIntervalMs = config.cleanupIntervalMs ?? DEFAULT_CLEANUP_INTERVAL_MS;
60
+ // Start periodic cleanup of expired entries to prevent memory leaks
61
+ this.startCleanup();
62
+ }
63
+ // -----------------------------------------------------------------------
64
+ // Core Operations
65
+ // -----------------------------------------------------------------------
66
+ /** @inheritDoc */
67
+ async set(key, value, ttlSeconds) {
68
+ const fullKey = this.buildKey(key);
69
+ const serialized = JSON.stringify(value);
70
+ const effectiveTTL = this.resolveTTL(ttlSeconds);
71
+ const entry = {
72
+ value: serialized,
73
+ // Convert TTL in seconds to an absolute expiration timestamp in ms
74
+ expiresAt: effectiveTTL !== undefined ? Date.now() + effectiveTTL * 1000 : undefined,
75
+ };
76
+ this.store.set(fullKey, entry);
77
+ }
78
+ /** @inheritDoc */
79
+ async get(key) {
80
+ const fullKey = this.buildKey(key);
81
+ const entry = this.store.get(fullKey);
82
+ if (!entry) {
83
+ return undefined;
84
+ }
85
+ // Lazy eviction: check if the entry has expired
86
+ if (entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {
87
+ this.store.delete(fullKey);
88
+ return undefined;
89
+ }
90
+ // Deserialize — treat parse failures as cache miss (matches Redis provider)
91
+ try {
92
+ return JSON.parse(entry.value);
93
+ }
94
+ catch {
95
+ return undefined;
96
+ }
97
+ }
98
+ /** @inheritDoc */
99
+ async delete(key) {
100
+ const fullKey = this.buildKey(key);
101
+ return this.store.delete(fullKey);
102
+ }
103
+ /** @inheritDoc */
104
+ async exists(key) {
105
+ const fullKey = this.buildKey(key);
106
+ const entry = this.store.get(fullKey);
107
+ if (!entry) {
108
+ return false;
109
+ }
110
+ // Lazy eviction: check if the entry has expired
111
+ if (entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {
112
+ this.store.delete(fullKey);
113
+ return false;
114
+ }
115
+ return true;
116
+ }
117
+ /** @inheritDoc */
118
+ async expire(key, ttlSeconds) {
119
+ const fullKey = this.buildKey(key);
120
+ const entry = this.store.get(fullKey);
121
+ if (!entry) {
122
+ return false;
123
+ }
124
+ // Cannot update TTL on an already-expired entry
125
+ if (entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {
126
+ this.store.delete(fullKey);
127
+ return false;
128
+ }
129
+ // Update the expiration timestamp
130
+ entry.expiresAt = Date.now() + ttlSeconds * 1000;
131
+ return true;
132
+ }
133
+ /** @inheritDoc */
134
+ async ttl(key) {
135
+ const fullKey = this.buildKey(key);
136
+ const entry = this.store.get(fullKey);
137
+ // Key doesn't exist
138
+ if (!entry) {
139
+ return -2;
140
+ }
141
+ // Lazy eviction: check if the entry has expired
142
+ if (entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {
143
+ this.store.delete(fullKey);
144
+ return -2;
145
+ }
146
+ // No expiry set — key persists indefinitely
147
+ if (entry.expiresAt === undefined) {
148
+ return -1;
149
+ }
150
+ // Calculate remaining TTL in seconds (round up to match Redis behavior)
151
+ const remaining = Math.ceil((entry.expiresAt - Date.now()) / 1000);
152
+ return remaining > 0 ? remaining : -2;
153
+ }
154
+ // -----------------------------------------------------------------------
155
+ // Pattern Operations
156
+ // -----------------------------------------------------------------------
157
+ /** @inheritDoc */
158
+ async deletePattern(pattern) {
159
+ const fullPattern = this.buildPattern(pattern);
160
+ const regex = this.patternToRegex(fullPattern);
161
+ let deleted = 0;
162
+ // Collect keys first to avoid mutating the map during iteration
163
+ const keysToDelete = [];
164
+ for (const key of this.store.keys()) {
165
+ if (regex.test(key)) {
166
+ keysToDelete.push(key);
167
+ }
168
+ }
169
+ for (const key of keysToDelete) {
170
+ this.store.delete(key);
171
+ deleted++;
172
+ }
173
+ return deleted;
174
+ }
175
+ /** @inheritDoc */
176
+ async clear() {
177
+ // Only delete keys under this rootKey namespace (not other namespaces)
178
+ const prefix = this.buildKey("");
179
+ // Collect keys first to avoid mutating the map during iteration
180
+ const keysToDelete = [];
181
+ for (const key of this.store.keys()) {
182
+ if (key.startsWith(prefix)) {
183
+ keysToDelete.push(key);
184
+ }
185
+ }
186
+ for (const key of keysToDelete) {
187
+ this.store.delete(key);
188
+ }
189
+ }
190
+ // -----------------------------------------------------------------------
191
+ // Lifecycle
192
+ // -----------------------------------------------------------------------
193
+ /** @inheritDoc */
194
+ async health() {
195
+ // In-memory cache is always healthy as long as the process is running
196
+ return true;
197
+ }
198
+ /** @inheritDoc */
199
+ async shutdown() {
200
+ // Stop the cleanup interval to prevent further timer callbacks
201
+ if (this.cleanupInterval !== undefined) {
202
+ clearInterval(this.cleanupInterval);
203
+ this.cleanupInterval = undefined;
204
+ }
205
+ // Clear all entries from the store
206
+ this.store.clear();
207
+ }
208
+ // -----------------------------------------------------------------------
209
+ // Internal Helpers
210
+ // -----------------------------------------------------------------------
211
+ /**
212
+ * Convert a glob-style pattern (with * wildcards) to a RegExp.
213
+ *
214
+ * Escapes all regex special characters except *, which becomes .* to
215
+ * match any sequence of characters (mimicking Redis SCAN MATCH behavior).
216
+ *
217
+ * @param pattern - Glob pattern (e.g., 'MyApp:user:*')
218
+ * @returns RegExp that matches the pattern
219
+ */
220
+ patternToRegex(pattern) {
221
+ const escaped = pattern
222
+ .replace(/[.+?^${}()|[\]\\]/g, "\\$&") // Escape regex specials
223
+ .replace(/\*/g, ".*"); // Convert * wildcard to .*
224
+ return new RegExp(`^${escaped}$`);
225
+ }
226
+ /**
227
+ * Start periodic cleanup of expired entries.
228
+ *
229
+ * Prevents unbounded memory growth from expired-but-not-accessed entries.
230
+ * The interval timer is unref'd so it doesn't prevent Node.js from exiting.
231
+ */
232
+ startCleanup() {
233
+ // Only start if interval is positive (0 or negative disables cleanup)
234
+ if (this.cleanupIntervalMs <= 0) {
235
+ return;
236
+ }
237
+ this.cleanupInterval = setInterval(() => {
238
+ const now = Date.now();
239
+ for (const [key, entry] of this.store.entries()) {
240
+ if (entry.expiresAt !== undefined && now > entry.expiresAt) {
241
+ this.store.delete(key);
242
+ }
243
+ }
244
+ }, this.cleanupIntervalMs);
245
+ // Unref so the interval doesn't prevent the Node.js process from exiting
246
+ if (this.cleanupInterval.unref) {
247
+ this.cleanupInterval.unref();
248
+ }
249
+ }
250
+ }
251
+ //# sourceMappingURL=memory-cache-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache-provider.js","sourceRoot":"","sources":["../src/memory-cache-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * In-memory pub/sub provider for development and testing.
3
+ *
4
+ * Uses in-process Maps and EventEmitter-style delivery. No network connections
5
+ * or external dependencies — perfect for unit tests and local development.
6
+ *
7
+ * Key behaviors:
8
+ * - JSON round-trip on publish (matches Redis serialization behavior)
9
+ * - Glob pattern matching via regex conversion (supports *, ?)
10
+ * - Synchronous delivery within the same event loop tick
11
+ * - Handler errors isolated via safeInvoke (log + continue)
12
+ * - Health always returns true (no external dependencies)
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { PubSubProvider } from "./abstract-pubsub-provider.js";
17
+ import type { MemoryPubSubConfig, MessageHandler } from "./types.js";
18
+ /**
19
+ * In-memory pub/sub provider for development and testing.
20
+ *
21
+ * Delivers messages synchronously within the same process.
22
+ * No external connections required — always healthy.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const pubsub = new MemoryPubSubProvider({ channelPrefix: 'Test' });
27
+ * await pubsub.subscribe<string>('greet', (msg) => console.log(msg.data));
28
+ * await pubsub.publish('greet', 'Hello!');
29
+ * ```
30
+ */
31
+ export declare class MemoryPubSubProvider extends PubSubProvider {
32
+ /** Exact channel handlers: Map<userChannel, Set<MessageHandler>> */
33
+ protected handlers: Map<string, Set<MessageHandler>>;
34
+ /** Pattern handlers: Map<userPattern, Set<MessageHandler>> */
35
+ protected patternHandlers: Map<string, Set<MessageHandler>>;
36
+ /**
37
+ * Create a new in-memory pub/sub provider.
38
+ *
39
+ * @param config - Optional configuration with channelPrefix and serviceName
40
+ */
41
+ constructor(config?: MemoryPubSubConfig);
42
+ /**
43
+ * Publish a message to a channel.
44
+ *
45
+ * Performs a JSON round-trip to match Redis behavior:
46
+ * - Ensures data is JSON-serializable (throws if not)
47
+ * - Handlers receive a new object (no shared references)
48
+ *
49
+ * @param channel - Channel name (prefix applied automatically)
50
+ * @param data - Message payload (will be JSON-serialized)
51
+ * @returns Number of handlers that received the message
52
+ */
53
+ publish<T>(channel: string, data: T): Promise<number>;
54
+ /**
55
+ * Subscribe to an exact channel.
56
+ *
57
+ * Multiple handlers can be registered for the same channel.
58
+ * Duplicate handlers are deduplicated by the underlying Set.
59
+ *
60
+ * @param channel - Exact channel name
61
+ * @param handler - Handler function for incoming messages
62
+ */
63
+ subscribe<T = unknown>(channel: string, handler: MessageHandler<T>): Promise<void>;
64
+ /**
65
+ * Unsubscribe from an exact channel.
66
+ * Removes all handlers for the specified channel.
67
+ *
68
+ * @param channel - Channel name to unsubscribe from
69
+ */
70
+ unsubscribe(channel: string): Promise<void>;
71
+ /**
72
+ * Subscribe to a channel pattern with glob wildcards.
73
+ *
74
+ * Supports Redis-style glob patterns:
75
+ * - `*` matches any sequence of characters
76
+ * - `?` matches exactly one character
77
+ *
78
+ * @param pattern - Glob pattern (e.g., 'order:*')
79
+ * @param handler - Handler function for matching messages
80
+ */
81
+ psubscribe<T = unknown>(pattern: string, handler: MessageHandler<T>): Promise<void>;
82
+ /**
83
+ * Unsubscribe from a channel pattern.
84
+ * Removes all handlers for the specified pattern.
85
+ *
86
+ * @param pattern - Pattern to unsubscribe from
87
+ */
88
+ punsubscribe(pattern: string): Promise<void>;
89
+ /**
90
+ * Get currently active subscriptions.
91
+ *
92
+ * @returns Object with exact `channels` and glob `patterns` arrays
93
+ */
94
+ activeSubscriptions(): {
95
+ channels: string[];
96
+ patterns: string[];
97
+ };
98
+ /**
99
+ * Health check — always returns true for in-memory provider.
100
+ * There are no external connections to verify.
101
+ */
102
+ health(): Promise<boolean>;
103
+ /**
104
+ * Shutdown — clears all handlers.
105
+ * No connections to close for in-memory provider.
106
+ */
107
+ shutdown(): Promise<void>;
108
+ /**
109
+ * Match a channel name against a glob pattern.
110
+ *
111
+ * Converts glob syntax to a regular expression:
112
+ * - `*` → `.*` (match any sequence of characters)
113
+ * - `?` → `.` (match exactly one character)
114
+ *
115
+ * All other regex-special characters are escaped to prevent
116
+ * accidental regex injection from channel or pattern names.
117
+ *
118
+ * @param channel - The channel name to test
119
+ * @param pattern - The glob pattern to match against
120
+ * @returns true if the channel matches the pattern
121
+ */
122
+ protected matchGlob(channel: string, pattern: string): boolean;
123
+ }
124
+ //# sourceMappingURL=memory-pubsub-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-pubsub-provider.d.ts","sourceRoot":"","sources":["../src/memory-pubsub-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACpD,oEAAoE;IACpE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAErD,8DAA8D;IAC9D,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAE5D;;;;OAIG;gBACS,MAAM,CAAC,EAAE,kBAAkB;IAUvC;;;;;;;;;;OAUG;IACG,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoC3D;;;;;;;;OAQG;IACG,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxF;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;;;;;;OASG;IACG,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzF;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;;;OAIG;IACH,mBAAmB,IAAI;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAWjE;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CASjE"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * In-memory pub/sub provider for development and testing.
3
+ *
4
+ * Uses in-process Maps and EventEmitter-style delivery. No network connections
5
+ * or external dependencies — perfect for unit tests and local development.
6
+ *
7
+ * Key behaviors:
8
+ * - JSON round-trip on publish (matches Redis serialization behavior)
9
+ * - Glob pattern matching via regex conversion (supports *, ?)
10
+ * - Synchronous delivery within the same event loop tick
11
+ * - Handler errors isolated via safeInvoke (log + continue)
12
+ * - Health always returns true (no external dependencies)
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { PubSubProvider } from "./abstract-pubsub-provider.js";
17
+ /**
18
+ * In-memory pub/sub provider for development and testing.
19
+ *
20
+ * Delivers messages synchronously within the same process.
21
+ * No external connections required — always healthy.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const pubsub = new MemoryPubSubProvider({ channelPrefix: 'Test' });
26
+ * await pubsub.subscribe<string>('greet', (msg) => console.log(msg.data));
27
+ * await pubsub.publish('greet', 'Hello!');
28
+ * ```
29
+ */
30
+ export class MemoryPubSubProvider extends PubSubProvider {
31
+ /** Exact channel handlers: Map<userChannel, Set<MessageHandler>> */
32
+ handlers;
33
+ /** Pattern handlers: Map<userPattern, Set<MessageHandler>> */
34
+ patternHandlers;
35
+ /**
36
+ * Create a new in-memory pub/sub provider.
37
+ *
38
+ * @param config - Optional configuration with channelPrefix and serviceName
39
+ */
40
+ constructor(config) {
41
+ super(config ?? {});
42
+ this.handlers = new Map();
43
+ this.patternHandlers = new Map();
44
+ }
45
+ // -------------------------------------------------------------------
46
+ // Core Operations
47
+ // -------------------------------------------------------------------
48
+ /**
49
+ * Publish a message to a channel.
50
+ *
51
+ * Performs a JSON round-trip to match Redis behavior:
52
+ * - Ensures data is JSON-serializable (throws if not)
53
+ * - Handlers receive a new object (no shared references)
54
+ *
55
+ * @param channel - Channel name (prefix applied automatically)
56
+ * @param data - Message payload (will be JSON-serialized)
57
+ * @returns Number of handlers that received the message
58
+ */
59
+ async publish(channel, data) {
60
+ // JSON round-trip to match Redis behavior — ensures serializable data
61
+ // and gives handlers a fresh copy (no shared references)
62
+ const serialized = JSON.stringify(data);
63
+ const deserialized = JSON.parse(serialized);
64
+ let receiverCount = 0;
65
+ // Deliver to exact channel handlers
66
+ const channelHandlers = this.handlers.get(channel);
67
+ if (channelHandlers) {
68
+ for (const handler of channelHandlers) {
69
+ const envelope = { channel, data: deserialized };
70
+ void this.safeInvoke(handler, envelope);
71
+ receiverCount++;
72
+ }
73
+ }
74
+ // Deliver to matching pattern handlers
75
+ for (const [pattern, patternHandlerSet] of this.patternHandlers) {
76
+ if (this.matchGlob(channel, pattern)) {
77
+ for (const handler of patternHandlerSet) {
78
+ const envelope = {
79
+ channel,
80
+ data: deserialized,
81
+ pattern,
82
+ };
83
+ void this.safeInvoke(handler, envelope);
84
+ receiverCount++;
85
+ }
86
+ }
87
+ }
88
+ return receiverCount;
89
+ }
90
+ /**
91
+ * Subscribe to an exact channel.
92
+ *
93
+ * Multiple handlers can be registered for the same channel.
94
+ * Duplicate handlers are deduplicated by the underlying Set.
95
+ *
96
+ * @param channel - Exact channel name
97
+ * @param handler - Handler function for incoming messages
98
+ */
99
+ async subscribe(channel, handler) {
100
+ if (!this.handlers.has(channel)) {
101
+ this.handlers.set(channel, new Set());
102
+ }
103
+ this.handlers.get(channel).add(handler);
104
+ }
105
+ /**
106
+ * Unsubscribe from an exact channel.
107
+ * Removes all handlers for the specified channel.
108
+ *
109
+ * @param channel - Channel name to unsubscribe from
110
+ */
111
+ async unsubscribe(channel) {
112
+ this.handlers.delete(channel);
113
+ }
114
+ /**
115
+ * Subscribe to a channel pattern with glob wildcards.
116
+ *
117
+ * Supports Redis-style glob patterns:
118
+ * - `*` matches any sequence of characters
119
+ * - `?` matches exactly one character
120
+ *
121
+ * @param pattern - Glob pattern (e.g., 'order:*')
122
+ * @param handler - Handler function for matching messages
123
+ */
124
+ async psubscribe(pattern, handler) {
125
+ if (!this.patternHandlers.has(pattern)) {
126
+ this.patternHandlers.set(pattern, new Set());
127
+ }
128
+ this.patternHandlers.get(pattern).add(handler);
129
+ }
130
+ /**
131
+ * Unsubscribe from a channel pattern.
132
+ * Removes all handlers for the specified pattern.
133
+ *
134
+ * @param pattern - Pattern to unsubscribe from
135
+ */
136
+ async punsubscribe(pattern) {
137
+ this.patternHandlers.delete(pattern);
138
+ }
139
+ /**
140
+ * Get currently active subscriptions.
141
+ *
142
+ * @returns Object with exact `channels` and glob `patterns` arrays
143
+ */
144
+ activeSubscriptions() {
145
+ return {
146
+ channels: Array.from(this.handlers.keys()),
147
+ patterns: Array.from(this.patternHandlers.keys()),
148
+ };
149
+ }
150
+ // -------------------------------------------------------------------
151
+ // Lifecycle
152
+ // -------------------------------------------------------------------
153
+ /**
154
+ * Health check — always returns true for in-memory provider.
155
+ * There are no external connections to verify.
156
+ */
157
+ async health() {
158
+ return true;
159
+ }
160
+ /**
161
+ * Shutdown — clears all handlers.
162
+ * No connections to close for in-memory provider.
163
+ */
164
+ async shutdown() {
165
+ this.handlers.clear();
166
+ this.patternHandlers.clear();
167
+ }
168
+ // -------------------------------------------------------------------
169
+ // Internal: Glob Matching
170
+ // -------------------------------------------------------------------
171
+ /**
172
+ * Match a channel name against a glob pattern.
173
+ *
174
+ * Converts glob syntax to a regular expression:
175
+ * - `*` → `.*` (match any sequence of characters)
176
+ * - `?` → `.` (match exactly one character)
177
+ *
178
+ * All other regex-special characters are escaped to prevent
179
+ * accidental regex injection from channel or pattern names.
180
+ *
181
+ * @param channel - The channel name to test
182
+ * @param pattern - The glob pattern to match against
183
+ * @returns true if the channel matches the pattern
184
+ */
185
+ matchGlob(channel, pattern) {
186
+ // Escape regex special chars, then convert glob wildcards to regex equivalents
187
+ const regexStr = pattern
188
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&") // Escape regex specials (not * or ?)
189
+ .replace(/\*/g, ".*") // * → .* (any sequence)
190
+ .replace(/\?/g, "."); // ? → . (single char)
191
+ const regex = new RegExp(`^${regexStr}$`);
192
+ return regex.test(channel);
193
+ }
194
+ }
195
+ //# sourceMappingURL=memory-pubsub-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-pubsub-provider.js","sourceRoot":"","sources":["../src/memory-pubsub-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IACpD,oEAAoE;IAC1D,QAAQ,CAAmC;IAErD,8DAA8D;IACpD,eAAe,CAAmC;IAE5D;;;;OAIG;IACH,YAAY,MAA2B;QACnC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,sEAAsE;IACtE,kBAAkB;IAClB,sEAAsE;IAEtE;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CAAI,OAAe,EAAE,IAAO;QACrC,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,CAAC;QAEjD,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,oCAAoC;QACpC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACxC,aAAa,EAAE,CAAC;YACpB,CAAC;QACL,CAAC;QAED,uCAAuC;QACvC,KAAK,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACnC,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAqB;wBAC/B,OAAO;wBACP,IAAI,EAAE,YAAY;wBAClB,OAAO;qBACV,CAAC;oBACF,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBACxC,aAAa,EAAE,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,CAAc,OAAe,EAAE,OAA0B;QACpE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,OAAyB,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,UAAU,CAAc,OAAe,EAAE,OAA0B;QACrE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,OAAyB,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe;QAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACf,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1C,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;SACpD,CAAC;IACN,CAAC;IAED,sEAAsE;IACtE,YAAY;IACZ,sEAAsE;IAEtE;;;OAGG;IACH,KAAK,CAAC,MAAM;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,sEAAsE;IACtE,0BAA0B;IAC1B,sEAAsE;IAEtE;;;;;;;;;;;;;OAaG;IACO,SAAS,CAAC,OAAe,EAAE,OAAe;QAChD,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,OAAO;aACnB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,qCAAqC;aAC1E,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,wBAAwB;aAC7C,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;CACJ"}