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.bun.js
CHANGED
|
@@ -35,14 +35,14 @@ var __exportAll = (all, symbols) => {
|
|
|
35
35
|
}
|
|
36
36
|
return target;
|
|
37
37
|
};
|
|
38
|
-
var __copyProps = (to, from, except, desc
|
|
38
|
+
var __copyProps = (to, from, except, desc) => {
|
|
39
39
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
40
40
|
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
41
41
|
key = keys[i];
|
|
42
42
|
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
43
43
|
__defProp(to, key, {
|
|
44
44
|
get: ((k) => from[k]).bind(null, key),
|
|
45
|
-
enumerable: !(desc
|
|
45
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -92,14 +92,14 @@ const insertSchema = (obj) => {
|
|
|
92
92
|
|
|
93
93
|
//#endregion
|
|
94
94
|
//#region ../../src/orm/schemas/updateSchema.ts
|
|
95
|
-
const updateSchema = (schema
|
|
95
|
+
const updateSchema = (schema) => {
|
|
96
96
|
const newProperties = {};
|
|
97
|
-
for (const key in schema
|
|
98
|
-
const prop = schema
|
|
97
|
+
for (const key in schema.properties) {
|
|
98
|
+
const prop = schema.properties[key];
|
|
99
99
|
if (t.schema.isOptional(prop)) newProperties[key] = t.optional(t.union([prop, t.raw.Null()]));
|
|
100
100
|
else newProperties[key] = prop;
|
|
101
101
|
}
|
|
102
|
-
return t.object(newProperties, "options" in schema
|
|
102
|
+
return t.object(newProperties, "options" in schema && typeof schema.options === "object" ? { ...schema.options } : {});
|
|
103
103
|
};
|
|
104
104
|
|
|
105
105
|
//#endregion
|
|
@@ -130,10 +130,10 @@ var EntityPrimitive = class EntityPrimitive {
|
|
|
130
130
|
constructor(options) {
|
|
131
131
|
this.options = options;
|
|
132
132
|
}
|
|
133
|
-
alias(alias
|
|
133
|
+
alias(alias) {
|
|
134
134
|
const aliased = new EntityPrimitive(this.options);
|
|
135
135
|
return new Proxy(aliased, { get(target, prop, receiver) {
|
|
136
|
-
if (prop === "$alias") return alias
|
|
136
|
+
if (prop === "$alias") return alias;
|
|
137
137
|
return Reflect.get(target, prop, receiver);
|
|
138
138
|
} });
|
|
139
139
|
}
|
|
@@ -199,8 +199,8 @@ var DatabaseProvider = class {
|
|
|
199
199
|
registerSequence(sequence) {
|
|
200
200
|
this.builder.buildSequence(sequence, this);
|
|
201
201
|
}
|
|
202
|
-
async run(statement, schema
|
|
203
|
-
return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema
|
|
202
|
+
async run(statement, schema) {
|
|
203
|
+
return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema, row));
|
|
204
204
|
}
|
|
205
205
|
/**
|
|
206
206
|
* Get migrations folder path - can be overridden
|
|
@@ -323,7 +323,7 @@ var DrizzleKitProvider = class {
|
|
|
323
323
|
await this.executeStatements(statements, provider, true);
|
|
324
324
|
await this.saveDevMigrations(provider, snapshot, entry);
|
|
325
325
|
}
|
|
326
|
-
this.log.info(`
|
|
326
|
+
this.log.info(`Sync with '${provider.name}' OK [${Date.now() - now}ms]`);
|
|
327
327
|
}
|
|
328
328
|
/**
|
|
329
329
|
* Mostly used for testing purposes. You can generate SQL migration statements without executing them.
|
|
@@ -333,16 +333,16 @@ var DrizzleKitProvider = class {
|
|
|
333
333
|
const models = this.getModels(provider);
|
|
334
334
|
if (Object.keys(models).length > 0) {
|
|
335
335
|
if (provider.dialect === "sqlite") {
|
|
336
|
-
const prev
|
|
337
|
-
const curr
|
|
336
|
+
const prev = prevSnapshot ?? await kit.generateSQLiteDrizzleJson({});
|
|
337
|
+
const curr = await kit.generateSQLiteDrizzleJson(models);
|
|
338
338
|
return {
|
|
339
339
|
models,
|
|
340
|
-
statements: await kit.generateSQLiteMigration(prev
|
|
341
|
-
snapshot: curr
|
|
340
|
+
statements: await kit.generateSQLiteMigration(prev, curr),
|
|
341
|
+
snapshot: curr
|
|
342
342
|
};
|
|
343
343
|
}
|
|
344
|
-
const prev = prevSnapshot ??
|
|
345
|
-
const curr =
|
|
344
|
+
const prev = prevSnapshot ?? kit.generateDrizzleJson({});
|
|
345
|
+
const curr = kit.generateDrizzleJson(models);
|
|
346
346
|
return {
|
|
347
347
|
models,
|
|
348
348
|
statements: await kit.generateMigration(prev, curr),
|
|
@@ -629,8 +629,8 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
629
629
|
};
|
|
630
630
|
return this.buildTableConfig(entity, pgBuilders, tableResolver);
|
|
631
631
|
}
|
|
632
|
-
schemaToPgColumns = (tableName, schema
|
|
633
|
-
return Object.entries(schema
|
|
632
|
+
schemaToPgColumns = (tableName, schema, nsp, enums, tables) => {
|
|
633
|
+
return Object.entries(schema.properties).reduce((columns, [key, value]) => {
|
|
634
634
|
let col = this.mapFieldToColumn(tableName, key, value, nsp, enums);
|
|
635
635
|
if ("default" in value && value.default != null) col = col.default(value.default);
|
|
636
636
|
if (PG_PRIMARY_KEY in value) col = col.primaryKey();
|
|
@@ -645,7 +645,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
645
645
|
return target;
|
|
646
646
|
}, config.actions);
|
|
647
647
|
}
|
|
648
|
-
if (schema
|
|
648
|
+
if (schema.required?.includes(key)) col = col.notNull();
|
|
649
649
|
return {
|
|
650
650
|
...columns,
|
|
651
651
|
[key]: col
|
|
@@ -684,7 +684,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
|
|
|
684
684
|
if (t.schema.isBoolean(value)) return pg$2.boolean(key);
|
|
685
685
|
if (t.schema.isObject(value)) return schema(key, value);
|
|
686
686
|
if (t.schema.isRecord(value)) return schema(key, value);
|
|
687
|
-
const isTypeEnum = (value
|
|
687
|
+
const isTypeEnum = (value) => t.schema.isUnsafe(value) && "type" in value && value.type === "string" && "enum" in value && Array.isArray(value.enum);
|
|
688
688
|
if (t.schema.isArray(value)) {
|
|
689
689
|
if (t.schema.isObject(value.items)) return schema(key, value);
|
|
690
690
|
if (t.schema.isRecord(value.items)) return schema(key, value);
|
|
@@ -812,8 +812,8 @@ var BunPostgresProvider = class extends DatabaseProvider {
|
|
|
812
812
|
return this.bunDb;
|
|
813
813
|
}
|
|
814
814
|
async executeMigrations(migrationsFolder) {
|
|
815
|
-
const { migrate
|
|
816
|
-
await migrate
|
|
815
|
+
const { migrate } = await import("drizzle-orm/bun-sql/migrator");
|
|
816
|
+
await migrate(this.bunDb, { migrationsFolder });
|
|
817
817
|
}
|
|
818
818
|
onStart = $hook({
|
|
819
819
|
on: "start",
|
|
@@ -841,10 +841,10 @@ var BunPostgresProvider = class extends DatabaseProvider {
|
|
|
841
841
|
async connect() {
|
|
842
842
|
this.log.debug("Connect ..");
|
|
843
843
|
if (typeof Bun === "undefined") throw new AlephaError("BunPostgresProvider requires the Bun runtime. Use NodePostgresProvider for Node.js.");
|
|
844
|
-
const { drizzle
|
|
844
|
+
const { drizzle } = await import("drizzle-orm/bun-sql");
|
|
845
845
|
this.client = new Bun.SQL(this.url);
|
|
846
846
|
await this.client.unsafe("SELECT 1");
|
|
847
|
-
this.bunDb = drizzle
|
|
847
|
+
this.bunDb = drizzle({
|
|
848
848
|
client: this.client,
|
|
849
849
|
logger: { logQuery: (query, params) => {
|
|
850
850
|
this.log.trace(query, { params });
|
|
@@ -897,8 +897,8 @@ var SqliteModelBuilder = class extends ModelBuilder {
|
|
|
897
897
|
return Array.isArray(customConfigs) ? customConfigs : [];
|
|
898
898
|
});
|
|
899
899
|
}
|
|
900
|
-
schemaToSqliteColumns = (tableName, schema
|
|
901
|
-
return Object.entries(schema
|
|
900
|
+
schemaToSqliteColumns = (tableName, schema, enums, tables) => {
|
|
901
|
+
return Object.entries(schema.properties).reduce((columns, [key, value]) => {
|
|
902
902
|
let col = this.mapFieldToSqliteColumn(tableName, key, value, enums);
|
|
903
903
|
if ("default" in value && value.default != null) col = col.default(value.default);
|
|
904
904
|
if (PG_PRIMARY_KEY in value) col = col.primaryKey();
|
|
@@ -913,7 +913,7 @@ var SqliteModelBuilder = class extends ModelBuilder {
|
|
|
913
913
|
return target;
|
|
914
914
|
}, config.actions);
|
|
915
915
|
}
|
|
916
|
-
if (schema
|
|
916
|
+
if (schema.required?.includes(key)) col = col.notNull();
|
|
917
917
|
return {
|
|
918
918
|
...columns,
|
|
919
919
|
[key]: col
|
|
@@ -1062,14 +1062,14 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1062
1062
|
handler: async () => {
|
|
1063
1063
|
if (typeof Bun === "undefined") throw new AlephaError("BunSqliteProvider requires the Bun runtime. Use NodeSqliteProvider for Node.js.");
|
|
1064
1064
|
const { Database } = await import("bun:sqlite");
|
|
1065
|
-
const { drizzle
|
|
1065
|
+
const { drizzle } = await import("drizzle-orm/bun-sqlite");
|
|
1066
1066
|
const filepath = this.url.replace("sqlite://", "").replace("sqlite:", "");
|
|
1067
1067
|
if (filepath !== ":memory:" && filepath !== "") {
|
|
1068
1068
|
const dirname = filepath.split("/").slice(0, -1).join("/");
|
|
1069
1069
|
if (dirname) await mkdir(dirname, { recursive: true }).catch(() => null);
|
|
1070
1070
|
}
|
|
1071
1071
|
this.sqlite = new Database(filepath);
|
|
1072
|
-
this.bunDb = drizzle
|
|
1072
|
+
this.bunDb = drizzle({
|
|
1073
1073
|
client: this.sqlite,
|
|
1074
1074
|
logger: { logQuery: (query, params) => {
|
|
1075
1075
|
this.log.trace(query, { params });
|
|
@@ -1081,6 +1081,7 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1081
1081
|
});
|
|
1082
1082
|
onStop = $hook({
|
|
1083
1083
|
on: "stop",
|
|
1084
|
+
priority: "last",
|
|
1084
1085
|
handler: async () => {
|
|
1085
1086
|
if (this.sqlite) {
|
|
1086
1087
|
this.log.debug("Closing Bun SQLite connection...");
|
|
@@ -1092,8 +1093,8 @@ var BunSqliteProvider = class extends DatabaseProvider {
|
|
|
1092
1093
|
}
|
|
1093
1094
|
});
|
|
1094
1095
|
async executeMigrations(migrationsFolder) {
|
|
1095
|
-
const { migrate
|
|
1096
|
-
await migrate
|
|
1096
|
+
const { migrate } = await import("drizzle-orm/bun-sqlite/migrator");
|
|
1097
|
+
await migrate(this.bunDb, { migrationsFolder });
|
|
1097
1098
|
}
|
|
1098
1099
|
};
|
|
1099
1100
|
|
|
@@ -1145,15 +1146,15 @@ var CloudflareD1Provider = class extends DatabaseProvider {
|
|
|
1145
1146
|
const binding = cloudflareEnv[bindingName];
|
|
1146
1147
|
if (!binding) throw new AlephaError(`D1 binding '${bindingName}' not found in Cloudflare Workers environment.`);
|
|
1147
1148
|
this.d1 = binding;
|
|
1148
|
-
const { drizzle
|
|
1149
|
-
this.drizzleDb = drizzle
|
|
1149
|
+
const { drizzle } = await import("drizzle-orm/d1");
|
|
1150
|
+
this.drizzleDb = drizzle(this.d1);
|
|
1150
1151
|
await this.migrate();
|
|
1151
1152
|
this.log.info("Using Cloudflare D1 database");
|
|
1152
1153
|
}
|
|
1153
1154
|
});
|
|
1154
1155
|
async executeMigrations(migrationsFolder) {
|
|
1155
|
-
const { migrate
|
|
1156
|
-
await migrate
|
|
1156
|
+
const { migrate } = await import("drizzle-orm/d1/migrator");
|
|
1157
|
+
await migrate(this.db, { migrationsFolder });
|
|
1157
1158
|
}
|
|
1158
1159
|
/**
|
|
1159
1160
|
* Override development migration to skip sync (not supported on D1).
|
|
@@ -1220,13 +1221,13 @@ var PglitePostgresProvider = class PglitePostgresProvider extends DatabaseProvid
|
|
|
1220
1221
|
if (Object.keys(this.kit.getModels(this)).length === 0) return;
|
|
1221
1222
|
const module = PglitePostgresProvider.importPglite();
|
|
1222
1223
|
if (!module) throw new AlephaError("@electric-sql/pglite is not installed. Please install it to use the pglite driver.");
|
|
1223
|
-
const { drizzle
|
|
1224
|
+
const { drizzle } = createRequire(import.meta.url)("drizzle-orm/pglite");
|
|
1224
1225
|
const path = this.url;
|
|
1225
1226
|
if (path !== ":memory:") {
|
|
1226
1227
|
await mkdir(path, { recursive: true }).catch(() => null);
|
|
1227
1228
|
this.client = new module.PGlite(path);
|
|
1228
1229
|
} else this.client = new module.PGlite();
|
|
1229
|
-
this.pglite = drizzle
|
|
1230
|
+
this.pglite = drizzle({ client: this.client });
|
|
1230
1231
|
await this.migrate();
|
|
1231
1232
|
this.log.info(`Using PGlite database at ${path}`);
|
|
1232
1233
|
}
|
|
@@ -1303,10 +1304,10 @@ const pgAttr = (type, attr, value) => {
|
|
|
1303
1304
|
/**
|
|
1304
1305
|
* Retrieves the fields of a schema that have a specific attribute.
|
|
1305
1306
|
*/
|
|
1306
|
-
const getAttrFields = (schema
|
|
1307
|
+
const getAttrFields = (schema, name) => {
|
|
1307
1308
|
const fields = [];
|
|
1308
|
-
for (const key of Object.keys(schema
|
|
1309
|
-
const value = schema
|
|
1309
|
+
for (const key of Object.keys(schema.properties)) {
|
|
1310
|
+
const value = schema.properties[key];
|
|
1310
1311
|
if (name in value) fields.push({
|
|
1311
1312
|
type: value,
|
|
1312
1313
|
key,
|
|
@@ -1342,13 +1343,13 @@ var PgRelationManager = class {
|
|
|
1342
1343
|
/**
|
|
1343
1344
|
* Map a row with its joined relations based on the joins definition
|
|
1344
1345
|
*/
|
|
1345
|
-
mapRowWithJoins(record, row, schema
|
|
1346
|
+
mapRowWithJoins(record, row, schema, joins, parentKey) {
|
|
1346
1347
|
for (const join of joins) if (join.parent === parentKey) {
|
|
1347
1348
|
const joinedData = row[join.table];
|
|
1348
1349
|
if (this.isAllNull(joinedData)) record[join.key] = void 0;
|
|
1349
1350
|
else {
|
|
1350
1351
|
record[join.key] = joinedData;
|
|
1351
|
-
this.mapRowWithJoins(record[join.key], row, schema
|
|
1352
|
+
this.mapRowWithJoins(record[join.key], row, schema, joins, parentKey ? `${parentKey}.${join.key}` : join.key);
|
|
1352
1353
|
}
|
|
1353
1354
|
}
|
|
1354
1355
|
return record;
|
|
@@ -1365,16 +1366,16 @@ var PgRelationManager = class {
|
|
|
1365
1366
|
* Build a schema that includes all join properties recursively
|
|
1366
1367
|
*/
|
|
1367
1368
|
buildSchemaWithJoins(baseSchema, joins, parentPath) {
|
|
1368
|
-
const schema
|
|
1369
|
+
const schema = Value.Clone(baseSchema);
|
|
1369
1370
|
const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
|
|
1370
1371
|
for (const join of joinsAtThisLevel) {
|
|
1371
1372
|
const joinPath = parentPath ? `${parentPath}.${join.key}` : join.key;
|
|
1372
1373
|
const childJoins = joins.filter((j) => j.parent === joinPath);
|
|
1373
1374
|
let joinSchema = join.schema;
|
|
1374
1375
|
if (childJoins.length > 0) joinSchema = this.buildSchemaWithJoins(join.schema, joins, joinPath);
|
|
1375
|
-
schema
|
|
1376
|
+
schema.properties[join.key] = t.optional(joinSchema);
|
|
1376
1377
|
}
|
|
1377
|
-
return schema
|
|
1378
|
+
return schema;
|
|
1378
1379
|
}
|
|
1379
1380
|
};
|
|
1380
1381
|
|
|
@@ -1386,7 +1387,7 @@ var QueryManager = class {
|
|
|
1386
1387
|
* Convert a query object to a SQL query.
|
|
1387
1388
|
*/
|
|
1388
1389
|
toSQL(query, options) {
|
|
1389
|
-
const { schema
|
|
1390
|
+
const { schema, col, joins } = options;
|
|
1390
1391
|
const conditions = [];
|
|
1391
1392
|
if (isSQLWrapper(query)) conditions.push(query);
|
|
1392
1393
|
else {
|
|
@@ -1408,13 +1409,13 @@ var QueryManager = class {
|
|
|
1408
1409
|
parent: newParent
|
|
1409
1410
|
};
|
|
1410
1411
|
});
|
|
1411
|
-
const sql
|
|
1412
|
+
const sql = this.toSQL(query[key], {
|
|
1412
1413
|
schema: join.schema,
|
|
1413
1414
|
col: join.col,
|
|
1414
1415
|
joins: recursiveJoins.length > 0 ? recursiveJoins : void 0,
|
|
1415
1416
|
dialect: options.dialect
|
|
1416
1417
|
});
|
|
1417
|
-
if (sql
|
|
1418
|
+
if (sql) conditions.push(sql);
|
|
1418
1419
|
continue;
|
|
1419
1420
|
}
|
|
1420
1421
|
}
|
|
@@ -1422,7 +1423,7 @@ var QueryManager = class {
|
|
|
1422
1423
|
const operations = operator.map((it) => {
|
|
1423
1424
|
if (isSQLWrapper(it)) return it;
|
|
1424
1425
|
return this.toSQL(it, {
|
|
1425
|
-
schema
|
|
1426
|
+
schema,
|
|
1426
1427
|
col,
|
|
1427
1428
|
joins,
|
|
1428
1429
|
dialect: options.dialect
|
|
@@ -1433,7 +1434,7 @@ var QueryManager = class {
|
|
|
1433
1434
|
}
|
|
1434
1435
|
if (key === "not") {
|
|
1435
1436
|
const where = this.toSQL(operator, {
|
|
1436
|
-
schema
|
|
1437
|
+
schema,
|
|
1437
1438
|
col,
|
|
1438
1439
|
joins,
|
|
1439
1440
|
dialect: options.dialect
|
|
@@ -1442,8 +1443,8 @@ var QueryManager = class {
|
|
|
1442
1443
|
}
|
|
1443
1444
|
if (operator) {
|
|
1444
1445
|
const column = col(key);
|
|
1445
|
-
const sql
|
|
1446
|
-
if (sql
|
|
1446
|
+
const sql = this.mapOperatorToSql(operator, column, schema, key, options.dialect);
|
|
1447
|
+
if (sql) conditions.push(sql);
|
|
1447
1448
|
}
|
|
1448
1449
|
}
|
|
1449
1450
|
}
|
|
@@ -1612,7 +1613,7 @@ var QueryManager = class {
|
|
|
1612
1613
|
|
|
1613
1614
|
//#endregion
|
|
1614
1615
|
//#region ../../src/orm/services/Repository.ts
|
|
1615
|
-
var Repository = class {
|
|
1616
|
+
var Repository = class Repository {
|
|
1616
1617
|
entity;
|
|
1617
1618
|
provider;
|
|
1618
1619
|
log = $logger();
|
|
@@ -1620,6 +1621,13 @@ var Repository = class {
|
|
|
1620
1621
|
queryManager = $inject(QueryManager);
|
|
1621
1622
|
dateTimeProvider = $inject(DateTimeProvider);
|
|
1622
1623
|
alepha = $inject(Alepha);
|
|
1624
|
+
static of(entity, provider = DatabaseProvider) {
|
|
1625
|
+
return class InlineRepository extends Repository {
|
|
1626
|
+
constructor() {
|
|
1627
|
+
super(entity, provider);
|
|
1628
|
+
}
|
|
1629
|
+
};
|
|
1630
|
+
}
|
|
1623
1631
|
constructor(entity, provider = DatabaseProvider) {
|
|
1624
1632
|
this.entity = entity;
|
|
1625
1633
|
this.provider = this.alepha.inject(provider);
|
|
@@ -1674,11 +1682,11 @@ var Repository = class {
|
|
|
1674
1682
|
* }
|
|
1675
1683
|
* ```
|
|
1676
1684
|
*/
|
|
1677
|
-
async query(query, schema
|
|
1685
|
+
async query(query, schema) {
|
|
1678
1686
|
const raw = typeof query === "function" ? query(this.table, this.db) : query;
|
|
1679
1687
|
if (typeof raw === "string" && raw.includes("[object Object]")) throw new AlephaError("Invalid SQL query. Did you forget to call the 'sql' function?");
|
|
1680
1688
|
return (await this.provider.execute(raw)).map((it) => {
|
|
1681
|
-
return this.clean(this.mapRawFieldsToEntity(it), schema
|
|
1689
|
+
return this.clean(this.mapRawFieldsToEntity(it), schema ?? this.entity.schema);
|
|
1682
1690
|
});
|
|
1683
1691
|
}
|
|
1684
1692
|
/**
|
|
@@ -1724,11 +1732,11 @@ var Repository = class {
|
|
|
1724
1732
|
* Start a SELECT DISTINCT query on the table.
|
|
1725
1733
|
*/
|
|
1726
1734
|
rawSelectDistinct(opts = {}, columns = []) {
|
|
1727
|
-
const db
|
|
1735
|
+
const db = opts.tx ?? this.db;
|
|
1728
1736
|
const table = this.table;
|
|
1729
1737
|
const fields = {};
|
|
1730
1738
|
for (const column of columns) if (typeof column === "string") fields[column] = this.col(column);
|
|
1731
|
-
return db
|
|
1739
|
+
return db.selectDistinct(fields).from(table);
|
|
1732
1740
|
}
|
|
1733
1741
|
/**
|
|
1734
1742
|
* Start an INSERT query on the table.
|
|
@@ -1780,21 +1788,21 @@ var Repository = class {
|
|
|
1780
1788
|
}
|
|
1781
1789
|
try {
|
|
1782
1790
|
let rows = await builder.execute();
|
|
1783
|
-
let schema
|
|
1784
|
-
if (columns) schema
|
|
1791
|
+
let schema = this.entity.schema;
|
|
1792
|
+
if (columns) schema = t.pick(schema, columns);
|
|
1785
1793
|
if (joins.length) rows = rows.map((row) => {
|
|
1786
1794
|
const rowSchema = {
|
|
1787
|
-
...schema
|
|
1788
|
-
properties: { ...schema
|
|
1795
|
+
...schema,
|
|
1796
|
+
properties: { ...schema.properties }
|
|
1789
1797
|
};
|
|
1790
1798
|
return this.relationManager.mapRowWithJoins(row[this.tableName], row, rowSchema, joins);
|
|
1791
1799
|
});
|
|
1792
1800
|
rows = rows.map((row) => {
|
|
1793
1801
|
if (joins.length) {
|
|
1794
|
-
const joinedSchema = this.relationManager.buildSchemaWithJoins(schema
|
|
1802
|
+
const joinedSchema = this.relationManager.buildSchemaWithJoins(schema, joins);
|
|
1795
1803
|
return this.cleanWithJoins(row, joinedSchema, joins);
|
|
1796
1804
|
}
|
|
1797
|
-
return this.clean(row, schema
|
|
1805
|
+
return this.clean(row, schema);
|
|
1798
1806
|
});
|
|
1799
1807
|
await this.alepha.events.emit("repository:read:after", {
|
|
1800
1808
|
tableName: this.tableName,
|
|
@@ -2140,27 +2148,27 @@ var Repository = class {
|
|
|
2140
2148
|
* Convert something to valid Pg Insert Value.
|
|
2141
2149
|
*/
|
|
2142
2150
|
cast(data, insert) {
|
|
2143
|
-
const schema
|
|
2144
|
-
return this.alepha.codec.encode(schema
|
|
2151
|
+
const schema = insert ? this.entity.insertSchema : t.partial(this.entity.updateSchema);
|
|
2152
|
+
return this.alepha.codec.encode(schema, data);
|
|
2145
2153
|
}
|
|
2146
2154
|
/**
|
|
2147
2155
|
* Transform a row from the database into a clean entity.
|
|
2148
2156
|
*/
|
|
2149
|
-
clean(row, schema
|
|
2150
|
-
for (const key of Object.keys(schema
|
|
2151
|
-
const value = schema
|
|
2157
|
+
clean(row, schema) {
|
|
2158
|
+
for (const key of Object.keys(schema.properties)) {
|
|
2159
|
+
const value = schema.properties[key];
|
|
2152
2160
|
if (typeof row[key] === "string") {
|
|
2153
2161
|
if (t.schema.isDateTime(value)) row[key] = this.dateTimeProvider.of(row[key]).toISOString();
|
|
2154
2162
|
else if (t.schema.isDate(value)) row[key] = this.dateTimeProvider.of(`${row[key]}T00:00:00Z`).toISOString().split("T")[0];
|
|
2155
2163
|
}
|
|
2156
2164
|
if (typeof row[key] === "bigint" && t.schema.isBigInt(value)) row[key] = row[key].toString();
|
|
2157
2165
|
}
|
|
2158
|
-
return this.alepha.codec.decode(schema
|
|
2166
|
+
return this.alepha.codec.decode(schema, row);
|
|
2159
2167
|
}
|
|
2160
2168
|
/**
|
|
2161
2169
|
* Clean a row with joins recursively
|
|
2162
2170
|
*/
|
|
2163
|
-
cleanWithJoins(row, schema
|
|
2171
|
+
cleanWithJoins(row, schema, joins, parentPath) {
|
|
2164
2172
|
const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
|
|
2165
2173
|
const cleanRow = { ...row };
|
|
2166
2174
|
const joinedData = {};
|
|
@@ -2168,7 +2176,7 @@ var Repository = class {
|
|
|
2168
2176
|
joinedData[join.key] = cleanRow[join.key];
|
|
2169
2177
|
delete cleanRow[join.key];
|
|
2170
2178
|
}
|
|
2171
|
-
const entity = this.clean(cleanRow, schema
|
|
2179
|
+
const entity = this.clean(cleanRow, schema);
|
|
2172
2180
|
for (const join of joinsAtThisLevel) {
|
|
2173
2181
|
const joinedValue = joinedData[join.key];
|
|
2174
2182
|
if (joinedValue != null) {
|
|
@@ -2204,8 +2212,8 @@ var Repository = class {
|
|
|
2204
2212
|
/**
|
|
2205
2213
|
* Find a primary key in the schema.
|
|
2206
2214
|
*/
|
|
2207
|
-
getPrimaryKey(schema
|
|
2208
|
-
const primaryKeys = getAttrFields(schema
|
|
2215
|
+
getPrimaryKey(schema) {
|
|
2216
|
+
const primaryKeys = getAttrFields(schema, PG_PRIMARY_KEY);
|
|
2209
2217
|
if (primaryKeys.length === 0) throw new AlephaError("Primary key not found in schema");
|
|
2210
2218
|
if (primaryKeys.length > 1) throw new AlephaError(`Multiple primary keys (${primaryKeys.length}) are not supported`);
|
|
2211
2219
|
return {
|
|
@@ -2523,8 +2531,8 @@ function buildQueryString(where) {
|
|
|
2523
2531
|
if (!where || typeof where !== "object") return "";
|
|
2524
2532
|
if ("and" in where && Array.isArray(where.and)) return where.and.map((w) => buildQueryString(w)).join("&");
|
|
2525
2533
|
if ("or" in where && Array.isArray(where.or)) {
|
|
2526
|
-
const parts
|
|
2527
|
-
return parts
|
|
2534
|
+
const parts = where.or.map((w) => buildQueryString(w));
|
|
2535
|
+
return parts.length > 1 ? `(${parts.join("|")})` : parts[0];
|
|
2528
2536
|
}
|
|
2529
2537
|
if ("not" in where) return "";
|
|
2530
2538
|
const parts = [];
|
|
@@ -2719,7 +2727,7 @@ var index_bun_exports = /* @__PURE__ */ __exportAll({
|
|
|
2719
2727
|
$repository: () => $repository,
|
|
2720
2728
|
$sequence: () => $sequence,
|
|
2721
2729
|
$transaction: () => $transaction,
|
|
2722
|
-
|
|
2730
|
+
AlephaOrm: () => AlephaOrm,
|
|
2723
2731
|
BunPostgresProvider: () => BunPostgresProvider,
|
|
2724
2732
|
BunSqliteProvider: () => BunSqliteProvider,
|
|
2725
2733
|
CloudflareD1Provider: () => CloudflareD1Provider,
|
|
@@ -2745,6 +2753,7 @@ var index_bun_exports = /* @__PURE__ */ __exportAll({
|
|
|
2745
2753
|
Repository: () => Repository,
|
|
2746
2754
|
RepositoryProvider: () => RepositoryProvider,
|
|
2747
2755
|
SequencePrimitive: () => SequencePrimitive,
|
|
2756
|
+
SqliteProvider: () => SqliteProvider,
|
|
2748
2757
|
buildQueryString: () => buildQueryString,
|
|
2749
2758
|
bunSqliteOptions: () => bunSqliteOptions,
|
|
2750
2759
|
db: () => db,
|
|
@@ -2761,8 +2770,9 @@ var index_bun_exports = /* @__PURE__ */ __exportAll({
|
|
|
2761
2770
|
sql: () => sql,
|
|
2762
2771
|
updateSchema: () => updateSchema
|
|
2763
2772
|
});
|
|
2764
|
-
const
|
|
2765
|
-
|
|
2773
|
+
const SqliteProvider = BunSqliteProvider;
|
|
2774
|
+
const AlephaOrm = $module({
|
|
2775
|
+
name: "alepha.orm",
|
|
2766
2776
|
primitives: [$sequence, $entity],
|
|
2767
2777
|
services: [
|
|
2768
2778
|
AlephaDateTime,
|
|
@@ -2810,5 +2820,5 @@ const AlephaPostgres = $module({
|
|
|
2810
2820
|
});
|
|
2811
2821
|
|
|
2812
2822
|
//#endregion
|
|
2813
|
-
export { $entity, $repository, $sequence, $transaction,
|
|
2823
|
+
export { $entity, $repository, $sequence, $transaction, AlephaOrm, BunPostgresProvider, BunSqliteProvider, CloudflareD1Provider, DatabaseProvider, DatabaseTypeProvider, DbConflictError, DbEntityNotFoundError, DbError, DbMigrationError, DbVersionMismatchError, DrizzleKitProvider, EntityPrimitive, 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, pageQuerySchema, pageSchema, parseQueryString, pg, pgAttr, schema, sql, updateSchema };
|
|
2814
2824
|
//# sourceMappingURL=index.bun.js.map
|