alepha 0.15.1 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -80
- package/dist/api/audits/index.d.ts +10 -33
- 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 +10 -3
- 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 +43 -50
- 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 +1081 -760
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +2539 -218
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +138 -132
- 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 +440 -8
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +1861 -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 +638 -5645
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2550 -368
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +203 -45
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +2060 -71
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +70 -40
- 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 +90 -40
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +70 -40
- 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 +323 -20
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +1857 -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 +10 -30
- 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 +39 -20
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +517 -540
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +58 -71
- 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 +1974 -0
- package/dist/react/router/index.browser.js.map +1 -0
- package/dist/react/router/index.d.ts +1956 -0
- package/dist/react/router/index.d.ts.map +1 -0
- package/dist/react/router/index.js +4722 -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 +41 -44
- 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 +140 -49
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +164 -32
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +12 -7
- 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 +124 -23
- 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 +8 -2
- 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 +11 -6
- 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 +1853 -5
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +309 -6
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1854 -6
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +309 -7
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +1856 -7
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.browser.js +1218 -0
- package/dist/system/index.browser.js.map +1 -0
- package/dist/{file → system}/index.d.ts +343 -16
- package/dist/system/index.d.ts.map +1 -0
- package/dist/{file → system}/index.js +419 -22
- 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 +5 -6272
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +23 -10
- 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 +82 -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 +55 -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 +10 -1
- package/src/cli/atoms/buildOptions.ts +99 -9
- package/src/cli/commands/build.ts +150 -37
- package/src/cli/commands/db.ts +22 -18
- 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 +588 -0
- package/src/cli/commands/init.ts +115 -58
- 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 +35 -16
- package/src/cli/services/AlephaCliUtils.ts +52 -121
- package/src/cli/services/PackageManagerUtils.ts +129 -11
- package/src/cli/services/ProjectScaffolder.spec.ts +97 -0
- package/src/cli/services/ProjectScaffolder.ts +148 -81
- package/src/cli/services/ViteUtils.ts +82 -0
- package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +37 -24
- package/src/cli/templates/apiAppSecurityTs.ts +11 -0
- package/src/cli/templates/apiIndexTs.ts +30 -0
- 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 +74 -0
- package/src/cli/templates/webHelloComponentTsx.ts +30 -0
- package/src/command/helpers/Runner.spec.ts +139 -0
- package/src/command/helpers/Runner.ts +7 -22
- package/src/command/index.ts +12 -4
- package/src/command/providers/CliProvider.spec.ts +1392 -0
- package/src/command/providers/CliProvider.ts +320 -47
- package/src/core/Alepha.ts +34 -27
- 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 +5 -3
- package/src/orm/index.ts +23 -53
- package/src/orm/providers/drivers/BunSqliteProvider.ts +5 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +57 -30
- package/src/orm/providers/drivers/DatabaseProvider.ts +9 -1
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +4 -1
- 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 +146 -0
- package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
- package/src/react/router/primitives/$page.spec.tsx +676 -0
- package/src/react/router/primitives/$page.ts +489 -0
- package/src/react/router/providers/ReactBrowserProvider.ts +312 -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/ReactPreloadProvider.spec.ts +142 -0
- package/src/react/router/providers/ReactPreloadProvider.ts +85 -0
- package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
- package/src/react/router/providers/ReactServerProvider.ts +487 -0
- package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +210 -0
- package/src/react/router/providers/ReactServerTemplateProvider.ts +542 -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 +90 -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 +63 -41
- 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.spec.ts +9 -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 +36 -0
- package/src/system/index.ts +62 -0
- package/src/system/index.workerd.ts +1 -0
- package/src/{file → system}/providers/FileSystemProvider.ts +24 -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 +47 -2
- 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 +19 -13
- package/src/vite/tasks/generateCloudflare.ts +10 -7
- package/src/vite/tasks/generateDocker.ts +4 -0
- 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/apiIndexTs.ts +0 -16
- package/src/cli/assets/mainServerTs.ts +0 -24
- package/src/cli/assets/webAppRouterTs.ts +0 -16
- package/src/cli/assets/webHelloComponentTsx.ts +0 -20
- 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}/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,
|
|
@@ -50,7 +52,7 @@ export const AlephaPostgres = $module({
|
|
|
50
52
|
const url = env.DATABASE_URL;
|
|
51
53
|
const isPostgres = url?.startsWith("postgres:");
|
|
52
54
|
|
|
53
|
-
if (url?.startsWith("
|
|
55
|
+
if (url?.startsWith("d1:")) {
|
|
54
56
|
alepha.with({
|
|
55
57
|
optional: true,
|
|
56
58
|
provide: DatabaseProvider,
|
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,
|
|
@@ -178,14 +152,10 @@ export const AlephaPostgres = $module({
|
|
|
178
152
|
alepha.with(RepositoryProvider);
|
|
179
153
|
|
|
180
154
|
const url = env.DATABASE_URL;
|
|
181
|
-
const hasPGlite = !!PglitePostgresProvider.importPglite();
|
|
182
155
|
const isPostgres = url?.startsWith("postgres:");
|
|
183
|
-
const isSqlite = url?.startsWith("sqlite:");
|
|
184
|
-
const isMemory = url?.includes(":memory:");
|
|
185
|
-
const isFile = !!url && !isPostgres && !isMemory;
|
|
186
156
|
const isBun = alepha.isBun();
|
|
187
157
|
|
|
188
|
-
if (url?.startsWith("
|
|
158
|
+
if (url?.startsWith("d1:")) {
|
|
189
159
|
alepha.with({
|
|
190
160
|
optional: true,
|
|
191
161
|
provide: DatabaseProvider,
|
|
@@ -194,7 +164,7 @@ export const AlephaPostgres = $module({
|
|
|
194
164
|
return;
|
|
195
165
|
}
|
|
196
166
|
|
|
197
|
-
if (
|
|
167
|
+
if (url?.startsWith("pglite:")) {
|
|
198
168
|
alepha.with({
|
|
199
169
|
optional: true,
|
|
200
170
|
provide: DatabaseProvider,
|
|
@@ -154,7 +154,10 @@ export class BunSqliteProvider extends DatabaseProvider {
|
|
|
154
154
|
},
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
// Never migrate in serverless mode - migrations should be applied during deployment
|
|
158
|
+
if (!this.alepha.isServerless()) {
|
|
159
|
+
await this.migrate();
|
|
160
|
+
}
|
|
158
161
|
|
|
159
162
|
this.log.info(`Using Bun SQLite database at ${filepath}`);
|
|
160
163
|
},
|
|
@@ -162,6 +165,7 @@ export class BunSqliteProvider extends DatabaseProvider {
|
|
|
162
165
|
|
|
163
166
|
protected readonly onStop = $hook({
|
|
164
167
|
on: "stop",
|
|
168
|
+
priority: "last",
|
|
165
169
|
handler: async () => {
|
|
166
170
|
if (this.sqlite) {
|
|
167
171
|
this.log.debug("Closing Bun SQLite connection...");
|