alepha 0.20.1 → 0.20.3

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 (393) hide show
  1. package/README.md +0 -1
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui.css +1 -1
  4. package/dist/api/audits/index.browser.js +49 -0
  5. package/dist/api/audits/index.browser.js.map +1 -1
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +49 -0
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.d.ts.map +1 -1
  10. package/dist/api/files/index.js +2 -1
  11. package/dist/api/files/index.js.map +1 -1
  12. package/dist/api/jobs/index.browser.js +64 -148
  13. package/dist/api/jobs/index.browser.js.map +1 -1
  14. package/dist/api/jobs/index.d.ts +339 -600
  15. package/dist/api/jobs/index.d.ts.map +1 -1
  16. package/dist/api/jobs/index.js +605 -1012
  17. package/dist/api/jobs/index.js.map +1 -1
  18. package/dist/api/keys/index.js.map +1 -1
  19. package/dist/api/notifications/index.d.ts +79 -27
  20. package/dist/api/notifications/index.d.ts.map +1 -1
  21. package/dist/api/notifications/index.js +90 -23
  22. package/dist/api/notifications/index.js.map +1 -1
  23. package/dist/api/organizations/index.d.ts.map +1 -1
  24. package/dist/api/parameters/index.browser.js +37 -0
  25. package/dist/api/parameters/index.browser.js.map +1 -1
  26. package/dist/api/parameters/index.d.ts +4 -65
  27. package/dist/api/parameters/index.d.ts.map +1 -1
  28. package/dist/api/parameters/index.js +37 -0
  29. package/dist/api/parameters/index.js.map +1 -1
  30. package/dist/api/payments/index.d.ts +2 -1
  31. package/dist/api/payments/index.d.ts.map +1 -1
  32. package/dist/api/payments/index.js +4 -2
  33. package/dist/api/payments/index.js.map +1 -1
  34. package/dist/api/users/index.d.ts +225 -5199
  35. package/dist/api/users/index.d.ts.map +1 -1
  36. package/dist/api/users/index.js +15 -11
  37. package/dist/api/users/index.js.map +1 -1
  38. package/dist/api/verifications/index.d.ts.map +1 -1
  39. package/dist/api/verifications/index.js +4 -2
  40. package/dist/api/verifications/index.js.map +1 -1
  41. package/dist/bucket/index.js +5 -1
  42. package/dist/bucket/index.js.map +1 -1
  43. package/dist/bucket/index.workerd.js +5 -1
  44. package/dist/bucket/index.workerd.js.map +1 -1
  45. package/dist/cache/core/index.js.map +1 -1
  46. package/dist/cache/core/index.workerd.js.map +1 -1
  47. package/dist/captcha/index.js.map +1 -1
  48. package/dist/cli/core/index.d.ts +225 -11681
  49. package/dist/cli/core/index.d.ts.map +1 -1
  50. package/dist/cli/core/index.js +732 -257
  51. package/dist/cli/core/index.js.map +1 -1
  52. package/dist/cli/devtools/index.js +7 -1
  53. package/dist/cli/devtools/index.js.map +1 -1
  54. package/dist/cli/platform/index.d.ts +65 -63
  55. package/dist/cli/platform/index.d.ts.map +1 -1
  56. package/dist/cli/platform/index.js +140 -27
  57. package/dist/cli/platform/index.js.map +1 -1
  58. package/dist/cli/vendor/index.js +15 -0
  59. package/dist/cli/vendor/index.js.map +1 -1
  60. package/dist/command/index.d.ts +1 -1
  61. package/dist/command/index.js +1 -1
  62. package/dist/command/index.js.map +1 -1
  63. package/dist/core/index.browser.js +6 -0
  64. package/dist/core/index.browser.js.map +1 -1
  65. package/dist/core/index.d.ts +8 -8
  66. package/dist/core/index.d.ts.map +1 -1
  67. package/dist/core/index.js +6 -0
  68. package/dist/core/index.js.map +1 -1
  69. package/dist/core/index.native.js +6 -0
  70. package/dist/core/index.native.js.map +1 -1
  71. package/dist/core/index.workerd.js +6 -0
  72. package/dist/core/index.workerd.js.map +1 -1
  73. package/dist/crypto/index.js.map +1 -1
  74. package/dist/datetime/index.js.map +1 -1
  75. package/dist/email/core/index.js.map +1 -1
  76. package/dist/email/smtp/index.js +2 -10522
  77. package/dist/email/smtp/index.js.map +1 -1
  78. package/dist/fake/index.d.ts +4 -8085
  79. package/dist/fake/index.d.ts.map +1 -1
  80. package/dist/fake/index.js +3 -33554
  81. package/dist/fake/index.js.map +1 -1
  82. package/dist/lock/core/index.js.map +1 -1
  83. package/dist/lock/redis/index.js.map +1 -1
  84. package/dist/logger/index.js +32 -1
  85. package/dist/logger/index.js.map +1 -1
  86. package/dist/mcp/index.js +5 -1
  87. package/dist/mcp/index.js.map +1 -1
  88. package/dist/orm/core/index.browser.js +1 -361
  89. package/dist/orm/core/index.browser.js.map +1 -1
  90. package/dist/orm/core/index.bun.js +14 -406
  91. package/dist/orm/core/index.bun.js.map +1 -1
  92. package/dist/orm/core/index.d.ts +96 -5117
  93. package/dist/orm/core/index.d.ts.map +1 -1
  94. package/dist/orm/core/index.js +23 -419
  95. package/dist/orm/core/index.js.map +1 -1
  96. package/dist/orm/postgres/index.bun.js +17 -20
  97. package/dist/orm/postgres/index.bun.js.map +1 -1
  98. package/dist/orm/postgres/index.d.ts +2 -613
  99. package/dist/orm/postgres/index.d.ts.map +1 -1
  100. package/dist/orm/postgres/index.js +17 -20
  101. package/dist/orm/postgres/index.js.map +1 -1
  102. package/dist/react/core/index.js.map +1 -1
  103. package/dist/react/form/index.d.ts +60 -1
  104. package/dist/react/form/index.d.ts.map +1 -1
  105. package/dist/react/form/index.js +86 -1
  106. package/dist/react/form/index.js.map +1 -1
  107. package/dist/react/head/index.browser.js +16 -1
  108. package/dist/react/head/index.browser.js.map +1 -1
  109. package/dist/react/head/index.d.ts +6 -0
  110. package/dist/react/head/index.d.ts.map +1 -1
  111. package/dist/react/head/index.js +16 -1
  112. package/dist/react/head/index.js.map +1 -1
  113. package/dist/react/i18n/index.js.map +1 -1
  114. package/dist/react/intro/index.js +22 -17
  115. package/dist/react/intro/index.js.map +1 -1
  116. package/dist/react/router/index.browser.js +78 -12
  117. package/dist/react/router/index.browser.js.map +1 -1
  118. package/dist/react/router/index.d.ts +57 -13
  119. package/dist/react/router/index.d.ts.map +1 -1
  120. package/dist/react/router/index.js +102 -14
  121. package/dist/react/router/index.js.map +1 -1
  122. package/dist/react/testing/index.d.ts +1 -411
  123. package/dist/react/testing/index.d.ts.map +1 -1
  124. package/dist/react/testing/index.js +13 -12293
  125. package/dist/react/testing/index.js.map +1 -1
  126. package/dist/react/ui/index.d.ts +124 -0
  127. package/dist/react/ui/index.d.ts.map +1 -0
  128. package/dist/react/ui/index.js +209 -0
  129. package/dist/react/ui/index.js.map +1 -0
  130. package/dist/react/websocket/index.js.map +1 -1
  131. package/dist/redis/index.js.map +1 -1
  132. package/dist/router/index.d.ts +13 -13
  133. package/dist/router/index.d.ts.map +1 -1
  134. package/dist/router/index.js +45 -32
  135. package/dist/router/index.js.map +1 -1
  136. package/dist/scheduler/index.d.ts +1 -83
  137. package/dist/scheduler/index.d.ts.map +1 -1
  138. package/dist/scheduler/index.js +2 -391
  139. package/dist/scheduler/index.js.map +1 -1
  140. package/dist/scheduler/index.workerd.js +2 -391
  141. package/dist/scheduler/index.workerd.js.map +1 -1
  142. package/dist/security/index.browser.js.map +1 -1
  143. package/dist/security/index.d.ts +2 -325
  144. package/dist/security/index.d.ts.map +1 -1
  145. package/dist/security/index.js +3 -1362
  146. package/dist/security/index.js.map +1 -1
  147. package/dist/server/auth/index.d.ts +1 -1054
  148. package/dist/server/auth/index.d.ts.map +1 -1
  149. package/dist/server/auth/index.js +16 -1224
  150. package/dist/server/auth/index.js.map +1 -1
  151. package/dist/server/cookies/index.js.map +1 -1
  152. package/dist/server/core/index.browser.js.map +1 -1
  153. package/dist/server/core/index.d.ts +1 -4
  154. package/dist/server/core/index.d.ts.map +1 -1
  155. package/dist/server/core/index.js +19 -4
  156. package/dist/server/core/index.js.map +1 -1
  157. package/dist/server/links/index.browser.js.map +1 -1
  158. package/dist/server/links/index.js.map +1 -1
  159. package/dist/server/metrics/index.d.ts +1 -514
  160. package/dist/server/metrics/index.d.ts.map +1 -1
  161. package/dist/server/metrics/index.js +4 -4356
  162. package/dist/server/metrics/index.js.map +1 -1
  163. package/dist/server/rate-limit/index.js.map +1 -1
  164. package/dist/server/static/index.js.map +1 -1
  165. package/dist/server/swagger/index.js +1 -1
  166. package/dist/server/swagger/index.js.map +1 -1
  167. package/dist/sms/index.js.map +1 -1
  168. package/dist/system/index.browser.js.map +1 -1
  169. package/dist/system/index.d.ts.map +1 -1
  170. package/dist/system/index.js +1 -0
  171. package/dist/system/index.js.map +1 -1
  172. package/dist/system/index.workerd.js.map +1 -1
  173. package/dist/topic/core/index.js +1 -1
  174. package/dist/topic/core/index.js.map +1 -1
  175. package/dist/websocket/index.browser.js +21 -0
  176. package/dist/websocket/index.browser.js.map +1 -1
  177. package/dist/websocket/index.js +21 -0
  178. package/dist/websocket/index.js.map +1 -1
  179. package/package.json +23 -37
  180. package/src/api/files/__tests__/FileController.spec.ts +1 -1
  181. package/src/api/files/jobs/FileJobs.ts +2 -1
  182. package/src/api/jobs/__tests__/$job.spec.ts +320 -2867
  183. package/src/api/jobs/controllers/AdminJobController.ts +29 -138
  184. package/src/api/jobs/entities/jobExecutionEntity.ts +27 -19
  185. package/src/api/jobs/index.browser.ts +5 -7
  186. package/src/api/jobs/index.ts +23 -51
  187. package/src/api/jobs/primitives/$job.ts +66 -58
  188. package/src/api/jobs/providers/JobProvider.ts +561 -566
  189. package/src/api/jobs/providers/JobQueueProvider.ts +18 -19
  190. package/src/api/jobs/schemas/jobConfigAtom.ts +20 -23
  191. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +3 -27
  192. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +5 -7
  193. package/src/api/jobs/schemas/jobRegistrationSchema.ts +7 -4
  194. package/src/api/jobs/schemas/triggerJobSchema.ts +0 -1
  195. package/src/api/jobs/services/JobService.ts +90 -483
  196. package/src/api/notifications/controllers/AdminNotificationController.ts +19 -12
  197. package/src/api/notifications/index.ts +7 -4
  198. package/src/api/notifications/jobs/NotificationJobs.ts +83 -12
  199. package/src/api/payments/services/PaymentService.ts +4 -2
  200. package/src/api/users/__tests__/UserJobs.spec.ts +10 -49
  201. package/src/api/users/audits/UserAudits.ts +3 -1
  202. package/src/api/users/buckets/UserBuckets.ts +2 -1
  203. package/src/api/users/index.ts +1 -4
  204. package/src/api/users/jobs/UserJobs.ts +5 -4
  205. package/src/api/users/schemas/userQuerySchema.ts +0 -1
  206. package/src/api/users/services/UserService.ts +1 -5
  207. package/src/api/verifications/__tests__/CodeVerification.spec.ts +14 -0
  208. package/src/api/verifications/__tests__/LinkVerification.spec.ts +14 -0
  209. package/src/api/verifications/jobs/VerificationJobs.ts +2 -1
  210. package/src/api/verifications/services/VerificationService.ts +1 -0
  211. package/src/cli/core/__tests__/init.spec.ts +209 -1
  212. package/src/cli/core/commands/init.ts +9 -9
  213. package/src/cli/core/services/PackageManagerUtils.ts +22 -12
  214. package/src/cli/core/services/ProjectScaffolder.ts +300 -70
  215. package/src/cli/core/tasks/BuildDockerTask.ts +9 -10
  216. package/src/cli/core/tasks/BuildServerTask.ts +8 -0
  217. package/src/cli/core/templates/agentMd.ts +2 -8
  218. package/src/cli/core/templates/apiIndexTs.ts +22 -14
  219. package/src/cli/core/templates/componentsJsonTs.ts +39 -0
  220. package/src/cli/core/templates/mainCss.ts +2 -36
  221. package/src/cli/core/templates/saasAdminLayoutTsx.ts +77 -0
  222. package/src/cli/core/templates/saasAdminPagesTsx.ts +26 -0
  223. package/src/cli/core/templates/saasAuthLayoutTsx.ts +20 -0
  224. package/src/cli/core/templates/saasAuthPagesTsx.ts +62 -0
  225. package/src/cli/core/templates/saasRealmProviderTs.ts +46 -0
  226. package/src/cli/core/templates/vitestConfigTs.ts +17 -0
  227. package/src/cli/core/templates/webAppRouterTs.ts +102 -82
  228. package/src/cli/core/templates/webIndexTs.ts +23 -1
  229. package/src/cli/platform/__tests__/CloudflareAdapter.spec.ts +22 -71
  230. package/src/cli/platform/__tests__/SecretsCommand.spec.ts +2 -0
  231. package/src/cli/platform/adapters/CloudflareAdapter.ts +12 -11
  232. package/src/cli/platform/atoms/platformOptions.ts +9 -0
  233. package/src/cli/platform/schemas/cloudflare.ts +3 -2
  234. package/src/cli/platform/services/CloudflareApi.ts +164 -25
  235. package/src/cli/platform/services/WranglerApi.ts +0 -17
  236. package/src/command/providers/CliProvider.ts +1 -1
  237. package/src/core/Alepha.ts +9 -0
  238. package/src/core/interfaces/Service.ts +3 -1
  239. package/src/core/providers/TypeProvider.ts +1 -1
  240. package/src/logger/services/Logger.ts +1 -1
  241. package/src/mcp/__tests__/$resource.spec.ts +1 -1
  242. package/src/mcp/__tests__/$tool.spec.ts +1 -1
  243. package/src/mcp/__tests__/McpServerProvider.spec.ts +1 -1
  244. package/src/orm/__tests__/$repository-tests.ts +1 -0
  245. package/src/orm/__tests__/orm-next-tests.ts +2 -67
  246. package/src/orm/__tests__/orm-next.spec.ts +0 -21
  247. package/src/orm/core/index.shared.ts +0 -2
  248. package/src/orm/core/index.ts +1 -2
  249. package/src/orm/core/primitives/$repository.ts +3 -6
  250. package/src/orm/core/providers/drivers/DatabaseProvider.ts +0 -5
  251. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +11 -13
  252. package/src/orm/core/services/ModelBuilder.ts +1 -13
  253. package/src/orm/core/services/Repository.ts +1 -42
  254. package/src/orm/core/services/SqliteModelBuilder.ts +2 -33
  255. package/src/orm/postgres/services/PostgresModelBuilder.ts +10 -45
  256. package/src/react/form/index.ts +2 -0
  257. package/src/react/form/services/parseField.ts +163 -0
  258. package/src/react/form/services/prettyName.ts +19 -0
  259. package/src/react/head/providers/BrowserHeadProvider.ts +31 -10
  260. package/src/react/intro/components/GettingStartedAuthSlide.tsx +11 -4
  261. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +213 -2
  262. package/src/react/router/primitives/$page.ts +35 -12
  263. package/src/react/router/providers/ReactBrowserProvider.ts +73 -0
  264. package/src/react/router/providers/ReactBrowserRouterProvider.ts +1 -1
  265. package/src/react/router/providers/ReactPreloadProvider.ts +1 -1
  266. package/src/react/router/providers/ReactServerProvider.ts +1 -0
  267. package/src/react/ui/atoms/uiAtom.ts +28 -0
  268. package/src/react/ui/components/ColorScheme.tsx +36 -0
  269. package/src/react/ui/hooks/useColorMode.ts +49 -0
  270. package/src/react/ui/hooks/useSidebarState.ts +26 -0
  271. package/src/react/ui/hooks/useTheme.ts +22 -0
  272. package/src/react/ui/index.ts +35 -0
  273. package/src/react/ui/services/UiPersistence.ts +41 -0
  274. package/src/router/TemplatedPathParser.ts +50 -51
  275. package/src/router/__tests__/RouterProvider.spec.ts +62 -0
  276. package/src/router/__tests__/TemplatedPathParser.spec.ts +18 -0
  277. package/src/router/providers/RouterProvider.ts +10 -5
  278. package/src/scheduler/providers/CronProvider.ts +1 -1
  279. package/src/security/primitives/$basicAuth.ts +1 -1
  280. package/src/server/auth/providers/ServerAuthProvider.ts +5 -1
  281. package/src/server/core/interfaces/ServerRequest.ts +1 -0
  282. package/src/server/core/providers/ServerProvider.ts +1 -1
  283. package/src/server/core/providers/ServerRouterProvider.ts +2 -2
  284. package/src/server/core/services/HttpClient.ts +1 -1
  285. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  286. package/src/system/providers/NodeShellProvider.ts +1 -0
  287. package/src/topic/core/providers/TopicProvider.ts +1 -1
  288. package/dist/api/invitations/index.d.ts +0 -790
  289. package/dist/api/invitations/index.d.ts.map +0 -1
  290. package/dist/api/invitations/index.js +0 -662
  291. package/dist/api/invitations/index.js.map +0 -1
  292. package/dist/api/issues/index.d.ts +0 -810
  293. package/dist/api/issues/index.d.ts.map +0 -1
  294. package/dist/api/issues/index.js +0 -444
  295. package/dist/api/issues/index.js.map +0 -1
  296. package/dist/api/subscriptions/index.d.ts +0 -1692
  297. package/dist/api/subscriptions/index.d.ts.map +0 -1
  298. package/dist/api/subscriptions/index.js +0 -1867
  299. package/dist/api/subscriptions/index.js.map +0 -1
  300. package/dist/api/workflows/index.browser.js +0 -246
  301. package/dist/api/workflows/index.browser.js.map +0 -1
  302. package/dist/api/workflows/index.d.ts +0 -1618
  303. package/dist/api/workflows/index.d.ts.map +0 -1
  304. package/dist/api/workflows/index.js +0 -1495
  305. package/dist/api/workflows/index.js.map +0 -1
  306. package/dist/react/testing/chunk-DBEY4PJZ.js +0 -16
  307. package/src/api/invitations/__tests__/InvitationService.spec.ts +0 -439
  308. package/src/api/invitations/controllers/AdminInvitationController.ts +0 -86
  309. package/src/api/invitations/controllers/InvitationController.ts +0 -84
  310. package/src/api/invitations/entities/invitations.ts +0 -33
  311. package/src/api/invitations/index.ts +0 -58
  312. package/src/api/invitations/jobs/InvitationJobs.ts +0 -37
  313. package/src/api/invitations/providers/InvitationProvider.ts +0 -45
  314. package/src/api/invitations/schemas/createInvitationSchema.ts +0 -12
  315. package/src/api/invitations/schemas/invitationConfigAtom.ts +0 -20
  316. package/src/api/invitations/schemas/invitationQuerySchema.ts +0 -15
  317. package/src/api/invitations/schemas/invitationResourceSchema.ts +0 -6
  318. package/src/api/invitations/schemas/invitationWithResourceInfoSchema.ts +0 -22
  319. package/src/api/invitations/schemas/myInvitationsQuerySchema.ts +0 -10
  320. package/src/api/invitations/services/InvitationService.ts +0 -556
  321. package/src/api/issues/__tests__/IssueService.spec.ts +0 -263
  322. package/src/api/issues/controllers/AdminIssueController.ts +0 -149
  323. package/src/api/issues/controllers/IssueController.ts +0 -44
  324. package/src/api/issues/entities/issues.ts +0 -49
  325. package/src/api/issues/index.ts +0 -50
  326. package/src/api/issues/schemas/createIssueSchema.ts +0 -13
  327. package/src/api/issues/schemas/issueConfigAtom.ts +0 -13
  328. package/src/api/issues/schemas/issueQuerySchema.ts +0 -18
  329. package/src/api/issues/schemas/issueResourceSchema.ts +0 -6
  330. package/src/api/issues/schemas/myIssueQuerySchema.ts +0 -10
  331. package/src/api/issues/schemas/updateIssueSchema.ts +0 -13
  332. package/src/api/issues/services/IssueService.ts +0 -264
  333. package/src/api/jobs/__tests__/$job-middleware.spec.ts +0 -126
  334. package/src/api/jobs/__tests__/JobService.spec.ts +0 -31
  335. package/src/api/jobs/entities/jobExecutionLogEntity.ts +0 -13
  336. package/src/api/jobs/schemas/jobActivitySchema.ts +0 -15
  337. package/src/api/jobs/schemas/jobCronInfoSchema.ts +0 -22
  338. package/src/api/jobs/schemas/jobExecutionDetailResourceSchema.ts +0 -20
  339. package/src/api/jobs/schemas/jobFailureSchema.ts +0 -9
  340. package/src/api/jobs/schemas/jobQueueDepthSchema.ts +0 -14
  341. package/src/api/jobs/schemas/jobStatsSchema.ts +0 -14
  342. package/src/api/jobs/services/JobService-tests.ts +0 -157
  343. package/src/api/subscriptions/__tests__/BillingService.spec.ts +0 -218
  344. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +0 -278
  345. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +0 -212
  346. package/src/api/subscriptions/controllers/SubscriptionController.ts +0 -189
  347. package/src/api/subscriptions/entities/subscriptionEvents.ts +0 -54
  348. package/src/api/subscriptions/entities/subscriptions.ts +0 -68
  349. package/src/api/subscriptions/index.ts +0 -133
  350. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +0 -382
  351. package/src/api/subscriptions/middleware/$requireLimit.ts +0 -50
  352. package/src/api/subscriptions/middleware/$requirePlan.ts +0 -49
  353. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +0 -110
  354. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +0 -8
  355. package/src/api/subscriptions/schemas/changePlanSchema.ts +0 -9
  356. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +0 -11
  357. package/src/api/subscriptions/schemas/entitlementsSchema.ts +0 -21
  358. package/src/api/subscriptions/schemas/mrrSchema.ts +0 -13
  359. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +0 -71
  360. package/src/api/subscriptions/schemas/planResourceSchema.ts +0 -25
  361. package/src/api/subscriptions/schemas/subscriptionEventResourceSchema.ts +0 -8
  362. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +0 -19
  363. package/src/api/subscriptions/schemas/subscriptionResourceSchema.ts +0 -6
  364. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +0 -32
  365. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +0 -23
  366. package/src/api/subscriptions/services/BillingService.ts +0 -437
  367. package/src/api/subscriptions/services/SubscriptionConfig.ts +0 -56
  368. package/src/api/subscriptions/services/SubscriptionService.ts +0 -867
  369. package/src/api/subscriptions/services/UsageService.ts +0 -118
  370. package/src/api/workflows/__tests__/$workflow.spec.ts +0 -616
  371. package/src/api/workflows/controllers/AdminWorkflowController.ts +0 -191
  372. package/src/api/workflows/entities/workflowExecutions.ts +0 -74
  373. package/src/api/workflows/entities/workflowStepExecutions.ts +0 -74
  374. package/src/api/workflows/entities/workflowStepLogs.ts +0 -13
  375. package/src/api/workflows/index.browser.ts +0 -22
  376. package/src/api/workflows/index.ts +0 -115
  377. package/src/api/workflows/jobs/WorkflowJobs.ts +0 -77
  378. package/src/api/workflows/primitives/$workflow.ts +0 -202
  379. package/src/api/workflows/providers/WorkflowProvider.ts +0 -1284
  380. package/src/api/workflows/schemas/workflowActivitySchema.ts +0 -15
  381. package/src/api/workflows/schemas/workflowConfigAtom.ts +0 -51
  382. package/src/api/workflows/schemas/workflowExecutionDetailSchema.ts +0 -18
  383. package/src/api/workflows/schemas/workflowExecutionQuerySchema.ts +0 -26
  384. package/src/api/workflows/schemas/workflowExecutionResourceSchema.ts +0 -30
  385. package/src/api/workflows/schemas/workflowRegistrationSchema.ts +0 -26
  386. package/src/api/workflows/schemas/workflowStatsSchema.ts +0 -16
  387. package/src/api/workflows/schemas/workflowStepExecutionResourceSchema.ts +0 -15
  388. package/src/api/workflows/services/WorkflowService.ts +0 -382
  389. package/src/cli/core/templates/apiAppSecurityTs.ts +0 -43
  390. package/src/cli/core/templates/webAdminDashboardTsx.ts +0 -17
  391. package/src/orm/core/__tests__/parseQueryString.spec.ts +0 -196
  392. package/src/orm/core/helpers/parseQueryString.ts +0 -502
  393. package/src/orm/core/primitives/$view.ts +0 -88
@@ -3,6 +3,7 @@ declare abstract class RouterProvider<T extends Route = Route> {
3
3
  protected routePathRegex: RegExp;
4
4
  protected tree: Tree<T>;
5
5
  protected cache: Map<string, RouteMatch<T>>;
6
+ protected maxCacheSize: number;
6
7
  match(path: string): RouteMatch<T>;
7
8
  protected test(path: string): void;
8
9
  protected push(route: T): void;
@@ -67,17 +68,12 @@ interface Tree<T extends Route> {
67
68
  */
68
69
  declare class TemplatedPathParser {
69
70
  protected static readonly PARAM_REGEX: RegExp;
70
- protected readonly template: string;
71
- protected readonly separator: string;
71
+ readonly template: string;
72
+ readonly separator: string;
73
+ readonly paramNames: readonly string[];
74
+ readonly hasParams: boolean;
75
+ protected readonly extractRegex: RegExp | null;
72
76
  constructor(template: string, separator?: string);
73
- /**
74
- * Returns true if the template contains at least one `{param}` placeholder.
75
- */
76
- get hasParams(): boolean;
77
- /**
78
- * Returns an ordered list of parameter names found in the template.
79
- */
80
- get paramNames(): string[];
81
77
  /**
82
78
  * Replaces each `{param}` in the template with the corresponding value
83
79
  * from the provided params record.
@@ -85,10 +81,12 @@ declare class TemplatedPathParser {
85
81
  interpolate(params: Record<string, string>): string;
86
82
  /**
87
83
  * Extracts parameter values from a concrete path by matching it against
88
- * the template structure. Returns an empty object when the template has
89
- * no parameters.
84
+ * the template structure.
85
+ *
86
+ * Returns `null` when the path does not match the template.
87
+ * Returns `{}` when the template has no parameters and the path matches.
90
88
  */
91
- extract(path: string): Record<string, string>;
89
+ extract(path: string): Record<string, string> | null;
92
90
  /**
93
91
  * Replaces each `{param}` placeholder in the template with the given
94
92
  * wildcard string. Defaults to `"+"` (MQTT-style).
@@ -99,6 +97,8 @@ declare class TemplatedPathParser {
99
97
  * trailing separator (unless the path is just the separator itself).
100
98
  */
101
99
  normalize(path: string): string;
100
+ protected buildExtractRegex(): RegExp;
101
+ protected escapeRegex(s: string): string;
102
102
  }
103
103
  //#endregion
104
104
  export { Route, RouteMatch, RouterProvider, TemplatedPathParser, Tree };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/router/providers/RouterProvider.ts","../../src/router/TemplatedPathParser.ts"],"mappings":";uBAEsB,cAAA,WAAyB,KAAA,GAAQ,KAAA;EAAA,UAC3C,cAAA,EAAgB,MAAA;EAAA,UAEhB,IAAA,EAAM,IAAA,CAAK,CAAA;EAAA,UACX,KAAA,EAAK,GAAA,SAAA,UAAA,CAAA,CAAA;EAER,KAAA,CAAM,IAAA,WAAe,UAAA,CAAW,CAAA;EAAA,UAS7B,IAAA,CAAK,IAAA;EAAA,UAML,IAAA,CAAK,KAAA,EAAO,CAAA;EAAA,UA8DZ,gBAAA,CAAiB,IAAA,WAAe,UAAA,CAAW,CAAA;EAAA,UA4C3C,SAAA,CAAU,KAAA,EAAO,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA;EAAA,UAa5C,WAAA,CAAY,IAAA;AAAA;AAAA,UAYP,UAAA,WAAqB,KAAA;EACpC,KAAA,GAAQ,CAAA;EACR,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,KAAA;EACf,IAAA;EA/BsC;;;;;;;EAwCtC,SAAA,GAAY,MAAA;AAAA;AAAA,UAGG,IAAA,WAAe,KAAA;EAC9B,KAAA,GAAQ,CAAA;EACR,QAAA;IAAA,CACG,GAAA,WAAc,IAAA,CAAK,CAAA;EAAA;EAEtB,KAAA;IACE,KAAA,GAAQ,CAAA;IACR,IAAA;IACA,QAAA;MAAA,CACG,GAAA,WAAc,IAAA,CAAK,CAAA;IAAA;EAAA;EAGxB,QAAA;IACE,KAAA,EAAO,CAAA;EAAA;AAAA;;;;AAvLX;;;;;;;;;;;;;;;;;;;;;cCoBa,mBAAA;EAAA,0BACe,WAAA,EAAW,MAAA;EAAA,mBAElB,QAAA;EAAA,mBACA,SAAA;cAEP,QAAA,UAAkB,SAAA;EDzBJ;;;EAAA,ICiCtB,SAAA,CAAA;ED9BM;;;EAAA,ICqCN,UAAA,CAAA;EDnCG;;;;EC2CP,WAAA,CAAY,MAAA,EAAQ,MAAA;EDlCL;;;;;EC8Cf,OAAA,CAAQ,IAAA,WAAe,MAAA;EDsBmB;;;;ECoB1C,WAAA,CAAY,QAAA;EDwBQ;;;;EChBpB,SAAA,CAAU,IAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/router/providers/RouterProvider.ts","../../src/router/TemplatedPathParser.ts"],"mappings":";uBAEsB,cAAA,WAAyB,KAAA,GAAQ,KAAA;EAAA,UAC3C,cAAA,EAAgB,MAAA;EAAA,UAEhB,IAAA,EAAM,IAAA,CAAK,CAAA;EAAA,UACX,KAAA,EAAK,GAAA,SAAA,UAAA,CAAA,CAAA;EAAA,UACL,YAAA;EAEH,KAAA,CAAM,IAAA,WAAe,UAAA,CAAW,CAAA;EAAA,UAY7B,IAAA,CAAK,IAAA;EAAA,UAML,IAAA,CAAK,KAAA,EAAO,CAAA;EAAA,UA+DZ,gBAAA,CAAiB,IAAA,WAAe,UAAA,CAAW,CAAA;EAAA,UA4C3C,SAAA,CAAU,KAAA,EAAO,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA;EAAA,UAa5C,WAAA,CAAY,IAAA;AAAA;AAAA,UAYP,UAAA,WAAqB,KAAA;EACpC,KAAA,GAAQ,CAAA;EACR,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,KAAA;EACf,IAAA;EA/B2B;;;;;;;EAwC3B,SAAA,GAAY,MAAA;AAAA;AAAA,UAGG,IAAA,WAAe,KAAA;EAC9B,KAAA,GAAQ,CAAA;EACR,QAAA;IAAA,CACG,GAAA,WAAc,IAAA,CAAK,CAAA;EAAA;EAEtB,KAAA;IACE,KAAA,GAAQ,CAAA;IACR,IAAA;IACA,QAAA;MAAA,CACG,GAAA,WAAc,IAAA,CAAK,CAAA;IAAA;EAAA;EAGxB,QAAA;IACE,KAAA,EAAO,CAAA;EAAA;AAAA;;;;AA5LX;;;;;;;;;;;;;;;;;;;;;cCsBa,mBAAA;EAAA,0BACe,WAAA,EAAW,MAAA;EAAA,SAErB,QAAA;EAAA,SACA,SAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,mBACG,YAAA,EAAc,MAAA;cAErB,QAAA,UAAkB,SAAA;ED5BT;;;;EC+CrB,WAAA,CAAY,MAAA,EAAQ,MAAA;ED7CV;;;;;;;EC2DV,OAAA,CAAQ,IAAA,WAAe,MAAA;EDvCD;;;;EC4DtB,WAAA,CAAY,QAAA;EDGyC;;;;ECKrD,SAAA,CAAU,IAAA;EAAA,UAaA,iBAAA,CAAA,GAAqB,MAAA;EAAA,UAerB,WAAA,CAAY,CAAA;AAAA"}
@@ -4,11 +4,21 @@ var RouterProvider = class {
4
4
  routePathRegex = /^\/[A-Za-z0-9._~!$&%'()*+,;=:@{}?/-]*$/;
5
5
  tree = { children: {} };
6
6
  cache = /* @__PURE__ */ new Map();
7
+ maxCacheSize = 1e4;
7
8
  match(path) {
8
- if (this.cache.has(path)) return this.cache.get(path);
9
- const result = this.mapParams(this.createRouteMatch(path));
10
- this.cache.set(path, result);
11
- return result;
9
+ const pathname = path.split("?", 1)[0];
10
+ const hit = this.cache.get(pathname);
11
+ if (hit) return {
12
+ route: hit.route,
13
+ params: { ...hit.params }
14
+ };
15
+ const result = this.mapParams(this.createRouteMatch(pathname));
16
+ if (this.cache.size >= this.maxCacheSize) this.cache.clear();
17
+ this.cache.set(pathname, result);
18
+ return {
19
+ route: result.route,
20
+ params: { ...result.params }
21
+ };
12
22
  }
13
23
  test(path) {
14
24
  if (!this.routePathRegex.test(path)) throw new AlephaError(`Route '${path}' is not valid`);
@@ -16,6 +26,7 @@ var RouterProvider = class {
16
26
  push(route) {
17
27
  const path = route.path.replaceAll("//", "/");
18
28
  this.test(path);
29
+ this.cache.clear();
19
30
  const parts = this.createParts(path);
20
31
  let cursor = this.tree;
21
32
  for (let i = 0; i < parts.length; i++) {
@@ -128,50 +139,41 @@ var RouterProvider = class {
128
139
  * parser.wildcardize("*"); // "cache:*:*"
129
140
  * ```
130
141
  */
131
- var TemplatedPathParser = class {
142
+ var TemplatedPathParser = class TemplatedPathParser {
132
143
  static PARAM_REGEX = /\{([^}]+)\}/g;
133
144
  template;
134
145
  separator;
146
+ paramNames;
147
+ hasParams;
148
+ extractRegex;
135
149
  constructor(template, separator = "/") {
150
+ if (separator.length !== 1) throw new AlephaError(`TemplatedPathParser separator must be a single character, got '${separator}'`);
136
151
  this.template = template;
137
152
  this.separator = separator;
138
- }
139
- /**
140
- * Returns true if the template contains at least one `{param}` placeholder.
141
- */
142
- get hasParams() {
143
- return /\{[^}]+\}/.test(this.template);
144
- }
145
- /**
146
- * Returns an ordered list of parameter names found in the template.
147
- */
148
- get paramNames() {
149
- return [...this.template.matchAll(/\{([^}]+)\}/g)].map((m) => m[1]);
153
+ this.paramNames = [...template.matchAll(TemplatedPathParser.PARAM_REGEX)].map((m) => m[1]);
154
+ this.hasParams = this.paramNames.length > 0;
155
+ this.extractRegex = this.hasParams ? this.buildExtractRegex() : null;
150
156
  }
151
157
  /**
152
158
  * Replaces each `{param}` in the template with the corresponding value
153
159
  * from the provided params record.
154
160
  */
155
161
  interpolate(params) {
156
- return this.template.replace(/\{([^}]+)\}/g, (_, name) => params[name] ?? `{${name}}`);
162
+ return this.template.replace(TemplatedPathParser.PARAM_REGEX, (_, name) => params[name] ?? `{${name}}`);
157
163
  }
158
164
  /**
159
165
  * Extracts parameter values from a concrete path by matching it against
160
- * the template structure. Returns an empty object when the template has
161
- * no parameters.
166
+ * the template structure.
167
+ *
168
+ * Returns `null` when the path does not match the template.
169
+ * Returns `{}` when the template has no parameters and the path matches.
162
170
  */
163
171
  extract(path) {
164
- const names = this.paramNames;
165
- if (names.length === 0) return {};
166
- const escapedSeparator = this.separator.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
167
- const regexSource = this.template.replace(/[.*+?^${}()|[\]\\]/g, (char) => {
168
- if (char === "{" || char === "}") return char;
169
- return `\\${char}`;
170
- }).replace(/\{([^}]+)\}/g, `([^${escapedSeparator}]+)`);
171
- const match = new RegExp(`^${regexSource}$`).exec(path);
172
- if (!match) return {};
172
+ if (!this.extractRegex) return path === this.template ? {} : null;
173
+ const match = this.extractRegex.exec(path);
174
+ if (!match) return null;
173
175
  const result = {};
174
- for (let i = 0; i < names.length; i++) result[names[i]] = match[i + 1];
176
+ for (let i = 0; i < this.paramNames.length; i++) result[this.paramNames[i]] = match[i + 1];
175
177
  return result;
176
178
  }
177
179
  /**
@@ -179,7 +181,7 @@ var TemplatedPathParser = class {
179
181
  * wildcard string. Defaults to `"+"` (MQTT-style).
180
182
  */
181
183
  wildcardize(wildcard = "+") {
182
- return this.template.replace(/\{[^}]+\}/g, wildcard);
184
+ return this.template.replace(TemplatedPathParser.PARAM_REGEX, wildcard);
183
185
  }
184
186
  /**
185
187
  * Normalises a path by collapsing repeated separators and stripping a
@@ -187,11 +189,22 @@ var TemplatedPathParser = class {
187
189
  */
188
190
  normalize(path) {
189
191
  const sep = this.separator;
190
- const escapedSep = sep.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
192
+ const escapedSep = this.escapeRegex(sep);
191
193
  let result = path.replace(new RegExp(`${escapedSep}{2,}`, "g"), sep);
192
194
  if (result.endsWith(sep) && result.length > sep.length) result = result.slice(0, -sep.length);
193
195
  return result;
194
196
  }
197
+ buildExtractRegex() {
198
+ const escapedSeparator = this.escapeRegex(this.separator);
199
+ const regexSource = this.template.replace(/[.*+?^${}()|[\]\\]/g, (char) => {
200
+ if (char === "{" || char === "}") return char;
201
+ return `\\${char}`;
202
+ }).replace(/\{[^}]+\}/g, `([^${escapedSeparator}]+)`);
203
+ return new RegExp(`^${regexSource}$`);
204
+ }
205
+ escapeRegex(s) {
206
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
207
+ }
195
208
  };
196
209
  //#endregion
197
210
  export { RouterProvider, TemplatedPathParser };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/router/providers/RouterProvider.ts","../../src/router/TemplatedPathParser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\n\nexport abstract class RouterProvider<T extends Route = Route> {\n protected routePathRegex: RegExp = /^\\/[A-Za-z0-9._~!$&%'()*+,;=:@{}?/-]*$/;\n\n protected tree: Tree<T> = { children: {} };\n protected cache = new Map<string, RouteMatch<T>>();\n\n public match(path: string): RouteMatch<T> {\n if (this.cache.has(path)) {\n return this.cache.get(path)!;\n }\n const result = this.mapParams(this.createRouteMatch(path));\n this.cache.set(path, result);\n return result;\n }\n\n protected test(path: string): void {\n if (!this.routePathRegex.test(path)) {\n throw new AlephaError(`Route '${path}' is not valid`);\n }\n }\n\n protected push(route: T): void {\n const path = route.path.replaceAll(\"//\", \"/\");\n\n this.test(path);\n\n const parts = this.createParts(path);\n\n let cursor = this.tree;\n for (let i = 0; i < parts.length; i++) {\n const isLast = i === parts.length - 1;\n let part = parts[i].toLowerCase(); // url is case-insensitive\n if (part === \"*\" && isLast) {\n cursor.wildcard = { route };\n break;\n }\n\n if (part.includes(\"*\")) {\n throw new AlephaError(`Route '${path}' has an invalid wildcard syntax`);\n }\n\n if (part.includes(\"{\") || part.includes(\"}\")) {\n if (part.startsWith(\"{\") && part.endsWith(\"}\")) {\n part = `:${part.slice(1, -1)}`; // convert {param} to :param\n } else {\n throw new AlephaError(`Route '${path}' has an invalid param syntax`);\n }\n }\n\n if (part.startsWith(\":\")) {\n const name = parts[i].slice(1).replaceAll(\"}\", \"\");\n if (!name) {\n throw new AlephaError(`Route '${path}' has an empty param name`);\n }\n if (!cursor.param) {\n cursor.param = { name, children: {} };\n } else if (cursor.param.name !== name) {\n // damn, 2 url params with different names\n // got this case with /customers/:id and /customers/:userId/payments\n route.mapParams ??= {};\n route.mapParams[cursor.param.name] = name;\n }\n\n if (isLast) {\n cursor.param.route = route;\n }\n\n cursor = cursor.param;\n continue;\n }\n\n if (!cursor.children[part]) {\n cursor.children[part] = { children: {} };\n }\n\n if (isLast) {\n cursor.children[part].route = route;\n }\n\n cursor = cursor.children[part];\n }\n }\n\n protected createRouteMatch(path: string): RouteMatch<T> {\n if (path[0] !== \"/\") {\n throw new AlephaError(`Path '${path}' must start with \"/\"`);\n }\n\n const parts = this.createParts(path);\n\n let cursor = this.tree;\n let wildcard: { route: T } | undefined;\n const params: Record<string, string> = {};\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i].toLowerCase(); // url is case-insensitive\n if (cursor.children[part]) {\n if (cursor.wildcard) {\n wildcard = cursor.wildcard;\n }\n cursor = cursor.children[part];\n } else if (cursor.param) {\n if (cursor.wildcard) {\n wildcard = cursor.wildcard;\n }\n params[cursor.param.name] = parts[i];\n cursor = cursor.param;\n } else if (cursor.wildcard) {\n params[\"*\"] = parts.slice(i).join(\"/\");\n return { route: cursor.wildcard.route, params };\n } else {\n return { route: wildcard?.route, params };\n }\n }\n\n if (!cursor?.route) {\n // when \"/a/*\" - trigger if \"/a\"\n if (cursor.wildcard) {\n return { route: cursor.wildcard.route, params };\n }\n // return deep wildcard or nothing\n return { route: wildcard?.route, params };\n }\n\n return { route: cursor.route, params };\n }\n\n protected mapParams(match: RouteMatch<T>): RouteMatch<T> {\n if (match.route?.mapParams && match.params) {\n for (const [key, value] of Object.entries(match.route.mapParams)) {\n if (match.params[key]) {\n match.params[value] = match.params[key];\n delete match.params[key];\n }\n }\n }\n\n return match;\n }\n\n protected createParts(path: string): string[] {\n let pathname = path.split(\"?\")[0].replaceAll(\"//\", \"/\");\n\n // remove trailing slash\n if (pathname.endsWith(\"/\") && pathname.length > 1) {\n pathname = pathname.slice(0, -1);\n }\n\n return pathname.split(\"/\").slice(1);\n }\n}\n\nexport interface RouteMatch<T extends Route> {\n route?: T;\n params?: Record<string, string>;\n}\n\nexport interface Route {\n path: string;\n\n /**\n * Rename a param in the route.\n * This is automatically filled when you have scenarios like:\n * `/customers/:id` and `/customers/:userId/payments`\n *\n * In this case, `:id` will be renamed to `:userId` in the second route.\n */\n mapParams?: Record<string, string>;\n}\n\nexport interface Tree<T extends Route> {\n route?: T;\n children: {\n [key: string]: Tree<T>;\n };\n param?: {\n route?: T;\n name: string;\n children: {\n [key: string]: Tree<T>;\n };\n };\n wildcard?: {\n route: T;\n };\n}\n","/**\n * Parses and manipulates templated paths with `{param}` placeholders.\n *\n * Used by both RouterProvider (HTTP routes) and TopicProvider (pub/sub topics)\n * to handle parameterized path templates in a unified way.\n *\n * @example\n * ```ts\n * const parser = new TemplatedPathParser(\"/users/{userId}/posts/{postId}\");\n * parser.interpolate({ userId: \"7\", postId: \"42\" }); // \"/users/7/posts/42\"\n * parser.extract(\"/users/7/posts/42\"); // { userId: \"7\", postId: \"42\" }\n * parser.wildcardize(\"+\"); // \"/users/+/posts/+\"\n * ```\n *\n * @example\n * ```ts\n * // Redis-style colon-separated keys\n * const parser = new TemplatedPathParser(\"cache:{namespace}:{key}\", \":\");\n * parser.interpolate({ namespace: \"users\", key: \"42\" }); // \"cache:users:42\"\n * parser.wildcardize(\"*\"); // \"cache:*:*\"\n * ```\n */\nexport class TemplatedPathParser {\n protected static readonly PARAM_REGEX = /\\{([^}]+)\\}/g;\n\n protected readonly template: string;\n protected readonly separator: string;\n\n constructor(template: string, separator = \"/\") {\n this.template = template;\n this.separator = separator;\n }\n\n /**\n * Returns true if the template contains at least one `{param}` placeholder.\n */\n get hasParams(): boolean {\n return /\\{[^}]+\\}/.test(this.template);\n }\n\n /**\n * Returns an ordered list of parameter names found in the template.\n */\n get paramNames(): string[] {\n return [...this.template.matchAll(/\\{([^}]+)\\}/g)].map((m) => m[1]);\n }\n\n /**\n * Replaces each `{param}` in the template with the corresponding value\n * from the provided params record.\n */\n interpolate(params: Record<string, string>): string {\n return this.template.replace(\n /\\{([^}]+)\\}/g,\n (_, name: string) => params[name] ?? `{${name}}`,\n );\n }\n\n /**\n * Extracts parameter values from a concrete path by matching it against\n * the template structure. Returns an empty object when the template has\n * no parameters.\n */\n extract(path: string): Record<string, string> {\n const names = this.paramNames;\n if (names.length === 0) {\n return {};\n }\n\n const escapedSeparator = this.separator.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n\n // Build a regex from the template: escape literal parts, replace {param} with a capture group\n const regexSource = this.template\n .replace(/[.*+?^${}()|[\\]\\\\]/g, (char) => {\n // Allow { and } through so we can then replace them as param groups\n if (char === \"{\" || char === \"}\") {\n return char;\n }\n return `\\\\${char}`;\n })\n // After escaping literal chars, replace {name} patterns with capture groups.\n // The separator is already escaped above, so we match anything that is not the separator.\n .replace(/\\{([^}]+)\\}/g, `([^${escapedSeparator}]+)`);\n\n const regex = new RegExp(`^${regexSource}$`);\n const match = regex.exec(path);\n\n if (!match) {\n return {};\n }\n\n const result: Record<string, string> = {};\n for (let i = 0; i < names.length; i++) {\n result[names[i]] = match[i + 1];\n }\n return result;\n }\n\n /**\n * Replaces each `{param}` placeholder in the template with the given\n * wildcard string. Defaults to `\"+\"` (MQTT-style).\n */\n wildcardize(wildcard = \"+\"): string {\n return this.template.replace(/\\{[^}]+\\}/g, wildcard);\n }\n\n /**\n * Normalises a path by collapsing repeated separators and stripping a\n * trailing separator (unless the path is just the separator itself).\n */\n normalize(path: string): string {\n const sep = this.separator;\n const escapedSep = sep.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n // Replace consecutive separators with a single one\n let result = path.replace(new RegExp(`${escapedSep}{2,}`, \"g\"), sep);\n\n // Strip trailing separator, but preserve a lone separator\n if (result.endsWith(sep) && result.length > sep.length) {\n result = result.slice(0, -sep.length);\n }\n\n return result;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/router/providers/RouterProvider.ts","../../src/router/TemplatedPathParser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\n\nexport abstract class RouterProvider<T extends Route = Route> {\n protected routePathRegex: RegExp = /^\\/[A-Za-z0-9._~!$&%'()*+,;=:@{}?/-]*$/;\n\n protected tree: Tree<T> = { children: {} };\n protected cache = new Map<string, RouteMatch<T>>();\n protected maxCacheSize = 10_000;\n\n public match(path: string): RouteMatch<T> {\n const pathname = path.split(\"?\", 1)[0];\n const hit = this.cache.get(pathname);\n if (hit) {\n return { route: hit.route, params: { ...hit.params } };\n }\n const result = this.mapParams(this.createRouteMatch(pathname));\n if (this.cache.size >= this.maxCacheSize) this.cache.clear();\n this.cache.set(pathname, result);\n return { route: result.route, params: { ...result.params } };\n }\n\n protected test(path: string): void {\n if (!this.routePathRegex.test(path)) {\n throw new AlephaError(`Route '${path}' is not valid`);\n }\n }\n\n protected push(route: T): void {\n const path = route.path.replaceAll(\"//\", \"/\");\n\n this.test(path);\n this.cache.clear();\n\n const parts = this.createParts(path);\n\n let cursor = this.tree;\n for (let i = 0; i < parts.length; i++) {\n const isLast = i === parts.length - 1;\n let part = parts[i].toLowerCase(); // url is case-insensitive\n if (part === \"*\" && isLast) {\n cursor.wildcard = { route };\n break;\n }\n\n if (part.includes(\"*\")) {\n throw new AlephaError(`Route '${path}' has an invalid wildcard syntax`);\n }\n\n if (part.includes(\"{\") || part.includes(\"}\")) {\n if (part.startsWith(\"{\") && part.endsWith(\"}\")) {\n part = `:${part.slice(1, -1)}`; // convert {param} to :param\n } else {\n throw new AlephaError(`Route '${path}' has an invalid param syntax`);\n }\n }\n\n if (part.startsWith(\":\")) {\n const name = parts[i].slice(1).replaceAll(\"}\", \"\");\n if (!name) {\n throw new AlephaError(`Route '${path}' has an empty param name`);\n }\n if (!cursor.param) {\n cursor.param = { name, children: {} };\n } else if (cursor.param.name !== name) {\n // damn, 2 url params with different names\n // got this case with /customers/:id and /customers/:userId/payments\n route.mapParams ??= {};\n route.mapParams[cursor.param.name] = name;\n }\n\n if (isLast) {\n cursor.param.route = route;\n }\n\n cursor = cursor.param;\n continue;\n }\n\n if (!cursor.children[part]) {\n cursor.children[part] = { children: {} };\n }\n\n if (isLast) {\n cursor.children[part].route = route;\n }\n\n cursor = cursor.children[part];\n }\n }\n\n protected createRouteMatch(path: string): RouteMatch<T> {\n if (path[0] !== \"/\") {\n throw new AlephaError(`Path '${path}' must start with \"/\"`);\n }\n\n const parts = this.createParts(path);\n\n let cursor = this.tree;\n let wildcard: { route: T } | undefined;\n const params: Record<string, string> = {};\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i].toLowerCase(); // url is case-insensitive\n if (cursor.children[part]) {\n if (cursor.wildcard) {\n wildcard = cursor.wildcard;\n }\n cursor = cursor.children[part];\n } else if (cursor.param) {\n if (cursor.wildcard) {\n wildcard = cursor.wildcard;\n }\n params[cursor.param.name] = parts[i];\n cursor = cursor.param;\n } else if (cursor.wildcard) {\n params[\"*\"] = parts.slice(i).join(\"/\");\n return { route: cursor.wildcard.route, params };\n } else {\n return { route: wildcard?.route, params };\n }\n }\n\n if (!cursor?.route) {\n // when \"/a/*\" - trigger if \"/a\"\n if (cursor.wildcard) {\n return { route: cursor.wildcard.route, params };\n }\n // return deep wildcard or nothing\n return { route: wildcard?.route, params };\n }\n\n return { route: cursor.route, params };\n }\n\n protected mapParams(match: RouteMatch<T>): RouteMatch<T> {\n if (match.route?.mapParams && match.params) {\n for (const [key, value] of Object.entries(match.route.mapParams)) {\n if (match.params[key]) {\n match.params[value] = match.params[key];\n delete match.params[key];\n }\n }\n }\n\n return match;\n }\n\n protected createParts(path: string): string[] {\n let pathname = path.split(\"?\")[0].replaceAll(\"//\", \"/\");\n\n // remove trailing slash\n if (pathname.endsWith(\"/\") && pathname.length > 1) {\n pathname = pathname.slice(0, -1);\n }\n\n return pathname.split(\"/\").slice(1);\n }\n}\n\nexport interface RouteMatch<T extends Route> {\n route?: T;\n params?: Record<string, string>;\n}\n\nexport interface Route {\n path: string;\n\n /**\n * Rename a param in the route.\n * This is automatically filled when you have scenarios like:\n * `/customers/:id` and `/customers/:userId/payments`\n *\n * In this case, `:id` will be renamed to `:userId` in the second route.\n */\n mapParams?: Record<string, string>;\n}\n\nexport interface Tree<T extends Route> {\n route?: T;\n children: {\n [key: string]: Tree<T>;\n };\n param?: {\n route?: T;\n name: string;\n children: {\n [key: string]: Tree<T>;\n };\n };\n wildcard?: {\n route: T;\n };\n}\n","import { AlephaError } from \"alepha\";\n\n/**\n * Parses and manipulates templated paths with `{param}` placeholders.\n *\n * Used by both RouterProvider (HTTP routes) and TopicProvider (pub/sub topics)\n * to handle parameterized path templates in a unified way.\n *\n * @example\n * ```ts\n * const parser = new TemplatedPathParser(\"/users/{userId}/posts/{postId}\");\n * parser.interpolate({ userId: \"7\", postId: \"42\" }); // \"/users/7/posts/42\"\n * parser.extract(\"/users/7/posts/42\"); // { userId: \"7\", postId: \"42\" }\n * parser.wildcardize(\"+\"); // \"/users/+/posts/+\"\n * ```\n *\n * @example\n * ```ts\n * // Redis-style colon-separated keys\n * const parser = new TemplatedPathParser(\"cache:{namespace}:{key}\", \":\");\n * parser.interpolate({ namespace: \"users\", key: \"42\" }); // \"cache:users:42\"\n * parser.wildcardize(\"*\"); // \"cache:*:*\"\n * ```\n */\nexport class TemplatedPathParser {\n protected static readonly PARAM_REGEX = /\\{([^}]+)\\}/g;\n\n public readonly template: string;\n public readonly separator: string;\n public readonly paramNames: readonly string[];\n public readonly hasParams: boolean;\n protected readonly extractRegex: RegExp | null;\n\n constructor(template: string, separator = \"/\") {\n if (separator.length !== 1) {\n throw new AlephaError(\n `TemplatedPathParser separator must be a single character, got '${separator}'`,\n );\n }\n this.template = template;\n this.separator = separator;\n this.paramNames = [\n ...template.matchAll(TemplatedPathParser.PARAM_REGEX),\n ].map((m) => m[1]);\n this.hasParams = this.paramNames.length > 0;\n this.extractRegex = this.hasParams ? this.buildExtractRegex() : null;\n }\n\n /**\n * Replaces each `{param}` in the template with the corresponding value\n * from the provided params record.\n */\n interpolate(params: Record<string, string>): string {\n return this.template.replace(\n TemplatedPathParser.PARAM_REGEX,\n (_, name: string) => params[name] ?? `{${name}}`,\n );\n }\n\n /**\n * Extracts parameter values from a concrete path by matching it against\n * the template structure.\n *\n * Returns `null` when the path does not match the template.\n * Returns `{}` when the template has no parameters and the path matches.\n */\n extract(path: string): Record<string, string> | null {\n if (!this.extractRegex) {\n return path === this.template ? {} : null;\n }\n\n const match = this.extractRegex.exec(path);\n if (!match) {\n return null;\n }\n\n const result: Record<string, string> = {};\n for (let i = 0; i < this.paramNames.length; i++) {\n result[this.paramNames[i]] = match[i + 1];\n }\n return result;\n }\n\n /**\n * Replaces each `{param}` placeholder in the template with the given\n * wildcard string. Defaults to `\"+\"` (MQTT-style).\n */\n wildcardize(wildcard = \"+\"): string {\n return this.template.replace(TemplatedPathParser.PARAM_REGEX, wildcard);\n }\n\n /**\n * Normalises a path by collapsing repeated separators and stripping a\n * trailing separator (unless the path is just the separator itself).\n */\n normalize(path: string): string {\n const sep = this.separator;\n const escapedSep = this.escapeRegex(sep);\n\n let result = path.replace(new RegExp(`${escapedSep}{2,}`, \"g\"), sep);\n\n if (result.endsWith(sep) && result.length > sep.length) {\n result = result.slice(0, -sep.length);\n }\n\n return result;\n }\n\n protected buildExtractRegex(): RegExp {\n const escapedSeparator = this.escapeRegex(this.separator);\n\n const regexSource = this.template\n .replace(/[.*+?^${}()|[\\]\\\\]/g, (char) => {\n if (char === \"{\" || char === \"}\") {\n return char;\n }\n return `\\\\${char}`;\n })\n .replace(/\\{[^}]+\\}/g, `([^${escapedSeparator}]+)`);\n\n return new RegExp(`^${regexSource}$`);\n }\n\n protected escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n }\n}\n"],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as _$alepha from "alepha";
2
2
  import { Alepha, Async, KIND, Primitive, Static } from "alepha";
3
3
  import { DateTime, DateTimeProvider, DurationLike } from "alepha/datetime";
4
4
  import * as _$alepha_logger0 from "alepha/logger";
5
+ import { Cron } from "cron-schedule";
5
6
  import * as _$dayjs from "dayjs";
6
7
 
7
8
  //#region ../../src/scheduler/constants/CRON.d.ts
@@ -14,89 +15,6 @@ declare const CRON: {
14
15
  EVERY_DAY_AT_MIDNIGHT: string;
15
16
  };
16
17
  //#endregion
17
- //#region ../../../../node_modules/cron-schedule/dist/cron.d.ts
18
- /**
19
- * An object with contains for each element of a date, which values are allowed.
20
- * Everything starting at 0, except for days.
21
- */
22
- interface ICronDefinition {
23
- readonly seconds: Set<number>;
24
- readonly minutes: Set<number>;
25
- readonly hours: Set<number>;
26
- readonly days: Set<number>;
27
- readonly months: Set<number>;
28
- readonly weekdays: Set<number>;
29
- }
30
- declare class Cron {
31
- readonly seconds: ReadonlyArray<number>;
32
- readonly minutes: ReadonlyArray<number>;
33
- readonly hours: ReadonlyArray<number>;
34
- readonly days: ReadonlyArray<number>;
35
- readonly months: ReadonlyArray<number>;
36
- readonly weekdays: ReadonlyArray<number>;
37
- readonly reversed: {
38
- seconds: ReadonlyArray<number>;
39
- minutes: ReadonlyArray<number>;
40
- hours: ReadonlyArray<number>;
41
- days: ReadonlyArray<number>;
42
- months: ReadonlyArray<number>;
43
- weekdays: ReadonlyArray<number>;
44
- };
45
- constructor({
46
- seconds,
47
- minutes,
48
- hours,
49
- days,
50
- months,
51
- weekdays
52
- }: ICronDefinition);
53
- /**
54
- * Find the next or previous hour, starting from the given start hour that matches the hour constraint.
55
- * startHour itself might also be allowed.
56
- */
57
- private findAllowedHour;
58
- /**
59
- * Find the next or previous minute, starting from the given start minute that matches the minute constraint.
60
- * startMinute itself might also be allowed.
61
- */
62
- private findAllowedMinute;
63
- /**
64
- * Find the next or previous second, starting from the given start second that matches the second constraint.
65
- * startSecond itself IS NOT allowed.
66
- */
67
- private findAllowedSecond;
68
- /**
69
- * Find the next or previous time, starting from the given start time that matches the hour, minute
70
- * and second constraints. startTime itself might also be allowed.
71
- */
72
- private findAllowedTime;
73
- /**
74
- * Find the next or previous day in the given month, starting from the given startDay
75
- * that matches either the day or the weekday constraint. startDay itself might also be allowed.
76
- */
77
- private findAllowedDayInMonth;
78
- /** Gets the next date starting from the given start date or now. */
79
- getNextDate(startDate?: Date): Date;
80
- /** Gets the specified amount of future dates starting from the given start date or now. */
81
- getNextDates(amount: number, startDate?: Date): Date[];
82
- /**
83
- * Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.
84
- * The iterator runs until the optional endDate is reached or forever.
85
- */
86
- getNextDatesIterator(startDate?: Date, endDate?: Date): Generator<Date, undefined, undefined>;
87
- /** Gets the previous date starting from the given start date or now. */
88
- getPrevDate(startDate?: Date): Date;
89
- /** Gets the specified amount of previous dates starting from the given start date or now. */
90
- getPrevDates(amount: number, startDate?: Date): Date[];
91
- /**
92
- * Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.
93
- * The iterator runs until the optional endDate is reached or forever.
94
- */
95
- getPrevDatesIterator(startDate?: Date, endDate?: Date): Generator<Date, undefined, undefined>;
96
- /** Returns true when there is a cron date at the given date. */
97
- matchDate(date: Date): boolean;
98
- }
99
- //#endregion
100
18
  //#region ../../src/scheduler/providers/CronProvider.d.ts
101
19
  declare class CronProvider {
102
20
  protected readonly dt: DateTimeProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["ICronDefinition","Set","seconds","minutes","hours","days","months","weekdays","Cron","ReadonlyArray","Date","Generator","reversed","constructor","findAllowedHour","findAllowedMinute","findAllowedSecond","findAllowedTime","findAllowedDayInMonth","getNextDate","startDate","getNextDates","amount","getNextDatesIterator","endDate","getPrevDate","getPrevDates","getPrevDatesIterator","matchDate","date"],"sources":["../../src/scheduler/constants/CRON.ts","../../../../node_modules/cron-schedule/dist/cron.d.ts","../../src/scheduler/providers/CronProvider.ts","../../src/scheduler/primitives/$scheduler.ts","../../src/scheduler/providers/WorkerdCronProvider.ts","../../src/scheduler/index.ts"],"x_google_ignoreList":[1],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/scheduler/constants/CRON.ts","../../src/scheduler/providers/CronProvider.ts","../../src/scheduler/primitives/$scheduler.ts","../../src/scheduler/providers/WorkerdCronProvider.ts","../../src/scheduler/index.ts"],"mappings":"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"}