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
|
@@ -3,7 +3,7 @@ import * as os from "node:os";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { $inject, AlephaError } from "alepha";
|
|
5
5
|
import { $command } from "alepha/command";
|
|
6
|
-
import { FileSystemProvider } from "alepha/
|
|
6
|
+
import { FileSystemProvider } from "alepha/system";
|
|
7
7
|
import type { InlineConfig } from "tsdown";
|
|
8
8
|
|
|
9
9
|
interface Module {
|
|
@@ -110,6 +110,7 @@ export class AlephaPackageBuilderCli {
|
|
|
110
110
|
sourcemap: true,
|
|
111
111
|
fixedExtension: false,
|
|
112
112
|
platform: "node", // TODO: node must be enabled only if index.node.ts exists
|
|
113
|
+
inlineOnly: false,
|
|
113
114
|
external,
|
|
114
115
|
dts: {
|
|
115
116
|
sourcemap: true,
|
|
@@ -123,6 +124,7 @@ export class AlephaPackageBuilderCli {
|
|
|
123
124
|
platform: "neutral",
|
|
124
125
|
sourcemap: true,
|
|
125
126
|
dts: false,
|
|
127
|
+
inlineOnly: false,
|
|
126
128
|
external,
|
|
127
129
|
});
|
|
128
130
|
}
|
|
@@ -134,6 +136,7 @@ export class AlephaPackageBuilderCli {
|
|
|
134
136
|
platform: "browser",
|
|
135
137
|
sourcemap: true,
|
|
136
138
|
dts: false,
|
|
139
|
+
inlineOnly: false,
|
|
137
140
|
external,
|
|
138
141
|
});
|
|
139
142
|
}
|
|
@@ -146,6 +149,7 @@ export class AlephaPackageBuilderCli {
|
|
|
146
149
|
sourcemap: true,
|
|
147
150
|
fixedExtension: false,
|
|
148
151
|
dts: false,
|
|
152
|
+
inlineOnly: false,
|
|
149
153
|
external,
|
|
150
154
|
});
|
|
151
155
|
}
|
|
@@ -158,8 +162,10 @@ export class AlephaPackageBuilderCli {
|
|
|
158
162
|
config,
|
|
159
163
|
`export default ${JSON.stringify(entries, null, 2)};`,
|
|
160
164
|
);
|
|
165
|
+
|
|
166
|
+
// /!\ Warning /!\
|
|
167
|
+
// avoid to call tsdown programmatically, when we spawn 8 processes at once it 'JavaScript heap out of memory' :---)
|
|
161
168
|
await run(`npx tsdown -c=${config}`);
|
|
162
|
-
//await this.fs.rm(config);
|
|
163
169
|
};
|
|
164
170
|
|
|
165
171
|
const concurrency = Math.ceil(os.cpus().length / 2);
|
|
@@ -183,6 +189,8 @@ export class AlephaPackageBuilderCli {
|
|
|
183
189
|
});
|
|
184
190
|
}
|
|
185
191
|
|
|
192
|
+
export default AlephaPackageBuilderCli;
|
|
193
|
+
|
|
186
194
|
async function getAllFiles(dir: string): Promise<string[]> {
|
|
187
195
|
const files: string[] = [];
|
|
188
196
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { $atom, type Static, t } from "alepha";
|
|
2
|
+
|
|
3
|
+
export const appEntryOptions = $atom({
|
|
4
|
+
name: "alepha.cli.appEntry.options",
|
|
5
|
+
schema: t.object({
|
|
6
|
+
server: t.optional(t.text()),
|
|
7
|
+
browser: t.optional(t.text()),
|
|
8
|
+
style: t.optional(t.text()),
|
|
9
|
+
}),
|
|
10
|
+
default: {},
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export type AppEntryOptions = Static<typeof appEntryOptions.schema>;
|
|
@@ -8,7 +8,7 @@ import { $atom } from "../../core/primitives/$atom.ts";
|
|
|
8
8
|
* Options can be overridden via vite.config.ts or CLI flags.
|
|
9
9
|
*/
|
|
10
10
|
export const buildOptions = $atom({
|
|
11
|
-
name: "alepha.build.options",
|
|
11
|
+
name: "alepha.cli.build.options",
|
|
12
12
|
description: "Build configuration options",
|
|
13
13
|
schema: t.object({
|
|
14
14
|
/**
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { $inject, $use, t } from "alepha";
|
|
1
|
+
import { $inject, $use, type Alepha, AlephaError, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
4
|
+
import { FileSystemProvider } from "alepha/system";
|
|
5
5
|
import {
|
|
6
|
-
boot,
|
|
7
6
|
buildClient,
|
|
8
7
|
buildServer,
|
|
9
8
|
copyAssets,
|
|
@@ -14,6 +13,8 @@ import {
|
|
|
14
13
|
prerenderPages,
|
|
15
14
|
} from "alepha/vite";
|
|
16
15
|
import { buildOptions } from "../atoms/buildOptions.ts";
|
|
16
|
+
import { AppEntryProvider } from "../providers/AppEntryProvider.ts";
|
|
17
|
+
import { ViteBuildProvider } from "../providers/ViteBuildProvider.ts";
|
|
17
18
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
18
19
|
import { PackageManagerUtils } from "../services/PackageManagerUtils.ts";
|
|
19
20
|
import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
|
|
@@ -24,15 +25,14 @@ export class BuildCommand {
|
|
|
24
25
|
protected readonly utils = $inject(AlephaCliUtils);
|
|
25
26
|
protected readonly pm = $inject(PackageManagerUtils);
|
|
26
27
|
protected readonly scaffolder = $inject(ProjectScaffolder);
|
|
28
|
+
protected readonly boot = $inject(AppEntryProvider);
|
|
29
|
+
protected readonly viteBuildProvider = $inject(ViteBuildProvider);
|
|
27
30
|
protected readonly options = $use(buildOptions);
|
|
28
31
|
|
|
29
32
|
public readonly build = $command({
|
|
30
33
|
name: "build",
|
|
31
34
|
mode: "production",
|
|
32
35
|
description: "Build the project for production",
|
|
33
|
-
args: t.optional(
|
|
34
|
-
t.text({ title: "path", description: "Filepath to build" }),
|
|
35
|
-
),
|
|
36
36
|
flags: t.object({
|
|
37
37
|
stats: t.optional(
|
|
38
38
|
t.boolean({
|
|
@@ -65,9 +65,7 @@ export class BuildCommand {
|
|
|
65
65
|
}),
|
|
66
66
|
),
|
|
67
67
|
}),
|
|
68
|
-
handler: async ({ flags,
|
|
69
|
-
// Tell viteAlephaBuild plugin to skip - CLI handles all tasks
|
|
70
|
-
process.env.ALEPHA_BUILD_MODE = "cli";
|
|
68
|
+
handler: async ({ flags, run, root }) => {
|
|
71
69
|
process.env.NODE_ENV = "production";
|
|
72
70
|
|
|
73
71
|
if (await this.pm.hasExpo(root)) {
|
|
@@ -79,43 +77,67 @@ export class BuildCommand {
|
|
|
79
77
|
tsconfigJson: true,
|
|
80
78
|
});
|
|
81
79
|
|
|
82
|
-
const entry = await boot.
|
|
80
|
+
const entry = await this.boot.getAppEntry(root);
|
|
83
81
|
this.log.trace("Entry file found", { entry });
|
|
84
82
|
|
|
85
83
|
const distDir = "dist";
|
|
86
|
-
const
|
|
84
|
+
const publicDir = "public";
|
|
87
85
|
|
|
88
|
-
await this.pm.ensureDependency(root, "vite", {
|
|
89
|
-
run,
|
|
90
|
-
exec: (cmd, opts) => this.utils.exec(cmd, opts),
|
|
91
|
-
});
|
|
92
86
|
await run.rm("dist", { alias: "clean dist" });
|
|
93
87
|
|
|
94
88
|
const options = this.options;
|
|
95
89
|
await this.utils.loadEnv(root, [".env", ".env.production"]);
|
|
96
90
|
|
|
97
91
|
const stats = flags.stats ?? options.stats ?? false;
|
|
98
|
-
|
|
92
|
+
let template = "";
|
|
93
|
+
let hasClient = false;
|
|
94
|
+
let alepha: Alepha | undefined;
|
|
95
|
+
|
|
96
|
+
await run({
|
|
97
|
+
name: "analyze app",
|
|
98
|
+
handler: async () => {
|
|
99
|
+
alepha = await this.viteBuildProvider.init({ entry });
|
|
100
|
+
hasClient = this.viteBuildProvider.hasClient();
|
|
101
|
+
if (hasClient) {
|
|
102
|
+
template = this.viteBuildProvider.generateIndexHtml();
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (!alepha) {
|
|
108
|
+
throw new AlephaError("Alepha instance not found");
|
|
109
|
+
}
|
|
99
110
|
|
|
100
111
|
// Build client (precompress always enabled)
|
|
101
112
|
if (hasClient) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
// TODO: find a way to avoid writing index.html to disk
|
|
114
|
+
const indexHtmlPath = this.fs.join(root, "index.html");
|
|
115
|
+
await this.fs.writeFile(indexHtmlPath, template);
|
|
116
|
+
try {
|
|
117
|
+
await run({
|
|
118
|
+
name: "vite build client",
|
|
119
|
+
handler: () =>
|
|
120
|
+
buildClient({
|
|
121
|
+
silent: true,
|
|
122
|
+
dist: `${distDir}/${publicDir}`,
|
|
123
|
+
stats,
|
|
124
|
+
precompress: true,
|
|
125
|
+
}),
|
|
126
|
+
});
|
|
127
|
+
} finally {
|
|
128
|
+
await this.fs.rm(indexHtmlPath);
|
|
129
|
+
}
|
|
112
130
|
}
|
|
113
131
|
|
|
114
132
|
// Build server
|
|
115
133
|
await run({
|
|
116
134
|
name: "vite build server",
|
|
117
135
|
handler: async () => {
|
|
118
|
-
|
|
136
|
+
if (!alepha) {
|
|
137
|
+
throw new AlephaError("Alepha instance not found");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const clientIndexPath = `${distDir}/${publicDir}/index.html`;
|
|
119
141
|
const clientBuilt = await this.fs.exists(clientIndexPath);
|
|
120
142
|
|
|
121
143
|
const conditions: string[] = [];
|
|
@@ -131,19 +153,18 @@ export class BuildCommand {
|
|
|
131
153
|
// workerd:
|
|
132
154
|
// - react-dom
|
|
133
155
|
// - postgres
|
|
134
|
-
|
|
135
|
-
// TODO: investigate if we have more conditions like 'edge' to add here
|
|
136
156
|
if (options.cloudflare) {
|
|
137
157
|
conditions.push("workerd");
|
|
138
158
|
}
|
|
139
159
|
|
|
140
160
|
await buildServer({
|
|
141
161
|
silent: true,
|
|
142
|
-
entry,
|
|
162
|
+
entry: entry.server,
|
|
143
163
|
distDir,
|
|
144
|
-
clientDir: clientBuilt ?
|
|
164
|
+
clientDir: clientBuilt ? publicDir : undefined,
|
|
145
165
|
stats,
|
|
146
166
|
conditions,
|
|
167
|
+
alepha,
|
|
147
168
|
});
|
|
148
169
|
|
|
149
170
|
// Server will handle index.html if both client & server are built
|
|
@@ -155,6 +176,7 @@ export class BuildCommand {
|
|
|
155
176
|
|
|
156
177
|
// Copy assets
|
|
157
178
|
await copyAssets({
|
|
179
|
+
alepha,
|
|
158
180
|
root,
|
|
159
181
|
entry: `${distDir}/index.js`,
|
|
160
182
|
distDir,
|
|
@@ -165,30 +187,20 @@ export class BuildCommand {
|
|
|
165
187
|
// Generate sitemap
|
|
166
188
|
const sitemapHostname = flags.sitemap ?? options.sitemap?.hostname;
|
|
167
189
|
if (sitemapHostname) {
|
|
168
|
-
await
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
await generateSitemap({
|
|
174
|
-
entry: `${distDir}/index.js`,
|
|
175
|
-
baseUrl: sitemapHostname,
|
|
176
|
-
}),
|
|
177
|
-
);
|
|
178
|
-
},
|
|
190
|
+
await generateSitemap({
|
|
191
|
+
alepha,
|
|
192
|
+
baseUrl: sitemapHostname,
|
|
193
|
+
output: `${distDir}/${publicDir}/sitemap.xml`,
|
|
194
|
+
run,
|
|
179
195
|
});
|
|
180
196
|
}
|
|
181
197
|
|
|
182
198
|
// Pre-render static pages (always enabled)
|
|
183
|
-
await
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
entry: `${distDir}/index.js`,
|
|
189
|
-
compress: true,
|
|
190
|
-
});
|
|
191
|
-
},
|
|
199
|
+
await prerenderPages({
|
|
200
|
+
alepha,
|
|
201
|
+
dist: `${distDir}/${publicDir}`,
|
|
202
|
+
compress: true,
|
|
203
|
+
run,
|
|
192
204
|
});
|
|
193
205
|
}
|
|
194
206
|
|
|
@@ -199,7 +211,7 @@ export class BuildCommand {
|
|
|
199
211
|
handler: () =>
|
|
200
212
|
generateVercel({
|
|
201
213
|
distDir,
|
|
202
|
-
clientDir,
|
|
214
|
+
clientDir: publicDir,
|
|
203
215
|
config: options.vercel,
|
|
204
216
|
}),
|
|
205
217
|
});
|
package/src/cli/commands/db.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { $inject, AlephaError, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
5
4
|
import type {
|
|
6
5
|
DatabaseProvider,
|
|
7
6
|
DrizzleKitProvider,
|
|
8
7
|
RepositoryProvider,
|
|
9
8
|
} from "alepha/orm";
|
|
9
|
+
import { FileSystemProvider } from "alepha/system";
|
|
10
|
+
import { AppEntryProvider } from "../providers/AppEntryProvider.ts";
|
|
10
11
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
11
12
|
|
|
12
13
|
const drizzleCommandFlags = t.object({
|
|
@@ -28,6 +29,7 @@ export class DbCommand {
|
|
|
28
29
|
protected readonly log = $logger();
|
|
29
30
|
protected readonly fs = $inject(FileSystemProvider);
|
|
30
31
|
protected readonly utils = $inject(AlephaCliUtils);
|
|
32
|
+
protected readonly entryProvider = $inject(AppEntryProvider);
|
|
31
33
|
|
|
32
34
|
/**
|
|
33
35
|
* Check if database migrations are up to date.
|
|
@@ -46,10 +48,11 @@ export class DbCommand {
|
|
|
46
48
|
const rootDir = root;
|
|
47
49
|
this.log.debug(`Using project root: ${rootDir}`);
|
|
48
50
|
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const entry = await this.entryProvider.getAppEntry(root);
|
|
52
|
+
const alepha = await this.utils.loadAlephaFromServerEntryFile({
|
|
53
|
+
mode: "development",
|
|
54
|
+
entry,
|
|
55
|
+
});
|
|
53
56
|
|
|
54
57
|
const repositoryProvider =
|
|
55
58
|
alepha.inject<RepositoryProvider>("RepositoryProvider");
|
|
@@ -276,10 +279,11 @@ export class DbCommand {
|
|
|
276
279
|
|
|
277
280
|
this.log.debug(`Using project root: ${rootDir}`);
|
|
278
281
|
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
282
|
+
const entry = await this.entryProvider.getAppEntry(rootDir);
|
|
283
|
+
const alepha = await this.utils.loadAlephaFromServerEntryFile({
|
|
284
|
+
mode: "development",
|
|
285
|
+
entry,
|
|
286
|
+
});
|
|
283
287
|
|
|
284
288
|
const drizzleKitProvider =
|
|
285
289
|
alepha.inject<DrizzleKitProvider>("DrizzleKitProvider");
|
|
@@ -319,7 +323,7 @@ export class DbCommand {
|
|
|
319
323
|
providerUrl: provider.url,
|
|
320
324
|
providerDriver: provider.driver,
|
|
321
325
|
dialect,
|
|
322
|
-
entry,
|
|
326
|
+
entry: this.fs.join(rootDir, entry.server),
|
|
323
327
|
rootDir,
|
|
324
328
|
});
|
|
325
329
|
|
|
@@ -328,7 +332,9 @@ export class DbCommand {
|
|
|
328
332
|
`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`,
|
|
329
333
|
{
|
|
330
334
|
env: {
|
|
331
|
-
NODE_OPTIONS: "--import tsx"
|
|
335
|
+
NODE_OPTIONS: [process.env.NODE_OPTIONS, "--import tsx"]
|
|
336
|
+
.filter(Boolean)
|
|
337
|
+
.join(" "),
|
|
332
338
|
},
|
|
333
339
|
},
|
|
334
340
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $inject, AlephaError, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
4
|
+
import { FileSystemProvider } from "alepha/system";
|
|
5
5
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
6
6
|
import { PackageManagerUtils } from "../services/PackageManagerUtils.ts";
|
|
7
7
|
|
package/src/cli/commands/dev.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { $inject, Alepha
|
|
1
|
+
import { $inject, Alepha } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
5
|
-
import {
|
|
4
|
+
import { FileSystemProvider } from "alepha/system";
|
|
5
|
+
import { AppEntryProvider } from "../providers/AppEntryProvider.ts";
|
|
6
|
+
import { ViteDevServerProvider } from "../providers/ViteDevServerProvider.ts";
|
|
6
7
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
7
8
|
import { PackageManagerUtils } from "../services/PackageManagerUtils.ts";
|
|
8
9
|
import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
|
|
@@ -14,64 +15,27 @@ export class DevCommand {
|
|
|
14
15
|
protected readonly pm = $inject(PackageManagerUtils);
|
|
15
16
|
protected readonly scaffolder = $inject(ProjectScaffolder);
|
|
16
17
|
protected readonly alepha = $inject(Alepha);
|
|
18
|
+
protected readonly viteDevServer = $inject(ViteDevServerProvider);
|
|
19
|
+
protected readonly boot = $inject(AppEntryProvider);
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
* Will run the project in watch mode.
|
|
20
|
-
*
|
|
21
|
-
* - If an index.html file is found in the project root, it will run Vite in dev mode.
|
|
22
|
-
* - Otherwise, it will look for a server entry file and run it with tsx in watch mode.
|
|
23
23
|
*/
|
|
24
24
|
public readonly dev = $command({
|
|
25
25
|
name: "dev",
|
|
26
26
|
description: "Run the project in development mode",
|
|
27
|
-
|
|
28
|
-
handler: async ({ args, root }) => {
|
|
29
|
-
const expo = await this.pm.hasExpo(root);
|
|
30
|
-
|
|
27
|
+
handler: async ({ root }) => {
|
|
31
28
|
await this.scaffolder.ensureConfig(root, {
|
|
32
29
|
tsconfigJson: true,
|
|
33
30
|
});
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const entry = await boot.getServerEntry(root, args);
|
|
41
|
-
this.log.trace("Entry file found", { entry });
|
|
42
|
-
|
|
43
|
-
const isFullstack = await this.isFullstackProject(root);
|
|
44
|
-
|
|
45
|
-
if (!isFullstack) {
|
|
46
|
-
const exe = (await this.isBunProject(root)) ? "bun" : "tsx";
|
|
47
|
-
let cmd = `${exe} --watch`;
|
|
48
|
-
if (await this.utils.exists(root, ".env")) {
|
|
49
|
-
cmd += " --env-file=./.env";
|
|
50
|
-
}
|
|
51
|
-
cmd += ` ${entry}`;
|
|
52
|
-
await this.utils.exec(cmd, {
|
|
53
|
-
global: exe === "bun",
|
|
54
|
-
});
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
32
|
+
const entry = await this.boot.getAppEntry(root);
|
|
33
|
+
this.log.debug("Entry file found", { entry });
|
|
57
34
|
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
await devServer();
|
|
35
|
+
// -> here, we assume we use Vite as runner (api or fullstack)
|
|
36
|
+
// but it's planned to support Bun runner in the future as well
|
|
37
|
+
await this.viteDevServer.init({ root, entry });
|
|
38
|
+
await this.viteDevServer.start();
|
|
64
39
|
},
|
|
65
40
|
});
|
|
66
|
-
|
|
67
|
-
protected async isBunProject(root: string): Promise<boolean> {
|
|
68
|
-
if (this.alepha.isBun()) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return this.fs.exists(this.fs.join(root, "bun.lock"));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
protected async isFullstackProject(root: string): Promise<boolean> {
|
|
75
|
-
return this.fs.exists(this.fs.join(root, "index.html"));
|
|
76
|
-
}
|
|
77
41
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $inject, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
4
|
+
import { FileSystemProvider } from "alepha/system";
|
|
5
5
|
import { AlephaCliUtils } from "../../services/AlephaCliUtils.ts";
|
|
6
6
|
|
|
7
7
|
export class GenEnvCommand {
|
|
@@ -21,7 +21,10 @@ export class GenEnvCommand {
|
|
|
21
21
|
),
|
|
22
22
|
}),
|
|
23
23
|
handler: async ({ root, flags }) => {
|
|
24
|
-
const
|
|
24
|
+
const alepha = await this.utils.loadAlephaFromServerEntryFile({
|
|
25
|
+
root,
|
|
26
|
+
mode: "development",
|
|
27
|
+
});
|
|
25
28
|
|
|
26
29
|
try {
|
|
27
30
|
const { env } = alepha.dump();
|
|
@@ -37,7 +40,7 @@ export class GenEnvCommand {
|
|
|
37
40
|
if (value.enum) {
|
|
38
41
|
dotEnvFile += `# Possible values: ${value.enum.join(", ")}\n`;
|
|
39
42
|
}
|
|
40
|
-
dotEnvFile +=
|
|
43
|
+
dotEnvFile += `#${key}=${value.default || ""}\n\n`;
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
if (flags.out) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { $inject, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/file";
|
|
4
3
|
import { $logger } from "alepha/logger";
|
|
5
4
|
import { ServerSwaggerProvider } from "alepha/server/swagger";
|
|
5
|
+
import { FileSystemProvider } from "alepha/system";
|
|
6
6
|
import { AlephaCliUtils } from "../../services/AlephaCliUtils.ts";
|
|
7
7
|
|
|
8
8
|
export class OpenApiCommand {
|
|
@@ -22,7 +22,10 @@ export class OpenApiCommand {
|
|
|
22
22
|
),
|
|
23
23
|
}),
|
|
24
24
|
handler: async ({ root, flags }) => {
|
|
25
|
-
const
|
|
25
|
+
const alepha = await this.utils.loadAlephaFromServerEntryFile({
|
|
26
|
+
root,
|
|
27
|
+
mode: "development",
|
|
28
|
+
});
|
|
26
29
|
|
|
27
30
|
try {
|
|
28
31
|
const openapiProvider = alepha.inject(
|