alepha 0.15.0 → 0.15.2

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 (551) hide show
  1. package/README.md +43 -98
  2. package/dist/api/audits/index.d.ts +630 -653
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +12 -35
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +365 -358
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +12 -5
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +255 -248
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/jobs/index.js +10 -3
  13. package/dist/api/jobs/index.js.map +1 -1
  14. package/dist/api/keys/index.d.ts +413 -0
  15. package/dist/api/keys/index.d.ts.map +1 -0
  16. package/dist/api/keys/index.js +476 -0
  17. package/dist/api/keys/index.js.map +1 -0
  18. package/dist/api/notifications/index.browser.js +4 -4
  19. package/dist/api/notifications/index.browser.js.map +1 -1
  20. package/dist/api/notifications/index.d.ts +84 -78
  21. package/dist/api/notifications/index.d.ts.map +1 -1
  22. package/dist/api/notifications/index.js +14 -8
  23. package/dist/api/notifications/index.js.map +1 -1
  24. package/dist/api/parameters/index.d.ts +528 -535
  25. package/dist/api/parameters/index.d.ts.map +1 -1
  26. package/dist/api/parameters/index.js +30 -37
  27. package/dist/api/parameters/index.js.map +1 -1
  28. package/dist/api/users/index.d.ts +1221 -910
  29. package/dist/api/users/index.d.ts.map +1 -1
  30. package/dist/api/users/index.js +2556 -248
  31. package/dist/api/users/index.js.map +1 -1
  32. package/dist/api/verifications/index.d.ts +142 -136
  33. package/dist/api/verifications/index.d.ts.map +1 -1
  34. package/dist/api/verifications/index.js +12 -4
  35. package/dist/api/verifications/index.js.map +1 -1
  36. package/dist/batch/index.d.ts +142 -162
  37. package/dist/batch/index.d.ts.map +1 -1
  38. package/dist/batch/index.js +31 -44
  39. package/dist/batch/index.js.map +1 -1
  40. package/dist/bucket/index.d.ts +595 -171
  41. package/dist/bucket/index.d.ts.map +1 -1
  42. package/dist/bucket/index.js +1856 -12
  43. package/dist/bucket/index.js.map +1 -1
  44. package/dist/cache/core/index.d.ts +225 -53
  45. package/dist/cache/core/index.d.ts.map +1 -1
  46. package/dist/cache/core/index.js +213 -7
  47. package/dist/cache/core/index.js.map +1 -1
  48. package/dist/cache/redis/index.d.ts +1 -0
  49. package/dist/cache/redis/index.d.ts.map +1 -1
  50. package/dist/cache/redis/index.js +6 -2
  51. package/dist/cache/redis/index.js.map +1 -1
  52. package/dist/cli/index.d.ts +834 -226
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +2872 -417
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/command/index.d.ts +458 -310
  57. package/dist/command/index.d.ts.map +1 -1
  58. package/dist/command/index.js +2011 -76
  59. package/dist/command/index.js.map +1 -1
  60. package/dist/core/index.browser.js +309 -97
  61. package/dist/core/index.browser.js.map +1 -1
  62. package/dist/core/index.d.ts +796 -701
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +329 -97
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/index.native.js +309 -97
  67. package/dist/core/index.native.js.map +1 -1
  68. package/dist/datetime/index.d.ts +59 -44
  69. package/dist/datetime/index.d.ts.map +1 -1
  70. package/dist/datetime/index.js +15 -0
  71. package/dist/datetime/index.js.map +1 -1
  72. package/dist/email/index.d.ts +314 -19
  73. package/dist/email/index.d.ts.map +1 -1
  74. package/dist/email/index.js +1852 -7
  75. package/dist/email/index.js.map +1 -1
  76. package/dist/fake/index.d.ts +5500 -5418
  77. package/dist/fake/index.d.ts.map +1 -1
  78. package/dist/fake/index.js +113 -42
  79. package/dist/fake/index.js.map +1 -1
  80. package/dist/lock/core/index.d.ts +219 -212
  81. package/dist/lock/core/index.d.ts.map +1 -1
  82. package/dist/lock/core/index.js +11 -4
  83. package/dist/lock/core/index.js.map +1 -1
  84. package/dist/lock/redis/index.d.ts.map +1 -1
  85. package/dist/logger/index.d.ts +41 -90
  86. package/dist/logger/index.d.ts.map +1 -1
  87. package/dist/logger/index.js +15 -68
  88. package/dist/logger/index.js.map +1 -1
  89. package/dist/mcp/index.d.ts +228 -230
  90. package/dist/mcp/index.d.ts.map +1 -1
  91. package/dist/mcp/index.js +32 -31
  92. package/dist/mcp/index.js.map +1 -1
  93. package/dist/orm/index.browser.js +12 -12
  94. package/dist/orm/index.browser.js.map +1 -1
  95. package/dist/orm/index.bun.js +90 -80
  96. package/dist/orm/index.bun.js.map +1 -1
  97. package/dist/orm/index.d.ts +1434 -1459
  98. package/dist/orm/index.d.ts.map +1 -1
  99. package/dist/orm/index.js +112 -130
  100. package/dist/orm/index.js.map +1 -1
  101. package/dist/queue/core/index.d.ts +262 -254
  102. package/dist/queue/core/index.d.ts.map +1 -1
  103. package/dist/queue/core/index.js +14 -6
  104. package/dist/queue/core/index.js.map +1 -1
  105. package/dist/queue/redis/index.d.ts.map +1 -1
  106. package/dist/react/auth/index.browser.js +108 -0
  107. package/dist/react/auth/index.browser.js.map +1 -0
  108. package/dist/react/auth/index.d.ts +100 -0
  109. package/dist/react/auth/index.d.ts.map +1 -0
  110. package/dist/react/auth/index.js +145 -0
  111. package/dist/react/auth/index.js.map +1 -0
  112. package/dist/react/core/index.d.ts +469 -0
  113. package/dist/react/core/index.d.ts.map +1 -0
  114. package/dist/react/core/index.js +464 -0
  115. package/dist/react/core/index.js.map +1 -0
  116. package/dist/react/form/index.d.ts +232 -0
  117. package/dist/react/form/index.d.ts.map +1 -0
  118. package/dist/react/form/index.js +432 -0
  119. package/dist/react/form/index.js.map +1 -0
  120. package/dist/react/head/index.browser.js +423 -0
  121. package/dist/react/head/index.browser.js.map +1 -0
  122. package/dist/react/head/index.d.ts +288 -0
  123. package/dist/react/head/index.d.ts.map +1 -0
  124. package/dist/react/head/index.js +465 -0
  125. package/dist/react/head/index.js.map +1 -0
  126. package/dist/react/i18n/index.d.ts +175 -0
  127. package/dist/react/i18n/index.d.ts.map +1 -0
  128. package/dist/react/i18n/index.js +224 -0
  129. package/dist/react/i18n/index.js.map +1 -0
  130. package/dist/react/router/index.browser.js +1980 -0
  131. package/dist/react/router/index.browser.js.map +1 -0
  132. package/dist/react/router/index.d.ts +2068 -0
  133. package/dist/react/router/index.d.ts.map +1 -0
  134. package/dist/react/router/index.js +4932 -0
  135. package/dist/react/router/index.js.map +1 -0
  136. package/dist/react/websocket/index.d.ts +117 -0
  137. package/dist/react/websocket/index.d.ts.map +1 -0
  138. package/dist/react/websocket/index.js +107 -0
  139. package/dist/react/websocket/index.js.map +1 -0
  140. package/dist/redis/index.bun.js +4 -0
  141. package/dist/redis/index.bun.js.map +1 -1
  142. package/dist/redis/index.d.ts +127 -130
  143. package/dist/redis/index.d.ts.map +1 -1
  144. package/dist/redis/index.js +16 -25
  145. package/dist/redis/index.js.map +1 -1
  146. package/dist/retry/index.d.ts +80 -71
  147. package/dist/retry/index.d.ts.map +1 -1
  148. package/dist/retry/index.js +11 -2
  149. package/dist/retry/index.js.map +1 -1
  150. package/dist/router/index.d.ts +6 -6
  151. package/dist/router/index.d.ts.map +1 -1
  152. package/dist/scheduler/index.d.ts +119 -28
  153. package/dist/scheduler/index.d.ts.map +1 -1
  154. package/dist/scheduler/index.js +404 -3
  155. package/dist/scheduler/index.js.map +1 -1
  156. package/dist/security/index.d.ts +642 -228
  157. package/dist/security/index.d.ts.map +1 -1
  158. package/dist/security/index.js +1579 -37
  159. package/dist/security/index.js.map +1 -1
  160. package/dist/server/auth/index.d.ts +1141 -111
  161. package/dist/server/auth/index.d.ts.map +1 -1
  162. package/dist/server/auth/index.js +1261 -25
  163. package/dist/server/auth/index.js.map +1 -1
  164. package/dist/server/cache/index.d.ts +63 -78
  165. package/dist/server/cache/index.d.ts.map +1 -1
  166. package/dist/server/cache/index.js +7 -22
  167. package/dist/server/cache/index.js.map +1 -1
  168. package/dist/server/compress/index.d.ts +13 -5
  169. package/dist/server/compress/index.d.ts.map +1 -1
  170. package/dist/server/compress/index.js +10 -2
  171. package/dist/server/compress/index.js.map +1 -1
  172. package/dist/server/cookies/index.d.ts +46 -22
  173. package/dist/server/cookies/index.d.ts.map +1 -1
  174. package/dist/server/cookies/index.js +7 -5
  175. package/dist/server/cookies/index.js.map +1 -1
  176. package/dist/server/core/index.d.ts +307 -196
  177. package/dist/server/core/index.d.ts.map +1 -1
  178. package/dist/server/core/index.js +271 -38
  179. package/dist/server/core/index.js.map +1 -1
  180. package/dist/server/cors/index.d.ts +24 -34
  181. package/dist/server/cors/index.d.ts.map +1 -1
  182. package/dist/server/cors/index.js +7 -21
  183. package/dist/server/cors/index.js.map +1 -1
  184. package/dist/server/health/index.d.ts +25 -19
  185. package/dist/server/health/index.d.ts.map +1 -1
  186. package/dist/server/health/index.js +8 -2
  187. package/dist/server/health/index.js.map +1 -1
  188. package/dist/server/helmet/index.d.ts +13 -5
  189. package/dist/server/helmet/index.d.ts.map +1 -1
  190. package/dist/server/helmet/index.js +11 -3
  191. package/dist/server/helmet/index.js.map +1 -1
  192. package/dist/server/links/index.browser.js +9 -1
  193. package/dist/server/links/index.browser.js.map +1 -1
  194. package/dist/server/links/index.d.ts +133 -128
  195. package/dist/server/links/index.d.ts.map +1 -1
  196. package/dist/server/links/index.js +24 -11
  197. package/dist/server/links/index.js.map +1 -1
  198. package/dist/server/metrics/index.d.ts +524 -4
  199. package/dist/server/metrics/index.d.ts.map +1 -1
  200. package/dist/server/metrics/index.js +4472 -7
  201. package/dist/server/metrics/index.js.map +1 -1
  202. package/dist/server/multipart/index.d.ts +15 -9
  203. package/dist/server/multipart/index.d.ts.map +1 -1
  204. package/dist/server/multipart/index.js +9 -3
  205. package/dist/server/multipart/index.js.map +1 -1
  206. package/dist/server/proxy/index.d.ts +110 -104
  207. package/dist/server/proxy/index.d.ts.map +1 -1
  208. package/dist/server/proxy/index.js +8 -2
  209. package/dist/server/proxy/index.js.map +1 -1
  210. package/dist/server/rate-limit/index.d.ts +46 -51
  211. package/dist/server/rate-limit/index.d.ts.map +1 -1
  212. package/dist/server/rate-limit/index.js +18 -55
  213. package/dist/server/rate-limit/index.js.map +1 -1
  214. package/dist/server/static/index.d.ts +181 -48
  215. package/dist/server/static/index.d.ts.map +1 -1
  216. package/dist/server/static/index.js +1848 -5
  217. package/dist/server/static/index.js.map +1 -1
  218. package/dist/server/swagger/index.d.ts +348 -53
  219. package/dist/server/swagger/index.d.ts.map +1 -1
  220. package/dist/server/swagger/index.js +1849 -6
  221. package/dist/server/swagger/index.js.map +1 -1
  222. package/dist/sms/index.d.ts +312 -18
  223. package/dist/sms/index.d.ts.map +1 -1
  224. package/dist/sms/index.js +1854 -10
  225. package/dist/sms/index.js.map +1 -1
  226. package/dist/system/index.browser.js +496 -0
  227. package/dist/system/index.browser.js.map +1 -0
  228. package/dist/system/index.d.ts +1158 -0
  229. package/dist/system/index.d.ts.map +1 -0
  230. package/dist/{file → system}/index.js +412 -20
  231. package/dist/system/index.js.map +1 -0
  232. package/dist/thread/index.d.ts +82 -73
  233. package/dist/thread/index.d.ts.map +1 -1
  234. package/dist/thread/index.js +13 -4
  235. package/dist/thread/index.js.map +1 -1
  236. package/dist/topic/core/index.d.ts +330 -323
  237. package/dist/topic/core/index.d.ts.map +1 -1
  238. package/dist/topic/core/index.js +12 -5
  239. package/dist/topic/core/index.js.map +1 -1
  240. package/dist/topic/redis/index.d.ts +6 -6
  241. package/dist/topic/redis/index.d.ts.map +1 -1
  242. package/dist/vite/index.d.ts +163 -5825
  243. package/dist/vite/index.d.ts.map +1 -1
  244. package/dist/vite/index.js +130 -477
  245. package/dist/vite/index.js.map +1 -1
  246. package/dist/websocket/index.browser.js +3 -3
  247. package/dist/websocket/index.browser.js.map +1 -1
  248. package/dist/websocket/index.d.ts +287 -283
  249. package/dist/websocket/index.d.ts.map +1 -1
  250. package/dist/websocket/index.js +15 -11
  251. package/dist/websocket/index.js.map +1 -1
  252. package/package.json +86 -17
  253. package/src/api/audits/index.ts +10 -33
  254. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  255. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  256. package/src/api/files/controllers/FileController.spec.ts +1 -1
  257. package/src/api/files/index.ts +10 -3
  258. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  259. package/src/api/files/services/FileService.spec.ts +1 -1
  260. package/src/api/jobs/index.ts +10 -3
  261. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  262. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  263. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  264. package/src/api/keys/index.ts +49 -0
  265. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  266. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  267. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  268. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  269. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  270. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  271. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  272. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  273. package/src/api/keys/services/ApiKeyService.ts +306 -0
  274. package/src/api/logs/TODO.md +52 -0
  275. package/src/api/notifications/index.ts +10 -4
  276. package/src/api/parameters/index.ts +9 -30
  277. package/src/api/parameters/primitives/$config.ts +12 -4
  278. package/src/api/parameters/services/ConfigStore.ts +9 -3
  279. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  280. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  281. package/src/api/users/index.ts +14 -3
  282. package/src/api/users/primitives/$realm.ts +33 -5
  283. package/src/api/users/providers/RealmProvider.ts +1 -12
  284. package/src/api/users/services/SessionService.ts +1 -11
  285. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  286. package/src/api/verifications/index.ts +10 -4
  287. package/src/batch/index.ts +9 -36
  288. package/src/batch/primitives/$batch.ts +0 -8
  289. package/src/batch/providers/BatchProvider.ts +29 -2
  290. package/src/bucket/__tests__/shared.ts +1 -1
  291. package/src/bucket/index.ts +13 -6
  292. package/src/bucket/primitives/$bucket.ts +1 -1
  293. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  294. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  295. package/src/cache/core/__tests__/shared.ts +30 -0
  296. package/src/cache/core/index.ts +11 -6
  297. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  298. package/src/cache/core/providers/CacheProvider.ts +17 -0
  299. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  300. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  301. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  302. package/src/cli/apps/AlephaCli.ts +3 -16
  303. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -2
  304. package/src/cli/atoms/appEntryOptions.ts +13 -0
  305. package/src/cli/atoms/buildOptions.ts +1 -1
  306. package/src/cli/atoms/changelogOptions.ts +1 -1
  307. package/src/cli/commands/build.ts +64 -52
  308. package/src/cli/commands/db.ts +17 -11
  309. package/src/cli/commands/deploy.ts +1 -1
  310. package/src/cli/commands/dev.ts +13 -49
  311. package/src/cli/commands/gen/env.ts +6 -3
  312. package/src/cli/commands/gen/openapi.ts +5 -2
  313. package/src/cli/commands/init.spec.ts +544 -0
  314. package/src/cli/commands/init.ts +101 -58
  315. package/src/cli/commands/lint.ts +8 -2
  316. package/src/cli/commands/typecheck.ts +11 -0
  317. package/src/cli/defineConfig.ts +9 -0
  318. package/src/cli/index.ts +2 -1
  319. package/src/cli/providers/AppEntryProvider.ts +131 -0
  320. package/src/cli/providers/ViteBuildProvider.ts +40 -0
  321. package/src/cli/providers/ViteDevServerProvider.ts +378 -0
  322. package/src/cli/services/AlephaCliUtils.ts +39 -93
  323. package/src/cli/services/PackageManagerUtils.ts +140 -17
  324. package/src/cli/services/ProjectScaffolder.ts +169 -101
  325. package/src/cli/services/ViteUtils.ts +82 -0
  326. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +41 -28
  327. package/src/cli/{assets → templates}/apiHelloControllerTs.ts +2 -1
  328. package/src/cli/{assets → templates}/biomeJson.ts +2 -1
  329. package/src/cli/{assets → templates}/dummySpecTs.ts +2 -1
  330. package/src/cli/{assets → templates}/editorconfig.ts +2 -1
  331. package/src/cli/templates/gitignore.ts +39 -0
  332. package/src/cli/{assets → templates}/mainBrowserTs.ts +2 -1
  333. package/src/cli/templates/mainCss.ts +33 -0
  334. package/src/cli/templates/mainServerTs.ts +33 -0
  335. package/src/cli/{assets → templates}/tsconfigJson.ts +2 -1
  336. package/src/cli/templates/webAppRouterTs.ts +50 -0
  337. package/src/cli/templates/webHelloComponentTsx.ts +20 -0
  338. package/src/command/helpers/Runner.spec.ts +4 -0
  339. package/src/command/helpers/Runner.ts +3 -21
  340. package/src/command/index.ts +12 -4
  341. package/src/command/providers/CliProvider.spec.ts +1067 -0
  342. package/src/command/providers/CliProvider.ts +203 -40
  343. package/src/core/Alepha.ts +3 -9
  344. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  345. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  346. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  347. package/src/core/index.shared.ts +1 -0
  348. package/src/core/index.ts +20 -0
  349. package/src/core/primitives/$module.ts +12 -0
  350. package/src/core/providers/EventManager.spec.ts +0 -71
  351. package/src/core/providers/EventManager.ts +3 -15
  352. package/src/core/providers/Json.ts +2 -14
  353. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
  354. package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
  355. package/src/core/providers/SchemaValidator.spec.ts +236 -0
  356. package/src/datetime/index.ts +15 -0
  357. package/src/email/index.ts +10 -5
  358. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  359. package/src/email/providers/LocalEmailProvider.ts +1 -1
  360. package/src/fake/__tests__/keyName.example.ts +1 -1
  361. package/src/fake/__tests__/keyName.spec.ts +5 -5
  362. package/src/fake/index.ts +9 -6
  363. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  364. package/src/fake/providers/FakeProvider.ts +133 -19
  365. package/src/lock/core/index.ts +11 -4
  366. package/src/logger/index.ts +17 -66
  367. package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
  368. package/src/mcp/errors/McpError.ts +30 -0
  369. package/src/mcp/index.ts +13 -27
  370. package/src/mcp/transports/SseMcpTransport.ts +6 -7
  371. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  372. package/src/orm/index.browser.ts +2 -2
  373. package/src/orm/index.bun.ts +4 -2
  374. package/src/orm/index.ts +21 -47
  375. package/src/orm/providers/DrizzleKitProvider.ts +3 -5
  376. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
  377. package/src/orm/services/Repository.ts +18 -3
  378. package/src/queue/core/index.ts +14 -6
  379. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  380. package/src/react/auth/hooks/useAuth.ts +32 -0
  381. package/src/react/auth/index.browser.ts +13 -0
  382. package/src/react/auth/index.shared.ts +2 -0
  383. package/src/react/auth/index.ts +48 -0
  384. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  385. package/src/react/auth/services/ReactAuth.ts +135 -0
  386. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  387. package/src/react/core/components/ClientOnly.tsx +49 -0
  388. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  389. package/src/react/core/contexts/AlephaContext.ts +7 -0
  390. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  391. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  392. package/src/react/core/hooks/useAction.ts +480 -0
  393. package/src/react/core/hooks/useAlepha.ts +26 -0
  394. package/src/react/core/hooks/useClient.ts +17 -0
  395. package/src/react/core/hooks/useEvents.ts +51 -0
  396. package/src/react/core/hooks/useInject.ts +12 -0
  397. package/src/react/core/hooks/useStore.ts +52 -0
  398. package/src/react/core/index.ts +90 -0
  399. package/src/react/form/components/FormState.tsx +17 -0
  400. package/src/react/form/errors/FormValidationError.ts +18 -0
  401. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  402. package/src/react/form/hooks/useForm.ts +47 -0
  403. package/src/react/form/hooks/useFormState.ts +130 -0
  404. package/src/react/form/index.ts +44 -0
  405. package/src/react/form/services/FormModel.ts +614 -0
  406. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  407. package/src/react/head/helpers/SeoExpander.ts +142 -0
  408. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  409. package/src/react/head/hooks/useHead.ts +62 -0
  410. package/src/react/head/index.browser.ts +26 -0
  411. package/src/react/head/index.ts +44 -0
  412. package/src/react/head/interfaces/Head.ts +105 -0
  413. package/src/react/head/primitives/$head.ts +25 -0
  414. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  415. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  416. package/src/react/head/providers/HeadProvider.ts +168 -0
  417. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  418. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  419. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  420. package/src/react/i18n/components/Localize.tsx +35 -0
  421. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  422. package/src/react/i18n/hooks/useI18n.ts +18 -0
  423. package/src/react/i18n/index.ts +41 -0
  424. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  425. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  426. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  427. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  428. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  429. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  430. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  431. package/src/react/router/components/ErrorViewer.tsx +872 -0
  432. package/src/react/router/components/Link.tsx +23 -0
  433. package/src/react/router/components/NestedView.tsx +223 -0
  434. package/src/react/router/components/NotFound.tsx +30 -0
  435. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  436. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  437. package/src/react/router/errors/Redirection.ts +28 -0
  438. package/src/react/router/hooks/useActive.ts +52 -0
  439. package/src/react/router/hooks/useQueryParams.ts +63 -0
  440. package/src/react/router/hooks/useRouter.ts +20 -0
  441. package/src/react/router/hooks/useRouterState.ts +11 -0
  442. package/src/react/router/index.browser.ts +45 -0
  443. package/src/react/router/index.shared.ts +19 -0
  444. package/src/react/router/index.ts +142 -0
  445. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  446. package/src/react/router/primitives/$page.spec.tsx +708 -0
  447. package/src/react/router/primitives/$page.ts +497 -0
  448. package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
  449. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  450. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  451. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  452. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  453. package/src/react/router/providers/ReactServerProvider.ts +558 -0
  454. package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
  455. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  456. package/src/react/router/services/ReactPageServerService.ts +48 -0
  457. package/src/react/router/services/ReactPageService.ts +27 -0
  458. package/src/react/router/services/ReactRouter.ts +262 -0
  459. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  460. package/src/react/websocket/index.ts +7 -0
  461. package/src/redis/__tests__/redis.spec.ts +13 -0
  462. package/src/redis/index.ts +9 -25
  463. package/src/redis/providers/BunRedisProvider.ts +9 -0
  464. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  465. package/src/redis/providers/RedisProvider.ts +16 -0
  466. package/src/retry/index.ts +11 -2
  467. package/src/router/index.ts +15 -0
  468. package/src/scheduler/index.ts +11 -2
  469. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  470. package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
  471. package/src/security/index.ts +15 -10
  472. package/src/security/interfaces/IssuerResolver.ts +27 -0
  473. package/src/security/primitives/$issuer.ts +55 -0
  474. package/src/security/providers/SecurityProvider.ts +179 -0
  475. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  476. package/src/security/providers/ServerSecurityProvider.ts +36 -22
  477. package/src/server/auth/index.ts +12 -7
  478. package/src/server/cache/index.ts +7 -22
  479. package/src/server/compress/index.ts +10 -2
  480. package/src/server/cookies/index.ts +7 -5
  481. package/src/server/cookies/primitives/$cookie.ts +33 -11
  482. package/src/server/core/index.ts +17 -7
  483. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  484. package/src/server/core/primitives/$action.spec.ts +1 -1
  485. package/src/server/core/primitives/$action.ts +8 -3
  486. package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
  487. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
  488. package/src/server/core/providers/NodeHttpServerProvider.ts +77 -22
  489. package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
  490. package/src/server/core/providers/ServerProvider.ts +9 -12
  491. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  492. package/src/server/core/services/ServerRequestParser.ts +306 -13
  493. package/src/server/cors/index.ts +7 -21
  494. package/src/server/cors/primitives/$cors.ts +6 -2
  495. package/src/server/health/index.ts +8 -2
  496. package/src/server/helmet/index.ts +11 -3
  497. package/src/server/links/atoms/apiLinksAtom.ts +7 -0
  498. package/src/server/links/index.browser.ts +2 -0
  499. package/src/server/links/index.ts +13 -6
  500. package/src/server/metrics/index.ts +10 -3
  501. package/src/server/multipart/index.ts +9 -3
  502. package/src/server/proxy/index.ts +8 -2
  503. package/src/server/rate-limit/index.ts +21 -25
  504. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  505. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  506. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  507. package/src/server/static/index.ts +8 -2
  508. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  509. package/src/server/swagger/index.ts +9 -4
  510. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  511. package/src/sms/index.ts +9 -5
  512. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  513. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  514. package/src/system/index.browser.ts +11 -0
  515. package/src/system/index.ts +62 -0
  516. package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
  517. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  518. package/src/system/providers/MemoryShellProvider.ts +164 -0
  519. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  520. package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
  521. package/src/system/providers/NodeShellProvider.ts +184 -0
  522. package/src/system/providers/ShellProvider.ts +74 -0
  523. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  524. package/src/thread/index.ts +11 -2
  525. package/src/topic/core/index.ts +12 -5
  526. package/src/vite/index.ts +3 -2
  527. package/src/vite/tasks/buildClient.ts +2 -8
  528. package/src/vite/tasks/buildServer.ts +84 -21
  529. package/src/vite/tasks/copyAssets.ts +5 -4
  530. package/src/vite/tasks/generateSitemap.ts +64 -23
  531. package/src/vite/tasks/index.ts +0 -2
  532. package/src/vite/tasks/prerenderPages.ts +49 -24
  533. package/src/websocket/index.ts +12 -8
  534. package/dist/file/index.d.ts +0 -839
  535. package/dist/file/index.d.ts.map +0 -1
  536. package/dist/file/index.js.map +0 -1
  537. package/src/cli/assets/indexHtml.ts +0 -15
  538. package/src/cli/assets/mainServerTs.ts +0 -24
  539. package/src/cli/assets/webAppRouterTs.ts +0 -15
  540. package/src/cli/assets/webHelloComponentTsx.ts +0 -16
  541. package/src/cli/commands/format.ts +0 -23
  542. package/src/file/index.ts +0 -43
  543. package/src/vite/helpers/boot.ts +0 -117
  544. package/src/vite/plugins/viteAlephaDev.ts +0 -177
  545. package/src/vite/tasks/devServer.ts +0 -71
  546. package/src/vite/tasks/runAlepha.ts +0 -270
  547. /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
  548. /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
  549. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  550. /package/src/{file → system}/errors/FileError.ts +0 -0
  551. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -1,9 +1,8 @@
1
- import * as alepha4 from "alepha";
1
+ import * as alepha1 from "alepha";
2
2
  import { Alepha, Async, KIND, Primitive, Static } from "alepha";
3
3
  import * as alepha_lock0 from "alepha/lock";
4
4
  import { DateTime, DateTimeProvider, DurationLike } from "alepha/datetime";
5
5
  import * as alepha_logger0 from "alepha/logger";
6
- import { Cron } from "cron-schedule";
7
6
  import * as dayjs0 from "dayjs";
8
7
 
9
8
  //#region ../../src/scheduler/constants/CRON.d.ts
@@ -16,6 +15,89 @@ declare const CRON: {
16
15
  EVERY_DAY_AT_MIDNIGHT: string;
17
16
  };
18
17
  //#endregion
18
+ //#region ../../../../node_modules/cron-schedule/dist/cron.d.ts
19
+ /**
20
+ * An object with contains for each element of a date, which values are allowed.
21
+ * Everything starting at 0, except for days.
22
+ */
23
+ interface ICronDefinition {
24
+ readonly seconds: Set<number>;
25
+ readonly minutes: Set<number>;
26
+ readonly hours: Set<number>;
27
+ readonly days: Set<number>;
28
+ readonly months: Set<number>;
29
+ readonly weekdays: Set<number>;
30
+ }
31
+ declare class Cron {
32
+ readonly seconds: ReadonlyArray<number>;
33
+ readonly minutes: ReadonlyArray<number>;
34
+ readonly hours: ReadonlyArray<number>;
35
+ readonly days: ReadonlyArray<number>;
36
+ readonly months: ReadonlyArray<number>;
37
+ readonly weekdays: ReadonlyArray<number>;
38
+ readonly reversed: {
39
+ seconds: ReadonlyArray<number>;
40
+ minutes: ReadonlyArray<number>;
41
+ hours: ReadonlyArray<number>;
42
+ days: ReadonlyArray<number>;
43
+ months: ReadonlyArray<number>;
44
+ weekdays: ReadonlyArray<number>;
45
+ };
46
+ constructor({
47
+ seconds,
48
+ minutes,
49
+ hours,
50
+ days,
51
+ months,
52
+ weekdays
53
+ }: ICronDefinition);
54
+ /**
55
+ * Find the next or previous hour, starting from the given start hour that matches the hour constraint.
56
+ * startHour itself might also be allowed.
57
+ */
58
+ private findAllowedHour;
59
+ /**
60
+ * Find the next or previous minute, starting from the given start minute that matches the minute constraint.
61
+ * startMinute itself might also be allowed.
62
+ */
63
+ private findAllowedMinute;
64
+ /**
65
+ * Find the next or previous second, starting from the given start second that matches the second constraint.
66
+ * startSecond itself IS NOT allowed.
67
+ */
68
+ private findAllowedSecond;
69
+ /**
70
+ * Find the next or previous time, starting from the given start time that matches the hour, minute
71
+ * and second constraints. startTime itself might also be allowed.
72
+ */
73
+ private findAllowedTime;
74
+ /**
75
+ * Find the next or previous day in the given month, starting from the given startDay
76
+ * that matches either the day or the weekday constraint. startDay itself might also be allowed.
77
+ */
78
+ private findAllowedDayInMonth;
79
+ /** Gets the next date starting from the given start date or now. */
80
+ getNextDate(startDate?: Date): Date;
81
+ /** Gets the specified amount of future dates starting from the given start date or now. */
82
+ getNextDates(amount: number, startDate?: Date): Date[];
83
+ /**
84
+ * Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.
85
+ * The iterator runs until the optional endDate is reached or forever.
86
+ */
87
+ getNextDatesIterator(startDate?: Date, endDate?: Date): Generator<Date, undefined, undefined>;
88
+ /** Gets the previous date starting from the given start date or now. */
89
+ getPrevDate(startDate?: Date): Date;
90
+ /** Gets the specified amount of previous dates starting from the given start date or now. */
91
+ getPrevDates(amount: number, startDate?: Date): Date[];
92
+ /**
93
+ * Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.
94
+ * The iterator runs until the optional endDate is reached or forever.
95
+ */
96
+ getPrevDatesIterator(startDate?: Date, endDate?: Date): Generator<Date, undefined, undefined>;
97
+ /** Returns true when there is a cron date at the given date. */
98
+ matchDate(date: Date): boolean;
99
+ }
100
+ //#endregion
19
101
  //#region ../../src/scheduler/providers/CronProvider.d.ts
20
102
  declare class CronProvider {
21
103
  protected readonly dt: DateTimeProvider;
@@ -23,15 +105,15 @@ declare class CronProvider {
23
105
  protected readonly log: alepha_logger0.Logger;
24
106
  protected readonly cronJobs: Array<CronJob>;
25
107
  getCronJobs(): Array<CronJob>;
26
- protected readonly start: alepha4.HookPrimitive<"start">;
27
- protected readonly stop: alepha4.HookPrimitive<"stop">;
108
+ protected readonly start: alepha1.HookPrimitive<"start">;
109
+ protected readonly stop: alepha1.HookPrimitive<"stop">;
28
110
  protected boot(name: string | CronJob): void;
29
111
  abort(name: string | CronJob): void;
30
112
  /**
31
- * Registers a cron job.
32
- *
33
- * It's automatically done when using the `$scheduler` primitive but can also be used manually.
34
- */
113
+ * Registers a cron job.
114
+ *
115
+ * It's automatically done when using the `$scheduler` primitive but can also be used manually.
116
+ */
35
117
  createCronJob(name: string, expression: string, handler: (context: {
36
118
  now: DateTime;
37
119
  }) => Promise<void>, start?: boolean): void;
@@ -60,35 +142,35 @@ declare const $scheduler: {
60
142
  };
61
143
  type SchedulerPrimitiveOptions = {
62
144
  /**
63
- * Function to run on schedule.
64
- */
145
+ * Function to run on schedule.
146
+ */
65
147
  handler: (args: SchedulerHandlerArguments) => Async<void>;
66
148
  /**
67
- * Name of the scheduler. Defaults to the function name.
68
- */
149
+ * Name of the scheduler. Defaults to the function name.
150
+ */
69
151
  name?: string;
70
152
  /**
71
- * Optional description of the scheduler.
72
- */
153
+ * Optional description of the scheduler.
154
+ */
73
155
  description?: string;
74
156
  /**
75
- * Cron expression or interval to run the scheduler.
76
- */
157
+ * Cron expression or interval to run the scheduler.
158
+ */
77
159
  cron?: string;
78
160
  /**
79
- * Cron expression or interval to run the scheduler.
80
- */
161
+ * Cron expression or interval to run the scheduler.
162
+ */
81
163
  interval?: DurationLike;
82
164
  /**
83
- * If true, the scheduler will be locked and only one instance will run at a time.
84
- * You probably need to import {@link AlephaLockRedis} for distributed locking.
85
- *
86
- * @default true
87
- */
165
+ * If true, the scheduler will be locked and only one instance will run at a time.
166
+ * You probably need to import {@link AlephaLockRedis} for distributed locking.
167
+ *
168
+ * @default true
169
+ */
88
170
  lock?: boolean;
89
171
  };
90
- declare const envSchema: alepha4.TObject<{
91
- SCHEDULER_PREFIX: alepha4.TOptional<alepha4.TString>;
172
+ declare const envSchema: alepha1.TObject<{
173
+ SCHEDULER_PREFIX: alepha1.TOptional<alepha1.TString>;
92
174
  }>;
93
175
  declare module "alepha" {
94
176
  interface Env extends Partial<Static<typeof envSchema>> {}
@@ -134,12 +216,21 @@ declare module "alepha" {
134
216
  }
135
217
  }
136
218
  /**
137
- * Generic interface for scheduling tasks.
219
+ * | type | quality | stability |
220
+ * |------|---------|-----------|
221
+ * | backend | rare | stable |
222
+ *
223
+ * Cron and interval-based task execution.
224
+ *
225
+ * **Features:**
226
+ * - Scheduled tasks with cron expressions (e.g., `0 0 * * *`)
227
+ * - Interval-based scheduling
228
+ * - Distributed locking to prevent duplicate execution
229
+ * - Lifecycle hooks: `begin`, `success`, `error`, `end`
138
230
  *
139
- * @see {@link $scheduler}
140
231
  * @module alepha.scheduler
141
232
  */
142
- declare const AlephaScheduler: alepha4.Service<alepha4.Module>;
233
+ declare const AlephaScheduler: alepha1.Service<alepha1.Module>;
143
234
  //#endregion
144
235
  export { $scheduler, AlephaScheduler, CRON, CronJob, CronProvider, SchedulerHandlerArguments, SchedulerPrimitive, SchedulerPrimitiveOptions };
145
236
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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/index.ts"],"mappings":";;;;;;;;;cAAa,IAAA;EAAA,YAAA;EAAA,eAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,UAAA;EAAA,qBAAA;AAAA;;;cCKA,YAAA;EAAA,mBAAA,EAAA,EACU,gBAAA;EAAA,mBAAA,MAAA,EACI,MAAA;EAAA,mBAAA,GAAA,EAAA,cAAA,CACH,MAAA;EAAA,mBAAA,QAAA,EACO,KAAA,CAAM,OAAA;EAAA,YAAA,GAEb,KAAA,CAAM,OAAA;EAAA,mBAAA,KAAA,EAAD,OAAA,CAIH,aAAA;EAAA,mBAAA,IAAA,EAAA,OAAA,CAeD,aAAA;EAAA,UAAA,KAAA,IAAA,WASO,OAAA;EAAA,MAAA,IAAA,WAmBF,OAAA;EAAA;;;;;EAAA,cAAA,IAAA,UAAA,UAAA,UAAA,OAAA,GAAA,OAAA;IAAA,GAAA,EAuBA,QAAA;EAAA,MAAe,OAAA,QAAA,KAAA;EAAA,UAAA,IAAA,IAAA,EAmBvB,OAAA,EAAA,GAAA,GAAO,MAAA,CAAK,KAAA;AAAA;AAAA,UA6CjB,OAAA;EAAA,IAAA;EAAA,UAAA;EAAA,OAAA,GAAA,OAAA;IAAA,GAAA,EAGW,QAAA;EAAA,MAAe,OAAA;EAAA,IAAA,EACnC,IAAA;EAAA,IAAA;EAAA,OAAA;EAAA,OAAA,IAAA,KAAA,EAGY,KAAA;EAAA,KAAA,EACX,eAAA;AAAA;;;;AClIT;;cAAa,UAAA;EAAA,CAAA,OAAA,EACF,yBAAA,GACR,kBAAA;EAAA;;KAMS,yBAAA;EAAA;;;EAAA,OAAA,GAAA,IAAA,EAIM,yBAAA,KAA8B,KAAA;EAAA;;;EAAA,IAAA;EAAA;;;EAAA,WAAA;EAAA;;;EAAA,IAAA;EAAA;;;EAAA,QAAA,GAoBnC,YAAA;EAAA;;AASX;;;;EATW,IAAA;AAAA;AAAA,cAaP,SAAA,UAAS,OAAA;EAAA,gBAAA,oBAMb,OAAA,CAAA,OAAA;AAAA;AAAA;EAAA,UAAA,GAAA,SAGsB,OAAA,CAAQ,MAAA,QAAc,SAAA;AAAA;AAAA,cAGjC,kBAAA,SAA2B,SAAA,CAAU,yBAAA;EAAA,mBAAA,GAAA,EAAyB,cAAA,CACnD,MAAA;EAAA,mBAAA,GAAA;IAAA,gBAAA;EAAA;EAAA,mBAAA,MAAA,EAEG,MAAA;EAAA,mBAAA,gBAAA,EACU,gBAAA;EAAA,mBAAA,YAAA,EACJ,YAAA;EAAA,IAAA,KAAA;EAAA,UAAA,OAAA;EAAA,QAAA,GAuBP,OAAA;EAAA,UAAA,aAAA,EA0EyB,YAAA,CAP1B,aAAA,EAAA,IAAA,EAOC,yBAAA,KAAyB,OAAA;AAAA;AAAA,UAUlC,yBAAA;EAAA,GAAA,EACV,QAAA;AAAA;;;;;;;WC/KI,QAAA;MAAA,OAAA;IAAA;IAAA;MAAA,IAAA;MAAA,OAAA;IAAA;IAAA;MAAA,IAAA;MAAA,KAAA,EAQE,KAAA;MAAA,OAAA;IAAA;IAAA;MAAA,IAAA;MAAA,OAAA;IAAA;EAAA;AAAA;AAAA;;;AAgBb;;;AAhBa,cAgBA,eAAA,EAAe,OAAA,CAAA,OAAA,CAI1B,OAAA,CAJ0B,MAAA"}
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/index.ts"],"x_google_ignoreList":[1],"mappings":"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"}
@@ -2,8 +2,400 @@ import { $env, $hook, $inject, $module, Alepha, KIND, Primitive, createPrimitive
2
2
  import { $lock, AlephaLock } from "alepha/lock";
3
3
  import { DateTimeProvider } from "alepha/datetime";
4
4
  import { $logger } from "alepha/logger";
5
- import { parseCronExpression } from "cron-schedule";
6
5
 
6
+ //#region ../../../../node_modules/cron-schedule/dist/utils.js
7
+ function extractDateElements(date) {
8
+ return {
9
+ second: date.getSeconds(),
10
+ minute: date.getMinutes(),
11
+ hour: date.getHours(),
12
+ day: date.getDate(),
13
+ month: date.getMonth(),
14
+ weekday: date.getDay(),
15
+ year: date.getFullYear()
16
+ };
17
+ }
18
+ function getDaysInMonth(year, month) {
19
+ return new Date(year, month + 1, 0).getDate();
20
+ }
21
+ function getDaysBetweenWeekdays(weekday1, weekday2) {
22
+ if (weekday1 <= weekday2) return weekday2 - weekday1;
23
+ return 6 - weekday1 + weekday2 + 1;
24
+ }
25
+
26
+ //#endregion
27
+ //#region ../../../../node_modules/cron-schedule/dist/cron.js
28
+ var Cron = class {
29
+ constructor({ seconds, minutes, hours, days, months, weekdays }) {
30
+ if (!seconds || seconds.size === 0) throw new Error("There must be at least one allowed second.");
31
+ if (!minutes || minutes.size === 0) throw new Error("There must be at least one allowed minute.");
32
+ if (!hours || hours.size === 0) throw new Error("There must be at least one allowed hour.");
33
+ if (!months || months.size === 0) throw new Error("There must be at least one allowed month.");
34
+ if ((!weekdays || weekdays.size === 0) && (!days || days.size === 0)) throw new Error("There must be at least one allowed day or weekday.");
35
+ this.seconds = Array.from(seconds).sort((a, b) => a - b);
36
+ this.minutes = Array.from(minutes).sort((a, b) => a - b);
37
+ this.hours = Array.from(hours).sort((a, b) => a - b);
38
+ this.days = Array.from(days).sort((a, b) => a - b);
39
+ this.months = Array.from(months).sort((a, b) => a - b);
40
+ this.weekdays = Array.from(weekdays).sort((a, b) => a - b);
41
+ const validateData = (name, data, constraint) => {
42
+ if (data.some((x) => typeof x !== "number" || x % 1 !== 0 || x < constraint.min || x > constraint.max)) throw new Error(`${name} must only consist of integers which are within the range of ${constraint.min} and ${constraint.max}`);
43
+ };
44
+ validateData("seconds", this.seconds, {
45
+ min: 0,
46
+ max: 59
47
+ });
48
+ validateData("minutes", this.minutes, {
49
+ min: 0,
50
+ max: 59
51
+ });
52
+ validateData("hours", this.hours, {
53
+ min: 0,
54
+ max: 23
55
+ });
56
+ validateData("days", this.days, {
57
+ min: 1,
58
+ max: 31
59
+ });
60
+ validateData("months", this.months, {
61
+ min: 0,
62
+ max: 11
63
+ });
64
+ validateData("weekdays", this.weekdays, {
65
+ min: 0,
66
+ max: 6
67
+ });
68
+ this.reversed = {
69
+ seconds: this.seconds.map((x) => x).reverse(),
70
+ minutes: this.minutes.map((x) => x).reverse(),
71
+ hours: this.hours.map((x) => x).reverse(),
72
+ days: this.days.map((x) => x).reverse(),
73
+ months: this.months.map((x) => x).reverse(),
74
+ weekdays: this.weekdays.map((x) => x).reverse()
75
+ };
76
+ }
77
+ /**
78
+ * Find the next or previous hour, starting from the given start hour that matches the hour constraint.
79
+ * startHour itself might also be allowed.
80
+ */
81
+ findAllowedHour(dir, startHour) {
82
+ return dir === "next" ? this.hours.find((x) => x >= startHour) : this.reversed.hours.find((x) => x <= startHour);
83
+ }
84
+ /**
85
+ * Find the next or previous minute, starting from the given start minute that matches the minute constraint.
86
+ * startMinute itself might also be allowed.
87
+ */
88
+ findAllowedMinute(dir, startMinute) {
89
+ return dir === "next" ? this.minutes.find((x) => x >= startMinute) : this.reversed.minutes.find((x) => x <= startMinute);
90
+ }
91
+ /**
92
+ * Find the next or previous second, starting from the given start second that matches the second constraint.
93
+ * startSecond itself IS NOT allowed.
94
+ */
95
+ findAllowedSecond(dir, startSecond) {
96
+ return dir === "next" ? this.seconds.find((x) => x > startSecond) : this.reversed.seconds.find((x) => x < startSecond);
97
+ }
98
+ /**
99
+ * Find the next or previous time, starting from the given start time that matches the hour, minute
100
+ * and second constraints. startTime itself might also be allowed.
101
+ */
102
+ findAllowedTime(dir, startTime) {
103
+ let hour = this.findAllowedHour(dir, startTime.hour);
104
+ if (hour !== void 0) if (hour === startTime.hour) {
105
+ let minute = this.findAllowedMinute(dir, startTime.minute);
106
+ if (minute !== void 0) if (minute === startTime.minute) {
107
+ const second = this.findAllowedSecond(dir, startTime.second);
108
+ if (second !== void 0) return {
109
+ hour,
110
+ minute,
111
+ second
112
+ };
113
+ minute = this.findAllowedMinute(dir, dir === "next" ? startTime.minute + 1 : startTime.minute - 1);
114
+ if (minute !== void 0) return {
115
+ hour,
116
+ minute,
117
+ second: dir === "next" ? this.seconds[0] : this.reversed.seconds[0]
118
+ };
119
+ } else return {
120
+ hour,
121
+ minute,
122
+ second: dir === "next" ? this.seconds[0] : this.reversed.seconds[0]
123
+ };
124
+ hour = this.findAllowedHour(dir, dir === "next" ? startTime.hour + 1 : startTime.hour - 1);
125
+ if (hour !== void 0) return {
126
+ hour,
127
+ minute: dir === "next" ? this.minutes[0] : this.reversed.minutes[0],
128
+ second: dir === "next" ? this.seconds[0] : this.reversed.seconds[0]
129
+ };
130
+ } else return {
131
+ hour,
132
+ minute: dir === "next" ? this.minutes[0] : this.reversed.minutes[0],
133
+ second: dir === "next" ? this.seconds[0] : this.reversed.seconds[0]
134
+ };
135
+ }
136
+ /**
137
+ * Find the next or previous day in the given month, starting from the given startDay
138
+ * that matches either the day or the weekday constraint. startDay itself might also be allowed.
139
+ */
140
+ findAllowedDayInMonth(dir, year, month, startDay) {
141
+ var _a, _b;
142
+ if (startDay < 1) throw new Error("startDay must not be smaller than 1.");
143
+ const daysInMonth = getDaysInMonth(year, month);
144
+ const daysRestricted = this.days.length !== 31;
145
+ const weekdaysRestricted = this.weekdays.length !== 7;
146
+ if (!daysRestricted && !weekdaysRestricted) {
147
+ if (startDay > daysInMonth) return dir === "next" ? void 0 : daysInMonth;
148
+ return startDay;
149
+ }
150
+ let allowedDayByDays;
151
+ if (daysRestricted) {
152
+ allowedDayByDays = dir === "next" ? this.days.find((x) => x >= startDay) : this.reversed.days.find((x) => x <= startDay);
153
+ if (allowedDayByDays !== void 0 && allowedDayByDays > daysInMonth) allowedDayByDays = void 0;
154
+ }
155
+ let allowedDayByWeekdays;
156
+ if (weekdaysRestricted) {
157
+ const startWeekday = new Date(year, month, startDay).getDay();
158
+ const nearestAllowedWeekday = dir === "next" ? (_a = this.weekdays.find((x) => x >= startWeekday)) !== null && _a !== void 0 ? _a : this.weekdays[0] : (_b = this.reversed.weekdays.find((x) => x <= startWeekday)) !== null && _b !== void 0 ? _b : this.reversed.weekdays[0];
159
+ if (nearestAllowedWeekday !== void 0) {
160
+ const daysBetweenWeekdays = dir === "next" ? getDaysBetweenWeekdays(startWeekday, nearestAllowedWeekday) : getDaysBetweenWeekdays(nearestAllowedWeekday, startWeekday);
161
+ allowedDayByWeekdays = dir === "next" ? startDay + daysBetweenWeekdays : startDay - daysBetweenWeekdays;
162
+ if (allowedDayByWeekdays > daysInMonth || allowedDayByWeekdays < 1) allowedDayByWeekdays = void 0;
163
+ }
164
+ }
165
+ if (allowedDayByDays !== void 0 && allowedDayByWeekdays !== void 0) return dir === "next" ? Math.min(allowedDayByDays, allowedDayByWeekdays) : Math.max(allowedDayByDays, allowedDayByWeekdays);
166
+ if (allowedDayByDays !== void 0) return allowedDayByDays;
167
+ if (allowedDayByWeekdays !== void 0) return allowedDayByWeekdays;
168
+ }
169
+ /** Gets the next date starting from the given start date or now. */
170
+ getNextDate(startDate = /* @__PURE__ */ new Date()) {
171
+ const startDateElements = extractDateElements(startDate);
172
+ let minYear = startDateElements.year;
173
+ let startIndexMonth = this.months.findIndex((x) => x >= startDateElements.month);
174
+ if (startIndexMonth === -1) {
175
+ startIndexMonth = 0;
176
+ minYear++;
177
+ }
178
+ const maxIterations = this.months.length * 5;
179
+ for (let i = 0; i < maxIterations; i++) {
180
+ const year = minYear + Math.floor((startIndexMonth + i) / this.months.length);
181
+ const month = this.months[(startIndexMonth + i) % this.months.length];
182
+ const isStartMonth = year === startDateElements.year && month === startDateElements.month;
183
+ let day = this.findAllowedDayInMonth("next", year, month, isStartMonth ? startDateElements.day : 1);
184
+ let isStartDay = isStartMonth && day === startDateElements.day;
185
+ if (day !== void 0 && isStartDay) {
186
+ const nextTime = this.findAllowedTime("next", startDateElements);
187
+ if (nextTime !== void 0) return new Date(year, month, day, nextTime.hour, nextTime.minute, nextTime.second);
188
+ day = this.findAllowedDayInMonth("next", year, month, day + 1);
189
+ isStartDay = false;
190
+ }
191
+ if (day !== void 0 && !isStartDay) return new Date(year, month, day, this.hours[0], this.minutes[0], this.seconds[0]);
192
+ }
193
+ throw new Error("No valid next date was found.");
194
+ }
195
+ /** Gets the specified amount of future dates starting from the given start date or now. */
196
+ getNextDates(amount, startDate) {
197
+ const dates = [];
198
+ let nextDate;
199
+ for (let i = 0; i < amount; i++) {
200
+ nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);
201
+ dates.push(nextDate);
202
+ }
203
+ return dates;
204
+ }
205
+ /**
206
+ * Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.
207
+ * The iterator runs until the optional endDate is reached or forever.
208
+ */
209
+ *getNextDatesIterator(startDate, endDate) {
210
+ let nextDate;
211
+ while (true) {
212
+ nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);
213
+ if (endDate && endDate.getTime() < nextDate.getTime()) return;
214
+ yield nextDate;
215
+ }
216
+ }
217
+ /** Gets the previous date starting from the given start date or now. */
218
+ getPrevDate(startDate = /* @__PURE__ */ new Date()) {
219
+ const startDateElements = extractDateElements(startDate);
220
+ let maxYear = startDateElements.year;
221
+ let startIndexMonth = this.reversed.months.findIndex((x) => x <= startDateElements.month);
222
+ if (startIndexMonth === -1) {
223
+ startIndexMonth = 0;
224
+ maxYear--;
225
+ }
226
+ const maxIterations = this.reversed.months.length * 5;
227
+ for (let i = 0; i < maxIterations; i++) {
228
+ const year = maxYear - Math.floor((startIndexMonth + i) / this.reversed.months.length);
229
+ const month = this.reversed.months[(startIndexMonth + i) % this.reversed.months.length];
230
+ const isStartMonth = year === startDateElements.year && month === startDateElements.month;
231
+ let day = this.findAllowedDayInMonth("prev", year, month, isStartMonth ? startDateElements.day : getDaysInMonth(year, month));
232
+ let isStartDay = isStartMonth && day === startDateElements.day;
233
+ if (day !== void 0 && isStartDay) {
234
+ const prevTime = this.findAllowedTime("prev", startDateElements);
235
+ if (prevTime !== void 0) return new Date(year, month, day, prevTime.hour, prevTime.minute, prevTime.second);
236
+ if (day > 1) {
237
+ day = this.findAllowedDayInMonth("prev", year, month, day - 1);
238
+ isStartDay = false;
239
+ }
240
+ }
241
+ if (day !== void 0 && !isStartDay) return new Date(year, month, day, this.reversed.hours[0], this.reversed.minutes[0], this.reversed.seconds[0]);
242
+ }
243
+ throw new Error("No valid previous date was found.");
244
+ }
245
+ /** Gets the specified amount of previous dates starting from the given start date or now. */
246
+ getPrevDates(amount, startDate) {
247
+ const dates = [];
248
+ let prevDate;
249
+ for (let i = 0; i < amount; i++) {
250
+ prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);
251
+ dates.push(prevDate);
252
+ }
253
+ return dates;
254
+ }
255
+ /**
256
+ * Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.
257
+ * The iterator runs until the optional endDate is reached or forever.
258
+ */
259
+ *getPrevDatesIterator(startDate, endDate) {
260
+ let prevDate;
261
+ while (true) {
262
+ prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);
263
+ if (endDate && endDate.getTime() > prevDate.getTime()) return;
264
+ yield prevDate;
265
+ }
266
+ }
267
+ /** Returns true when there is a cron date at the given date. */
268
+ matchDate(date) {
269
+ const { second, minute, hour, day, month, weekday } = extractDateElements(date);
270
+ if (this.seconds.indexOf(second) === -1 || this.minutes.indexOf(minute) === -1 || this.hours.indexOf(hour) === -1 || this.months.indexOf(month) === -1) return false;
271
+ if (this.days.length !== 31 && this.weekdays.length !== 7) return this.days.indexOf(day) !== -1 || this.weekdays.indexOf(weekday) !== -1;
272
+ return this.days.indexOf(day) !== -1 && this.weekdays.indexOf(weekday) !== -1;
273
+ }
274
+ };
275
+
276
+ //#endregion
277
+ //#region ../../../../node_modules/cron-schedule/dist/cron-parser.js
278
+ const secondConstraint = {
279
+ min: 0,
280
+ max: 59
281
+ };
282
+ const minuteConstraint = {
283
+ min: 0,
284
+ max: 59
285
+ };
286
+ const hourConstraint = {
287
+ min: 0,
288
+ max: 23
289
+ };
290
+ const dayConstraint = {
291
+ min: 1,
292
+ max: 31
293
+ };
294
+ const monthConstraint = {
295
+ min: 1,
296
+ max: 12,
297
+ aliases: {
298
+ jan: "1",
299
+ feb: "2",
300
+ mar: "3",
301
+ apr: "4",
302
+ may: "5",
303
+ jun: "6",
304
+ jul: "7",
305
+ aug: "8",
306
+ sep: "9",
307
+ oct: "10",
308
+ nov: "11",
309
+ dec: "12"
310
+ }
311
+ };
312
+ const weekdayConstraint = {
313
+ min: 0,
314
+ max: 7,
315
+ aliases: {
316
+ mon: "1",
317
+ tue: "2",
318
+ wed: "3",
319
+ thu: "4",
320
+ fri: "5",
321
+ sat: "6",
322
+ sun: "7"
323
+ }
324
+ };
325
+ const timeNicknames = {
326
+ "@yearly": "0 0 1 1 *",
327
+ "@annually": "0 0 1 1 *",
328
+ "@monthly": "0 0 1 * *",
329
+ "@weekly": "0 0 * * 0",
330
+ "@daily": "0 0 * * *",
331
+ "@hourly": "0 * * * *",
332
+ "@minutely": "* * * * *"
333
+ };
334
+ function parseElement(element, constraint) {
335
+ const result = /* @__PURE__ */ new Set();
336
+ if (element === "*") {
337
+ for (let i = constraint.min; i <= constraint.max; i = i + 1) result.add(i);
338
+ return result;
339
+ }
340
+ const listElements = element.split(",");
341
+ if (listElements.length > 1) {
342
+ for (const listElement of listElements) {
343
+ const parsedListElement = parseElement(listElement, constraint);
344
+ for (const x of parsedListElement) result.add(x);
345
+ }
346
+ return result;
347
+ }
348
+ const parseSingleElement = (singleElement) => {
349
+ var _a, _b;
350
+ singleElement = (_b = (_a = constraint.aliases) === null || _a === void 0 ? void 0 : _a[singleElement.toLowerCase()]) !== null && _b !== void 0 ? _b : singleElement;
351
+ const parsedElement = Number.parseInt(singleElement, 10);
352
+ if (Number.isNaN(parsedElement)) throw new Error(`Failed to parse ${element}: ${singleElement} is NaN.`);
353
+ if (parsedElement < constraint.min || parsedElement > constraint.max) throw new Error(`Failed to parse ${element}: ${singleElement} is outside of constraint range of ${constraint.min} - ${constraint.max}.`);
354
+ return parsedElement;
355
+ };
356
+ const rangeSegments = /^(([0-9a-zA-Z]+)-([0-9a-zA-Z]+)|\*)(\/([0-9]+))?$/.exec(element);
357
+ if (rangeSegments === null) {
358
+ result.add(parseSingleElement(element));
359
+ return result;
360
+ }
361
+ let parsedStart = rangeSegments[1] === "*" ? constraint.min : parseSingleElement(rangeSegments[2]);
362
+ const parsedEnd = rangeSegments[1] === "*" ? constraint.max : parseSingleElement(rangeSegments[3]);
363
+ if (constraint === weekdayConstraint && parsedStart === 7 && parsedEnd !== 7) parsedStart = 0;
364
+ if (parsedStart > parsedEnd) throw new Error(`Failed to parse ${element}: Invalid range (start: ${parsedStart}, end: ${parsedEnd}).`);
365
+ const step = rangeSegments[5];
366
+ let parsedStep = 1;
367
+ if (step !== void 0) {
368
+ parsedStep = Number.parseInt(step, 10);
369
+ if (Number.isNaN(parsedStep)) throw new Error(`Failed to parse step: ${step} is NaN.`);
370
+ if (parsedStep < 1) throw new Error(`Failed to parse step: Expected ${step} to be greater than 0.`);
371
+ }
372
+ for (let i = parsedStart; i <= parsedEnd; i = i + parsedStep) result.add(i);
373
+ return result;
374
+ }
375
+ /** Parses a cron expression into a Cron instance. */
376
+ function parseCronExpression(cronExpression) {
377
+ var _a;
378
+ if (typeof cronExpression !== "string") throw new TypeError("Invalid cron expression: must be of type string.");
379
+ cronExpression = (_a = timeNicknames[cronExpression.toLowerCase()]) !== null && _a !== void 0 ? _a : cronExpression;
380
+ const elements = cronExpression.split(" ").filter((elem) => elem.length > 0);
381
+ if (elements.length < 5 || elements.length > 6) throw new Error("Invalid cron expression: expected 5 or 6 elements.");
382
+ const rawSeconds = elements.length === 6 ? elements[0] : "0";
383
+ const rawMinutes = elements.length === 6 ? elements[1] : elements[0];
384
+ const rawHours = elements.length === 6 ? elements[2] : elements[1];
385
+ const rawDays = elements.length === 6 ? elements[3] : elements[2];
386
+ const rawMonths = elements.length === 6 ? elements[4] : elements[3];
387
+ const rawWeekdays = elements.length === 6 ? elements[5] : elements[4];
388
+ return new Cron({
389
+ seconds: parseElement(rawSeconds, secondConstraint),
390
+ minutes: parseElement(rawMinutes, minuteConstraint),
391
+ hours: parseElement(rawHours, hourConstraint),
392
+ days: parseElement(rawDays, dayConstraint),
393
+ months: new Set(Array.from(parseElement(rawMonths, monthConstraint)).map((x) => x - 1)),
394
+ weekdays: new Set(Array.from(parseElement(rawWeekdays, weekdayConstraint)).map((x) => x % 7))
395
+ });
396
+ }
397
+
398
+ //#endregion
7
399
  //#region ../../src/scheduler/providers/CronProvider.ts
8
400
  var CronProvider = class {
9
401
  dt = $inject(DateTimeProvider);
@@ -164,9 +556,18 @@ const CRON = {
164
556
  //#endregion
165
557
  //#region ../../src/scheduler/index.ts
166
558
  /**
167
- * Generic interface for scheduling tasks.
559
+ * | type | quality | stability |
560
+ * |------|---------|-----------|
561
+ * | backend | rare | stable |
562
+ *
563
+ * Cron and interval-based task execution.
564
+ *
565
+ * **Features:**
566
+ * - Scheduled tasks with cron expressions (e.g., `0 0 * * *`)
567
+ * - Interval-based scheduling
568
+ * - Distributed locking to prevent duplicate execution
569
+ * - Lifecycle hooks: `begin`, `success`, `error`, `end`
168
570
  *
169
- * @see {@link $scheduler}
170
571
  * @module alepha.scheduler
171
572
  */
172
573
  const AlephaScheduler = $module({