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
package/dist/bucket/index.d.ts
CHANGED
|
@@ -1,45 +1,462 @@
|
|
|
1
1
|
import * as alepha1 from "alepha";
|
|
2
|
-
import { Alepha, AlephaError, FileLike, KIND, Primitive, Service, Static } from "alepha";
|
|
3
|
-
import { FileDetector, FileSystemProvider } from "alepha/file";
|
|
2
|
+
import { Alepha, AlephaError, FileLike, Json, KIND, Primitive, Service, Static, StreamLike } from "alepha";
|
|
4
3
|
import * as fs from "node:fs";
|
|
4
|
+
import { Readable } from "node:stream";
|
|
5
5
|
import * as alepha_logger0 from "alepha/logger";
|
|
6
6
|
|
|
7
7
|
//#region ../../src/bucket/providers/FileStorageProvider.d.ts
|
|
8
8
|
declare abstract class FileStorageProvider {
|
|
9
9
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
* Uploads a file to the storage.
|
|
11
|
+
*
|
|
12
|
+
* @param bucketName - Container name
|
|
13
|
+
* @param file - File to upload
|
|
14
|
+
* @param fileId - Optional file identifier. If not provided, a unique ID will be generated.
|
|
15
|
+
* @return The identifier of the uploaded file.
|
|
16
|
+
*/
|
|
17
17
|
abstract upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
18
18
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
* Downloads a file from the storage.
|
|
20
|
+
*
|
|
21
|
+
* @param bucketName - Container name
|
|
22
|
+
* @param fileId - Identifier of the file to download
|
|
23
|
+
* @return The downloaded file as a FileLike object.
|
|
24
|
+
*/
|
|
25
25
|
abstract download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
26
26
|
/**
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
* Check if fileId exists in the storage bucket.
|
|
28
|
+
*
|
|
29
|
+
* @param bucketName - Container name
|
|
30
|
+
* @param fileId - Identifier of the file to stream
|
|
31
|
+
* @return True is the file exists, false otherwise.
|
|
32
|
+
*/
|
|
33
33
|
abstract exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
34
34
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
* Delete permanently a file from the storage.
|
|
36
|
+
*
|
|
37
|
+
* @param bucketName - Container name
|
|
38
|
+
* @param fileId - Identifier of the file to delete
|
|
39
|
+
*/
|
|
40
40
|
abstract delete(bucketName: string, fileId: string): Promise<void>;
|
|
41
41
|
}
|
|
42
42
|
//#endregion
|
|
43
|
+
//#region ../../src/system/providers/FileSystemProvider.d.ts
|
|
44
|
+
/**
|
|
45
|
+
* Options for creating a file from a URL
|
|
46
|
+
*/
|
|
47
|
+
interface CreateFileFromUrlOptions {
|
|
48
|
+
/**
|
|
49
|
+
* The URL to load the file from (file://, http://, or https://)
|
|
50
|
+
*/
|
|
51
|
+
url: string;
|
|
52
|
+
/**
|
|
53
|
+
* The MIME type of the file (optional, will be detected from filename if not provided)
|
|
54
|
+
*/
|
|
55
|
+
type?: string;
|
|
56
|
+
/**
|
|
57
|
+
* The name of the file (optional, will be extracted from URL if not provided)
|
|
58
|
+
*/
|
|
59
|
+
name?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Options for creating a file from a path (URL with file:// scheme)
|
|
63
|
+
*/
|
|
64
|
+
interface CreateFileFromPathOptions {
|
|
65
|
+
/**
|
|
66
|
+
* The path to the file on the local filesystem
|
|
67
|
+
*/
|
|
68
|
+
path: string;
|
|
69
|
+
/**
|
|
70
|
+
* The MIME type of the file (optional, will be detected from filename if not provided)
|
|
71
|
+
*/
|
|
72
|
+
type?: string;
|
|
73
|
+
/**
|
|
74
|
+
* The name of the file (optional, will be extracted from URL if not provided)
|
|
75
|
+
*/
|
|
76
|
+
name?: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Options for creating a file from a Buffer
|
|
80
|
+
*/
|
|
81
|
+
interface CreateFileFromBufferOptions {
|
|
82
|
+
/**
|
|
83
|
+
* The Buffer containing the file data
|
|
84
|
+
*/
|
|
85
|
+
buffer: Buffer;
|
|
86
|
+
/**
|
|
87
|
+
* The MIME type of the file (optional, will be detected from name if not provided)
|
|
88
|
+
*/
|
|
89
|
+
type?: string;
|
|
90
|
+
/**
|
|
91
|
+
* The name of the file (required for proper content type detection)
|
|
92
|
+
*/
|
|
93
|
+
name?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Options for creating a file from a stream
|
|
97
|
+
*/
|
|
98
|
+
interface CreateFileFromStreamOptions {
|
|
99
|
+
/**
|
|
100
|
+
* The readable stream containing the file data
|
|
101
|
+
*/
|
|
102
|
+
stream: StreamLike;
|
|
103
|
+
/**
|
|
104
|
+
* The MIME type of the file (optional, will be detected from name if not provided)
|
|
105
|
+
*/
|
|
106
|
+
type?: string;
|
|
107
|
+
/**
|
|
108
|
+
* The name of the file (required for proper content type detection)
|
|
109
|
+
*/
|
|
110
|
+
name?: string;
|
|
111
|
+
/**
|
|
112
|
+
* The size of the file in bytes (optional)
|
|
113
|
+
*/
|
|
114
|
+
size?: number;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Options for creating a file from text content
|
|
118
|
+
*/
|
|
119
|
+
interface CreateFileFromTextOptions {
|
|
120
|
+
/**
|
|
121
|
+
* The text content to create the file from
|
|
122
|
+
*/
|
|
123
|
+
text: string;
|
|
124
|
+
/**
|
|
125
|
+
* The MIME type of the file (default: text/plain)
|
|
126
|
+
*/
|
|
127
|
+
type?: string;
|
|
128
|
+
/**
|
|
129
|
+
* The name of the file (default: "file.txt")
|
|
130
|
+
*/
|
|
131
|
+
name?: string;
|
|
132
|
+
}
|
|
133
|
+
interface CreateFileFromResponseOptions {
|
|
134
|
+
/**
|
|
135
|
+
* The Response object containing the file data
|
|
136
|
+
*/
|
|
137
|
+
response: Response;
|
|
138
|
+
/**
|
|
139
|
+
* Override the name (optional, uses filename from Content-Disposition header if not provided)
|
|
140
|
+
*/
|
|
141
|
+
name?: string;
|
|
142
|
+
/**
|
|
143
|
+
* Override the MIME type (optional, uses file.type if not provided)
|
|
144
|
+
*/
|
|
145
|
+
type?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Options for creating a file from a Web File object
|
|
149
|
+
*/
|
|
150
|
+
interface CreateFileFromWebFileOptions {
|
|
151
|
+
/**
|
|
152
|
+
* The Web File object
|
|
153
|
+
*/
|
|
154
|
+
file: File;
|
|
155
|
+
/**
|
|
156
|
+
* Override the MIME type (optional, uses file.type if not provided)
|
|
157
|
+
*/
|
|
158
|
+
type?: string;
|
|
159
|
+
/**
|
|
160
|
+
* Override the name (optional, uses file.name if not provided)
|
|
161
|
+
*/
|
|
162
|
+
name?: string;
|
|
163
|
+
/**
|
|
164
|
+
* Override the size (optional, uses file.size if not provided)
|
|
165
|
+
*/
|
|
166
|
+
size?: number;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Options for creating a file from an ArrayBuffer
|
|
170
|
+
*/
|
|
171
|
+
interface CreateFileFromArrayBufferOptions {
|
|
172
|
+
/**
|
|
173
|
+
* The ArrayBuffer containing the file data
|
|
174
|
+
*/
|
|
175
|
+
arrayBuffer: ArrayBuffer;
|
|
176
|
+
/**
|
|
177
|
+
* The MIME type of the file (optional, will be detected from name if not provided)
|
|
178
|
+
*/
|
|
179
|
+
type?: string;
|
|
180
|
+
/**
|
|
181
|
+
* The name of the file (required for proper content type detection)
|
|
182
|
+
*/
|
|
183
|
+
name?: string;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Union type for all createFile options
|
|
187
|
+
*/
|
|
188
|
+
type CreateFileOptions = CreateFileFromUrlOptions | CreateFileFromPathOptions | CreateFileFromBufferOptions | CreateFileFromStreamOptions | CreateFileFromTextOptions | CreateFileFromWebFileOptions | CreateFileFromResponseOptions | CreateFileFromArrayBufferOptions;
|
|
189
|
+
/**
|
|
190
|
+
* Options for rm (remove) operation
|
|
191
|
+
*/
|
|
192
|
+
interface RmOptions {
|
|
193
|
+
/**
|
|
194
|
+
* If true, removes directories and their contents recursively
|
|
195
|
+
*/
|
|
196
|
+
recursive?: boolean;
|
|
197
|
+
/**
|
|
198
|
+
* If true, no error will be thrown if the path does not exist
|
|
199
|
+
*/
|
|
200
|
+
force?: boolean;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Options for cp (copy) operation
|
|
204
|
+
*/
|
|
205
|
+
interface CpOptions {
|
|
206
|
+
/**
|
|
207
|
+
* If true, copy directories recursively
|
|
208
|
+
*/
|
|
209
|
+
recursive?: boolean;
|
|
210
|
+
/**
|
|
211
|
+
* If true, overwrite existing destination
|
|
212
|
+
*/
|
|
213
|
+
force?: boolean;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Options for mkdir operation
|
|
217
|
+
*/
|
|
218
|
+
interface MkdirOptions {
|
|
219
|
+
/**
|
|
220
|
+
* If true, creates parent directories as needed
|
|
221
|
+
*/
|
|
222
|
+
recursive?: boolean;
|
|
223
|
+
/**
|
|
224
|
+
* File mode (permission and sticky bits)
|
|
225
|
+
*/
|
|
226
|
+
mode?: number;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Options for ls (list) operation
|
|
230
|
+
*/
|
|
231
|
+
interface LsOptions {
|
|
232
|
+
/**
|
|
233
|
+
* If true, list contents of directories recursively
|
|
234
|
+
*/
|
|
235
|
+
recursive?: boolean;
|
|
236
|
+
/**
|
|
237
|
+
* If true, include hidden files (starting with .)
|
|
238
|
+
*/
|
|
239
|
+
hidden?: boolean;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* FileSystem interface providing utilities for working with files.
|
|
243
|
+
*/
|
|
244
|
+
declare abstract class FileSystemProvider {
|
|
245
|
+
/**
|
|
246
|
+
* Joins multiple path segments into a single path.
|
|
247
|
+
*
|
|
248
|
+
* @param paths - The path segments to join
|
|
249
|
+
* @returns The joined path
|
|
250
|
+
*/
|
|
251
|
+
abstract join(...paths: string[]): string;
|
|
252
|
+
/**
|
|
253
|
+
* Creates a FileLike object from various sources.
|
|
254
|
+
*
|
|
255
|
+
* @param options - Options for creating the file
|
|
256
|
+
* @returns A FileLike object
|
|
257
|
+
*/
|
|
258
|
+
abstract createFile(options: CreateFileOptions): FileLike;
|
|
259
|
+
/**
|
|
260
|
+
* Removes a file or directory.
|
|
261
|
+
*
|
|
262
|
+
* @param path - The path to remove
|
|
263
|
+
* @param options - Remove options
|
|
264
|
+
*/
|
|
265
|
+
abstract rm(path: string, options?: RmOptions): Promise<void>;
|
|
266
|
+
/**
|
|
267
|
+
* Copies a file or directory.
|
|
268
|
+
*
|
|
269
|
+
* @param src - Source path
|
|
270
|
+
* @param dest - Destination path
|
|
271
|
+
* @param options - Copy options
|
|
272
|
+
*/
|
|
273
|
+
abstract cp(src: string, dest: string, options?: CpOptions): Promise<void>;
|
|
274
|
+
/**
|
|
275
|
+
* Moves/renames a file or directory.
|
|
276
|
+
*
|
|
277
|
+
* @param src - Source path
|
|
278
|
+
* @param dest - Destination path
|
|
279
|
+
*/
|
|
280
|
+
abstract mv(src: string, dest: string): Promise<void>;
|
|
281
|
+
/**
|
|
282
|
+
* Creates a directory.
|
|
283
|
+
*
|
|
284
|
+
* @param path - The directory path to create
|
|
285
|
+
* @param options - Mkdir options
|
|
286
|
+
*/
|
|
287
|
+
abstract mkdir(path: string, options?: MkdirOptions): Promise<void>;
|
|
288
|
+
/**
|
|
289
|
+
* Lists files in a directory.
|
|
290
|
+
*
|
|
291
|
+
* @param path - The directory path to list
|
|
292
|
+
* @param options - List options
|
|
293
|
+
* @returns Array of filenames
|
|
294
|
+
*/
|
|
295
|
+
abstract ls(path: string, options?: LsOptions): Promise<string[]>;
|
|
296
|
+
/**
|
|
297
|
+
* Checks if a file or directory exists.
|
|
298
|
+
*
|
|
299
|
+
* @param path - The path to check
|
|
300
|
+
* @returns True if the path exists, false otherwise
|
|
301
|
+
*/
|
|
302
|
+
abstract exists(path: string): Promise<boolean>;
|
|
303
|
+
/**
|
|
304
|
+
* Reads the content of a file.
|
|
305
|
+
*
|
|
306
|
+
* @param path - The file path to read
|
|
307
|
+
* @returns The file content as a Buffer
|
|
308
|
+
*/
|
|
309
|
+
abstract readFile(path: string): Promise<Buffer>;
|
|
310
|
+
/**
|
|
311
|
+
* Writes data to a file.
|
|
312
|
+
*
|
|
313
|
+
* @param path - The file path to write to
|
|
314
|
+
* @param data - The data to write (Buffer or string)
|
|
315
|
+
*/
|
|
316
|
+
abstract writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
|
|
317
|
+
/**
|
|
318
|
+
* Reads the content of a file as a string.
|
|
319
|
+
*
|
|
320
|
+
* @param path - The file path to read
|
|
321
|
+
* @returns The file content as a string
|
|
322
|
+
*/
|
|
323
|
+
abstract readTextFile(path: string): Promise<string>;
|
|
324
|
+
/**
|
|
325
|
+
* Reads the content of a file as JSON.
|
|
326
|
+
*
|
|
327
|
+
* @param path - The file path to read
|
|
328
|
+
* @returns The parsed JSON content
|
|
329
|
+
*/
|
|
330
|
+
abstract readJsonFile<T = unknown>(path: string): Promise<T>;
|
|
331
|
+
}
|
|
332
|
+
//#endregion
|
|
333
|
+
//#region ../../src/system/services/FileDetector.d.ts
|
|
334
|
+
interface FileTypeResult {
|
|
335
|
+
/**
|
|
336
|
+
* The detected MIME type
|
|
337
|
+
*/
|
|
338
|
+
mimeType: string;
|
|
339
|
+
/**
|
|
340
|
+
* The detected file extension
|
|
341
|
+
*/
|
|
342
|
+
extension: string;
|
|
343
|
+
/**
|
|
344
|
+
* Whether the file type was verified by magic bytes
|
|
345
|
+
*/
|
|
346
|
+
verified: boolean;
|
|
347
|
+
/**
|
|
348
|
+
* The stream (potentially wrapped to allow re-reading)
|
|
349
|
+
*/
|
|
350
|
+
stream: Readable;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Service for detecting file types and getting content types.
|
|
354
|
+
*
|
|
355
|
+
* @example
|
|
356
|
+
* ```typescript
|
|
357
|
+
* const detector = alepha.inject(FileDetector);
|
|
358
|
+
*
|
|
359
|
+
* // Get content type from filename
|
|
360
|
+
* const mimeType = detector.getContentType("image.png"); // "image/png"
|
|
361
|
+
*
|
|
362
|
+
* // Detect file type by magic bytes
|
|
363
|
+
* const stream = createReadStream('image.png');
|
|
364
|
+
* const result = await detector.detectFileType(stream, 'image.png');
|
|
365
|
+
* console.log(result.mimeType); // 'image/png'
|
|
366
|
+
* console.log(result.verified); // true if magic bytes match
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
declare class FileDetector {
|
|
370
|
+
/**
|
|
371
|
+
* Magic byte signatures for common file formats.
|
|
372
|
+
* Each signature is represented as an array of bytes or null (wildcard).
|
|
373
|
+
*/
|
|
374
|
+
protected static readonly MAGIC_BYTES: Record<string, {
|
|
375
|
+
signature: (number | null)[];
|
|
376
|
+
mimeType: string;
|
|
377
|
+
}[]>;
|
|
378
|
+
/**
|
|
379
|
+
* All possible format signatures for checking against actual file content
|
|
380
|
+
*/
|
|
381
|
+
protected static readonly ALL_SIGNATURES: {
|
|
382
|
+
signature: (number | null)[];
|
|
383
|
+
mimeType: string;
|
|
384
|
+
ext: string;
|
|
385
|
+
}[];
|
|
386
|
+
/**
|
|
387
|
+
* MIME type map for file extensions.
|
|
388
|
+
*
|
|
389
|
+
* Can be used to get the content type of file based on its extension.
|
|
390
|
+
* Feel free to add more mime types in your project!
|
|
391
|
+
*/
|
|
392
|
+
static readonly mimeMap: Record<string, string>;
|
|
393
|
+
/**
|
|
394
|
+
* Reverse MIME type map for looking up extensions from MIME types.
|
|
395
|
+
* Prefers shorter, more common extensions when multiple exist.
|
|
396
|
+
*/
|
|
397
|
+
protected static readonly reverseMimeMap: Record<string, string>;
|
|
398
|
+
/**
|
|
399
|
+
* Returns the file extension for a given MIME type.
|
|
400
|
+
*
|
|
401
|
+
* @param mimeType - The MIME type to look up
|
|
402
|
+
* @returns The file extension (without dot), or "bin" if not found
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* ```typescript
|
|
406
|
+
* const detector = alepha.inject(FileDetector);
|
|
407
|
+
* const ext = detector.getExtensionFromMimeType("image/png"); // "png"
|
|
408
|
+
* const ext2 = detector.getExtensionFromMimeType("application/octet-stream"); // "bin"
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
getExtensionFromMimeType(mimeType: string): string;
|
|
412
|
+
/**
|
|
413
|
+
* Returns the content type of file based on its filename.
|
|
414
|
+
*
|
|
415
|
+
* @param filename - The filename to check
|
|
416
|
+
* @returns The MIME type
|
|
417
|
+
*
|
|
418
|
+
* @example
|
|
419
|
+
* ```typescript
|
|
420
|
+
* const detector = alepha.inject(FileDetector);
|
|
421
|
+
* const mimeType = detector.getContentType("image.png"); // "image/png"
|
|
422
|
+
* ```
|
|
423
|
+
*/
|
|
424
|
+
getContentType(filename: string): string;
|
|
425
|
+
/**
|
|
426
|
+
* Detects the file type by checking magic bytes against the stream content.
|
|
427
|
+
*
|
|
428
|
+
* @param stream - The readable stream to check
|
|
429
|
+
* @param filename - The filename (used to get the extension)
|
|
430
|
+
* @returns File type information including MIME type, extension, and verification status
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
* ```typescript
|
|
434
|
+
* const detector = alepha.inject(FileDetector);
|
|
435
|
+
* const stream = createReadStream('image.png');
|
|
436
|
+
* const result = await detector.detectFileType(stream, 'image.png');
|
|
437
|
+
* console.log(result.mimeType); // 'image/png'
|
|
438
|
+
* console.log(result.verified); // true if magic bytes match
|
|
439
|
+
* ```
|
|
440
|
+
*/
|
|
441
|
+
detectFileType(stream: Readable, filename: string): Promise<FileTypeResult>;
|
|
442
|
+
/**
|
|
443
|
+
* Reads all bytes from a stream and returns the first N bytes along with a new stream containing all data.
|
|
444
|
+
* This approach reads the entire stream upfront to avoid complex async handling issues.
|
|
445
|
+
*
|
|
446
|
+
* @protected
|
|
447
|
+
*/
|
|
448
|
+
protected peekBytes(stream: Readable, numBytes: number): Promise<{
|
|
449
|
+
buffer: Buffer;
|
|
450
|
+
stream: Readable;
|
|
451
|
+
}>;
|
|
452
|
+
/**
|
|
453
|
+
* Checks if a buffer matches a magic byte signature.
|
|
454
|
+
*
|
|
455
|
+
* @protected
|
|
456
|
+
*/
|
|
457
|
+
protected matchesSignature(buffer: Buffer, signature: (number | null)[]): boolean;
|
|
458
|
+
}
|
|
459
|
+
//#endregion
|
|
43
460
|
//#region ../../src/bucket/providers/MemoryFileStorageProvider.d.ts
|
|
44
461
|
declare class MemoryFileStorageProvider implements FileStorageProvider {
|
|
45
462
|
readonly files: Record<string, FileLike>;
|
|
@@ -108,134 +525,134 @@ declare const $bucket: {
|
|
|
108
525
|
};
|
|
109
526
|
interface BucketPrimitiveOptions extends BucketFileOptions {
|
|
110
527
|
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
528
|
+
* File storage provider configuration for the bucket.
|
|
529
|
+
*
|
|
530
|
+
* Options:
|
|
531
|
+
* - **"memory"**: In-memory storage (default for development, lost on restart)
|
|
532
|
+
* - **Service<FileStorageProvider>**: Custom provider class (e.g., S3FileStorageProvider, AzureBlobProvider)
|
|
533
|
+
* - **undefined**: Uses the default file storage provider from dependency injection
|
|
534
|
+
*
|
|
535
|
+
* **Provider Selection Guidelines**:
|
|
536
|
+
* - **Development**: Use "memory" for fast, simple testing without external dependencies
|
|
537
|
+
* - **Production**: Use cloud providers (S3, Azure Blob, Google Cloud Storage) for scalability
|
|
538
|
+
* - **Local deployment**: Use filesystem providers for on-premise installations
|
|
539
|
+
* - **Hybrid**: Use different providers for different bucket types (temp files vs permanent storage)
|
|
540
|
+
*
|
|
541
|
+
* **Provider Capabilities**:
|
|
542
|
+
* - File persistence and durability guarantees
|
|
543
|
+
* - Scalability and performance characteristics
|
|
544
|
+
* - Geographic distribution and CDN integration
|
|
545
|
+
* - Cost implications for storage and bandwidth
|
|
546
|
+
* - Backup and disaster recovery features
|
|
547
|
+
*
|
|
548
|
+
* @default Uses injected FileStorageProvider
|
|
549
|
+
* @example "memory"
|
|
550
|
+
* @example S3FileStorageProvider
|
|
551
|
+
* @example AzureBlobStorageProvider
|
|
552
|
+
*/
|
|
136
553
|
provider?: Service<FileStorageProvider> | "memory";
|
|
137
554
|
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
555
|
+
* Unique name identifier for the bucket.
|
|
556
|
+
*
|
|
557
|
+
* This name is used for:
|
|
558
|
+
* - Storage backend organization and partitioning
|
|
559
|
+
* - File path generation and URL construction
|
|
560
|
+
* - Logging, monitoring, and debugging
|
|
561
|
+
* - Access control and permissions management
|
|
562
|
+
* - Backup and replication configuration
|
|
563
|
+
*
|
|
564
|
+
* **Naming Conventions**:
|
|
565
|
+
* - Use lowercase with hyphens for consistency
|
|
566
|
+
* - Include purpose or content type in the name
|
|
567
|
+
* - Avoid spaces and special characters
|
|
568
|
+
* - Consider environment prefixes for deployment isolation
|
|
569
|
+
*
|
|
570
|
+
* If not provided, defaults to the property key where the bucket is declared.
|
|
571
|
+
*
|
|
572
|
+
* @example "user-avatars"
|
|
573
|
+
* @example "product-images"
|
|
574
|
+
* @example "legal-documents"
|
|
575
|
+
* @example "temp-processing-files"
|
|
576
|
+
*/
|
|
160
577
|
name?: string;
|
|
161
578
|
}
|
|
162
579
|
interface BucketFileOptions {
|
|
163
580
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
581
|
+
* Human-readable description of the bucket's purpose and contents.
|
|
582
|
+
*
|
|
583
|
+
* Used for:
|
|
584
|
+
* - Documentation generation and API references
|
|
585
|
+
* - Developer onboarding and system understanding
|
|
586
|
+
* - Monitoring dashboards and admin interfaces
|
|
587
|
+
* - Compliance and audit documentation
|
|
588
|
+
*
|
|
589
|
+
* **Description Best Practices**:
|
|
590
|
+
* - Explain what types of files this bucket stores
|
|
591
|
+
* - Mention any special handling or processing requirements
|
|
592
|
+
* - Include information about retention policies if applicable
|
|
593
|
+
* - Note any compliance or security considerations
|
|
594
|
+
*
|
|
595
|
+
* @example "User profile pictures and avatar images"
|
|
596
|
+
* @example "Product catalog images with automated thumbnail generation"
|
|
597
|
+
* @example "Legal documents requiring long-term retention"
|
|
598
|
+
* @example "Temporary files for data processing workflows"
|
|
599
|
+
*/
|
|
183
600
|
description?: string;
|
|
184
601
|
/**
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
602
|
+
* Array of allowed MIME types for files uploaded to this bucket.
|
|
603
|
+
*
|
|
604
|
+
* When specified, only files with these exact MIME types will be accepted.
|
|
605
|
+
* Files with disallowed MIME types will be rejected with an InvalidFileError.
|
|
606
|
+
*
|
|
607
|
+
* **MIME Type Categories**:
|
|
608
|
+
* - Images: "image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"
|
|
609
|
+
* - Documents: "application/pdf", "text/plain", "text/csv"
|
|
610
|
+
* - Office: "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
611
|
+
* - Archives: "application/zip", "application/x-tar", "application/gzip"
|
|
612
|
+
* - Media: "video/mp4", "audio/mpeg", "audio/wav"
|
|
613
|
+
*
|
|
614
|
+
* **Security Considerations**:
|
|
615
|
+
* - Always validate MIME types for user uploads
|
|
616
|
+
* - Be cautious with executable file types
|
|
617
|
+
* - Consider using allow-lists rather than deny-lists
|
|
618
|
+
* - Remember that MIME types can be spoofed by malicious users
|
|
619
|
+
*
|
|
620
|
+
* If not specified, all MIME types are allowed (not recommended for user uploads).
|
|
621
|
+
*
|
|
622
|
+
* @example ["image/jpeg", "image/png"] // Only JPEG and PNG images
|
|
623
|
+
* @example ["application/pdf", "text/plain"] // Documents only
|
|
624
|
+
* @example ["video/mp4", "video/webm"] // Video files
|
|
625
|
+
*/
|
|
209
626
|
mimeTypes?: string[];
|
|
210
627
|
/**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
628
|
+
* Maximum file size allowed in megabytes (MB).
|
|
629
|
+
*
|
|
630
|
+
* Files larger than this limit will be rejected with an InvalidFileError.
|
|
631
|
+
* This helps prevent:
|
|
632
|
+
* - Storage quota exhaustion
|
|
633
|
+
* - Memory issues during file processing
|
|
634
|
+
* - Long upload times and timeouts
|
|
635
|
+
* - Abuse of storage resources
|
|
636
|
+
*
|
|
637
|
+
* **Size Guidelines by File Type**:
|
|
638
|
+
* - Profile images: 1-5 MB
|
|
639
|
+
* - Product photos: 5-10 MB
|
|
640
|
+
* - Documents: 10-50 MB
|
|
641
|
+
* - Video files: 50-500 MB
|
|
642
|
+
* - Data files: 100-1000 MB
|
|
643
|
+
*
|
|
644
|
+
* **Considerations**:
|
|
645
|
+
* - Consider your storage costs and limits
|
|
646
|
+
* - Factor in network upload speeds for users
|
|
647
|
+
* - Account for processing requirements (thumbnails, compression)
|
|
648
|
+
* - Set reasonable limits based on actual use cases
|
|
649
|
+
*
|
|
650
|
+
* @default 10 MB
|
|
651
|
+
*
|
|
652
|
+
* @example 1 // 1MB for small images
|
|
653
|
+
* @example 25 // 25MB for documents
|
|
654
|
+
* @example 100 // 100MB for media files
|
|
655
|
+
*/
|
|
239
656
|
maxSize?: number;
|
|
240
657
|
}
|
|
241
658
|
declare class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
|
|
@@ -243,37 +660,37 @@ declare class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
|
|
|
243
660
|
private readonly fileSystem;
|
|
244
661
|
get name(): string;
|
|
245
662
|
/**
|
|
246
|
-
|
|
247
|
-
|
|
663
|
+
* Uploads a file to the bucket.
|
|
664
|
+
*/
|
|
248
665
|
upload(file: FileLike, options?: BucketFileOptions): Promise<string>;
|
|
249
666
|
/**
|
|
250
|
-
|
|
251
|
-
|
|
667
|
+
* Delete permanently a file from the bucket.
|
|
668
|
+
*/
|
|
252
669
|
delete(fileId: string, skipHook?: boolean): Promise<void>;
|
|
253
670
|
/**
|
|
254
|
-
|
|
255
|
-
|
|
671
|
+
* Checks if a file exists in the bucket.
|
|
672
|
+
*/
|
|
256
673
|
exists(fileId: string): Promise<boolean>;
|
|
257
674
|
/**
|
|
258
|
-
|
|
259
|
-
|
|
675
|
+
* Downloads a file from the bucket.
|
|
676
|
+
*/
|
|
260
677
|
download(fileId: string): Promise<FileLike>;
|
|
261
678
|
protected $provider(): FileStorageProvider | MemoryFileStorageProvider;
|
|
262
679
|
}
|
|
263
680
|
interface BucketFileOptions {
|
|
264
681
|
/**
|
|
265
|
-
|
|
266
|
-
|
|
682
|
+
* Optional description of the bucket.
|
|
683
|
+
*/
|
|
267
684
|
description?: string;
|
|
268
685
|
/**
|
|
269
|
-
|
|
270
|
-
|
|
686
|
+
* Allowed MIME types.
|
|
687
|
+
*/
|
|
271
688
|
mimeTypes?: string[];
|
|
272
689
|
/**
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
690
|
+
* Maximum size of the files in the bucket.
|
|
691
|
+
*
|
|
692
|
+
* @default 10
|
|
693
|
+
*/
|
|
277
694
|
maxSize?: number;
|
|
278
695
|
}
|
|
279
696
|
//#endregion
|
|
@@ -320,9 +737,9 @@ declare class LocalFileStorageProvider implements FileStorageProvider {
|
|
|
320
737
|
declare module "alepha" {
|
|
321
738
|
interface Hooks {
|
|
322
739
|
/**
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
740
|
+
* Triggered when a file is uploaded to a bucket.
|
|
741
|
+
* Can be used to perform actions after a file is uploaded, like creating a database record!
|
|
742
|
+
*/
|
|
326
743
|
"bucket:file:uploaded": {
|
|
327
744
|
id: string;
|
|
328
745
|
file: FileLike;
|
|
@@ -330,8 +747,8 @@ declare module "alepha" {
|
|
|
330
747
|
options: BucketFileOptions;
|
|
331
748
|
};
|
|
332
749
|
/**
|
|
333
|
-
|
|
334
|
-
|
|
750
|
+
* Triggered when a file is deleted from a bucket.
|
|
751
|
+
*/
|
|
335
752
|
"bucket:file:deleted": {
|
|
336
753
|
id: string;
|
|
337
754
|
bucket: BucketPrimitive;
|
|
@@ -339,14 +756,21 @@ declare module "alepha" {
|
|
|
339
756
|
}
|
|
340
757
|
}
|
|
341
758
|
/**
|
|
342
|
-
*
|
|
759
|
+
* | type | quality | stability |
|
|
760
|
+
* |------|---------|-----------|
|
|
761
|
+
* | backend | rare | stable |
|
|
762
|
+
*
|
|
763
|
+
* Unified file storage abstraction across multiple backends.
|
|
343
764
|
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
765
|
+
* **Features:**
|
|
766
|
+
* - File storage buckets with constraints
|
|
767
|
+
* - Unified API across all storage backends
|
|
768
|
+
* - MIME type validation
|
|
769
|
+
* - File size limits
|
|
770
|
+
* - Upload/download/delete operations
|
|
771
|
+
* - TTL-based file expiration
|
|
772
|
+
* - Providers: Memory (testing), Local filesystem, AWS S3 / Cloudflare R2 / MinIO, Azure Blob Storage, Vercel Blob
|
|
347
773
|
*
|
|
348
|
-
* @see {@link $bucket}
|
|
349
|
-
* @see {@link FileStorageProvider}
|
|
350
774
|
* @module alepha.bucket
|
|
351
775
|
*/
|
|
352
776
|
declare const AlephaBucket: alepha1.Service<alepha1.Module>;
|