alepha 0.16.0 → 0.16.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.
- package/AGENTS.md +245 -0
- package/CLAUDE.md +245 -0
- package/README.md +20 -31
- package/assets/agents-template.md +245 -0
- package/assets/devtools-ui/200.html +10 -0
- package/assets/devtools-ui/200.html.br +4 -0
- package/assets/devtools-ui/200.html.gz +0 -0
- package/assets/devtools-ui/404.html +10 -0
- package/assets/devtools-ui/404.html.br +4 -0
- package/assets/devtools-ui/404.html.gz +0 -0
- package/assets/devtools-ui/CNAME +1 -0
- package/assets/devtools-ui/asset.BZV40eAE.css +1 -0
- package/assets/devtools-ui/asset.BZV40eAE.css.br +0 -0
- package/assets/devtools-ui/asset.BZV40eAE.css.gz +0 -0
- package/assets/devtools-ui/asset.BpaT354U.css +1 -0
- package/assets/devtools-ui/asset.BpaT354U.css.br +0 -0
- package/assets/devtools-ui/asset.BpaT354U.css.gz +0 -0
- package/assets/devtools-ui/chunk.9hA3oVE5.js +1 -0
- package/assets/devtools-ui/chunk.9hA3oVE5.js.br +0 -0
- package/assets/devtools-ui/chunk.9hA3oVE5.js.gz +0 -0
- package/assets/devtools-ui/chunk.B0wH9875.js +9 -0
- package/assets/devtools-ui/chunk.B0wH9875.js.br +0 -0
- package/assets/devtools-ui/chunk.B0wH9875.js.gz +0 -0
- package/assets/devtools-ui/chunk.BA6MpVG6.js +1 -0
- package/assets/devtools-ui/chunk.BA6MpVG6.js.br +0 -0
- package/assets/devtools-ui/chunk.BA6MpVG6.js.gz +0 -0
- package/assets/devtools-ui/chunk.BERstE_S.js +1 -0
- package/assets/devtools-ui/chunk.BERstE_S.js.br +0 -0
- package/assets/devtools-ui/chunk.BERstE_S.js.gz +0 -0
- package/assets/devtools-ui/chunk.BGhL1aTk.js +1 -0
- package/assets/devtools-ui/chunk.BGhL1aTk.js.br +3 -0
- package/assets/devtools-ui/chunk.BGhL1aTk.js.gz +0 -0
- package/assets/devtools-ui/chunk.BPLJadaO.js +1 -0
- package/assets/devtools-ui/chunk.BPLJadaO.js.br +0 -0
- package/assets/devtools-ui/chunk.BPLJadaO.js.gz +0 -0
- package/assets/devtools-ui/chunk.BfVJy4KT.js +1 -0
- package/assets/devtools-ui/chunk.BfVJy4KT.js.br +0 -0
- package/assets/devtools-ui/chunk.BfVJy4KT.js.gz +0 -0
- package/assets/devtools-ui/chunk.BioyJDYM.js +1 -0
- package/assets/devtools-ui/chunk.BioyJDYM.js.br +0 -0
- package/assets/devtools-ui/chunk.BioyJDYM.js.gz +0 -0
- package/assets/devtools-ui/chunk.ByxtH9X4.js +1 -0
- package/assets/devtools-ui/chunk.ByxtH9X4.js.br +0 -0
- package/assets/devtools-ui/chunk.ByxtH9X4.js.gz +0 -0
- package/assets/devtools-ui/chunk.CC9sVmtJ.js +1 -0
- package/assets/devtools-ui/chunk.CC9sVmtJ.js.br +0 -0
- package/assets/devtools-ui/chunk.CC9sVmtJ.js.gz +0 -0
- package/assets/devtools-ui/chunk.CCfDV7bM.js +1 -0
- package/assets/devtools-ui/chunk.CCfDV7bM.js.br +0 -0
- package/assets/devtools-ui/chunk.CCfDV7bM.js.gz +0 -0
- package/assets/devtools-ui/chunk.CJ-RgNWn.js +1 -0
- package/assets/devtools-ui/chunk.CJ-RgNWn.js.br +0 -0
- package/assets/devtools-ui/chunk.CJ-RgNWn.js.gz +0 -0
- package/assets/devtools-ui/chunk.CL-Gj_Zw.js +1 -0
- package/assets/devtools-ui/chunk.CL-Gj_Zw.js.br +0 -0
- package/assets/devtools-ui/chunk.CL-Gj_Zw.js.gz +0 -0
- package/assets/devtools-ui/chunk.CPBZzQ1W.js +7 -0
- package/assets/devtools-ui/chunk.CPBZzQ1W.js.br +0 -0
- package/assets/devtools-ui/chunk.CPBZzQ1W.js.gz +0 -0
- package/assets/devtools-ui/chunk.CYGSym54.js +2 -0
- package/assets/devtools-ui/chunk.CYGSym54.js.br +0 -0
- package/assets/devtools-ui/chunk.CYGSym54.js.gz +0 -0
- package/assets/devtools-ui/chunk.CZnj4xdD.js +1 -0
- package/assets/devtools-ui/chunk.CZnj4xdD.js.br +0 -0
- package/assets/devtools-ui/chunk.CZnj4xdD.js.gz +0 -0
- package/assets/devtools-ui/chunk.CfVEBVYK.js +1 -0
- package/assets/devtools-ui/chunk.CfVEBVYK.js.br +0 -0
- package/assets/devtools-ui/chunk.CfVEBVYK.js.gz +0 -0
- package/assets/devtools-ui/chunk.CzdBps3a.js +1 -0
- package/assets/devtools-ui/chunk.CzdBps3a.js.br +0 -0
- package/assets/devtools-ui/chunk.CzdBps3a.js.gz +0 -0
- package/assets/devtools-ui/chunk.D0vBEggU.js +1 -0
- package/assets/devtools-ui/chunk.D0vBEggU.js.br +0 -0
- package/assets/devtools-ui/chunk.D0vBEggU.js.gz +0 -0
- package/assets/devtools-ui/chunk.DA9sYPRz.js +1 -0
- package/assets/devtools-ui/chunk.DA9sYPRz.js.br +0 -0
- package/assets/devtools-ui/chunk.DA9sYPRz.js.gz +0 -0
- package/assets/devtools-ui/chunk.DQRyKwEs.js +1 -0
- package/assets/devtools-ui/chunk.DQRyKwEs.js.br +0 -0
- package/assets/devtools-ui/chunk.DQRyKwEs.js.gz +0 -0
- package/assets/devtools-ui/chunk.DqJ9oOlf.js +1 -0
- package/assets/devtools-ui/chunk.DqJ9oOlf.js.br +0 -0
- package/assets/devtools-ui/chunk.DqJ9oOlf.js.gz +0 -0
- package/assets/devtools-ui/chunk.DuvyGAtW.js +1 -0
- package/assets/devtools-ui/chunk.DuvyGAtW.js.br +1 -0
- package/assets/devtools-ui/chunk.DuvyGAtW.js.gz +0 -0
- package/assets/devtools-ui/chunk.DvC3T1B2.js +1 -0
- package/assets/devtools-ui/chunk.DvC3T1B2.js.br +0 -0
- package/assets/devtools-ui/chunk.DvC3T1B2.js.gz +0 -0
- package/assets/devtools-ui/chunk.Dyr5rJZ8.js +1 -0
- package/assets/devtools-ui/chunk.Dyr5rJZ8.js.br +3 -0
- package/assets/devtools-ui/chunk.Dyr5rJZ8.js.gz +0 -0
- package/assets/devtools-ui/chunk.U1DOTByB.js +1 -0
- package/assets/devtools-ui/chunk.U1DOTByB.js.br +0 -0
- package/assets/devtools-ui/chunk.U1DOTByB.js.gz +0 -0
- package/assets/devtools-ui/chunk.i6dOJAO-.js +1 -0
- package/assets/devtools-ui/chunk.i6dOJAO-.js.br +0 -0
- package/assets/devtools-ui/chunk.i6dOJAO-.js.gz +0 -0
- package/assets/devtools-ui/chunk.pCFnzo3_.js +1 -0
- package/assets/devtools-ui/chunk.pCFnzo3_.js.br +0 -0
- package/assets/devtools-ui/chunk.pCFnzo3_.js.gz +0 -0
- package/assets/devtools-ui/entry.Ben0QJOH.js +79 -0
- package/assets/devtools-ui/entry.Ben0QJOH.js.br +0 -0
- package/assets/devtools-ui/entry.Ben0QJOH.js.gz +0 -0
- package/assets/devtools-ui/index.html +10 -0
- package/assets/devtools-ui/index.html.br +4 -0
- package/assets/devtools-ui/index.html.gz +0 -0
- package/dist/api/audits/index.d.ts +332 -332
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +1 -1
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/clients/index.d.ts +683 -0
- package/dist/api/clients/index.d.ts.map +1 -0
- package/dist/api/clients/index.js +1329 -0
- package/dist/api/clients/index.js.map +1 -0
- package/dist/api/files/index.d.ts +170 -170
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +1 -1
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +4 -1
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +223 -248
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +51 -129
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +194 -194
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/keys/index.js +6 -10
- package/dist/api/keys/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +2 -2
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +167 -167
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +2 -2
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +0 -146
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +669 -425
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +262 -276
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.d.ts +916 -1178
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +1626 -2208
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +125 -125
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts +4 -4
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/bucket/index.d.ts +192 -434
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +155 -1911
- package/dist/bucket/index.js.map +1 -1
- package/dist/bucket/index.workerd.js +339 -0
- package/dist/bucket/index.workerd.js.map +1 -0
- package/dist/cache/core/index.d.ts +12 -3
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +42 -8
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/redis/index.d.ts +4 -4
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +6 -5
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +1461 -1573
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +541 -985
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +12 -79
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +5 -1910
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +3 -3
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +9 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +3 -0
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +4 -4
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/devtools/index.browser.js +245 -0
- package/dist/devtools/index.browser.js.map +1 -0
- package/dist/devtools/index.d.ts +507 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +812 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/email/index.d.ts +15 -313
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +278 -2031
- package/dist/email/index.js.map +1 -1
- package/dist/email/index.workerd.js +713 -0
- package/dist/email/index.workerd.js.map +1 -0
- package/dist/fake/index.d.ts +128 -9
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +452 -433
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +6 -6
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +3 -3
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +2 -2
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +14 -14
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +5 -5
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/orm/{chunk-DH6iiROE.js → chunk-DUknxb-w.js} +3 -3
- package/dist/orm/index.browser.js +283 -1
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +367 -15
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +248 -56
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +409 -35
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +12 -12
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts +4 -4
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/react/auth/index.browser.js +6 -2
- package/dist/react/auth/index.browser.js.map +1 -1
- package/dist/react/auth/index.d.ts +5 -5
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/auth/index.js +6 -2
- package/dist/react/auth/index.js.map +1 -1
- package/dist/react/core/index.d.ts +5 -5
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +5 -4
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +7 -2
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +24 -3
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/head/index.browser.js +6 -1
- package/dist/react/head/index.browser.js.map +1 -1
- package/dist/react/head/index.d.ts +2 -2
- package/dist/react/head/index.d.ts.map +1 -1
- package/dist/react/head/index.js +6 -1
- package/dist/react/head/index.js.map +1 -1
- package/dist/react/i18n/index.d.ts +6 -6
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +1 -2
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js +8 -10
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +10 -9
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +209 -504
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +15 -1920
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/testing/chunk-C4KDipgg.js +22 -0
- package/dist/react/testing/index.d.ts +736 -0
- package/dist/react/testing/index.d.ts.map +1 -0
- package/dist/react/testing/index.js +13042 -0
- package/dist/react/testing/index.js.map +1 -0
- package/dist/redis/index.d.ts +14 -14
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/retry/index.d.ts +2 -2
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +8 -8
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.workerd.js +677 -0
- package/dist/scheduler/index.workerd.js.map +1 -0
- package/dist/security/index.d.ts +59 -43
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +62 -6
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +167 -167
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1 -1
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +7 -7
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +4 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts +3 -3
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts +5 -5
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/core/index.browser.js +1 -1
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +43 -43
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +11 -3
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +11 -11
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +17 -17
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts +19 -19
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.d.ts +39 -39
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/metrics/index.d.ts +5 -5
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +3 -3
- package/dist/server/multipart/index.d.ts +4 -4
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +3 -3
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +10 -10
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts +11 -132
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js +6 -1907
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +7 -305
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +3 -1908
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +4 -302
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +2 -1909
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.d.ts +3 -2
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +7 -5
- package/dist/system/index.js.map +1 -1
- package/dist/system/index.workerd.js +1232 -0
- package/dist/system/index.workerd.js.map +1 -0
- package/dist/thread/index.d.ts +3 -3
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/topic/core/index.d.ts +3 -3
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +3 -3
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +46 -2
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +109 -3
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts +34 -34
- package/dist/websocket/index.d.ts.map +1 -1
- package/package.json +31 -11
- package/src/api/audits/services/AuditService.ts +1 -1
- package/src/api/clients/controllers/AdminOAuthClientController.spec.ts +232 -0
- package/src/api/clients/controllers/AdminOAuthClientController.ts +117 -0
- package/src/api/clients/controllers/OAuth2Controller.spec.ts +613 -0
- package/src/api/clients/controllers/OAuth2Controller.ts +584 -0
- package/src/api/clients/entities/oauthClientEntity.ts +47 -0
- package/src/api/clients/entities/oauthGrantEntity.ts +27 -0
- package/src/api/clients/index.ts +54 -0
- package/src/api/clients/schemas/adminClientQuerySchema.ts +10 -0
- package/src/api/clients/schemas/adminClientResourceSchema.ts +24 -0
- package/src/api/clients/schemas/createClientBodySchema.ts +18 -0
- package/src/api/clients/schemas/createClientResponseSchema.ts +18 -0
- package/src/api/clients/schemas/oauth2ErrorSchema.ts +10 -0
- package/src/api/clients/schemas/oauth2IntrospectionResponseSchema.ts +15 -0
- package/src/api/clients/schemas/oauth2TokenRequestSchema.ts +17 -0
- package/src/api/clients/schemas/oauth2TokenResponseSchema.ts +12 -0
- package/src/api/clients/services/OAuth2Service.spec.ts +770 -0
- package/src/api/clients/services/OAuth2Service.ts +811 -0
- package/src/api/files/services/FileService.ts +1 -1
- package/src/api/jobs/__tests__/JobController.spec.ts +66 -0
- package/src/api/jobs/controllers/AdminJobController.ts +6 -14
- package/src/api/jobs/entities/jobExecutions.ts +3 -0
- package/src/api/jobs/index.ts +1 -2
- package/src/api/jobs/primitives/$job.ts +7 -10
- package/src/api/jobs/providers/JobProvider.ts +63 -38
- package/src/api/jobs/services/JobService.ts +8 -3
- package/src/api/keys/services/ApiKeyService.ts +8 -27
- package/src/api/notifications/services/NotificationSenderService.ts +1 -1
- package/src/api/notifications/services/NotificationService.ts +1 -1
- package/src/api/parameters/controllers/{AdminConfigController.ts → AdminParameterController.ts} +78 -76
- package/src/api/parameters/entities/parameters.ts +2 -2
- package/src/api/parameters/index.ts +18 -12
- package/src/api/parameters/primitives/{$config.spec.ts → $parameter.spec.ts} +210 -34
- package/src/api/parameters/primitives/{$config.ts → $parameter.ts} +32 -32
- package/src/api/parameters/schedulers/ParameterActivationScheduler.ts +30 -0
- package/src/api/parameters/schemas/activateParameterBodySchema.ts +14 -0
- package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +5 -1
- package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +26 -0
- package/src/api/parameters/schemas/index.ts +11 -11
- package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +18 -0
- package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/parameterNameParamSchema.ts +8 -0
- package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +12 -0
- package/src/api/parameters/schemas/parameterResponseSchema.ts +4 -20
- package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +13 -0
- package/src/api/parameters/schemas/parameterVersionParamSchema.ts +11 -0
- package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/parametersByStatusResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +17 -0
- package/src/api/parameters/schemas/statusParamSchema.ts +3 -4
- package/src/api/parameters/services/{ConfigStore.ts → ParameterStore.ts} +79 -78
- package/src/api/users/__tests__/ApiKeys-integration.spec.ts +2 -2
- package/src/api/users/__tests__/EmailVerification.spec.ts +1 -1
- package/src/api/users/controllers/RealmController.ts +3 -3
- package/src/api/users/primitives/$realm.ts +36 -0
- package/src/api/users/services/CredentialService.ts +12 -16
- package/src/api/users/services/IdentityService.ts +1 -1
- package/src/api/users/services/RegistrationService.ts +10 -10
- package/src/api/users/services/SessionCrudService.ts +1 -1
- package/src/api/users/services/SessionService.ts +19 -25
- package/src/api/users/services/UserParameters.ts +6 -6
- package/src/api/users/services/UserService.ts +17 -27
- package/src/bucket/index.ts +1 -0
- package/src/bucket/index.workerd.ts +32 -0
- package/src/bucket/providers/CloudflareR2Provider.ts +376 -0
- package/src/cache/core/__tests__/shared.ts +202 -0
- package/src/cache/core/primitives/$cache.spec.ts +25 -0
- package/src/cache/core/primitives/$cache.ts +75 -20
- package/src/cache/redis/__tests__/cache-redis.spec.ts +25 -0
- package/src/cache/redis/providers/RedisCacheProvider.ts +13 -8
- package/src/cli/apps/AlephaPackageBuilderCli.ts +21 -0
- package/src/cli/atoms/buildOptions.ts +29 -2
- package/src/cli/commands/build.ts +14 -1
- package/src/cli/commands/init.spec.ts +5 -15
- package/src/cli/commands/init.ts +2 -10
- package/src/cli/providers/ViteDevServerProvider.ts +460 -189
- package/src/cli/services/ProjectScaffolder.ts +4 -13
- package/src/cli/templates/agentMd.ts +11 -277
- package/src/cli/templates/apiHelloControllerTs.ts +1 -3
- package/src/command/helpers/Runner.ts +1 -1
- package/src/core/Alepha.ts +3 -0
- package/src/core/index.browser.ts +5 -5
- package/src/devtools/__tests__/DevCollectorProvider.spec.ts +7 -0
- package/src/devtools/entities/logs.ts +21 -0
- package/src/devtools/index.browser.ts +11 -0
- package/src/devtools/index.shared.ts +16 -0
- package/src/devtools/index.ts +43 -0
- package/src/devtools/providers/DevToolsMetadataProvider.ts +468 -0
- package/src/devtools/providers/DevToolsProvider.ts +285 -0
- package/src/devtools/schemas/DevActionMetadata.ts +22 -0
- package/src/devtools/schemas/DevAtomMetadata.ts +26 -0
- package/src/devtools/schemas/DevBucketMetadata.ts +11 -0
- package/src/devtools/schemas/DevCacheMetadata.ts +10 -0
- package/src/devtools/schemas/DevCommandMetadata.ts +9 -0
- package/src/devtools/schemas/DevEntityMetadata.ts +60 -0
- package/src/devtools/schemas/DevEnvMetadata.ts +22 -0
- package/src/devtools/schemas/DevMetadata.ts +49 -0
- package/src/devtools/schemas/DevModuleMetadata.ts +8 -0
- package/src/devtools/schemas/DevPageMetadata.ts +24 -0
- package/src/devtools/schemas/DevProviderMetadata.ts +10 -0
- package/src/devtools/schemas/DevQueueMetadata.ts +10 -0
- package/src/devtools/schemas/DevRealmMetadata.ts +19 -0
- package/src/devtools/schemas/DevRouteMetadata.ts +8 -0
- package/src/devtools/schemas/DevSchedulerMetadata.ts +11 -0
- package/src/devtools/schemas/DevTopicMetadata.ts +11 -0
- package/src/lock/core/primitives/$lock.ts +3 -3
- package/src/logger/providers/MemoryDestinationProvider.ts +1 -1
- package/src/orm/__tests__/$repository-crud.spec.ts +28 -16
- package/src/orm/__tests__/$repository-hooks.spec.ts +1 -1
- package/src/orm/__tests__/$repository-save.spec.ts +2 -2
- package/src/orm/__tests__/delete-returning.spec.ts +1 -1
- package/src/orm/__tests__/deletedAt.spec.ts +1 -1
- package/src/orm/__tests__/joins.spec.ts +15 -15
- package/src/orm/__tests__/orm-errors.spec.ts +790 -0
- package/src/orm/__tests__/security.spec.ts +3 -3
- package/src/orm/__tests__/version.spec.ts +3 -3
- package/src/orm/errors/DbColumnNotFoundError.ts +74 -0
- package/src/orm/errors/DbConnectionError.ts +118 -0
- package/src/orm/errors/DbDeadlockError.ts +36 -0
- package/src/orm/errors/DbForeignKeyError.ts +64 -0
- package/src/orm/errors/DbNotNullError.ts +77 -0
- package/src/orm/errors/DbTableNotFoundError.ts +63 -0
- package/src/orm/index.shared.ts +6 -0
- package/src/orm/primitives/$transaction.spec.ts +2 -2
- package/src/orm/providers/drivers/DatabaseProvider.ts +44 -0
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +68 -33
- package/src/orm/services/Repository.spec.ts +5 -5
- package/src/orm/services/Repository.ts +127 -19
- package/src/react/auth/services/ReactAuth.ts +6 -3
- package/src/react/core/hooks/useClient.ts +6 -1
- package/src/react/form/services/FormModel.ts +45 -1
- package/src/react/head/providers/HeadProvider.ts +10 -1
- package/src/react/intro/components/GettingStarted.tsx +4 -9
- package/src/react/intro/components/GettingStartedAdminSlide.tsx +8 -1
- package/src/react/intro/components/GettingStartedAuthSlide.tsx +8 -1
- package/src/react/router/__tests__/head-defaults.spec.ts +49 -0
- package/src/react/router/providers/ReactServerProvider.ts +1 -1
- package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +3 -1
- package/src/react/router/providers/SSRManifestProvider.ts +1 -0
- package/src/react/router/services/ReactRouter.ts +5 -1
- package/src/react/testing/form.ts +266 -0
- package/src/react/testing/index.ts +47 -0
- package/src/react/testing/render.tsx +182 -0
- package/src/react/testing/setup.ts +101 -0
- package/src/security/__tests__/ServerCsrfProvider.spec.ts +132 -0
- package/src/security/index.ts +4 -0
- package/src/security/providers/ServerCsrfProvider.ts +57 -0
- package/src/security/providers/ServerSecurityProvider.ts +5 -1
- package/src/server/auth/providers/ServerAuthProvider.ts +1 -1
- package/src/server/cache/providers/ServerCacheProvider.ts +1 -0
- package/src/server/core/index.ts +3 -1
- package/src/server/core/providers/ServerLoggerProvider.ts +7 -1
- package/src/server/core/providers/ServerRouterProvider.ts +7 -0
- package/src/server/core/services/HttpClient.ts +3 -1
- package/src/server/static/primitives/$serve.ts +7 -0
- package/src/server/static/providers/ServerStaticProvider.ts +3 -0
- package/src/system/providers/NodeShellProvider.ts +11 -7
- package/src/vite/tasks/buildClient.ts +1 -0
- package/src/vite/tasks/generateCloudflare.ts +15 -0
- package/src/vite/tasks/generateStatic.ts +229 -0
- package/src/vite/tasks/index.ts +1 -0
- package/src/api/jobs/services/JobAudits.spec.ts +0 -89
- package/src/api/jobs/services/JobAudits.ts +0 -101
- package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +0 -30
- package/src/api/parameters/schemas/activateConfigBodySchema.ts +0 -12
- package/src/api/parameters/schemas/configCurrentResponseSchema.ts +0 -13
- package/src/api/parameters/schemas/configHistoryResponseSchema.ts +0 -9
- package/src/api/parameters/schemas/configNameParamSchema.ts +0 -10
- package/src/api/parameters/schemas/configNamesResponseSchema.ts +0 -8
- package/src/api/parameters/schemas/configTreeNodeSchema.ts +0 -13
- package/src/api/parameters/schemas/configVersionParamSchema.ts +0 -9
- package/src/api/parameters/schemas/configVersionResponseSchema.ts +0 -9
- package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +0 -9
- package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +0 -24
- package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +0 -15
- package/src/cli/providers/DevServerProvider.ts +0 -563
package/AGENTS.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Alepha Framework
|
|
2
|
+
|
|
3
|
+
Convention-driven TypeScript framework for type-safe full-stack applications.
|
|
4
|
+
|
|
5
|
+
## Philosophy
|
|
6
|
+
|
|
7
|
+
- **Primitives**: `$`-prefixed functions (`$action`, `$entity`, `$page`)
|
|
8
|
+
- **Class-Based**: Services are classes, primitives are class properties
|
|
9
|
+
- **Zero-Config**: Code structure IS configuration
|
|
10
|
+
- **End-to-End Types**: Database → API → React
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- Use `t` from Alepha for schemas (not Zod)
|
|
15
|
+
- Use `protected` instead of `private` for class members
|
|
16
|
+
- Import with file extensions: `import { User } from "./User.ts"`
|
|
17
|
+
- Primitives are class properties (except `$entity`, `$atom`)
|
|
18
|
+
- No decorators, no Express/Fastify patterns
|
|
19
|
+
- No manual instantiation - use dependency injection
|
|
20
|
+
|
|
21
|
+
## Project Structure
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
src/
|
|
25
|
+
├── api/ # Backend
|
|
26
|
+
│ ├── controllers/ # $action endpoints
|
|
27
|
+
│ ├── services/ # Business logic
|
|
28
|
+
│ ├── entities/ # $entity definitions
|
|
29
|
+
│ └── index.ts # $module
|
|
30
|
+
├── web/ # Frontend (React)
|
|
31
|
+
│ ├── components/ # React components
|
|
32
|
+
│ ├── atoms/ # $atom state
|
|
33
|
+
│ ├── AppRouter.ts # $page routes
|
|
34
|
+
│ └── index.ts # $module
|
|
35
|
+
├── main.server.ts # Server entry
|
|
36
|
+
├── main.browser.ts # Browser entry
|
|
37
|
+
└── main.css # Styles
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Primitives Reference
|
|
41
|
+
|
|
42
|
+
### Core (`alepha`)
|
|
43
|
+
| Primitive | Purpose |
|
|
44
|
+
|-----------|---------|
|
|
45
|
+
| `$inject` | Dependency injection |
|
|
46
|
+
| `$env` | Environment variables |
|
|
47
|
+
| `$hook` | Lifecycle hooks (on: "start", "stop") |
|
|
48
|
+
| `$atom` | Global state (module-level) |
|
|
49
|
+
| `$module` | Module definition |
|
|
50
|
+
| `$context` | Request-scoped context |
|
|
51
|
+
|
|
52
|
+
### Server (`alepha/server`)
|
|
53
|
+
| Primitive | Purpose |
|
|
54
|
+
|-----------|---------|
|
|
55
|
+
| `$action` | REST API endpoints (auto GET/POST) |
|
|
56
|
+
| `$route` | Low-level HTTP routes |
|
|
57
|
+
| `$client` | Type-safe HTTP client for cross-module |
|
|
58
|
+
|
|
59
|
+
### Database (`alepha/orm`)
|
|
60
|
+
| Primitive | Purpose |
|
|
61
|
+
|-----------|---------|
|
|
62
|
+
| `$entity` | Database table definition |
|
|
63
|
+
| `$repository` | Type-safe CRUD operations |
|
|
64
|
+
| `$sequence` | Auto-increment sequences |
|
|
65
|
+
|
|
66
|
+
### Infrastructure
|
|
67
|
+
| Primitive | Import | Purpose |
|
|
68
|
+
|-----------|--------|---------|
|
|
69
|
+
| `$logger` | `alepha/logger` | Structured logging |
|
|
70
|
+
| `$queue` | `alepha/queue` | Background jobs |
|
|
71
|
+
| `$scheduler` | `alepha/scheduler` | Cron tasks |
|
|
72
|
+
| `$cache` | `alepha/cache` | Cached computations |
|
|
73
|
+
| `$bucket` | `alepha/bucket` | File storage |
|
|
74
|
+
| `$email` | `alepha/email` | Email sending |
|
|
75
|
+
| `$sms` | `alepha/sms` | SMS sending |
|
|
76
|
+
| `$lock` | `alepha/lock` | Distributed locks |
|
|
77
|
+
| `$retry` | `alepha/retry` | Retry with backoff |
|
|
78
|
+
|
|
79
|
+
### Security (`alepha/security`)
|
|
80
|
+
| Primitive | Purpose |
|
|
81
|
+
|-----------|---------|
|
|
82
|
+
| `$issuer` | JWT token generation/validation |
|
|
83
|
+
| `$permission` | Permission definitions |
|
|
84
|
+
| `$role` | Role-based access |
|
|
85
|
+
| `$basicAuth` | HTTP Basic Auth |
|
|
86
|
+
| `$serviceAccount` | Service-to-service auth |
|
|
87
|
+
|
|
88
|
+
### React (`alepha/react/router`)
|
|
89
|
+
| Primitive | Purpose |
|
|
90
|
+
|-----------|---------|
|
|
91
|
+
| `$page` | Pages with SSR, loaders, code-splitting |
|
|
92
|
+
| `$head` | Document head management |
|
|
93
|
+
| `$dictionary` | i18n translations |
|
|
94
|
+
|
|
95
|
+
### Other
|
|
96
|
+
| Primitive | Import | Purpose |
|
|
97
|
+
|-----------|--------|---------|
|
|
98
|
+
| `$command` | `alepha/command` | CLI commands |
|
|
99
|
+
| `$channel` | `alepha/websocket` | WebSocket channels |
|
|
100
|
+
| `$swagger` | `alepha/server` | OpenAPI docs |
|
|
101
|
+
| `$proxy` | `alepha/server` | HTTP proxy |
|
|
102
|
+
| `$tool` | `alepha/mcp` | MCP tool definition |
|
|
103
|
+
| `$prompt` | `alepha/mcp` | MCP prompt definition |
|
|
104
|
+
| `$resource` | `alepha/mcp` | MCP resource definition |
|
|
105
|
+
|
|
106
|
+
## React Hooks
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { useAlepha, useClient, useStore, useAction, useInject } from "alepha/react";
|
|
110
|
+
import { useRouter, useActive, useQueryParams } from "alepha/react/router";
|
|
111
|
+
import { useForm, useFormState } from "alepha/react/form";
|
|
112
|
+
import { useAuth } from "alepha/react/auth";
|
|
113
|
+
import { useHead } from "alepha/react/head";
|
|
114
|
+
import { useI18n } from "alepha/react/i18n";
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
| Hook | Purpose |
|
|
118
|
+
|------|---------|
|
|
119
|
+
| `useClient<T>()` | Type-safe API calls |
|
|
120
|
+
| `useStore(atom)` | Global state `[value, setValue]` |
|
|
121
|
+
| `useAction({ handler })` | Async ops with loading/error |
|
|
122
|
+
| `useRouter<T>()` | Type-safe navigation |
|
|
123
|
+
| `useActive(path)` | Check if route is active |
|
|
124
|
+
| `useForm({ schema, handler })` | Forms with validation |
|
|
125
|
+
| `useAuth()` | Authentication state |
|
|
126
|
+
| `useInject(Service)` | Access DI container |
|
|
127
|
+
|
|
128
|
+
## Examples
|
|
129
|
+
|
|
130
|
+
### API Endpoint
|
|
131
|
+
```typescript
|
|
132
|
+
import { t } from "alepha";
|
|
133
|
+
import { $action } from "alepha/server";
|
|
134
|
+
|
|
135
|
+
class UserController {
|
|
136
|
+
getUser = $action({
|
|
137
|
+
path: "/users/:id",
|
|
138
|
+
schema: {
|
|
139
|
+
params: t.object({ id: t.uuid() }),
|
|
140
|
+
response: t.object({ id: t.uuid(), email: t.email() }),
|
|
141
|
+
},
|
|
142
|
+
handler: async ({ params }) => this.userRepo.findById(params.id),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Entity & Repository
|
|
148
|
+
```typescript
|
|
149
|
+
import { t } from "alepha";
|
|
150
|
+
import { $entity, $repository, db } from "alepha/orm";
|
|
151
|
+
|
|
152
|
+
export const userEntity = $entity({
|
|
153
|
+
name: "users",
|
|
154
|
+
schema: t.object({
|
|
155
|
+
id: db.primaryKey(),
|
|
156
|
+
email: t.email(),
|
|
157
|
+
createdAt: db.createdAt(),
|
|
158
|
+
}),
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
class UserService {
|
|
162
|
+
users = $repository(userEntity);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Page with Loader
|
|
167
|
+
```tsx
|
|
168
|
+
import { t } from "alepha";
|
|
169
|
+
import { $page } from "alepha/react/router";
|
|
170
|
+
import { $client } from "alepha/server/links";
|
|
171
|
+
|
|
172
|
+
class AppRouter {
|
|
173
|
+
api = $client<UserController>();
|
|
174
|
+
|
|
175
|
+
userDetail = $page({
|
|
176
|
+
path: "/users/:id",
|
|
177
|
+
schema: { params: t.object({ id: t.uuid() }) },
|
|
178
|
+
loader: async ({ params }) => ({
|
|
179
|
+
user: await this.api.getUser({ params })
|
|
180
|
+
}),
|
|
181
|
+
component: ({ user }) => <div>{user.email}</div>,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Form
|
|
187
|
+
```tsx
|
|
188
|
+
import { t } from "alepha";
|
|
189
|
+
import { useForm } from "alepha/react/form";
|
|
190
|
+
|
|
191
|
+
function LoginForm() {
|
|
192
|
+
const form = useForm({
|
|
193
|
+
schema: t.object({
|
|
194
|
+
email: t.email(),
|
|
195
|
+
password: t.text(),
|
|
196
|
+
}),
|
|
197
|
+
handler: async (values) => {
|
|
198
|
+
await api.login(values);
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
return (
|
|
203
|
+
<form {...form.props}>
|
|
204
|
+
<input {...form.input.email.props} />
|
|
205
|
+
<input {...form.input.password.props} />
|
|
206
|
+
<button type="submit">Login</button>
|
|
207
|
+
</form>
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Schema Types (`t`)
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
import { t } from "alepha";
|
|
216
|
+
|
|
217
|
+
t.string() // Basic string
|
|
218
|
+
t.text() // String with maxLength, trim, lowercase options
|
|
219
|
+
t.email() // Email validation
|
|
220
|
+
t.uuid() // UUID validation
|
|
221
|
+
t.number() // Number
|
|
222
|
+
t.integer() // Integer
|
|
223
|
+
t.boolean() // Boolean
|
|
224
|
+
t.date() // Date
|
|
225
|
+
t.array(t.string()) // Array
|
|
226
|
+
t.object({ ... }) // Object
|
|
227
|
+
t.optional(t.string()) // Optional
|
|
228
|
+
t.nullable(t.string()) // Nullable
|
|
229
|
+
t.enum(["a", "b"]) // Enum
|
|
230
|
+
t.literal("value") // Literal
|
|
231
|
+
t.union([...]) // Union
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Common Mistakes
|
|
235
|
+
|
|
236
|
+
1. Using decorators → Use primitives (`$action`, not `@Get()`)
|
|
237
|
+
2. Using Zod → Use `t` from Alepha
|
|
238
|
+
3. Using Express patterns → No `app.get()`, `router.use()`
|
|
239
|
+
4. Using `$inject` across modules → Use `$client` instead
|
|
240
|
+
5. Using async constructors → Use `$hook({ on: "start" })`
|
|
241
|
+
6. Manual instantiation → Let DI container manage
|
|
242
|
+
|
|
243
|
+
## Source Code
|
|
244
|
+
|
|
245
|
+
Read implementation at `src/` directory. Check `.spec.ts` files for usage examples.
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Alepha Framework
|
|
2
|
+
|
|
3
|
+
Convention-driven TypeScript framework for type-safe full-stack applications.
|
|
4
|
+
|
|
5
|
+
## Philosophy
|
|
6
|
+
|
|
7
|
+
- **Primitives**: `$`-prefixed functions (`$action`, `$entity`, `$page`)
|
|
8
|
+
- **Class-Based**: Services are classes, primitives are class properties
|
|
9
|
+
- **Zero-Config**: Code structure IS configuration
|
|
10
|
+
- **End-to-End Types**: Database → API → React
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- Use `t` from Alepha for schemas (not Zod)
|
|
15
|
+
- Use `protected` instead of `private` for class members
|
|
16
|
+
- Import with file extensions: `import { User } from "./User.ts"`
|
|
17
|
+
- Primitives are class properties (except `$entity`, `$atom`)
|
|
18
|
+
- No decorators, no Express/Fastify patterns
|
|
19
|
+
- No manual instantiation - use dependency injection
|
|
20
|
+
|
|
21
|
+
## Project Structure
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
src/
|
|
25
|
+
├── api/ # Backend
|
|
26
|
+
│ ├── controllers/ # $action endpoints
|
|
27
|
+
│ ├── services/ # Business logic
|
|
28
|
+
│ ├── entities/ # $entity definitions
|
|
29
|
+
│ └── index.ts # $module
|
|
30
|
+
├── web/ # Frontend (React)
|
|
31
|
+
│ ├── components/ # React components
|
|
32
|
+
│ ├── atoms/ # $atom state
|
|
33
|
+
│ ├── AppRouter.ts # $page routes
|
|
34
|
+
│ └── index.ts # $module
|
|
35
|
+
├── main.server.ts # Server entry
|
|
36
|
+
├── main.browser.ts # Browser entry
|
|
37
|
+
└── main.css # Styles
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Primitives Reference
|
|
41
|
+
|
|
42
|
+
### Core (`alepha`)
|
|
43
|
+
| Primitive | Purpose |
|
|
44
|
+
|-----------|---------|
|
|
45
|
+
| `$inject` | Dependency injection |
|
|
46
|
+
| `$env` | Environment variables |
|
|
47
|
+
| `$hook` | Lifecycle hooks (on: "start", "stop") |
|
|
48
|
+
| `$atom` | Global state (module-level) |
|
|
49
|
+
| `$module` | Module definition |
|
|
50
|
+
| `$context` | Request-scoped context |
|
|
51
|
+
|
|
52
|
+
### Server (`alepha/server`)
|
|
53
|
+
| Primitive | Purpose |
|
|
54
|
+
|-----------|---------|
|
|
55
|
+
| `$action` | REST API endpoints (auto GET/POST) |
|
|
56
|
+
| `$route` | Low-level HTTP routes |
|
|
57
|
+
| `$client` | Type-safe HTTP client for cross-module |
|
|
58
|
+
|
|
59
|
+
### Database (`alepha/orm`)
|
|
60
|
+
| Primitive | Purpose |
|
|
61
|
+
|-----------|---------|
|
|
62
|
+
| `$entity` | Database table definition |
|
|
63
|
+
| `$repository` | Type-safe CRUD operations |
|
|
64
|
+
| `$sequence` | Auto-increment sequences |
|
|
65
|
+
|
|
66
|
+
### Infrastructure
|
|
67
|
+
| Primitive | Import | Purpose |
|
|
68
|
+
|-----------|--------|---------|
|
|
69
|
+
| `$logger` | `alepha/logger` | Structured logging |
|
|
70
|
+
| `$queue` | `alepha/queue` | Background jobs |
|
|
71
|
+
| `$scheduler` | `alepha/scheduler` | Cron tasks |
|
|
72
|
+
| `$cache` | `alepha/cache` | Cached computations |
|
|
73
|
+
| `$bucket` | `alepha/bucket` | File storage |
|
|
74
|
+
| `$email` | `alepha/email` | Email sending |
|
|
75
|
+
| `$sms` | `alepha/sms` | SMS sending |
|
|
76
|
+
| `$lock` | `alepha/lock` | Distributed locks |
|
|
77
|
+
| `$retry` | `alepha/retry` | Retry with backoff |
|
|
78
|
+
|
|
79
|
+
### Security (`alepha/security`)
|
|
80
|
+
| Primitive | Purpose |
|
|
81
|
+
|-----------|---------|
|
|
82
|
+
| `$issuer` | JWT token generation/validation |
|
|
83
|
+
| `$permission` | Permission definitions |
|
|
84
|
+
| `$role` | Role-based access |
|
|
85
|
+
| `$basicAuth` | HTTP Basic Auth |
|
|
86
|
+
| `$serviceAccount` | Service-to-service auth |
|
|
87
|
+
|
|
88
|
+
### React (`alepha/react/router`)
|
|
89
|
+
| Primitive | Purpose |
|
|
90
|
+
|-----------|---------|
|
|
91
|
+
| `$page` | Pages with SSR, loaders, code-splitting |
|
|
92
|
+
| `$head` | Document head management |
|
|
93
|
+
| `$dictionary` | i18n translations |
|
|
94
|
+
|
|
95
|
+
### Other
|
|
96
|
+
| Primitive | Import | Purpose |
|
|
97
|
+
|-----------|--------|---------|
|
|
98
|
+
| `$command` | `alepha/command` | CLI commands |
|
|
99
|
+
| `$channel` | `alepha/websocket` | WebSocket channels |
|
|
100
|
+
| `$swagger` | `alepha/server` | OpenAPI docs |
|
|
101
|
+
| `$proxy` | `alepha/server` | HTTP proxy |
|
|
102
|
+
| `$tool` | `alepha/mcp` | MCP tool definition |
|
|
103
|
+
| `$prompt` | `alepha/mcp` | MCP prompt definition |
|
|
104
|
+
| `$resource` | `alepha/mcp` | MCP resource definition |
|
|
105
|
+
|
|
106
|
+
## React Hooks
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { useAlepha, useClient, useStore, useAction, useInject } from "alepha/react";
|
|
110
|
+
import { useRouter, useActive, useQueryParams } from "alepha/react/router";
|
|
111
|
+
import { useForm, useFormState } from "alepha/react/form";
|
|
112
|
+
import { useAuth } from "alepha/react/auth";
|
|
113
|
+
import { useHead } from "alepha/react/head";
|
|
114
|
+
import { useI18n } from "alepha/react/i18n";
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
| Hook | Purpose |
|
|
118
|
+
|------|---------|
|
|
119
|
+
| `useClient<T>()` | Type-safe API calls |
|
|
120
|
+
| `useStore(atom)` | Global state `[value, setValue]` |
|
|
121
|
+
| `useAction({ handler })` | Async ops with loading/error |
|
|
122
|
+
| `useRouter<T>()` | Type-safe navigation |
|
|
123
|
+
| `useActive(path)` | Check if route is active |
|
|
124
|
+
| `useForm({ schema, handler })` | Forms with validation |
|
|
125
|
+
| `useAuth()` | Authentication state |
|
|
126
|
+
| `useInject(Service)` | Access DI container |
|
|
127
|
+
|
|
128
|
+
## Examples
|
|
129
|
+
|
|
130
|
+
### API Endpoint
|
|
131
|
+
```typescript
|
|
132
|
+
import { t } from "alepha";
|
|
133
|
+
import { $action } from "alepha/server";
|
|
134
|
+
|
|
135
|
+
class UserController {
|
|
136
|
+
getUser = $action({
|
|
137
|
+
path: "/users/:id",
|
|
138
|
+
schema: {
|
|
139
|
+
params: t.object({ id: t.uuid() }),
|
|
140
|
+
response: t.object({ id: t.uuid(), email: t.email() }),
|
|
141
|
+
},
|
|
142
|
+
handler: async ({ params }) => this.userRepo.findById(params.id),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Entity & Repository
|
|
148
|
+
```typescript
|
|
149
|
+
import { t } from "alepha";
|
|
150
|
+
import { $entity, $repository, db } from "alepha/orm";
|
|
151
|
+
|
|
152
|
+
export const userEntity = $entity({
|
|
153
|
+
name: "users",
|
|
154
|
+
schema: t.object({
|
|
155
|
+
id: db.primaryKey(),
|
|
156
|
+
email: t.email(),
|
|
157
|
+
createdAt: db.createdAt(),
|
|
158
|
+
}),
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
class UserService {
|
|
162
|
+
users = $repository(userEntity);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Page with Loader
|
|
167
|
+
```tsx
|
|
168
|
+
import { t } from "alepha";
|
|
169
|
+
import { $page } from "alepha/react/router";
|
|
170
|
+
import { $client } from "alepha/server/links";
|
|
171
|
+
|
|
172
|
+
class AppRouter {
|
|
173
|
+
api = $client<UserController>();
|
|
174
|
+
|
|
175
|
+
userDetail = $page({
|
|
176
|
+
path: "/users/:id",
|
|
177
|
+
schema: { params: t.object({ id: t.uuid() }) },
|
|
178
|
+
loader: async ({ params }) => ({
|
|
179
|
+
user: await this.api.getUser({ params })
|
|
180
|
+
}),
|
|
181
|
+
component: ({ user }) => <div>{user.email}</div>,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Form
|
|
187
|
+
```tsx
|
|
188
|
+
import { t } from "alepha";
|
|
189
|
+
import { useForm } from "alepha/react/form";
|
|
190
|
+
|
|
191
|
+
function LoginForm() {
|
|
192
|
+
const form = useForm({
|
|
193
|
+
schema: t.object({
|
|
194
|
+
email: t.email(),
|
|
195
|
+
password: t.text(),
|
|
196
|
+
}),
|
|
197
|
+
handler: async (values) => {
|
|
198
|
+
await api.login(values);
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
return (
|
|
203
|
+
<form {...form.props}>
|
|
204
|
+
<input {...form.input.email.props} />
|
|
205
|
+
<input {...form.input.password.props} />
|
|
206
|
+
<button type="submit">Login</button>
|
|
207
|
+
</form>
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Schema Types (`t`)
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
import { t } from "alepha";
|
|
216
|
+
|
|
217
|
+
t.string() // Basic string
|
|
218
|
+
t.text() // String with maxLength, trim, lowercase options
|
|
219
|
+
t.email() // Email validation
|
|
220
|
+
t.uuid() // UUID validation
|
|
221
|
+
t.number() // Number
|
|
222
|
+
t.integer() // Integer
|
|
223
|
+
t.boolean() // Boolean
|
|
224
|
+
t.date() // Date
|
|
225
|
+
t.array(t.string()) // Array
|
|
226
|
+
t.object({ ... }) // Object
|
|
227
|
+
t.optional(t.string()) // Optional
|
|
228
|
+
t.nullable(t.string()) // Nullable
|
|
229
|
+
t.enum(["a", "b"]) // Enum
|
|
230
|
+
t.literal("value") // Literal
|
|
231
|
+
t.union([...]) // Union
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Common Mistakes
|
|
235
|
+
|
|
236
|
+
1. Using decorators → Use primitives (`$action`, not `@Get()`)
|
|
237
|
+
2. Using Zod → Use `t` from Alepha
|
|
238
|
+
3. Using Express patterns → No `app.get()`, `router.use()`
|
|
239
|
+
4. Using `$inject` across modules → Use `$client` instead
|
|
240
|
+
5. Using async constructors → Use `$hook({ on: "start" })`
|
|
241
|
+
6. Manual instantiation → Let DI container manage
|
|
242
|
+
|
|
243
|
+
## Source Code
|
|
244
|
+
|
|
245
|
+
Read implementation at `src/` directory. Check `.spec.ts` files for usage examples.
|
package/README.md
CHANGED
|
@@ -9,33 +9,36 @@
|
|
|
9
9
|
/>
|
|
10
10
|
Alepha
|
|
11
11
|
</h1>
|
|
12
|
-
<p>
|
|
12
|
+
<p>The AI-Native Application Engine</p>
|
|
13
13
|
<a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/v/alepha.svg" alt="npm version"/></a>
|
|
14
14
|
<a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/l/alepha.svg" alt="license"/></a>
|
|
15
15
|
<a href="https://codecov.io/gh/feunard/alepha"><img src="https://codecov.io/gh/feunard/alepha/graph/badge.svg?token=ZDLWI514CP" alt="coverage"/></a>
|
|
16
16
|
<a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/dt/alepha.svg" alt="downloads"/></a>
|
|
17
17
|
</div>
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
> [!WARNING]
|
|
20
|
+
> This project is in active development and may not be suitable for production use. Please report any issues or bugs on [GitHub](https://github.com/feunard/alepha/issues).
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
## What is Alepha?
|
|
22
23
|
|
|
23
|
-
-
|
|
24
|
-
|
|
24
|
+
Full-stack TypeScript engine for agentic era. Define your schema once — get database, API, types, and forms.
|
|
25
|
+
|
|
26
|
+
- **One schema, everywhere** — Database, API validation, TypeScript types, React forms — all from one definition
|
|
25
27
|
- **Full autocomplete** — Client calls server with complete type safety, zero codegen
|
|
26
|
-
- **
|
|
28
|
+
- **Multi-runtime** — Same code runs on Node, Bun, and Cloudflare Workers
|
|
27
29
|
- **Deploy anywhere** — Cloudflare, Vercel, Docker, bare metal
|
|
28
|
-
- **AI friendly** — Built-in [llms.txt](https://alepha.dev/llms.txt) for LLM context
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
Built on predictable conventions and typed primitives — works great with AI coding assistants (BYOA).
|
|
32
|
+
|
|
33
|
+
Each layer builds on the previous.
|
|
31
34
|
|
|
32
|
-
| Layer | Description | Primitives
|
|
33
|
-
|
|
34
|
-
| **
|
|
35
|
-
| **
|
|
36
|
-
| **
|
|
37
|
-
| **
|
|
38
|
-
| **
|
|
35
|
+
| Layer | Description | Primitives |
|
|
36
|
+
|-------|-------------|---------------------------------------------------------|
|
|
37
|
+
| **Foundation** | DI, lifecycle, config | `$inject`, `$env`, `$module`, `$hook`, `$logger` |
|
|
38
|
+
| **Backend** | Database, queues, storage, API | `$entity`, `$action`, `$queue`, `$bucket`, `$scheduler` |
|
|
39
|
+
| **Frontend** | React with SSR, routing, i18n | `$page`, `$head`, `$atom`, `$dictionary` |
|
|
40
|
+
| **Platform** | Users, auth, jobs, audits | `$realm`, `$job`, `$audit`, `$notification` |
|
|
41
|
+
| **Admin** | Admin panel & auth UI | `$uiAdmin`, `$uiAuth` |
|
|
39
42
|
|
|
40
43
|
## Example
|
|
41
44
|
|
|
@@ -92,26 +95,12 @@ Requirements: [Node.js](https://nodejs.org/) 22+ or [Bun](https://bun.sh/) 1.3+
|
|
|
92
95
|
|
|
93
96
|
```bash
|
|
94
97
|
npx alepha init my-app --api # L1: Backend only
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
npx alepha init my-app --admin --ai # L4: + AI assistant context
|
|
98
|
+
--react # L2: + React frontend
|
|
99
|
+
--admin # L3: + Admin UI
|
|
98
100
|
|
|
99
101
|
cd my-app && npm run dev
|
|
100
102
|
```
|
|
101
103
|
|
|
102
|
-
## CLI
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
alepha dev # Dev server with HMR
|
|
106
|
-
alepha lint # Format & lint code
|
|
107
|
-
alepha typecheck # TypeScript check
|
|
108
|
-
alepha test # Run tests
|
|
109
|
-
alepha build # Production build
|
|
110
|
-
alepha db generate # Generate migrations
|
|
111
|
-
alepha db migrate # Apply migrations
|
|
112
|
-
alepha db studio # Visual database browser
|
|
113
|
-
```
|
|
114
|
-
|
|
115
104
|
## Learn More
|
|
116
105
|
|
|
117
106
|
- [Documentation](https://alepha.dev)
|