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/orm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as __reExport, t as __exportAll } from "./chunk-
|
|
1
|
+
import { n as __reExport, t as __exportAll } from "./chunk-DH6iiROE.js";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { $atom, $context, $env, $hook, $inject, $module, $use, Alepha, AlephaError, KIND, Primitive, Value, createPagination, createPrimitive, pageQuerySchema, pageSchema, pageSchema as pageSchema$1, t } from "alepha";
|
|
4
4
|
import { AlephaDateTime, DateTimeProvider } from "alepha/datetime";
|
|
@@ -63,14 +63,14 @@ const insertSchema = (obj) => {
|
|
|
63
63
|
|
|
64
64
|
//#endregion
|
|
65
65
|
//#region ../../src/orm/schemas/updateSchema.ts
|
|
66
|
-
const updateSchema = (schema
|
|
66
|
+
const updateSchema = (schema) => {
|
|
67
67
|
const newProperties = {};
|
|
68
|
-
for (const key in schema
|
|
69
|
-
const prop = schema
|
|
68
|
+
for (const key in schema.properties) {
|
|
69
|
+
const prop = schema.properties[key];
|
|
70
70
|
if (t.schema.isOptional(prop)) newProperties[key] = t.optional(t.union([prop, t.raw.Null()]));
|
|
71
71
|
else newProperties[key] = prop;
|
|
72
72
|
}
|
|
73
|
-
return t.object(newProperties, "options" in schema
|
|
73
|
+
return t.object(newProperties, "options" in schema && typeof schema.options === "object" ? { ...schema.options } : {});
|
|
74
74
|
};
|
|
75
75
|
|
|
76
76
|
//#endregion
|
|
@@ -101,10 +101,10 @@ var EntityPrimitive = class EntityPrimitive {
|
|
|
101
101
|
constructor(options) {
|
|
102
102
|
this.options = options;
|
|
103
103
|
}
|
|
104
|
-
alias(alias
|
|
104
|
+
alias(alias) {
|
|
105
105
|
const aliased = new EntityPrimitive(this.options);
|
|
106
106
|
return new Proxy(aliased, { get(target, prop, receiver) {
|
|
107
|
-
if (prop === "$alias") return alias
|
|
107
|
+
if (prop === "$alias") return alias;
|
|
108
108
|
return Reflect.get(target, prop, receiver);
|
|
109
109
|
} });
|
|
110
110
|
}
|
|
@@ -170,8 +170,8 @@ var DatabaseProvider = class {
|
|
|
170
170
|
registerSequence(sequence) {
|
|
171
171
|
this.builder.buildSequence(sequence, this);
|
|
172
172
|
}
|
|
173
|
-
async run(statement, schema
|
|
174
|
-
return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema
|
|
173
|
+
async run(statement, schema) {
|
|
174
|
+
return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema, row));
|
|
175
175
|
}
|
|
176
176
|
/**
|
|
177
177
|
* Get migrations folder path - can be overridden
|
|
@@ -294,7 +294,7 @@ var DrizzleKitProvider = class {
|
|
|
294
294
|
await this.executeStatements(statements, provider, true);
|
|
295
295
|
await this.saveDevMigrations(provider, snapshot, entry);
|
|
296
296
|
}
|
|
297
|
-
this.log.info(`
|
|
297
|
+
this.log.info(`Sync with '${provider.name}' OK [${Date.now() - now}ms]`);
|
|
298
298
|
}
|
|
299
299
|
/**
|
|
300
300
|
* Mostly used for testing purposes. You can generate SQL migration statements without executing them.
|
|
@@ -304,16 +304,16 @@ var DrizzleKitProvider = class {
|
|
|
304
304
|
const models = this.getModels(provider);
|
|
305
305
|
if (Object.keys(models).length > 0) {
|
|
306
306
|
if (provider.dialect === "sqlite") {
|
|
307
|
-
const prev
|
|
308
|
-
const curr
|
|
307
|
+
const prev = prevSnapshot ?? await kit.generateSQLiteDrizzleJson({});
|
|
308
|
+
const curr = await kit.generateSQLiteDrizzleJson(models);
|
|
309
309
|
return {
|
|
310
310
|
models,
|
|
311
|
-
statements: await kit.generateSQLiteMigration(prev
|
|
312
|
-
snapshot: curr
|
|
311
|
+
statements: await kit.generateSQLiteMigration(prev, curr),
|
|
312
|
+
snapshot: curr
|
|
313
313
|
};
|
|
314
314
|
}
|
|
315
|
-
const prev = prevSnapshot ??
|
|
316
|
-
const curr =
|
|
315
|
+
const prev = prevSnapshot ?? kit.generateDrizzleJson({});
|
|
316
|
+
const curr = kit.generateDrizzleJson(models);
|
|
317
317
|
return {
|
|
318
318
|
models,
|
|
319
319
|
statements: await kit.generateMigration(prev, curr),
|
|
@@ -600,8 +600,8 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
600
600
|
};
|
|
601
601
|
return this.buildTableConfig(entity, pgBuilders, tableResolver);
|
|
602
602
|
}
|
|
603
|
-
schemaToPgColumns = (tableName, schema
|
|
604
|
-
return Object.entries(schema
|
|
603
|
+
schemaToPgColumns = (tableName, schema, nsp, enums, tables) => {
|
|
604
|
+
return Object.entries(schema.properties).reduce((columns, [key, value]) => {
|
|
605
605
|
let col = this.mapFieldToColumn(tableName, key, value, nsp, enums);
|
|
606
606
|
if ("default" in value && value.default != null) col = col.default(value.default);
|
|
607
607
|
if (PG_PRIMARY_KEY in value) col = col.primaryKey();
|
|
@@ -616,7 +616,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
616
616
|
return target;
|
|
617
617
|
}, config.actions);
|
|
618
618
|
}
|
|
619
|
-
if (schema
|
|
619
|
+
if (schema.required?.includes(key)) col = col.notNull();
|
|
620
620
|
return {
|
|
621
621
|
...columns,
|
|
622
622
|
[key]: col
|
|
@@ -655,7 +655,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
655
655
|
if (t.schema.isBoolean(value)) return pg$2.boolean(key);
|
|
656
656
|
if (t.schema.isObject(value)) return schema(key, value);
|
|
657
657
|
if (t.schema.isRecord(value)) return schema(key, value);
|
|
658
|
-
const isTypeEnum = (value
|
|
658
|
+
const isTypeEnum = (value) => t.schema.isUnsafe(value) && "type" in value && value.type === "string" && "enum" in value && Array.isArray(value.enum);
|
|
659
659
|
if (t.schema.isArray(value)) {
|
|
660
660
|
if (t.schema.isObject(value.items)) return schema(key, value);
|
|
661
661
|
if (t.schema.isRecord(value.items)) return schema(key, value);
|
|
@@ -783,8 +783,8 @@ var BunPostgresProvider = class extends DatabaseProvider {
|
|
|
783
783
|
return this.bunDb;
|
|
784
784
|
}
|
|
785
785
|
async executeMigrations(migrationsFolder) {
|
|
786
|
-
const { migrate
|
|
787
|
-
await migrate
|
|
786
|
+
const { migrate } = await import("drizzle-orm/bun-sql/migrator");
|
|
787
|
+
await migrate(this.bunDb, { migrationsFolder });
|
|
788
788
|
}
|
|
789
789
|
onStart = $hook({
|
|
790
790
|
on: "start",
|
|
@@ -812,10 +812,10 @@ var BunPostgresProvider = class extends DatabaseProvider {
|
|
|
812
812
|
async connect() {
|
|
813
813
|
this.log.debug("Connect ..");
|
|
814
814
|
if (typeof Bun === "undefined") throw new AlephaError("BunPostgresProvider requires the Bun runtime. Use NodePostgresProvider for Node.js.");
|
|
815
|
-
const { drizzle
|
|
815
|
+
const { drizzle } = await import("drizzle-orm/bun-sql");
|
|
816
816
|
this.client = new Bun.SQL(this.url);
|
|
817
817
|
await this.client.unsafe("SELECT 1");
|
|
818
|
-
this.bunDb = drizzle
|
|
818
|
+
this.bunDb = drizzle({
|
|
819
819
|
client: this.client,
|
|
820
820
|
logger: { logQuery: (query, params) => {
|
|
821
821
|
this.log.trace(query, { params });
|
|
@@ -868,8 +868,8 @@ var SqliteModelBuilder = class extends ModelBuilder {
|
|
|
868
868
|
return Array.isArray(customConfigs) ? customConfigs : [];
|
|
869
869
|
});
|
|
870
870
|
}
|
|
871
|
-
schemaToSqliteColumns = (tableName, schema
|
|
872
|
-
return Object.entries(schema
|
|
871
|
+
schemaToSqliteColumns = (tableName, schema, enums, tables) => {
|
|
872
|
+
return Object.entries(schema.properties).reduce((columns, [key, value]) => {
|
|
873
873
|
let col = this.mapFieldToSqliteColumn(tableName, key, value, enums);
|
|
874
874
|
if ("default" in value && value.default != null) col = col.default(value.default);
|
|
875
875
|
if (PG_PRIMARY_KEY in value) col = col.primaryKey();
|
|
@@ -884,7 +884,7 @@ var SqliteModelBuilder = class extends ModelBuilder {
|
|
|
884
884
|
return target;
|
|
885
885
|
}, config.actions);
|
|
886
886
|
}
|
|
887
|
-
if (schema
|
|
887
|
+
if (schema.required?.includes(key)) col = col.notNull();
|
|
888
888
|
return {
|
|
889
889
|
...columns,
|
|
890
890
|
[key]: col
|
|
@@ -1033,14 +1033,14 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1033
1033
|
handler: async () => {
|
|
1034
1034
|
if (typeof Bun === "undefined") throw new AlephaError("BunSqliteProvider requires the Bun runtime. Use NodeSqliteProvider for Node.js.");
|
|
1035
1035
|
const { Database } = await import("bun:sqlite");
|
|
1036
|
-
const { drizzle
|
|
1036
|
+
const { drizzle } = await import("drizzle-orm/bun-sqlite");
|
|
1037
1037
|
const filepath = this.url.replace("sqlite://", "").replace("sqlite:", "");
|
|
1038
1038
|
if (filepath !== ":memory:" && filepath !== "") {
|
|
1039
1039
|
const dirname = filepath.split("/").slice(0, -1).join("/");
|
|
1040
1040
|
if (dirname) await mkdir(dirname, { recursive: true }).catch(() => null);
|
|
1041
1041
|
}
|
|
1042
1042
|
this.sqlite = new Database(filepath);
|
|
1043
|
-
this.bunDb = drizzle
|
|
1043
|
+
this.bunDb = drizzle({
|
|
1044
1044
|
client: this.sqlite,
|
|
1045
1045
|
logger: { logQuery: (query, params) => {
|
|
1046
1046
|
this.log.trace(query, { params });
|
|
@@ -1052,6 +1052,7 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1052
1052
|
});
|
|
1053
1053
|
onStop = $hook({
|
|
1054
1054
|
on: "stop",
|
|
1055
|
+
priority: "last",
|
|
1055
1056
|
handler: async () => {
|
|
1056
1057
|
if (this.sqlite) {
|
|
1057
1058
|
this.log.debug("Closing Bun SQLite connection...");
|
|
@@ -1063,8 +1064,8 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1063
1064
|
}
|
|
1064
1065
|
});
|
|
1065
1066
|
async executeMigrations(migrationsFolder) {
|
|
1066
|
-
const { migrate
|
|
1067
|
-
await migrate
|
|
1067
|
+
const { migrate } = await import("drizzle-orm/bun-sqlite/migrator");
|
|
1068
|
+
await migrate(this.bunDb, { migrationsFolder });
|
|
1068
1069
|
}
|
|
1069
1070
|
};
|
|
1070
1071
|
|
|
@@ -1116,15 +1117,15 @@ var CloudflareD1Provider = class extends DatabaseProvider {
|
|
|
1116
1117
|
const binding = cloudflareEnv[bindingName];
|
|
1117
1118
|
if (!binding) throw new AlephaError(`D1 binding '${bindingName}' not found in Cloudflare Workers environment.`);
|
|
1118
1119
|
this.d1 = binding;
|
|
1119
|
-
const { drizzle
|
|
1120
|
-
this.drizzleDb = drizzle
|
|
1120
|
+
const { drizzle } = await import("drizzle-orm/d1");
|
|
1121
|
+
this.drizzleDb = drizzle(this.d1);
|
|
1121
1122
|
await this.migrate();
|
|
1122
1123
|
this.log.info("Using Cloudflare D1 database");
|
|
1123
1124
|
}
|
|
1124
1125
|
});
|
|
1125
1126
|
async executeMigrations(migrationsFolder) {
|
|
1126
|
-
const { migrate
|
|
1127
|
-
await migrate
|
|
1127
|
+
const { migrate } = await import("drizzle-orm/d1/migrator");
|
|
1128
|
+
await migrate(this.db, { migrationsFolder });
|
|
1128
1129
|
}
|
|
1129
1130
|
/**
|
|
1130
1131
|
* Override development migration to skip sync (not supported on D1).
|
|
@@ -1310,9 +1311,9 @@ var NodeSqliteProvider = class extends DatabaseProvider {
|
|
|
1310
1311
|
else return "node_modules/.alepha/sqlite.db";
|
|
1311
1312
|
}
|
|
1312
1313
|
async execute(query) {
|
|
1313
|
-
const { sql
|
|
1314
|
-
this.log.trace(`${sql
|
|
1315
|
-
const statement = this.sqlite.prepare(sql
|
|
1314
|
+
const { sql, params, method } = this.db.all(query).getQuery();
|
|
1315
|
+
this.log.trace(`${sql}`, params);
|
|
1316
|
+
const statement = this.sqlite.prepare(sql);
|
|
1316
1317
|
if (method === "run") {
|
|
1317
1318
|
statement.run(...params);
|
|
1318
1319
|
return [];
|
|
@@ -1323,9 +1324,9 @@ var NodeSqliteProvider = class extends DatabaseProvider {
|
|
|
1323
1324
|
}
|
|
1324
1325
|
return statement.all(...params);
|
|
1325
1326
|
}
|
|
1326
|
-
db = drizzle$2(async (sql
|
|
1327
|
-
const statement = this.sqlite.prepare(sql
|
|
1328
|
-
this.log.trace(`${sql
|
|
1327
|
+
db = drizzle$2(async (sql, params, method) => {
|
|
1328
|
+
const statement = this.sqlite.prepare(sql);
|
|
1329
|
+
this.log.trace(`${sql}`, { params });
|
|
1329
1330
|
if (method === "get") {
|
|
1330
1331
|
const data = statement.get(...params);
|
|
1331
1332
|
return { rows: data ? [{ ...data }] : [] };
|
|
@@ -1404,13 +1405,13 @@ var PglitePostgresProvider = class PglitePostgresProvider extends DatabaseProvid
|
|
|
1404
1405
|
if (Object.keys(this.kit.getModels(this)).length === 0) return;
|
|
1405
1406
|
const module = PglitePostgresProvider.importPglite();
|
|
1406
1407
|
if (!module) throw new AlephaError("@electric-sql/pglite is not installed. Please install it to use the pglite driver.");
|
|
1407
|
-
const { drizzle
|
|
1408
|
+
const { drizzle } = createRequire(import.meta.url)("drizzle-orm/pglite");
|
|
1408
1409
|
const path = this.url;
|
|
1409
1410
|
if (path !== ":memory:") {
|
|
1410
1411
|
await mkdir(path, { recursive: true }).catch(() => null);
|
|
1411
1412
|
this.client = new module.PGlite(path);
|
|
1412
1413
|
} else this.client = new module.PGlite();
|
|
1413
|
-
this.pglite = drizzle
|
|
1414
|
+
this.pglite = drizzle({ client: this.client });
|
|
1414
1415
|
await this.migrate();
|
|
1415
1416
|
this.log.info(`Using PGlite database at ${path}`);
|
|
1416
1417
|
}
|
|
@@ -1487,10 +1488,10 @@ const pgAttr = (type, attr, value) => {
|
|
|
1487
1488
|
/**
|
|
1488
1489
|
* Retrieves the fields of a schema that have a specific attribute.
|
|
1489
1490
|
*/
|
|
1490
|
-
const getAttrFields = (schema
|
|
1491
|
+
const getAttrFields = (schema, name) => {
|
|
1491
1492
|
const fields = [];
|
|
1492
|
-
for (const key of Object.keys(schema
|
|
1493
|
-
const value = schema
|
|
1493
|
+
for (const key of Object.keys(schema.properties)) {
|
|
1494
|
+
const value = schema.properties[key];
|
|
1494
1495
|
if (name in value) fields.push({
|
|
1495
1496
|
type: value,
|
|
1496
1497
|
key,
|
|
@@ -1526,13 +1527,13 @@ var PgRelationManager = class {
|
|
|
1526
1527
|
/**
|
|
1527
1528
|
* Map a row with its joined relations based on the joins definition
|
|
1528
1529
|
*/
|
|
1529
|
-
mapRowWithJoins(record, row, schema
|
|
1530
|
+
mapRowWithJoins(record, row, schema, joins, parentKey) {
|
|
1530
1531
|
for (const join of joins) if (join.parent === parentKey) {
|
|
1531
1532
|
const joinedData = row[join.table];
|
|
1532
1533
|
if (this.isAllNull(joinedData)) record[join.key] = void 0;
|
|
1533
1534
|
else {
|
|
1534
1535
|
record[join.key] = joinedData;
|
|
1535
|
-
this.mapRowWithJoins(record[join.key], row, schema
|
|
1536
|
+
this.mapRowWithJoins(record[join.key], row, schema, joins, parentKey ? `${parentKey}.${join.key}` : join.key);
|
|
1536
1537
|
}
|
|
1537
1538
|
}
|
|
1538
1539
|
return record;
|
|
@@ -1549,16 +1550,16 @@ var PgRelationManager = class {
|
|
|
1549
1550
|
* Build a schema that includes all join properties recursively
|
|
1550
1551
|
*/
|
|
1551
1552
|
buildSchemaWithJoins(baseSchema, joins, parentPath) {
|
|
1552
|
-
const schema
|
|
1553
|
+
const schema = Value.Clone(baseSchema);
|
|
1553
1554
|
const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
|
|
1554
1555
|
for (const join of joinsAtThisLevel) {
|
|
1555
1556
|
const joinPath = parentPath ? `${parentPath}.${join.key}` : join.key;
|
|
1556
1557
|
const childJoins = joins.filter((j) => j.parent === joinPath);
|
|
1557
1558
|
let joinSchema = join.schema;
|
|
1558
1559
|
if (childJoins.length > 0) joinSchema = this.buildSchemaWithJoins(join.schema, joins, joinPath);
|
|
1559
|
-
schema
|
|
1560
|
+
schema.properties[join.key] = t.optional(joinSchema);
|
|
1560
1561
|
}
|
|
1561
|
-
return schema
|
|
1562
|
+
return schema;
|
|
1562
1563
|
}
|
|
1563
1564
|
};
|
|
1564
1565
|
|
|
@@ -1570,7 +1571,7 @@ var QueryManager = class {
|
|
|
1570
1571
|
* Convert a query object to a SQL query.
|
|
1571
1572
|
*/
|
|
1572
1573
|
toSQL(query, options) {
|
|
1573
|
-
const { schema
|
|
1574
|
+
const { schema, col, joins } = options;
|
|
1574
1575
|
const conditions = [];
|
|
1575
1576
|
if (isSQLWrapper(query)) conditions.push(query);
|
|
1576
1577
|
else {
|
|
@@ -1592,13 +1593,13 @@ var QueryManager = class {
|
|
|
1592
1593
|
parent: newParent
|
|
1593
1594
|
};
|
|
1594
1595
|
});
|
|
1595
|
-
const sql
|
|
1596
|
+
const sql = this.toSQL(query[key], {
|
|
1596
1597
|
schema: join.schema,
|
|
1597
1598
|
col: join.col,
|
|
1598
1599
|
joins: recursiveJoins.length > 0 ? recursiveJoins : void 0,
|
|
1599
1600
|
dialect: options.dialect
|
|
1600
1601
|
});
|
|
1601
|
-
if (sql
|
|
1602
|
+
if (sql) conditions.push(sql);
|
|
1602
1603
|
continue;
|
|
1603
1604
|
}
|
|
1604
1605
|
}
|
|
@@ -1606,7 +1607,7 @@ var QueryManager = class {
|
|
|
1606
1607
|
const operations = operator.map((it) => {
|
|
1607
1608
|
if (isSQLWrapper(it)) return it;
|
|
1608
1609
|
return this.toSQL(it, {
|
|
1609
|
-
schema
|
|
1610
|
+
schema,
|
|
1610
1611
|
col,
|
|
1611
1612
|
joins,
|
|
1612
1613
|
dialect: options.dialect
|
|
@@ -1617,7 +1618,7 @@ var QueryManager = class {
|
|
|
1617
1618
|
}
|
|
1618
1619
|
if (key === "not") {
|
|
1619
1620
|
const where = this.toSQL(operator, {
|
|
1620
|
-
schema
|
|
1621
|
+
schema,
|
|
1621
1622
|
col,
|
|
1622
1623
|
joins,
|
|
1623
1624
|
dialect: options.dialect
|
|
@@ -1626,8 +1627,8 @@ var QueryManager = class {
|
|
|
1626
1627
|
}
|
|
1627
1628
|
if (operator) {
|
|
1628
1629
|
const column = col(key);
|
|
1629
|
-
const sql
|
|
1630
|
-
if (sql
|
|
1630
|
+
const sql = this.mapOperatorToSql(operator, column, schema, key, options.dialect);
|
|
1631
|
+
if (sql) conditions.push(sql);
|
|
1631
1632
|
}
|
|
1632
1633
|
}
|
|
1633
1634
|
}
|
|
@@ -1796,7 +1797,7 @@ var QueryManager = class {
|
|
|
1796
1797
|
|
|
1797
1798
|
//#endregion
|
|
1798
1799
|
//#region ../../src/orm/services/Repository.ts
|
|
1799
|
-
var Repository = class {
|
|
1800
|
+
var Repository = class Repository {
|
|
1800
1801
|
entity;
|
|
1801
1802
|
provider;
|
|
1802
1803
|
log = $logger();
|
|
@@ -1804,6 +1805,13 @@ var Repository = class {
|
|
|
1804
1805
|
queryManager = $inject(QueryManager);
|
|
1805
1806
|
dateTimeProvider = $inject(DateTimeProvider);
|
|
1806
1807
|
alepha = $inject(Alepha);
|
|
1808
|
+
static of(entity, provider = DatabaseProvider) {
|
|
1809
|
+
return class InlineRepository extends Repository {
|
|
1810
|
+
constructor() {
|
|
1811
|
+
super(entity, provider);
|
|
1812
|
+
}
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1807
1815
|
constructor(entity, provider = DatabaseProvider) {
|
|
1808
1816
|
this.entity = entity;
|
|
1809
1817
|
this.provider = this.alepha.inject(provider);
|
|
@@ -1858,11 +1866,11 @@ var Repository = class {
|
|
|
1858
1866
|
* }
|
|
1859
1867
|
* ```
|
|
1860
1868
|
*/
|
|
1861
|
-
async query(query, schema
|
|
1869
|
+
async query(query, schema) {
|
|
1862
1870
|
const raw = typeof query === "function" ? query(this.table, this.db) : query;
|
|
1863
1871
|
if (typeof raw === "string" && raw.includes("[object Object]")) throw new AlephaError("Invalid SQL query. Did you forget to call the 'sql' function?");
|
|
1864
1872
|
return (await this.provider.execute(raw)).map((it) => {
|
|
1865
|
-
return this.clean(this.mapRawFieldsToEntity(it), schema
|
|
1873
|
+
return this.clean(this.mapRawFieldsToEntity(it), schema ?? this.entity.schema);
|
|
1866
1874
|
});
|
|
1867
1875
|
}
|
|
1868
1876
|
/**
|
|
@@ -1908,11 +1916,11 @@ var Repository = class {
|
|
|
1908
1916
|
* Start a SELECT DISTINCT query on the table.
|
|
1909
1917
|
*/
|
|
1910
1918
|
rawSelectDistinct(opts = {}, columns = []) {
|
|
1911
|
-
const db
|
|
1919
|
+
const db = opts.tx ?? this.db;
|
|
1912
1920
|
const table = this.table;
|
|
1913
1921
|
const fields = {};
|
|
1914
1922
|
for (const column of columns) if (typeof column === "string") fields[column] = this.col(column);
|
|
1915
|
-
return db
|
|
1923
|
+
return db.selectDistinct(fields).from(table);
|
|
1916
1924
|
}
|
|
1917
1925
|
/**
|
|
1918
1926
|
* Start an INSERT query on the table.
|
|
@@ -1964,21 +1972,21 @@ var Repository = class {
|
|
|
1964
1972
|
}
|
|
1965
1973
|
try {
|
|
1966
1974
|
let rows = await builder.execute();
|
|
1967
|
-
let schema
|
|
1968
|
-
if (columns) schema
|
|
1975
|
+
let schema = this.entity.schema;
|
|
1976
|
+
if (columns) schema = t.pick(schema, columns);
|
|
1969
1977
|
if (joins.length) rows = rows.map((row) => {
|
|
1970
1978
|
const rowSchema = {
|
|
1971
|
-
...schema
|
|
1972
|
-
properties: { ...schema
|
|
1979
|
+
...schema,
|
|
1980
|
+
properties: { ...schema.properties }
|
|
1973
1981
|
};
|
|
1974
1982
|
return this.relationManager.mapRowWithJoins(row[this.tableName], row, rowSchema, joins);
|
|
1975
1983
|
});
|
|
1976
1984
|
rows = rows.map((row) => {
|
|
1977
1985
|
if (joins.length) {
|
|
1978
|
-
const joinedSchema = this.relationManager.buildSchemaWithJoins(schema
|
|
1986
|
+
const joinedSchema = this.relationManager.buildSchemaWithJoins(schema, joins);
|
|
1979
1987
|
return this.cleanWithJoins(row, joinedSchema, joins);
|
|
1980
1988
|
}
|
|
1981
|
-
return this.clean(row, schema
|
|
1989
|
+
return this.clean(row, schema);
|
|
1982
1990
|
});
|
|
1983
1991
|
await this.alepha.events.emit("repository:read:after", {
|
|
1984
1992
|
tableName: this.tableName,
|
|
@@ -2324,27 +2332,27 @@ var Repository = class {
|
|
|
2324
2332
|
* Convert something to valid Pg Insert Value.
|
|
2325
2333
|
*/
|
|
2326
2334
|
cast(data, insert) {
|
|
2327
|
-
const schema
|
|
2328
|
-
return this.alepha.codec.encode(schema
|
|
2335
|
+
const schema = insert ? this.entity.insertSchema : t.partial(this.entity.updateSchema);
|
|
2336
|
+
return this.alepha.codec.encode(schema, data);
|
|
2329
2337
|
}
|
|
2330
2338
|
/**
|
|
2331
2339
|
* Transform a row from the database into a clean entity.
|
|
2332
2340
|
*/
|
|
2333
|
-
clean(row, schema
|
|
2334
|
-
for (const key of Object.keys(schema
|
|
2335
|
-
const value = schema
|
|
2341
|
+
clean(row, schema) {
|
|
2342
|
+
for (const key of Object.keys(schema.properties)) {
|
|
2343
|
+
const value = schema.properties[key];
|
|
2336
2344
|
if (typeof row[key] === "string") {
|
|
2337
2345
|
if (t.schema.isDateTime(value)) row[key] = this.dateTimeProvider.of(row[key]).toISOString();
|
|
2338
2346
|
else if (t.schema.isDate(value)) row[key] = this.dateTimeProvider.of(`${row[key]}T00:00:00Z`).toISOString().split("T")[0];
|
|
2339
2347
|
}
|
|
2340
2348
|
if (typeof row[key] === "bigint" && t.schema.isBigInt(value)) row[key] = row[key].toString();
|
|
2341
2349
|
}
|
|
2342
|
-
return this.alepha.codec.decode(schema
|
|
2350
|
+
return this.alepha.codec.decode(schema, row);
|
|
2343
2351
|
}
|
|
2344
2352
|
/**
|
|
2345
2353
|
* Clean a row with joins recursively
|
|
2346
2354
|
*/
|
|
2347
|
-
cleanWithJoins(row, schema
|
|
2355
|
+
cleanWithJoins(row, schema, joins, parentPath) {
|
|
2348
2356
|
const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
|
|
2349
2357
|
const cleanRow = { ...row };
|
|
2350
2358
|
const joinedData = {};
|
|
@@ -2352,7 +2360,7 @@ var Repository = class {
|
|
|
2352
2360
|
joinedData[join.key] = cleanRow[join.key];
|
|
2353
2361
|
delete cleanRow[join.key];
|
|
2354
2362
|
}
|
|
2355
|
-
const entity = this.clean(cleanRow, schema
|
|
2363
|
+
const entity = this.clean(cleanRow, schema);
|
|
2356
2364
|
for (const join of joinsAtThisLevel) {
|
|
2357
2365
|
const joinedValue = joinedData[join.key];
|
|
2358
2366
|
if (joinedValue != null) {
|
|
@@ -2388,8 +2396,8 @@ var Repository = class {
|
|
|
2388
2396
|
/**
|
|
2389
2397
|
* Find a primary key in the schema.
|
|
2390
2398
|
*/
|
|
2391
|
-
getPrimaryKey(schema
|
|
2392
|
-
const primaryKeys = getAttrFields(schema
|
|
2399
|
+
getPrimaryKey(schema) {
|
|
2400
|
+
const primaryKeys = getAttrFields(schema, PG_PRIMARY_KEY);
|
|
2393
2401
|
if (primaryKeys.length === 0) throw new AlephaError("Primary key not found in schema");
|
|
2394
2402
|
if (primaryKeys.length > 1) throw new AlephaError(`Multiple primary keys (${primaryKeys.length}) are not supported`);
|
|
2395
2403
|
return {
|
|
@@ -2707,8 +2715,8 @@ function buildQueryString(where) {
|
|
|
2707
2715
|
if (!where || typeof where !== "object") return "";
|
|
2708
2716
|
if ("and" in where && Array.isArray(where.and)) return where.and.map((w) => buildQueryString(w)).join("&");
|
|
2709
2717
|
if ("or" in where && Array.isArray(where.or)) {
|
|
2710
|
-
const parts
|
|
2711
|
-
return parts
|
|
2718
|
+
const parts = where.or.map((w) => buildQueryString(w));
|
|
2719
|
+
return parts.length > 1 ? `(${parts.join("|")})` : parts[0];
|
|
2712
2720
|
}
|
|
2713
2721
|
if ("not" in where) return "";
|
|
2714
2722
|
const parts = [];
|
|
@@ -2903,7 +2911,7 @@ var orm_exports = /* @__PURE__ */ __exportAll({
|
|
|
2903
2911
|
$repository: () => $repository,
|
|
2904
2912
|
$sequence: () => $sequence,
|
|
2905
2913
|
$transaction: () => $transaction,
|
|
2906
|
-
|
|
2914
|
+
AlephaOrm: () => AlephaOrm,
|
|
2907
2915
|
BunPostgresProvider: () => BunPostgresProvider,
|
|
2908
2916
|
BunSqliteProvider: () => BunSqliteProvider,
|
|
2909
2917
|
CloudflareD1Provider: () => CloudflareD1Provider,
|
|
@@ -2931,6 +2939,7 @@ var orm_exports = /* @__PURE__ */ __exportAll({
|
|
|
2931
2939
|
Repository: () => Repository,
|
|
2932
2940
|
RepositoryProvider: () => RepositoryProvider,
|
|
2933
2941
|
SequencePrimitive: () => SequencePrimitive,
|
|
2942
|
+
SqliteProvider: () => SqliteProvider,
|
|
2934
2943
|
buildQueryString: () => buildQueryString,
|
|
2935
2944
|
bunSqliteOptions: () => bunSqliteOptions,
|
|
2936
2945
|
db: () => db,
|
|
@@ -2948,59 +2957,32 @@ var orm_exports = /* @__PURE__ */ __exportAll({
|
|
|
2948
2957
|
sql: () => sql,
|
|
2949
2958
|
updateSchema: () => updateSchema
|
|
2950
2959
|
});
|
|
2960
|
+
const SqliteProvider = NodeSqliteProvider;
|
|
2951
2961
|
/**
|
|
2952
|
-
*
|
|
2953
|
-
*
|
|
2954
|
-
*
|
|
2955
|
-
* - Bun: Uses `BunPostgresProvider` or `BunSqliteProvider`
|
|
2956
|
-
* - Node.js: Uses `NodePostgresProvider` or `NodeSqliteProvider`
|
|
2957
|
-
*
|
|
2958
|
-
* ```ts
|
|
2959
|
-
* import { t } from "alepha";
|
|
2960
|
-
* import { $entity, $repository, db } from "alepha/postgres";
|
|
2961
|
-
*
|
|
2962
|
-
* const users = $entity({
|
|
2963
|
-
* name: "users",
|
|
2964
|
-
* schema: t.object({
|
|
2965
|
-
* id: db.primaryKey(),
|
|
2966
|
-
* name: t.text(),
|
|
2967
|
-
* email: t.text(),
|
|
2968
|
-
* }),
|
|
2969
|
-
* });
|
|
2970
|
-
*
|
|
2971
|
-
* class App {
|
|
2972
|
-
* users = $repository(users);
|
|
2973
|
-
*
|
|
2974
|
-
* getUserByName(name: string) {
|
|
2975
|
-
* return this.users.findOne({ name: { eq: name } });
|
|
2976
|
-
* }
|
|
2977
|
-
* }
|
|
2978
|
-
* ```
|
|
2979
|
-
*
|
|
2980
|
-
* This is not a full ORM, but rather a set of tools to work with Postgres databases in a type-safe way.
|
|
2962
|
+
* | type | quality | stability |
|
|
2963
|
+
* |------|---------|-----------|
|
|
2964
|
+
* | backend | epic | stable |
|
|
2981
2965
|
*
|
|
2982
|
-
*
|
|
2983
|
-
* - A type-safe way to define entities and repositories. (via `$entity` and `$repository`)
|
|
2984
|
-
* - Custom query builders and filters.
|
|
2985
|
-
* - Built-in special columns like `createdAt`, `updatedAt`, `deletedAt`, `version`.
|
|
2986
|
-
* - Automatic JSONB support.
|
|
2987
|
-
* - Automatic synchronization of entities with the database schema (for testing and development).
|
|
2988
|
-
* - Fallback to raw SQL via Drizzle ORM `sql` function.
|
|
2966
|
+
* Full-featured database abstraction built on Drizzle ORM with complete type safety.
|
|
2989
2967
|
*
|
|
2990
|
-
*
|
|
2968
|
+
* **Features:**
|
|
2969
|
+
* - Define database entities with TypeBox schemas
|
|
2970
|
+
* - Automatic timestamps, soft deletes, and versioning columns
|
|
2971
|
+
* - Type-safe CRUD operations with filtering, pagination, sorting, and relationships
|
|
2972
|
+
* - Database transaction support with automatic rollback
|
|
2973
|
+
* - Auto-incrementing sequences for IDs
|
|
2974
|
+
* - PostgreSQL support (Node.js, Bun, Cloudflare Workers via pglite)
|
|
2975
|
+
* - SQLite support (Node.js, Bun, Cloudflare D1)
|
|
2976
|
+
* - Automatic schema sync for development/testing
|
|
2977
|
+
* - Drizzle Kit migrations for production
|
|
2978
|
+
* - Type-safe filters: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `like`, `between`
|
|
2979
|
+
* - JSONB column support
|
|
2980
|
+
* - Relationship joins
|
|
2991
2981
|
*
|
|
2992
|
-
* @see {@link $entity}
|
|
2993
|
-
* @see {@link $sequence}
|
|
2994
|
-
* @see {@link $repository}
|
|
2995
|
-
* @see {@link $transaction}
|
|
2996
|
-
* @see {@link NodePostgresProvider} - Node.js Postgres implementation
|
|
2997
|
-
* @see {@link NodeSqliteProvider} - Node.js SQLite implementation
|
|
2998
|
-
* @see {@link BunPostgresProvider} - Bun Postgres implementation
|
|
2999
|
-
* @see {@link BunSqliteProvider} - Bun SQLite implementation
|
|
3000
2982
|
* @module alepha.postgres
|
|
3001
2983
|
*/
|
|
3002
|
-
const
|
|
3003
|
-
name: "alepha.
|
|
2984
|
+
const AlephaOrm = $module({
|
|
2985
|
+
name: "alepha.orm",
|
|
3004
2986
|
primitives: [$sequence, $entity],
|
|
3005
2987
|
services: [
|
|
3006
2988
|
AlephaDateTime,
|
|
@@ -3063,5 +3045,5 @@ const AlephaPostgres = $module({
|
|
|
3063
3045
|
});
|
|
3064
3046
|
|
|
3065
3047
|
//#endregion
|
|
3066
|
-
export { $entity, $repository, $sequence, $transaction,
|
|
3048
|
+
export { $entity, $repository, $sequence, $transaction, AlephaOrm, BunPostgresProvider, BunSqliteProvider, CloudflareD1Provider, DatabaseProvider, DatabaseTypeProvider, DbConflictError, DbEntityNotFoundError, DbError, DbMigrationError, DbVersionMismatchError, DrizzleKitProvider, EntityPrimitive, NodePostgresProvider, NodeSqliteProvider, PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_ENUM, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, Repository, RepositoryProvider, SequencePrimitive, SqliteProvider, buildQueryString, bunSqliteOptions, db, drizzle, getAttrFields, insertSchema, legacyIdSchema, nodeSqliteOptions, pageQuerySchema, pageSchema, parseQueryString, pg, pgAttr, schema, sql, updateSchema };
|
|
3067
3049
|
//# sourceMappingURL=index.js.map
|