alepha 0.15.1 → 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.
- package/dist/api/audits/index.d.ts +342 -365
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +10 -33
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +180 -173
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +10 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +162 -155
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +10 -3
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +413 -0
- package/dist/api/keys/index.d.ts.map +1 -0
- package/dist/api/keys/index.js +476 -0
- package/dist/api/keys/index.js.map +1 -0
- package/dist/api/notifications/index.d.ts +10 -4
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +10 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +294 -301
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +30 -37
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.d.ts +1079 -769
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +2534 -218
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +10 -4
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +12 -4
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +20 -40
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +31 -44
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +432 -8
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +1856 -12
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/core/index.d.ts +179 -7
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +213 -7
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/redis/index.d.ts +1 -0
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +4 -0
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +488 -5612
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2326 -311
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +194 -46
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +1995 -60
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +42 -19
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +34 -13
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +62 -19
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +42 -19
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +15 -0
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +15 -0
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +315 -20
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +1852 -7
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +90 -8
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +91 -20
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +11 -4
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +11 -4
- package/dist/lock/core/index.js.map +1 -1
- package/dist/logger/index.d.ts +17 -66
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +14 -63
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +15 -35
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +12 -35
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +3 -3
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +7 -4
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +514 -540
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +24 -49
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +18 -10
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js +14 -6
- package/dist/queue/core/index.js.map +1 -1
- package/dist/react/auth/index.browser.js +108 -0
- package/dist/react/auth/index.browser.js.map +1 -0
- package/dist/react/auth/index.d.ts +100 -0
- package/dist/react/auth/index.d.ts.map +1 -0
- package/dist/react/auth/index.js +145 -0
- package/dist/react/auth/index.js.map +1 -0
- package/dist/react/core/index.d.ts +469 -0
- package/dist/react/core/index.d.ts.map +1 -0
- package/dist/react/core/index.js +464 -0
- package/dist/react/core/index.js.map +1 -0
- package/dist/react/form/index.d.ts +232 -0
- package/dist/react/form/index.d.ts.map +1 -0
- package/dist/react/form/index.js +432 -0
- package/dist/react/form/index.js.map +1 -0
- package/dist/react/head/index.browser.js +423 -0
- package/dist/react/head/index.browser.js.map +1 -0
- package/dist/react/head/index.d.ts +288 -0
- package/dist/react/head/index.d.ts.map +1 -0
- package/dist/react/head/index.js +465 -0
- package/dist/react/head/index.js.map +1 -0
- package/dist/react/i18n/index.d.ts +175 -0
- package/dist/react/i18n/index.d.ts.map +1 -0
- package/dist/react/i18n/index.js +224 -0
- package/dist/react/i18n/index.js.map +1 -0
- package/dist/react/router/index.browser.js +1980 -0
- package/dist/react/router/index.browser.js.map +1 -0
- package/dist/react/router/index.d.ts +2068 -0
- package/dist/react/router/index.d.ts.map +1 -0
- package/dist/react/router/index.js +4932 -0
- package/dist/react/router/index.js.map +1 -0
- package/dist/react/websocket/index.d.ts +117 -0
- package/dist/react/websocket/index.d.ts.map +1 -0
- package/dist/react/websocket/index.js +107 -0
- package/dist/react/websocket/index.js.map +1 -0
- package/dist/redis/index.bun.js +4 -0
- package/dist/redis/index.bun.js.map +1 -1
- package/dist/redis/index.d.ts +22 -25
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +16 -25
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts +11 -2
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/retry/index.js +11 -2
- package/dist/retry/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +11 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +11 -2
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +110 -19
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +157 -26
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +179 -174
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +12 -7
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +7 -22
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +7 -22
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts +10 -2
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/compress/index.js +10 -2
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +40 -16
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +7 -5
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +115 -14
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +231 -14
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +13 -23
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js +7 -21
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/health/index.d.ts +25 -19
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/health/index.js +8 -2
- package/dist/server/health/index.js.map +1 -1
- package/dist/server/helmet/index.d.ts +11 -3
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/helmet/index.js +11 -3
- package/dist/server/helmet/index.js.map +1 -1
- package/dist/server/links/index.d.ts +50 -45
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +11 -6
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +10 -3
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +10 -3
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts +9 -3
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/multipart/index.js +9 -3
- package/dist/server/multipart/index.js.map +1 -1
- package/dist/server/proxy/index.d.ts +8 -2
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/proxy/index.js +8 -2
- package/dist/server/proxy/index.js.map +1 -1
- package/dist/server/rate-limit/index.d.ts +30 -35
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js +18 -55
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +137 -4
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js +1848 -5
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +301 -6
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1849 -6
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +301 -7
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +1851 -7
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.browser.js +496 -0
- package/dist/system/index.browser.js.map +1 -0
- package/dist/{file → system}/index.d.ts +335 -16
- package/dist/system/index.d.ts.map +1 -0
- package/dist/{file → system}/index.js +412 -20
- package/dist/system/index.js.map +1 -0
- package/dist/thread/index.d.ts +11 -2
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +11 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts +12 -5
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/core/index.js +12 -5
- package/dist/topic/core/index.js.map +1 -1
- package/dist/vite/index.d.ts +4 -6271
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +8 -3
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts +12 -8
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +12 -8
- package/dist/websocket/index.js.map +1 -1
- package/package.json +80 -11
- package/src/api/audits/index.ts +10 -33
- package/src/api/files/__tests__/$bucket.spec.ts +1 -1
- package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
- package/src/api/files/controllers/FileController.spec.ts +1 -1
- package/src/api/files/index.ts +10 -3
- package/src/api/files/jobs/FileJobs.spec.ts +1 -1
- package/src/api/files/services/FileService.spec.ts +1 -1
- package/src/api/jobs/index.ts +10 -3
- package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
- package/src/api/keys/controllers/ApiKeyController.ts +103 -0
- package/src/api/keys/entities/apiKeyEntity.ts +41 -0
- package/src/api/keys/index.ts +49 -0
- package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
- package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
- package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
- package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
- package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
- package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
- package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
- package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
- package/src/api/keys/services/ApiKeyService.ts +306 -0
- package/src/api/logs/TODO.md +52 -0
- package/src/api/notifications/index.ts +10 -4
- package/src/api/parameters/index.ts +9 -30
- package/src/api/parameters/primitives/$config.ts +12 -4
- package/src/api/parameters/services/ConfigStore.ts +9 -3
- package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
- package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
- package/src/api/users/index.ts +14 -3
- package/src/api/users/primitives/$realm.ts +33 -5
- package/src/api/users/providers/RealmProvider.ts +1 -12
- package/src/api/users/services/SessionService.ts +1 -1
- package/src/api/verifications/controllers/VerificationController.ts +2 -0
- package/src/api/verifications/index.ts +10 -4
- package/src/batch/index.ts +9 -36
- package/src/batch/primitives/$batch.ts +0 -8
- package/src/batch/providers/BatchProvider.ts +29 -2
- package/src/bucket/__tests__/shared.ts +1 -1
- package/src/bucket/index.ts +13 -6
- package/src/bucket/primitives/$bucket.ts +1 -1
- package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
- package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
- package/src/cache/core/__tests__/shared.ts +30 -0
- package/src/cache/core/index.ts +11 -6
- package/src/cache/core/primitives/$cache.spec.ts +5 -0
- package/src/cache/core/providers/CacheProvider.ts +17 -0
- package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
- package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
- package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
- package/src/cli/apps/AlephaCli.ts +1 -14
- package/src/cli/apps/AlephaPackageBuilderCli.ts +1 -1
- package/src/cli/commands/build.ts +1 -5
- package/src/cli/commands/db.ts +17 -11
- package/src/cli/commands/deploy.ts +1 -1
- package/src/cli/commands/dev.ts +1 -20
- package/src/cli/commands/gen/env.ts +5 -2
- package/src/cli/commands/gen/openapi.ts +5 -2
- package/src/cli/commands/init.spec.ts +544 -0
- package/src/cli/commands/init.ts +89 -55
- package/src/cli/commands/lint.ts +7 -1
- package/src/cli/commands/typecheck.ts +11 -0
- package/src/cli/providers/AppEntryProvider.ts +1 -1
- package/src/cli/providers/ViteBuildProvider.ts +8 -50
- package/src/cli/providers/ViteDevServerProvider.ts +36 -8
- package/src/cli/services/AlephaCliUtils.ts +37 -122
- package/src/cli/services/PackageManagerUtils.ts +127 -11
- package/src/cli/services/ProjectScaffolder.ts +122 -77
- package/src/cli/services/ViteUtils.ts +82 -0
- package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +32 -24
- package/src/cli/templates/gitignore.ts +39 -0
- package/src/cli/{assets → templates}/mainCss.ts +11 -2
- package/src/cli/templates/mainServerTs.ts +33 -0
- package/src/cli/templates/webAppRouterTs.ts +50 -0
- package/src/cli/{assets → templates}/webHelloComponentTsx.ts +2 -2
- package/src/command/helpers/Runner.spec.ts +4 -0
- package/src/command/helpers/Runner.ts +3 -21
- package/src/command/index.ts +12 -4
- package/src/command/providers/CliProvider.spec.ts +1067 -0
- package/src/command/providers/CliProvider.ts +203 -40
- package/src/core/Alepha.ts +2 -2
- package/src/core/__tests__/Alepha-start.spec.ts +4 -4
- package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
- package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +20 -0
- package/src/core/providers/EventManager.spec.ts +0 -71
- package/src/core/providers/EventManager.ts +3 -15
- package/src/core/providers/Json.ts +2 -14
- package/src/datetime/index.ts +15 -0
- package/src/email/index.ts +10 -5
- package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
- package/src/email/providers/LocalEmailProvider.ts +1 -1
- package/src/fake/__tests__/keyName.example.ts +1 -1
- package/src/fake/__tests__/keyName.spec.ts +5 -5
- package/src/fake/index.ts +9 -6
- package/src/fake/providers/FakeProvider.spec.ts +258 -40
- package/src/fake/providers/FakeProvider.ts +133 -19
- package/src/lock/core/index.ts +11 -4
- package/src/logger/index.ts +17 -66
- package/src/mcp/index.ts +10 -27
- package/src/mcp/transports/SseMcpTransport.ts +0 -11
- package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
- package/src/orm/index.browser.ts +2 -2
- package/src/orm/index.bun.ts +4 -2
- package/src/orm/index.ts +21 -47
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
- package/src/orm/services/Repository.ts +7 -3
- package/src/queue/core/index.ts +14 -6
- package/src/react/auth/__tests__/$auth.spec.ts +202 -0
- package/src/react/auth/hooks/useAuth.ts +32 -0
- package/src/react/auth/index.browser.ts +13 -0
- package/src/react/auth/index.shared.ts +2 -0
- package/src/react/auth/index.ts +48 -0
- package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
- package/src/react/auth/services/ReactAuth.ts +135 -0
- package/src/react/core/__tests__/Router.spec.tsx +169 -0
- package/src/react/core/components/ClientOnly.tsx +49 -0
- package/src/react/core/components/ErrorBoundary.tsx +73 -0
- package/src/react/core/contexts/AlephaContext.ts +7 -0
- package/src/react/core/contexts/AlephaProvider.tsx +42 -0
- package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
- package/src/react/core/hooks/useAction.ts +480 -0
- package/src/react/core/hooks/useAlepha.ts +26 -0
- package/src/react/core/hooks/useClient.ts +17 -0
- package/src/react/core/hooks/useEvents.ts +51 -0
- package/src/react/core/hooks/useInject.ts +12 -0
- package/src/react/core/hooks/useStore.ts +52 -0
- package/src/react/core/index.ts +90 -0
- package/src/react/form/components/FormState.tsx +17 -0
- package/src/react/form/errors/FormValidationError.ts +18 -0
- package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
- package/src/react/form/hooks/useForm.ts +47 -0
- package/src/react/form/hooks/useFormState.ts +130 -0
- package/src/react/form/index.ts +44 -0
- package/src/react/form/services/FormModel.ts +614 -0
- package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
- package/src/react/head/helpers/SeoExpander.ts +142 -0
- package/src/react/head/hooks/useHead.spec.tsx +288 -0
- package/src/react/head/hooks/useHead.ts +62 -0
- package/src/react/head/index.browser.ts +26 -0
- package/src/react/head/index.ts +44 -0
- package/src/react/head/interfaces/Head.ts +105 -0
- package/src/react/head/primitives/$head.ts +25 -0
- package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
- package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
- package/src/react/head/providers/HeadProvider.ts +168 -0
- package/src/react/head/providers/ServerHeadProvider.ts +31 -0
- package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
- package/src/react/i18n/components/Localize.spec.tsx +357 -0
- package/src/react/i18n/components/Localize.tsx +35 -0
- package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
- package/src/react/i18n/hooks/useI18n.ts +18 -0
- package/src/react/i18n/index.ts +41 -0
- package/src/react/i18n/primitives/$dictionary.ts +69 -0
- package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
- package/src/react/i18n/providers/I18nProvider.ts +278 -0
- package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
- package/src/react/router/__tests__/page-head.spec.ts +48 -0
- package/src/react/router/__tests__/seo-head.spec.ts +125 -0
- package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
- package/src/react/router/components/ErrorViewer.tsx +872 -0
- package/src/react/router/components/Link.tsx +23 -0
- package/src/react/router/components/NestedView.tsx +223 -0
- package/src/react/router/components/NotFound.tsx +30 -0
- package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
- package/src/react/router/contexts/RouterLayerContext.ts +12 -0
- package/src/react/router/errors/Redirection.ts +28 -0
- package/src/react/router/hooks/useActive.ts +52 -0
- package/src/react/router/hooks/useQueryParams.ts +63 -0
- package/src/react/router/hooks/useRouter.ts +20 -0
- package/src/react/router/hooks/useRouterState.ts +11 -0
- package/src/react/router/index.browser.ts +45 -0
- package/src/react/router/index.shared.ts +19 -0
- package/src/react/router/index.ts +142 -0
- package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
- package/src/react/router/primitives/$page.spec.tsx +708 -0
- package/src/react/router/primitives/$page.ts +497 -0
- package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
- package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
- package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
- package/src/react/router/providers/ReactPageProvider.ts +726 -0
- package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
- package/src/react/router/providers/ReactServerProvider.ts +558 -0
- package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
- package/src/react/router/providers/SSRManifestProvider.ts +334 -0
- package/src/react/router/services/ReactPageServerService.ts +48 -0
- package/src/react/router/services/ReactPageService.ts +27 -0
- package/src/react/router/services/ReactRouter.ts +262 -0
- package/src/react/websocket/hooks/useRoom.tsx +242 -0
- package/src/react/websocket/index.ts +7 -0
- package/src/redis/__tests__/redis.spec.ts +13 -0
- package/src/redis/index.ts +9 -25
- package/src/redis/providers/BunRedisProvider.ts +9 -0
- package/src/redis/providers/NodeRedisProvider.ts +8 -0
- package/src/redis/providers/RedisProvider.ts +16 -0
- package/src/retry/index.ts +11 -2
- package/src/router/index.ts +15 -0
- package/src/scheduler/index.ts +11 -2
- package/src/security/__tests__/BasicAuth.spec.ts +2 -0
- package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
- package/src/security/index.ts +15 -10
- package/src/security/interfaces/IssuerResolver.ts +27 -0
- package/src/security/primitives/$issuer.ts +55 -0
- package/src/security/providers/SecurityProvider.ts +179 -0
- package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
- package/src/security/providers/ServerSecurityProvider.ts +36 -22
- package/src/server/auth/index.ts +12 -7
- package/src/server/cache/index.ts +7 -22
- package/src/server/compress/index.ts +10 -2
- package/src/server/cookies/index.ts +7 -5
- package/src/server/cookies/primitives/$cookie.ts +33 -11
- package/src/server/core/index.ts +16 -6
- package/src/server/core/interfaces/ServerRequest.ts +83 -1
- package/src/server/core/primitives/$action.spec.ts +1 -1
- package/src/server/core/primitives/$action.ts +8 -3
- package/src/server/core/providers/NodeHttpServerProvider.ts +9 -3
- package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
- package/src/server/core/services/ServerRequestParser.ts +306 -13
- package/src/server/cors/index.ts +7 -21
- package/src/server/cors/primitives/$cors.ts +6 -2
- package/src/server/health/index.ts +8 -2
- package/src/server/helmet/index.ts +11 -3
- package/src/server/links/index.ts +11 -6
- package/src/server/metrics/index.ts +10 -3
- package/src/server/multipart/index.ts +9 -3
- package/src/server/proxy/index.ts +8 -2
- package/src/server/rate-limit/index.ts +21 -25
- package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
- package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
- package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
- package/src/server/static/index.ts +8 -2
- package/src/server/static/providers/ServerStaticProvider.ts +1 -1
- package/src/server/swagger/index.ts +9 -4
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
- package/src/sms/index.ts +9 -5
- package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
- package/src/sms/providers/LocalSmsProvider.ts +1 -1
- package/src/system/index.browser.ts +11 -0
- package/src/system/index.ts +62 -0
- package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
- package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
- package/src/system/providers/MemoryShellProvider.ts +164 -0
- package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
- package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
- package/src/system/providers/NodeShellProvider.ts +184 -0
- package/src/system/providers/ShellProvider.ts +74 -0
- package/src/{file → system}/services/FileDetector.spec.ts +2 -2
- package/src/thread/index.ts +11 -2
- package/src/topic/core/index.ts +12 -5
- package/src/vite/tasks/buildClient.ts +2 -7
- package/src/vite/tasks/buildServer.ts +17 -1
- package/src/websocket/index.ts +12 -8
- package/dist/file/index.d.ts.map +0 -1
- package/dist/file/index.js.map +0 -1
- package/src/cli/assets/mainServerTs.ts +0 -24
- package/src/cli/assets/webAppRouterTs.ts +0 -16
- package/src/cli/providers/ViteTemplateProvider.ts +0 -27
- package/src/file/index.ts +0 -43
- /package/src/cli/{assets → templates}/apiHelloControllerTs.ts +0 -0
- /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
- /package/src/cli/{assets → templates}/biomeJson.ts +0 -0
- /package/src/cli/{assets → templates}/dummySpecTs.ts +0 -0
- /package/src/cli/{assets → templates}/editorconfig.ts +0 -0
- /package/src/cli/{assets → templates}/mainBrowserTs.ts +0 -0
- /package/src/cli/{assets → templates}/tsconfigJson.ts +0 -0
- /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
- /package/src/{file → system}/errors/FileError.ts +0 -0
- /package/src/{file → system}/services/FileDetector.ts +0 -0
|
@@ -24,6 +24,37 @@ export interface FakeOptions {
|
|
|
24
24
|
* Seed for deterministic fake data generation.
|
|
25
25
|
*/
|
|
26
26
|
seed?: number;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Probability (0-1) that an optional field will be undefined.
|
|
30
|
+
* @default 0.3
|
|
31
|
+
*/
|
|
32
|
+
optionalProbability?: number;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Probability (0-1) that a nullable field will be null.
|
|
36
|
+
* @default 0.2
|
|
37
|
+
*/
|
|
38
|
+
nullableProbability?: number;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Default number of items to generate for arrays when maxItems is not specified.
|
|
42
|
+
* @default 5
|
|
43
|
+
*/
|
|
44
|
+
defaultArrayLength?: number;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Maximum number of items to generate for arrays.
|
|
48
|
+
* Set to Infinity to respect schema's maxItems without cap.
|
|
49
|
+
* @default 20
|
|
50
|
+
*/
|
|
51
|
+
maxArrayLength?: number;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Default number of entries to generate for record types.
|
|
55
|
+
* @default { min: 2, max: 5 }
|
|
56
|
+
*/
|
|
57
|
+
defaultRecordEntries?: { min: number; max: number };
|
|
27
58
|
}
|
|
28
59
|
|
|
29
60
|
/**
|
|
@@ -38,27 +69,98 @@ export interface FakeOptions {
|
|
|
38
69
|
* email: t.email(),
|
|
39
70
|
* });
|
|
40
71
|
* const fakeUser = fake.generate(userSchema);
|
|
72
|
+
*
|
|
73
|
+
* // Configure options
|
|
74
|
+
* fake.configure({ seed: 99999, optionalProbability: 0.5 });
|
|
41
75
|
* ```
|
|
42
76
|
*/
|
|
43
77
|
export class FakeProvider {
|
|
44
|
-
protected readonly faker
|
|
45
|
-
protected readonly guard
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
protected readonly faker = faker;
|
|
79
|
+
protected readonly guard = new TypeGuard();
|
|
80
|
+
protected options: Required<FakeOptions> = {
|
|
81
|
+
locale: "en",
|
|
82
|
+
seed: 12345,
|
|
83
|
+
optionalProbability: 0.3,
|
|
84
|
+
nullableProbability: 0.2,
|
|
85
|
+
defaultArrayLength: 5,
|
|
86
|
+
maxArrayLength: 20,
|
|
87
|
+
defaultRecordEntries: { min: 2, max: 5 },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
constructor() {
|
|
91
|
+
this.faker.seed(this.options.seed);
|
|
92
|
+
}
|
|
56
93
|
|
|
57
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Configure generation options.
|
|
96
|
+
* If a seed is provided, the faker instance is reseeded.
|
|
97
|
+
*/
|
|
98
|
+
public configure(options: Partial<FakeOptions>): this {
|
|
99
|
+
const oldSeed = this.options.seed;
|
|
100
|
+
|
|
101
|
+
this.options = {
|
|
102
|
+
...this.options,
|
|
103
|
+
...options,
|
|
104
|
+
// Merge defaultRecordEntries if provided
|
|
105
|
+
defaultRecordEntries: options.defaultRecordEntries
|
|
106
|
+
? {
|
|
107
|
+
...this.options.defaultRecordEntries,
|
|
108
|
+
...options.defaultRecordEntries,
|
|
109
|
+
}
|
|
110
|
+
: this.options.defaultRecordEntries,
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
// Reseed faker if seed is provided (allows resetting to same seed)
|
|
114
|
+
if (options.seed !== undefined) {
|
|
115
|
+
this.faker.seed(options.seed);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return this;
|
|
58
119
|
}
|
|
59
120
|
|
|
60
121
|
/**
|
|
61
122
|
* Generate fake data matching the given TypeBox schema.
|
|
123
|
+
*
|
|
124
|
+
* For object schemas, property names are used to generate contextually
|
|
125
|
+
* appropriate values. The following field name patterns are recognized
|
|
126
|
+
* (case-insensitive, underscores and hyphens are ignored):
|
|
127
|
+
*
|
|
128
|
+
* **String fields:**
|
|
129
|
+
* - `email` → email address
|
|
130
|
+
* - `firstName`, `first` → first name
|
|
131
|
+
* - `lastName`, `last` → last name
|
|
132
|
+
* - `fullName`, `name` → full name
|
|
133
|
+
* - `username` → username
|
|
134
|
+
* - `phone`, `mobile` → phone number
|
|
135
|
+
* - `address` → street address
|
|
136
|
+
* - `city` → city name
|
|
137
|
+
* - `country` → country name
|
|
138
|
+
* - `state`, `province` → state/province
|
|
139
|
+
* - `zip`, `postal` → postal code
|
|
140
|
+
* - `company`, `organization` → company name
|
|
141
|
+
* - `job`, `title`, `position` → job title
|
|
142
|
+
* - `url`, `website` → URL
|
|
143
|
+
* - `avatar`, `image`, `photo` → avatar URL
|
|
144
|
+
* - `color`, `colour` → color name
|
|
145
|
+
* - `bio`, `about`, `description` → bio text
|
|
146
|
+
*
|
|
147
|
+
* **Number/Integer fields:**
|
|
148
|
+
* - `age` → 18-99
|
|
149
|
+
* - `year` → past year
|
|
150
|
+
* - `month` → 1-12
|
|
151
|
+
* - `day` → 1-31
|
|
152
|
+
* - `price`, `amount`, `cost` → monetary value
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* const fake = new FakeProvider();
|
|
157
|
+
* const schema = t.object({
|
|
158
|
+
* user_name: t.string(), // generates username
|
|
159
|
+
* firstName: t.string(), // generates first name
|
|
160
|
+
* "e-mail": t.string(), // generates email
|
|
161
|
+
* });
|
|
162
|
+
* const result = fake.generate(schema);
|
|
163
|
+
* ```
|
|
62
164
|
*/
|
|
63
165
|
public generate<T extends TSchema>(schema: T): StaticDecode<T> {
|
|
64
166
|
return this.generateValue(schema) as StaticDecode<T>;
|
|
@@ -78,7 +180,11 @@ export class FakeProvider {
|
|
|
78
180
|
// Handle optional
|
|
79
181
|
if (this.guard.isOptional(schema)) {
|
|
80
182
|
// 30% chance of being undefined
|
|
81
|
-
if (
|
|
183
|
+
if (
|
|
184
|
+
this.faker.datatype.boolean({
|
|
185
|
+
probability: this.options.optionalProbability,
|
|
186
|
+
})
|
|
187
|
+
) {
|
|
82
188
|
return undefined;
|
|
83
189
|
}
|
|
84
190
|
// Generate the inner schema
|
|
@@ -92,7 +198,11 @@ export class FakeProvider {
|
|
|
92
198
|
const hasNull = union.anyOf.some((s) => this.guard.isNull(s));
|
|
93
199
|
if (hasNull) {
|
|
94
200
|
// 20% chance of being null
|
|
95
|
-
if (
|
|
201
|
+
if (
|
|
202
|
+
this.faker.datatype.boolean({
|
|
203
|
+
probability: this.options.nullableProbability,
|
|
204
|
+
})
|
|
205
|
+
) {
|
|
96
206
|
return null;
|
|
97
207
|
}
|
|
98
208
|
// Pick a non-null option
|
|
@@ -354,7 +464,10 @@ export class FakeProvider {
|
|
|
354
464
|
protected generateArray(schema: TArray): unknown[] {
|
|
355
465
|
const schemaAny = schema as any;
|
|
356
466
|
const minItems = schemaAny.minItems ?? 0;
|
|
357
|
-
const maxItems = Math.min(
|
|
467
|
+
const maxItems = Math.min(
|
|
468
|
+
schemaAny.maxItems ?? this.options.defaultArrayLength,
|
|
469
|
+
this.options.maxArrayLength,
|
|
470
|
+
);
|
|
358
471
|
const length = this.faker.number.int({ min: minItems, max: maxItems });
|
|
359
472
|
|
|
360
473
|
return Array.from({ length }, () => this.generateValue(schema.items));
|
|
@@ -383,8 +496,9 @@ export class FakeProvider {
|
|
|
383
496
|
return this.generateValue(schema);
|
|
384
497
|
}
|
|
385
498
|
|
|
386
|
-
// Normalize key name
|
|
387
|
-
|
|
499
|
+
// Normalize key name: lowercase and remove underscores/hyphens
|
|
500
|
+
// This allows matching "user_name", "user-name", "userName" etc.
|
|
501
|
+
const normalizedKey = keyName.toLowerCase().replace(/[_-]/g, "");
|
|
388
502
|
|
|
389
503
|
// Check if this is a string type that could benefit from context
|
|
390
504
|
if (this.guard.isString(schema)) {
|
|
@@ -509,7 +623,7 @@ export class FakeProvider {
|
|
|
509
623
|
: record.additionalProperties;
|
|
510
624
|
|
|
511
625
|
// Generate 2-5 random key-value pairs
|
|
512
|
-
const count = this.faker.number.int(
|
|
626
|
+
const count = this.faker.number.int(this.options.defaultRecordEntries);
|
|
513
627
|
const result: Record<string, unknown> = {};
|
|
514
628
|
|
|
515
629
|
for (let i = 0; i < count; i++) {
|
package/src/lock/core/index.ts
CHANGED
|
@@ -15,12 +15,19 @@ export * from "./providers/MemoryLockProvider.ts";
|
|
|
15
15
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* | type | quality | stability |
|
|
19
|
+
* |------|---------|-----------|
|
|
20
|
+
* | backend | rare | stable |
|
|
19
21
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
+
* Resource locking for distributed systems.
|
|
23
|
+
*
|
|
24
|
+
* **Features:**
|
|
25
|
+
* - Distributed locks with timeout
|
|
26
|
+
* - Time-based lock expiration
|
|
27
|
+
* - Automatic release on scope exit
|
|
28
|
+
* - Distributed coordination via Redis
|
|
29
|
+
* - Providers: Memory (dev), Redis (production)
|
|
22
30
|
*
|
|
23
|
-
* @see {@link $lock}
|
|
24
31
|
* @module alepha.lock
|
|
25
32
|
*/
|
|
26
33
|
export const AlephaLock = $module({
|
package/src/logger/index.ts
CHANGED
|
@@ -27,72 +27,23 @@ export * from "./services/Logger.ts";
|
|
|
27
27
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* - ConsoleDestinationProvider: logs to the console.
|
|
48
|
-
* - MemoryDestinationProvider: stores logs in memory for later retrieval.
|
|
49
|
-
*
|
|
50
|
-
* Default log formatters are:
|
|
51
|
-
* - JsonFormatterProvider: formats logs as JSON.
|
|
52
|
-
* - SimpleFormatterProvider: formats logs as simple text (with colors when possible).
|
|
53
|
-
* - RawFormatterProvider: formats logs as raw text without any formatting.
|
|
54
|
-
*
|
|
55
|
-
* ### Event Emission
|
|
56
|
-
*
|
|
57
|
-
* The logger emits 'log' events that can be listened to by external code, allowing for custom log processing and destinations.
|
|
58
|
-
*
|
|
59
|
-
* ```ts
|
|
60
|
-
* class CustomDestination {
|
|
61
|
-
* onLog = $hook({
|
|
62
|
-
* on: "log",
|
|
63
|
-
* handler: (ev) => {
|
|
64
|
-
* // ev.message (formatted message)
|
|
65
|
-
* // ev.entry (level, raw message, ...)
|
|
66
|
-
* }
|
|
67
|
-
* });
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*
|
|
71
|
-
* ### Log Level
|
|
72
|
-
*
|
|
73
|
-
* You can configure the log level and format via environment variables:
|
|
74
|
-
*
|
|
75
|
-
* - `LOG_LEVEL`: Sets the default log level for the application.
|
|
76
|
-
* - `LOG_FORMAT`: Sets the default log format for the application.
|
|
77
|
-
*
|
|
78
|
-
* ```bash
|
|
79
|
-
* LOG_LEVEL=debug LOG_FORMAT=json node src/index.ts
|
|
80
|
-
* ```
|
|
81
|
-
*
|
|
82
|
-
* Log level is also available in the state as `logLevel`, which can be used to dynamically change the log level at runtime.
|
|
83
|
-
* ```ts
|
|
84
|
-
* alepha.state.set("alepha.logger.level", "debug");
|
|
85
|
-
* ```
|
|
86
|
-
*
|
|
87
|
-
* Log level is $module aware, meaning you can set different log levels for different modules.
|
|
88
|
-
*
|
|
89
|
-
* **Module-specific configuration:**
|
|
90
|
-
* - `LOG_LEVEL=my.module.name:debug,info` - debug for `my.module.name` (and submodules), info for others
|
|
91
|
-
* - `LOG_LEVEL=alepha:trace,my.app:error,info` - trace for alepha modules, error for my.app modules, info for others
|
|
92
|
-
*
|
|
93
|
-
* **Wildcard patterns (NEW):**
|
|
94
|
-
* - `LOG_LEVEL=alepha.*:debug,info` - debug for all alepha submodules
|
|
95
|
-
* - `LOG_LEVEL=*.test:silent,*.core:trace,info` - silent for test modules, trace for core modules
|
|
30
|
+
* | type | quality | stability |
|
|
31
|
+
* |------|---------|-----------|
|
|
32
|
+
* | tooling | rare | stable |
|
|
33
|
+
*
|
|
34
|
+
* Configurable logging with multiple outputs.
|
|
35
|
+
*
|
|
36
|
+
* **Features:**
|
|
37
|
+
* - Global logger access
|
|
38
|
+
* - JSON format
|
|
39
|
+
* - Pretty colored output
|
|
40
|
+
* - Raw text format
|
|
41
|
+
* - Console destination
|
|
42
|
+
* - Memory destination (for devtools)
|
|
43
|
+
* - Custom handlers
|
|
44
|
+
* - Configuration via `LOG_LEVEL` and `LOG_FORMAT`
|
|
45
|
+
*
|
|
46
|
+
* @module alepha.logger
|
|
96
47
|
*/
|
|
97
48
|
export const AlephaLogger = $module({
|
|
98
49
|
name: "alepha.logger",
|
package/src/mcp/index.ts
CHANGED
|
@@ -93,35 +93,18 @@ export { StdioMcpTransport } from "./transports/StdioMcpTransport.ts";
|
|
|
93
93
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
|
-
*
|
|
96
|
+
* | type | quality | stability |
|
|
97
|
+
* |------|---------|-----------|
|
|
98
|
+
* | backend | standard | stable |
|
|
97
99
|
*
|
|
98
|
-
*
|
|
99
|
-
* and the McpServerProvider. You need to add a transport module
|
|
100
|
-
* (AlephaMcpStdio or AlephaMcpSse) for actual communication.
|
|
100
|
+
* Model Context Protocol for AI tool integration.
|
|
101
101
|
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* add = $tool({
|
|
109
|
-
* description: "Add two numbers",
|
|
110
|
-
* schema: {
|
|
111
|
-
* params: t.object({ a: t.number(), b: t.number() }),
|
|
112
|
-
* result: t.number(),
|
|
113
|
-
* },
|
|
114
|
-
* handler: async ({ params }) => params.a + params.b,
|
|
115
|
-
* });
|
|
116
|
-
* }
|
|
117
|
-
*
|
|
118
|
-
* run(
|
|
119
|
-
* Alepha.create()
|
|
120
|
-
* .with(AlephaMcp)
|
|
121
|
-
* .with(AlephaMcpStdio)
|
|
122
|
-
* .with(MyMcpServer)
|
|
123
|
-
* );
|
|
124
|
-
* ```
|
|
102
|
+
* **Features:**
|
|
103
|
+
* - MCP resource definitions
|
|
104
|
+
* - MCP tool definitions
|
|
105
|
+
* - MCP prompt definitions
|
|
106
|
+
* - JSON-RPC protocol
|
|
107
|
+
* - SSE and Stdio transports
|
|
125
108
|
*
|
|
126
109
|
* @module alepha.mcp
|
|
127
110
|
*/
|
|
@@ -112,14 +112,8 @@ export class SseMcpTransport {
|
|
|
112
112
|
message = $route({
|
|
113
113
|
method: "POST",
|
|
114
114
|
path: this.env.MCP_SSE_PATH,
|
|
115
|
-
secure: false,
|
|
116
115
|
schema: {
|
|
117
116
|
body: t.json(),
|
|
118
|
-
query: t.object({
|
|
119
|
-
token: t.optional(
|
|
120
|
-
t.text({ description: "API token for authentication" }),
|
|
121
|
-
),
|
|
122
|
-
}),
|
|
123
117
|
},
|
|
124
118
|
handler: async (request) => {
|
|
125
119
|
try {
|
|
@@ -141,11 +135,6 @@ export class SseMcpTransport {
|
|
|
141
135
|
string | string[] | undefined
|
|
142
136
|
>;
|
|
143
137
|
|
|
144
|
-
// Support token as query parameter (for clients that can't set headers)
|
|
145
|
-
if (request.query.token && !headers.authorization) {
|
|
146
|
-
headers.authorization = `Bearer ${request.query.token}`;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
138
|
const context: McpContext = { headers };
|
|
150
139
|
|
|
151
140
|
const response = await this.mcpServer.handleMessage(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Alepha } from "alepha";
|
|
2
2
|
import { describe, expect, it } from "vitest";
|
|
3
|
-
import { $repository,
|
|
3
|
+
import { $repository, AlephaOrm } from "../index.ts";
|
|
4
4
|
import { userEntity } from "./fixtures/userEntitySchema.ts";
|
|
5
5
|
|
|
6
6
|
describe("PostgresProvider", () => {
|
|
@@ -9,7 +9,7 @@ describe("PostgresProvider", () => {
|
|
|
9
9
|
users = $repository(userEntity);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
const alepha = Alepha.create().with(
|
|
12
|
+
const alepha = Alepha.create().with(AlephaOrm);
|
|
13
13
|
|
|
14
14
|
const userService = alepha.inject(UserService);
|
|
15
15
|
|
package/src/orm/index.browser.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { AlephaDateTime } from "alepha/datetime";
|
|
|
3
3
|
|
|
4
4
|
export * from "./index.shared.ts";
|
|
5
5
|
|
|
6
|
-
export const
|
|
7
|
-
name: "alepha.
|
|
6
|
+
export const AlephaOrm = $module({
|
|
7
|
+
name: "alepha.orm",
|
|
8
8
|
primitives: [],
|
|
9
9
|
services: [AlephaDateTime],
|
|
10
10
|
});
|
package/src/orm/index.bun.ts
CHANGED
|
@@ -15,12 +15,14 @@ import { QueryManager } from "./services/QueryManager.ts";
|
|
|
15
15
|
import { Repository } from "./services/Repository.ts";
|
|
16
16
|
import { SqliteModelBuilder } from "./services/SqliteModelBuilder.ts";
|
|
17
17
|
|
|
18
|
+
export const SqliteProvider = BunSqliteProvider;
|
|
19
|
+
|
|
18
20
|
export * from "./index.shared-server.ts";
|
|
19
21
|
export * from "./providers/drivers/BunPostgresProvider.ts";
|
|
20
22
|
export * from "./providers/drivers/BunSqliteProvider.ts";
|
|
21
23
|
|
|
22
|
-
export const
|
|
23
|
-
name: "alepha.
|
|
24
|
+
export const AlephaOrm = $module({
|
|
25
|
+
name: "alepha.orm",
|
|
24
26
|
primitives: [$sequence, $entity],
|
|
25
27
|
services: [
|
|
26
28
|
AlephaDateTime,
|
package/src/orm/index.ts
CHANGED
|
@@ -94,61 +94,35 @@ export * from "./providers/drivers/BunSqliteProvider.ts";
|
|
|
94
94
|
export * from "./providers/drivers/NodePostgresProvider.ts";
|
|
95
95
|
export * from "./providers/drivers/NodeSqliteProvider.ts";
|
|
96
96
|
|
|
97
|
+
export const SqliteProvider = NodeSqliteProvider;
|
|
98
|
+
|
|
97
99
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
98
100
|
|
|
99
101
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* - Bun: Uses `BunPostgresProvider` or `BunSqliteProvider`
|
|
104
|
-
* - Node.js: Uses `NodePostgresProvider` or `NodeSqliteProvider`
|
|
105
|
-
*
|
|
106
|
-
* ```ts
|
|
107
|
-
* import { t } from "alepha";
|
|
108
|
-
* import { $entity, $repository, db } from "alepha/postgres";
|
|
109
|
-
*
|
|
110
|
-
* const users = $entity({
|
|
111
|
-
* name: "users",
|
|
112
|
-
* schema: t.object({
|
|
113
|
-
* id: db.primaryKey(),
|
|
114
|
-
* name: t.text(),
|
|
115
|
-
* email: t.text(),
|
|
116
|
-
* }),
|
|
117
|
-
* });
|
|
118
|
-
*
|
|
119
|
-
* class App {
|
|
120
|
-
* users = $repository(users);
|
|
121
|
-
*
|
|
122
|
-
* getUserByName(name: string) {
|
|
123
|
-
* return this.users.findOne({ name: { eq: name } });
|
|
124
|
-
* }
|
|
125
|
-
* }
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* This is not a full ORM, but rather a set of tools to work with Postgres databases in a type-safe way.
|
|
102
|
+
* | type | quality | stability |
|
|
103
|
+
* |------|---------|-----------|
|
|
104
|
+
* | backend | epic | stable |
|
|
129
105
|
*
|
|
130
|
-
*
|
|
131
|
-
* - A type-safe way to define entities and repositories. (via `$entity` and `$repository`)
|
|
132
|
-
* - Custom query builders and filters.
|
|
133
|
-
* - Built-in special columns like `createdAt`, `updatedAt`, `deletedAt`, `version`.
|
|
134
|
-
* - Automatic JSONB support.
|
|
135
|
-
* - Automatic synchronization of entities with the database schema (for testing and development).
|
|
136
|
-
* - Fallback to raw SQL via Drizzle ORM `sql` function.
|
|
106
|
+
* Full-featured database abstraction built on Drizzle ORM with complete type safety.
|
|
137
107
|
*
|
|
138
|
-
*
|
|
108
|
+
* **Features:**
|
|
109
|
+
* - Define database entities with TypeBox schemas
|
|
110
|
+
* - Automatic timestamps, soft deletes, and versioning columns
|
|
111
|
+
* - Type-safe CRUD operations with filtering, pagination, sorting, and relationships
|
|
112
|
+
* - Database transaction support with automatic rollback
|
|
113
|
+
* - Auto-incrementing sequences for IDs
|
|
114
|
+
* - PostgreSQL support (Node.js, Bun, Cloudflare Workers via pglite)
|
|
115
|
+
* - SQLite support (Node.js, Bun, Cloudflare D1)
|
|
116
|
+
* - Automatic schema sync for development/testing
|
|
117
|
+
* - Drizzle Kit migrations for production
|
|
118
|
+
* - Type-safe filters: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `like`, `between`
|
|
119
|
+
* - JSONB column support
|
|
120
|
+
* - Relationship joins
|
|
139
121
|
*
|
|
140
|
-
* @see {@link $entity}
|
|
141
|
-
* @see {@link $sequence}
|
|
142
|
-
* @see {@link $repository}
|
|
143
|
-
* @see {@link $transaction}
|
|
144
|
-
* @see {@link NodePostgresProvider} - Node.js Postgres implementation
|
|
145
|
-
* @see {@link NodeSqliteProvider} - Node.js SQLite implementation
|
|
146
|
-
* @see {@link BunPostgresProvider} - Bun Postgres implementation
|
|
147
|
-
* @see {@link BunSqliteProvider} - Bun SQLite implementation
|
|
148
122
|
* @module alepha.postgres
|
|
149
123
|
*/
|
|
150
|
-
export const
|
|
151
|
-
name: "alepha.
|
|
124
|
+
export const AlephaOrm = $module({
|
|
125
|
+
name: "alepha.orm",
|
|
152
126
|
primitives: [$sequence, $entity],
|
|
153
127
|
services: [
|
|
154
128
|
AlephaDateTime,
|
|
@@ -616,7 +616,7 @@ export abstract class Repository<T extends TObject> {
|
|
|
616
616
|
*/
|
|
617
617
|
public async updateOne(
|
|
618
618
|
where: PgQueryWhereOrSQL<T>,
|
|
619
|
-
data:
|
|
619
|
+
data: WithSQL<Static<TObjectUpdate<T>>>,
|
|
620
620
|
opts: StatementOptions = {},
|
|
621
621
|
): Promise<Static<T>> {
|
|
622
622
|
await this.alepha.events.emit("repository:update:before", {
|
|
@@ -767,7 +767,7 @@ export abstract class Repository<T extends TObject> {
|
|
|
767
767
|
*/
|
|
768
768
|
public async updateById(
|
|
769
769
|
id: string | number,
|
|
770
|
-
data:
|
|
770
|
+
data: WithSQL<Static<TObjectUpdate<T>>>,
|
|
771
771
|
opts: StatementOptions = {},
|
|
772
772
|
): Promise<Static<T>> {
|
|
773
773
|
return await this.updateOne(this.getWhereId(id), data, opts);
|
|
@@ -778,7 +778,7 @@ export abstract class Repository<T extends TObject> {
|
|
|
778
778
|
*/
|
|
779
779
|
public async updateMany(
|
|
780
780
|
where: PgQueryWhereOrSQL<T>,
|
|
781
|
-
data:
|
|
781
|
+
data: WithSQL<Static<TObjectUpdate<T>>>,
|
|
782
782
|
opts: StatementOptions = {},
|
|
783
783
|
): Promise<Array<number | string>> {
|
|
784
784
|
await this.alepha.events.emit("repository:update:before", {
|
|
@@ -1177,3 +1177,7 @@ export interface StatementOptions {
|
|
|
1177
1177
|
*/
|
|
1178
1178
|
now?: DateTime | string;
|
|
1179
1179
|
}
|
|
1180
|
+
|
|
1181
|
+
type WithSQL<T> = {
|
|
1182
|
+
[P in keyof T]?: T[P] | SQL;
|
|
1183
|
+
};
|
package/src/queue/core/index.ts
CHANGED
|
@@ -16,14 +16,22 @@ export * from "./providers/WorkerProvider.ts";
|
|
|
16
16
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* | type | quality | stability |
|
|
20
|
+
* |------|---------|-----------|
|
|
21
|
+
* | backend | epic | stable |
|
|
20
22
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
23
|
+
* Asynchronous message processing with automatic worker management.
|
|
24
|
+
*
|
|
25
|
+
* **Features:**
|
|
26
|
+
* - Background job queues with type-safe payloads
|
|
27
|
+
* - Queue consumer handlers
|
|
28
|
+
* - Automatic worker threads for non-blocking processing
|
|
29
|
+
* - Retry mechanisms with exponential backoff
|
|
30
|
+
* - Dead letter queues for failed messages
|
|
31
|
+
* - Batch processing support
|
|
32
|
+
* - Configurable concurrency and worker pools
|
|
33
|
+
* - Providers: Memory (dev), Redis (production)
|
|
24
34
|
*
|
|
25
|
-
* @see {@link $queue}
|
|
26
|
-
* @see {@link $consumer}
|
|
27
35
|
* @module alepha.queue
|
|
28
36
|
*/
|
|
29
37
|
export const AlephaQueue = $module({
|