alepha 0.15.0 → 0.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -98
- package/dist/api/audits/index.d.ts +630 -653
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +12 -35
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +365 -358
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +12 -5
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +255 -248
- 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.browser.js +4 -4
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +84 -78
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +14 -8
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +528 -535
- 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 +1221 -910
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +2556 -248
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +142 -136
- 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 +142 -162
- 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 +595 -171
- 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 +225 -53
- 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 +6 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +834 -226
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2872 -417
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +458 -310
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +2011 -76
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +309 -97
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +796 -701
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +329 -97
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +309 -97
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +59 -44
- 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 +314 -19
- 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 +5500 -5418
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +113 -42
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +219 -212
- 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/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +41 -90
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +15 -68
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +228 -230
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +32 -31
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +12 -12
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +90 -80
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +1434 -1459
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +112 -130
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +262 -254
- 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/queue/redis/index.d.ts.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 +127 -130
- 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 +80 -71
- 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/router/index.d.ts +6 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +119 -28
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +404 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +642 -228
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1579 -37
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1141 -111
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1261 -25
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +63 -78
- 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 +13 -5
- 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 +46 -22
- 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 +307 -196
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +271 -38
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +24 -34
- 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 +13 -5
- 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.browser.js +9 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +133 -128
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +24 -11
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +524 -4
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4472 -7
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts +15 -9
- 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 +110 -104
- 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 +46 -51
- 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 +181 -48
- 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 +348 -53
- 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 +312 -18
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +1854 -10
- 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/system/index.d.ts +1158 -0
- 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 +82 -73
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +13 -4
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts +330 -323
- 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/topic/redis/index.d.ts +6 -6
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +163 -5825
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +130 -477
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +3 -3
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +287 -283
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +15 -11
- package/dist/websocket/index.js.map +1 -1
- package/package.json +86 -17
- 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 -11
- 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 +3 -16
- package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -2
- package/src/cli/atoms/appEntryOptions.ts +13 -0
- package/src/cli/atoms/buildOptions.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +1 -1
- package/src/cli/commands/build.ts +64 -52
- package/src/cli/commands/db.ts +17 -11
- package/src/cli/commands/deploy.ts +1 -1
- package/src/cli/commands/dev.ts +13 -49
- package/src/cli/commands/gen/env.ts +6 -3
- package/src/cli/commands/gen/openapi.ts +5 -2
- package/src/cli/commands/init.spec.ts +544 -0
- package/src/cli/commands/init.ts +101 -58
- package/src/cli/commands/lint.ts +8 -2
- package/src/cli/commands/typecheck.ts +11 -0
- package/src/cli/defineConfig.ts +9 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/providers/AppEntryProvider.ts +131 -0
- package/src/cli/providers/ViteBuildProvider.ts +40 -0
- package/src/cli/providers/ViteDevServerProvider.ts +378 -0
- package/src/cli/services/AlephaCliUtils.ts +39 -93
- package/src/cli/services/PackageManagerUtils.ts +140 -17
- package/src/cli/services/ProjectScaffolder.ts +169 -101
- package/src/cli/services/ViteUtils.ts +82 -0
- package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +41 -28
- package/src/cli/{assets → templates}/apiHelloControllerTs.ts +2 -1
- package/src/cli/{assets → templates}/biomeJson.ts +2 -1
- package/src/cli/{assets → templates}/dummySpecTs.ts +2 -1
- package/src/cli/{assets → templates}/editorconfig.ts +2 -1
- package/src/cli/templates/gitignore.ts +39 -0
- package/src/cli/{assets → templates}/mainBrowserTs.ts +2 -1
- package/src/cli/templates/mainCss.ts +33 -0
- package/src/cli/templates/mainServerTs.ts +33 -0
- package/src/cli/{assets → templates}/tsconfigJson.ts +2 -1
- package/src/cli/templates/webAppRouterTs.ts +50 -0
- package/src/cli/templates/webHelloComponentTsx.ts +20 -0
- 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 +3 -9
- 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/primitives/$module.ts +12 -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/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
- package/src/core/providers/SchemaValidator.spec.ts +236 -0
- 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/logger/providers/PrettyFormatterProvider.ts +0 -9
- package/src/mcp/errors/McpError.ts +30 -0
- package/src/mcp/index.ts +13 -27
- package/src/mcp/transports/SseMcpTransport.ts +6 -7
- 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/DrizzleKitProvider.ts +3 -5
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
- package/src/orm/services/Repository.ts +18 -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 +17 -7
- 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/BunHttpServerProvider.ts +1 -1
- package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
- package/src/server/core/providers/NodeHttpServerProvider.ts +77 -22
- package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
- package/src/server/core/providers/ServerProvider.ts +9 -12
- 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/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +13 -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/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +2 -8
- package/src/vite/tasks/buildServer.ts +84 -21
- package/src/vite/tasks/copyAssets.ts +5 -4
- package/src/vite/tasks/generateSitemap.ts +64 -23
- package/src/vite/tasks/index.ts +0 -2
- package/src/vite/tasks/prerenderPages.ts +49 -24
- package/src/websocket/index.ts +12 -8
- package/dist/file/index.d.ts +0 -839
- package/dist/file/index.d.ts.map +0 -1
- package/dist/file/index.js.map +0 -1
- package/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/assets/mainServerTs.ts +0 -24
- package/src/cli/assets/webAppRouterTs.ts +0 -15
- package/src/cli/assets/webHelloComponentTsx.ts +0 -16
- package/src/cli/commands/format.ts +0 -23
- package/src/file/index.ts +0 -43
- package/src/vite/helpers/boot.ts +0 -117
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -71
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
- /package/src/cli/{assets → templates}/apiIndexTs.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
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as alepha19 from "alepha";
|
|
2
2
|
import { Alepha, AlephaError, Async, CompiledEventExecutor, FileLike, Hooks, KIND, Primitive, Static, StreamLike, TArray, TFile, TObject, TRecord, TSchema, TStream, TString, TVoid } from "alepha";
|
|
3
|
-
import * as
|
|
3
|
+
import * as alepha_logger6 from "alepha/logger";
|
|
4
4
|
import { Readable } from "node:stream";
|
|
5
5
|
import { DateTimeProvider, DurationLike } from "alepha/datetime";
|
|
6
6
|
import { ReadableStream } from "node:stream/web";
|
|
7
7
|
import { Route, RouterProvider } from "alepha/router";
|
|
8
8
|
import * as alepha_cache0 from "alepha/cache";
|
|
9
|
-
import * as node_http0 from "node:http";
|
|
10
9
|
import { IncomingMessage, Server, ServerResponse as ServerResponse$1 } from "node:http";
|
|
10
|
+
import { Socket } from "node:net";
|
|
11
11
|
|
|
12
12
|
//#region ../../src/server/core/schemas/errorSchema.d.ts
|
|
13
13
|
declare const errorSchema: alepha19.TObject<{
|
|
@@ -59,20 +59,20 @@ declare class ServerReply {
|
|
|
59
59
|
status?: number;
|
|
60
60
|
body?: any;
|
|
61
61
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
* Redirect to a given URL with optional status code (default 301).
|
|
63
|
+
*/
|
|
64
64
|
redirect(url: string, status?: number): void;
|
|
65
65
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
* Set the response status code.
|
|
67
|
+
*/
|
|
68
68
|
setStatus(status: number): this;
|
|
69
69
|
/**
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
* Set a response header.
|
|
71
|
+
*/
|
|
72
72
|
setHeader(name: string, value: string): this;
|
|
73
73
|
/**
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
* Set the response body.
|
|
75
|
+
*/
|
|
76
76
|
setBody(body: any): this;
|
|
77
77
|
}
|
|
78
78
|
//#endregion
|
|
@@ -111,73 +111,103 @@ interface ServerRequestConfig<TConfig extends RequestConfigSchema = RequestConfi
|
|
|
111
111
|
type ServerRequestConfigEntry<TConfig extends RequestConfigSchema = RequestConfigSchema> = Partial<ServerRequestConfig<TConfig>>;
|
|
112
112
|
interface ServerRequest<TConfig extends RequestConfigSchema = RequestConfigSchema> extends ServerRequestConfig<TConfig> {
|
|
113
113
|
/**
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
* HTTP method used for this request.
|
|
115
|
+
*/
|
|
116
116
|
method: RouteMethod;
|
|
117
117
|
/**
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
* Full request URL.
|
|
119
|
+
*/
|
|
120
120
|
url: URL;
|
|
121
121
|
/**
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
* Unique request ID assigned to this request.
|
|
123
|
+
*/
|
|
124
124
|
requestId: string;
|
|
125
125
|
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
* Client IP address.
|
|
127
|
+
* Uses `X-Forwarded-For` header when `TRUST_PROXY=true`.
|
|
128
|
+
*/
|
|
129
129
|
ip?: string;
|
|
130
130
|
/**
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
* Value of the `Host` header sent by the client.
|
|
132
|
+
*/
|
|
133
133
|
host?: string;
|
|
134
134
|
/**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
135
|
+
* Browser user agent information.
|
|
136
|
+
* Information are not guaranteed to be accurate. Use with caution.
|
|
137
|
+
*
|
|
138
|
+
* @see {@link UserAgentParser}
|
|
139
|
+
*/
|
|
140
140
|
userAgent: UserAgentInfo;
|
|
141
141
|
/**
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
* Geolocation information derived from proxy headers.
|
|
143
|
+
* Available when behind Cloudflare, Vercel, or similar CDNs.
|
|
144
|
+
*/
|
|
145
|
+
geo: RequestGeo;
|
|
146
|
+
/**
|
|
147
|
+
* Whether the request appears to be from a bot/crawler.
|
|
148
|
+
* Based on user-agent analysis.
|
|
149
|
+
*/
|
|
150
|
+
isBot: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Whether the request is from a mobile device.
|
|
153
|
+
* Based on user-agent analysis.
|
|
154
|
+
*/
|
|
155
|
+
isMobile: boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Request protocol (http or https).
|
|
158
|
+
* Uses `X-Forwarded-Proto` header when behind a proxy.
|
|
159
|
+
*/
|
|
160
|
+
protocol: "http" | "https";
|
|
161
|
+
/**
|
|
162
|
+
* Preferred language from `Accept-Language` header.
|
|
163
|
+
* Returns the first/most preferred language code (e.g., "en", "fr", "en-US").
|
|
164
|
+
*/
|
|
165
|
+
language?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Parsed referer information.
|
|
168
|
+
* Undefined if no Referer header or invalid URL.
|
|
169
|
+
*/
|
|
170
|
+
referer?: RequestReferer;
|
|
171
|
+
/**
|
|
172
|
+
* Arbitrary metadata attached to the request. Can be used by middlewares to store information.
|
|
173
|
+
*/
|
|
144
174
|
metadata: Record<string, any>;
|
|
145
175
|
/**
|
|
146
|
-
|
|
147
|
-
|
|
176
|
+
* Reply object to be used to send response.
|
|
177
|
+
*/
|
|
148
178
|
reply: ServerReply;
|
|
149
179
|
/**
|
|
150
|
-
|
|
151
|
-
|
|
180
|
+
* The raw underlying request object (Web Request).
|
|
181
|
+
*/
|
|
152
182
|
raw: ServerRawRequest;
|
|
153
183
|
}
|
|
154
184
|
interface ServerRoute<TConfig extends RequestConfigSchema = RequestConfigSchema> extends Route {
|
|
155
185
|
/**
|
|
156
|
-
|
|
157
|
-
|
|
186
|
+
* Handler function for this route.
|
|
187
|
+
*/
|
|
158
188
|
handler: ServerHandler<TConfig>;
|
|
159
189
|
/**
|
|
160
|
-
|
|
161
|
-
|
|
190
|
+
* HTTP method for this route.
|
|
191
|
+
*/
|
|
162
192
|
method?: RouteMethod;
|
|
163
193
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
194
|
+
* Request/response schema for this route.
|
|
195
|
+
*
|
|
196
|
+
* Request schema contains:
|
|
197
|
+
* - body, for POST/PUT/PATCH requests
|
|
198
|
+
* - params, for URL parameters (e.g. /user/:id)
|
|
199
|
+
* - query, for URL query parameters (e.g. /user?id=123)
|
|
200
|
+
* - headers, for HTTP headers
|
|
201
|
+
*
|
|
202
|
+
* Response schema contains:
|
|
203
|
+
* - response
|
|
204
|
+
*
|
|
205
|
+
* Response schema is used to validate and serialize the response sent by the handler.
|
|
206
|
+
*/
|
|
177
207
|
schema?: TConfig;
|
|
178
208
|
/**
|
|
179
|
-
|
|
180
|
-
|
|
209
|
+
* @see ServerLoggerProvider
|
|
210
|
+
*/
|
|
181
211
|
silent?: boolean;
|
|
182
212
|
}
|
|
183
213
|
type ServerResponseBody<TConfig extends RequestConfigSchema = RequestConfigSchema> = TConfig["response"] extends TResponseBody ? Static<TConfig["response"]> : ResponseBodyType;
|
|
@@ -213,21 +243,75 @@ interface WebRequestEvent {
|
|
|
213
243
|
req: Request;
|
|
214
244
|
res?: Response;
|
|
215
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Geolocation information from proxy headers (Cloudflare, Vercel, etc.)
|
|
248
|
+
*/
|
|
249
|
+
interface RequestGeo {
|
|
250
|
+
/**
|
|
251
|
+
* ISO 3166-1 alpha-2 country code (e.g., "US", "FR", "JP").
|
|
252
|
+
*/
|
|
253
|
+
country?: string;
|
|
254
|
+
/**
|
|
255
|
+
* City name (e.g., "San Francisco", "Paris").
|
|
256
|
+
*/
|
|
257
|
+
city?: string;
|
|
258
|
+
/**
|
|
259
|
+
* Region/state (e.g., "California", "Île-de-France").
|
|
260
|
+
*/
|
|
261
|
+
region?: string;
|
|
262
|
+
/**
|
|
263
|
+
* Latitude (if available).
|
|
264
|
+
*/
|
|
265
|
+
latitude?: string;
|
|
266
|
+
/**
|
|
267
|
+
* Longitude (if available).
|
|
268
|
+
*/
|
|
269
|
+
longitude?: string;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Parsed referer information.
|
|
273
|
+
*/
|
|
274
|
+
interface RequestReferer {
|
|
275
|
+
/**
|
|
276
|
+
* Full referer URL.
|
|
277
|
+
*/
|
|
278
|
+
url: string;
|
|
279
|
+
/**
|
|
280
|
+
* Hostname of the referer (e.g., "google.com").
|
|
281
|
+
*/
|
|
282
|
+
hostname: string;
|
|
283
|
+
/**
|
|
284
|
+
* Path of the referer URL.
|
|
285
|
+
*/
|
|
286
|
+
pathname: string;
|
|
287
|
+
}
|
|
216
288
|
//#endregion
|
|
217
289
|
//#region ../../src/server/core/services/ServerRequestParser.d.ts
|
|
218
290
|
declare class ServerRequestParser {
|
|
219
291
|
protected readonly alepha: Alepha;
|
|
220
292
|
protected readonly userAgentParser: UserAgentParser;
|
|
293
|
+
protected readonly env: {
|
|
294
|
+
TRUST_PROXY: boolean;
|
|
295
|
+
};
|
|
221
296
|
createServerRequest(rawRequest: ServerRequestData): ServerRequest;
|
|
222
297
|
getRequestId(request: ServerRequestData): string | undefined;
|
|
223
298
|
getRequestUserAgent(request: ServerRequestData): UserAgentInfo;
|
|
224
299
|
getRequestIp(request: ServerRequestData): string | undefined;
|
|
300
|
+
protected getConnectionIp(request: ServerRequestData): string | undefined;
|
|
301
|
+
getRequestGeo(request: ServerRequestData): RequestGeo;
|
|
302
|
+
protected static readonly BOT_PATTERNS: RegExp[];
|
|
303
|
+
getIsBot(request: ServerRequestData): boolean;
|
|
304
|
+
protected static readonly MOBILE_PATTERNS: RegExp[];
|
|
305
|
+
getIsMobile(request: ServerRequestData): boolean;
|
|
306
|
+
getProtocol(request: ServerRequestData): "http" | "https";
|
|
307
|
+
getLanguage(request: ServerRequestData): string | undefined;
|
|
308
|
+
getReferer(request: ServerRequestData): RequestReferer | undefined;
|
|
225
309
|
}
|
|
226
310
|
//#endregion
|
|
227
311
|
//#region ../../src/server/core/providers/ServerTimingProvider.d.ts
|
|
228
312
|
type TimingMap = Record<string, [number, number]>;
|
|
229
313
|
declare class ServerTimingProvider {
|
|
230
|
-
protected readonly log:
|
|
314
|
+
protected readonly log: alepha_logger6.Logger;
|
|
231
315
|
protected readonly alepha: Alepha;
|
|
232
316
|
options: {
|
|
233
317
|
prefix: string;
|
|
@@ -251,7 +335,7 @@ declare class ServerTimingProvider {
|
|
|
251
335
|
* - $page => React route (for React SSR)
|
|
252
336
|
*/
|
|
253
337
|
declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
254
|
-
protected readonly log:
|
|
338
|
+
protected readonly log: alepha_logger6.Logger;
|
|
255
339
|
protected readonly alepha: Alepha;
|
|
256
340
|
protected readonly routes: ServerRoute[];
|
|
257
341
|
protected readonly serverTimingProvider: ServerTimingProvider;
|
|
@@ -269,39 +353,39 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
|
269
353
|
protected readonly processRequestBound: () => Promise<any>;
|
|
270
354
|
protected readonly queryKeysCache: WeakMap<object, string[]>;
|
|
271
355
|
/**
|
|
272
|
-
|
|
273
|
-
|
|
356
|
+
* Get cached keys for a query schema, computing them lazily on first access.
|
|
357
|
+
*/
|
|
274
358
|
protected getQuerySchemaKeys(schema: {
|
|
275
359
|
properties: object;
|
|
276
360
|
}): string[];
|
|
277
361
|
/**
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
362
|
+
* Compile event executors for optimal performance.
|
|
363
|
+
* Called lazily on first request after all hooks are registered.
|
|
364
|
+
*/
|
|
281
365
|
protected compileEvents(): void;
|
|
282
366
|
/**
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
367
|
+
* Get all registered routes, optionally filtered by a pattern.
|
|
368
|
+
*
|
|
369
|
+
* Pattern accept simple wildcard '*' at the end.
|
|
370
|
+
* Example: '/api/*' will match all routes starting with '/api/' but '/api/' will match only that exact route.
|
|
371
|
+
*/
|
|
288
372
|
getRoutes(pattern?: string): ServerRoute[];
|
|
289
373
|
/**
|
|
290
|
-
|
|
291
|
-
|
|
374
|
+
* Create a new server route.
|
|
375
|
+
*/
|
|
292
376
|
createRoute<TConfig extends RequestConfigSchema = RequestConfigSchema>(route: ServerRoute<TConfig>): void;
|
|
293
377
|
/**
|
|
294
|
-
|
|
295
|
-
|
|
378
|
+
* Get or generate a context ID from request headers.
|
|
379
|
+
*/
|
|
296
380
|
protected getContextId(headers: Record<string, string>): string;
|
|
297
381
|
/**
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
382
|
+
* Process an incoming request through the full lifecycle:
|
|
383
|
+
* - onRequest hooks
|
|
384
|
+
* - route handler
|
|
385
|
+
* - onSend hooks
|
|
386
|
+
* - response serialization
|
|
387
|
+
* - onResponse hooks
|
|
388
|
+
*/
|
|
305
389
|
protected processRequest(request: ServerRequest, route: ServerRoute, responseKind: ResponseKind): Promise<{
|
|
306
390
|
status: number;
|
|
307
391
|
headers: Record<string, string> & {
|
|
@@ -310,24 +394,24 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
|
310
394
|
body: any;
|
|
311
395
|
}>;
|
|
312
396
|
/**
|
|
313
|
-
|
|
314
|
-
|
|
397
|
+
* Run the route handler with request validation and response serialization.
|
|
398
|
+
*/
|
|
315
399
|
protected runRouteHandler(route: ServerRoute, request: ServerRequest, responseKind: ResponseKind): Promise<void>;
|
|
316
400
|
/**
|
|
317
|
-
|
|
318
|
-
|
|
401
|
+
* Transform reply body based on response kind and route schema.
|
|
402
|
+
*/
|
|
319
403
|
serializeResponse(route: ServerRoute, reply: ServerReply, responseKind: ResponseKind): void;
|
|
320
404
|
/**
|
|
321
|
-
|
|
322
|
-
|
|
405
|
+
* Determine response type based on route schema.
|
|
406
|
+
*/
|
|
323
407
|
protected getResponseType(schema?: RequestConfigSchema): ResponseKind;
|
|
324
408
|
/**
|
|
325
|
-
|
|
326
|
-
|
|
409
|
+
* When an error occurs during request processing, this method is called.
|
|
410
|
+
*/
|
|
327
411
|
protected errorHandler(route: ServerRoute, request: ServerRequest, error: Error): Promise<void>;
|
|
328
412
|
/**
|
|
329
|
-
|
|
330
|
-
|
|
413
|
+
* Validate incoming request against route schema.
|
|
414
|
+
*/
|
|
331
415
|
validateRequest(route: {
|
|
332
416
|
schema?: RequestConfigSchema;
|
|
333
417
|
}, request: ServerRequestConfig): void;
|
|
@@ -342,7 +426,7 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
|
342
426
|
* ServerProvider supports both Node.js HTTP requests and Web (Fetch API) requests.
|
|
343
427
|
*/
|
|
344
428
|
declare class ServerProvider {
|
|
345
|
-
protected readonly log:
|
|
429
|
+
protected readonly log: alepha_logger6.Logger;
|
|
346
430
|
protected readonly alepha: Alepha;
|
|
347
431
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
348
432
|
protected readonly router: ServerRouterProvider;
|
|
@@ -363,51 +447,47 @@ declare class ServerProvider {
|
|
|
363
447
|
}>;
|
|
364
448
|
protected readonly urlBaseCache: Map<string, string>;
|
|
365
449
|
/**
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
450
|
+
* Get cached URL base (protocol + host) for a given host header.
|
|
451
|
+
* Caches the result to avoid repeated string concatenation.
|
|
452
|
+
*/
|
|
369
453
|
protected getUrlBase(headers: Record<string, string>): string;
|
|
370
454
|
/**
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
455
|
+
* Parse query string manually - faster than new URL() + URLSearchParams.
|
|
456
|
+
* Returns empty object if no query string.
|
|
457
|
+
*/
|
|
374
458
|
protected parseQueryString(rawUrl: string): Record<string, string>;
|
|
375
459
|
/**
|
|
376
|
-
|
|
377
|
-
|
|
460
|
+
* Fast decode - only calls decodeURIComponent if needed.
|
|
461
|
+
*/
|
|
378
462
|
protected fastDecode(str: string): string;
|
|
379
|
-
/**
|
|
380
|
-
* Extract pathname from URL without creating URL object.
|
|
381
|
-
*/
|
|
382
|
-
protected getPathname(rawUrl: string): string;
|
|
383
463
|
get hostname(): string;
|
|
384
464
|
/**
|
|
385
|
-
|
|
386
|
-
|
|
465
|
+
* When a Node.js HTTP request is received from outside. (Vercel, AWS Lambda, etc.)
|
|
466
|
+
*/
|
|
387
467
|
protected readonly onNodeRequest: alepha19.HookPrimitive<"node:request">;
|
|
388
468
|
/**
|
|
389
|
-
|
|
390
|
-
|
|
469
|
+
* When a Web (Fetch API) request is received from outside. (Netlify, Cloudflare Workers, etc.)
|
|
470
|
+
*/
|
|
391
471
|
protected readonly onWebRequest: alepha19.HookPrimitive<"web:request">;
|
|
392
472
|
/**
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
473
|
+
* Handle Node.js HTTP request event.
|
|
474
|
+
*
|
|
475
|
+
* Optimized to avoid expensive URL parsing when possible.
|
|
476
|
+
*/
|
|
397
477
|
handleNodeRequest(nodeRequestEvent: NodeRequestEvent): Promise<void>;
|
|
398
478
|
/**
|
|
399
|
-
|
|
400
|
-
|
|
479
|
+
* Handle Web (Fetch API) request event.
|
|
480
|
+
*/
|
|
401
481
|
handleWebRequest(ev: WebRequestEvent): Promise<void>;
|
|
402
482
|
/**
|
|
403
|
-
|
|
404
|
-
|
|
483
|
+
* Helper for Vite development mode to let Vite handle (or not) 404.
|
|
484
|
+
*/
|
|
405
485
|
protected isViteNotFound(url?: string, route?: Route, params?: Record<string, string>): boolean;
|
|
406
486
|
}
|
|
407
487
|
//#endregion
|
|
408
488
|
//#region ../../src/server/core/services/HttpClient.d.ts
|
|
409
489
|
declare class HttpClient {
|
|
410
|
-
protected readonly log:
|
|
490
|
+
protected readonly log: alepha_logger6.Logger;
|
|
411
491
|
protected readonly alepha: Alepha;
|
|
412
492
|
readonly cache: alepha_cache0.CachePrimitiveFn<HttpClientCache, any[]>;
|
|
413
493
|
protected readonly pendingRequests: HttpClientPendingRequests;
|
|
@@ -431,18 +511,18 @@ declare class HttpClient {
|
|
|
431
511
|
}
|
|
432
512
|
interface FetchOptions<T extends TSchema = TSchema> {
|
|
433
513
|
/**
|
|
434
|
-
|
|
435
|
-
|
|
514
|
+
* Key to identify the request in the pending requests.
|
|
515
|
+
*/
|
|
436
516
|
key?: string;
|
|
437
517
|
/**
|
|
438
|
-
|
|
439
|
-
|
|
518
|
+
* The schema to validate the response against.
|
|
519
|
+
*/
|
|
440
520
|
schema?: {
|
|
441
521
|
response?: T;
|
|
442
522
|
};
|
|
443
523
|
/**
|
|
444
|
-
|
|
445
|
-
|
|
524
|
+
* Built-in cache options.
|
|
525
|
+
*/
|
|
446
526
|
localCache?: boolean | number | DurationLike;
|
|
447
527
|
}
|
|
448
528
|
type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit & FetchOptions<T>;
|
|
@@ -558,72 +638,72 @@ declare const $action: {
|
|
|
558
638
|
};
|
|
559
639
|
interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> extends Omit<ServerRoute, "handler" | "path" | "schema" | "mapParams"> {
|
|
560
640
|
/**
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
641
|
+
* Name of the action.
|
|
642
|
+
*
|
|
643
|
+
* - It will be used to generate the route path if `path` is not provided.
|
|
644
|
+
* - It will be used to generate the permission name if `security` is enabled.
|
|
645
|
+
*/
|
|
566
646
|
name?: string;
|
|
567
647
|
/**
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
648
|
+
* Group actions together.
|
|
649
|
+
*
|
|
650
|
+
* - If not provided, the service name containing the route will be used.
|
|
651
|
+
* - It will be used as Tag for documentation purposes.
|
|
652
|
+
* - It will be used for permission name generation if `security` is enabled.
|
|
653
|
+
*
|
|
654
|
+
* @example
|
|
655
|
+
* ```ts
|
|
656
|
+
* // group = "MyController"
|
|
657
|
+
* class MyController {
|
|
658
|
+
* hello = $action({ handler: () => "Hello World" });
|
|
659
|
+
* }
|
|
660
|
+
*
|
|
661
|
+
* // group = "users"
|
|
662
|
+
* class MyOtherController {
|
|
663
|
+
* group = "users";
|
|
664
|
+
* a1 = $action({ handler: () => "Action 1", group: this.group });
|
|
665
|
+
* a2 = $action({ handler: () => "Action 2", group: this.group });
|
|
666
|
+
* }
|
|
667
|
+
* ```
|
|
668
|
+
*/
|
|
589
669
|
group?: string;
|
|
590
670
|
/**
|
|
591
|
-
|
|
592
|
-
|
|
671
|
+
* Pathname of the route. If not provided, property key is used.
|
|
672
|
+
*/
|
|
593
673
|
path?: string;
|
|
594
674
|
/**
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
675
|
+
* The route method.
|
|
676
|
+
*
|
|
677
|
+
* - If not provided, it will be set to "GET" by default.
|
|
678
|
+
* - If not provider and a body is provided, it will be set to "POST".
|
|
679
|
+
*
|
|
680
|
+
* Wildcard methods are not supported for now. (e.g. "ALL", "ANY", etc.)
|
|
681
|
+
*/
|
|
602
682
|
method?: RouteMethod;
|
|
603
683
|
/**
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
684
|
+
* The config schema of the route.
|
|
685
|
+
* - body: The request body schema.
|
|
686
|
+
* - params: Path variables schema.
|
|
687
|
+
* - query: The request query-params schema.
|
|
688
|
+
* - response: The response schema.
|
|
689
|
+
*/
|
|
610
690
|
schema?: TConfig;
|
|
611
691
|
/**
|
|
612
|
-
|
|
613
|
-
|
|
692
|
+
* A short description of the action. Used for documentation purposes.
|
|
693
|
+
*/
|
|
614
694
|
description?: string;
|
|
615
695
|
/**
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
696
|
+
* Disable the route. Useful with env variables do disable one specific route.
|
|
697
|
+
* Route won't be available in the API but can still be called locally!
|
|
698
|
+
*/
|
|
619
699
|
disabled?: boolean;
|
|
620
700
|
/**
|
|
621
|
-
|
|
622
|
-
|
|
701
|
+
* Main route handler. This is where the route logic is implemented.
|
|
702
|
+
*/
|
|
623
703
|
handler: ServerActionHandler<TConfig>;
|
|
624
704
|
}
|
|
625
705
|
declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Primitive<ActionPrimitiveOptions<TConfig>> {
|
|
626
|
-
protected readonly log:
|
|
706
|
+
protected readonly log: alepha_logger6.Logger;
|
|
627
707
|
protected readonly env: {
|
|
628
708
|
SERVER_API_PREFIX: string;
|
|
629
709
|
};
|
|
@@ -634,33 +714,33 @@ declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Primi
|
|
|
634
714
|
get prefix(): string;
|
|
635
715
|
get route(): ServerRoute;
|
|
636
716
|
/**
|
|
637
|
-
|
|
638
|
-
|
|
717
|
+
* Returns the name of the action.
|
|
718
|
+
*/
|
|
639
719
|
get name(): string;
|
|
640
720
|
/**
|
|
641
|
-
|
|
642
|
-
|
|
721
|
+
* Returns the group of the action. (e.g. "orders", "admin", etc.)
|
|
722
|
+
*/
|
|
643
723
|
get group(): string;
|
|
644
724
|
/**
|
|
645
|
-
|
|
646
|
-
|
|
725
|
+
* Returns the HTTP method of the action.
|
|
726
|
+
*/
|
|
647
727
|
get method(): RouteMethod;
|
|
648
728
|
/**
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
729
|
+
* Returns the path of the action.
|
|
730
|
+
*
|
|
731
|
+
* Path is prefixed by `/api` by default.
|
|
732
|
+
*/
|
|
653
733
|
get path(): string;
|
|
654
734
|
get schema(): TConfig | undefined;
|
|
655
735
|
getBodyContentType(): string | undefined;
|
|
656
736
|
/**
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
737
|
+
* Call the action handler directly.
|
|
738
|
+
* There is no HTTP layer involved.
|
|
739
|
+
*/
|
|
660
740
|
run(config?: ClientRequestEntry<TConfig>, options?: ClientRequestOptions): Promise<ClientRequestResponse<TConfig>>;
|
|
661
741
|
/**
|
|
662
|
-
|
|
663
|
-
|
|
742
|
+
* Works like `run`, but always fetches (http request) the route.
|
|
743
|
+
*/
|
|
664
744
|
fetch(config?: ClientRequestEntry<TConfig>, options?: ClientRequestOptions): Promise<FetchResponse<ClientRequestResponse<TConfig>>>;
|
|
665
745
|
}
|
|
666
746
|
interface ActionPrimitiveFn<TConfig extends RequestConfigSchema> extends ActionPrimitive<TConfig> {
|
|
@@ -668,16 +748,17 @@ interface ActionPrimitiveFn<TConfig extends RequestConfigSchema> extends ActionP
|
|
|
668
748
|
}
|
|
669
749
|
type ClientRequestEntry<TConfig extends RequestConfigSchema, T = ClientRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K] };
|
|
670
750
|
type ClientRequestEntryContainer<TConfig extends RequestConfigSchema> = {
|
|
671
|
-
body: TConfig["body"] extends
|
|
751
|
+
body: TConfig["body"] extends TRequestBody ? Static<TConfig["body"]> : undefined;
|
|
672
752
|
params: TConfig["params"] extends TObject ? Static<TConfig["params"]> : undefined;
|
|
673
|
-
headers?: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> :
|
|
674
|
-
query?: TConfig["query"] extends TObject ? Partial<Static<TConfig["query"]>> :
|
|
753
|
+
headers?: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> : Record<string, string>;
|
|
754
|
+
query?: TConfig["query"] extends TObject ? Partial<Static<TConfig["query"]>> : Record<string, string>;
|
|
675
755
|
};
|
|
676
756
|
interface ClientRequestOptions extends FetchOptions {
|
|
677
757
|
/**
|
|
678
|
-
|
|
679
|
-
|
|
758
|
+
* Standard request fetch options.
|
|
759
|
+
*/
|
|
680
760
|
request?: RequestInit;
|
|
761
|
+
query?: Record<string, string | number | boolean>;
|
|
681
762
|
}
|
|
682
763
|
type ClientRequestResponse<TConfig extends RequestConfigSchema> = TConfig["response"] extends TSchema ? Static<TConfig["response"]> : any;
|
|
683
764
|
/**
|
|
@@ -771,7 +852,7 @@ declare module "alepha" {
|
|
|
771
852
|
declare class BunHttpServerProvider extends ServerProvider {
|
|
772
853
|
protected readonly alepha: Alepha;
|
|
773
854
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
774
|
-
protected readonly log:
|
|
855
|
+
protected readonly log: alepha_logger6.Logger;
|
|
775
856
|
protected readonly env: {
|
|
776
857
|
SERVER_PORT: number;
|
|
777
858
|
SERVER_HOST: string;
|
|
@@ -796,14 +877,33 @@ declare module "alepha" {
|
|
|
796
877
|
declare class NodeHttpServerProvider extends ServerProvider {
|
|
797
878
|
protected readonly alepha: Alepha;
|
|
798
879
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
799
|
-
protected readonly log:
|
|
880
|
+
protected readonly log: alepha_logger6.Logger;
|
|
800
881
|
protected readonly env: {
|
|
801
882
|
SERVER_PORT: number;
|
|
802
883
|
SERVER_HOST: string;
|
|
803
884
|
};
|
|
804
885
|
protected readonly router: ServerRouterProvider;
|
|
886
|
+
/**
|
|
887
|
+
* Track active connections for fast shutdown.
|
|
888
|
+
*/
|
|
889
|
+
protected readonly connections: Set<Socket>;
|
|
890
|
+
/**
|
|
891
|
+
* Get number of active connections.
|
|
892
|
+
*/
|
|
893
|
+
getConnectionsCount(): number;
|
|
894
|
+
/**
|
|
895
|
+
* Server options.
|
|
896
|
+
*/
|
|
897
|
+
readonly options: {
|
|
898
|
+
/**
|
|
899
|
+
* Graceful shutdown timeout in ms.
|
|
900
|
+
* After this, remaining connections are forcefully closed.
|
|
901
|
+
* @default 30000
|
|
902
|
+
*/
|
|
903
|
+
shutdownTimeout: number;
|
|
904
|
+
};
|
|
805
905
|
get hostname(): string;
|
|
806
|
-
protected readonly handleRequestError: (res:
|
|
906
|
+
protected readonly handleRequestError: (res: ServerResponse$1, err: Error) => void;
|
|
807
907
|
protected readonly nodeRequestEvent: {
|
|
808
908
|
req: IncomingMessage;
|
|
809
909
|
res: ServerResponse$1;
|
|
@@ -814,11 +914,12 @@ declare class NodeHttpServerProvider extends ServerProvider {
|
|
|
814
914
|
protected readonly stop: alepha19.HookPrimitive<"stop">;
|
|
815
915
|
protected listen(): Promise<void>;
|
|
816
916
|
protected close(): Promise<void>;
|
|
917
|
+
protected destroyAllConnections(): void;
|
|
817
918
|
}
|
|
818
919
|
//#endregion
|
|
819
920
|
//#region ../../src/server/core/providers/ServerLoggerProvider.d.ts
|
|
820
921
|
declare class ServerLoggerProvider {
|
|
821
|
-
protected readonly log:
|
|
922
|
+
protected readonly log: alepha_logger6.Logger;
|
|
822
923
|
protected readonly alepha: Alepha;
|
|
823
924
|
readonly onRequest: alepha19.HookPrimitive<"server:onRequest">;
|
|
824
925
|
readonly onError: alepha19.HookPrimitive<"server:onError">;
|
|
@@ -894,17 +995,27 @@ declare module "alepha" {
|
|
|
894
995
|
}
|
|
895
996
|
}
|
|
896
997
|
/**
|
|
897
|
-
*
|
|
998
|
+
* | type | quality | stability |
|
|
999
|
+
* |------|---------|-----------|
|
|
1000
|
+
* | backend | epic | stable |
|
|
898
1001
|
*
|
|
899
|
-
*
|
|
900
|
-
*
|
|
901
|
-
*
|
|
1002
|
+
* Convention-driven HTTP server with automatic validation and type inference.
|
|
1003
|
+
*
|
|
1004
|
+
* **Features:**
|
|
1005
|
+
* - Type-safe API endpoints with schema validation
|
|
1006
|
+
* - Lower-level HTTP route definitions
|
|
1007
|
+
* - Automatic request/response validation via TypeBox
|
|
1008
|
+
* - Convention-based URL generation (`/api/{ActionName}`)
|
|
1009
|
+
* - Direct invocation (`run()`) or HTTP (`fetch()`)
|
|
1010
|
+
* - Built-in authentication integration
|
|
1011
|
+
* - Multipart file upload handling
|
|
1012
|
+
* - Content-type auto-negotiation (JSON, form-data, text)
|
|
1013
|
+
* - HTTP methods: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
|
|
1014
|
+
* - Error handling: BadRequestError, ValidationError, ForbiddenError, UnauthorizedError, ConflictError, NotFoundError
|
|
902
1015
|
*
|
|
903
|
-
* @see {@link $route}
|
|
904
|
-
* @see {@link $action}
|
|
905
1016
|
* @module alepha.server
|
|
906
1017
|
*/
|
|
907
1018
|
declare const AlephaServer: alepha19.Service<alepha19.Module>;
|
|
908
1019
|
//#endregion
|
|
909
|
-
export { $action, $route, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, ConflictError, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, RequestConfigSchema, RequestInitWithOptions, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerHandler, ServerLoggerProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, errorNameByStatus, errorSchema, isHttpError, isMultipart, okSchema, routeMethods };
|
|
1020
|
+
export { $action, $route, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, ConflictError, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, RequestConfigSchema, RequestGeo, RequestInitWithOptions, RequestReferer, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerHandler, ServerLoggerProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, errorNameByStatus, errorSchema, isHttpError, isMultipart, okSchema, routeMethods };
|
|
910
1021
|
//# sourceMappingURL=index.d.ts.map
|