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/src/cli/commands/init.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { $inject, t } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
|
-
import { FileSystemProvider } from "alepha/
|
|
3
|
+
import { FileSystemProvider } from "alepha/system";
|
|
4
4
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
5
5
|
import { PackageManagerUtils } from "../services/PackageManagerUtils.ts";
|
|
6
6
|
import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
|
|
@@ -29,107 +29,150 @@ export class InitCommand {
|
|
|
29
29
|
agent: t.optional(
|
|
30
30
|
t.boolean({
|
|
31
31
|
aliases: ["a"],
|
|
32
|
-
description:
|
|
32
|
+
description:
|
|
33
|
+
"Add AI agent instructions (CLAUDE.md if claude CLI installed, else AGENTS.md)",
|
|
33
34
|
}),
|
|
34
35
|
),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// choose which
|
|
41
|
-
|
|
36
|
+
pm: t.optional(
|
|
37
|
+
t.enum(["yarn", "npm", "pnpm", "bun"], {
|
|
38
|
+
description: "Package manager to use",
|
|
39
|
+
}),
|
|
40
|
+
),
|
|
41
|
+
// choose which modules to scaffold
|
|
42
|
+
api: t.optional(
|
|
43
|
+
t.boolean({
|
|
44
|
+
description: "Include API module structure (src/api/)",
|
|
45
|
+
}),
|
|
46
|
+
),
|
|
47
|
+
react: t.optional(
|
|
42
48
|
t.boolean({
|
|
43
49
|
aliases: ["r"],
|
|
44
|
-
description: "Include
|
|
50
|
+
description: "Include React dependencies and web module (src/web/)",
|
|
45
51
|
}),
|
|
46
52
|
),
|
|
47
|
-
|
|
48
|
-
t.boolean({
|
|
53
|
+
ui: t.optional(
|
|
54
|
+
t.boolean({
|
|
55
|
+
description:
|
|
56
|
+
"Include @alepha/ui (components, auth portal, admin portal)",
|
|
57
|
+
}),
|
|
49
58
|
),
|
|
50
59
|
test: t.optional(
|
|
51
60
|
t.boolean({ description: "Include Vitest and create test directory" }),
|
|
52
61
|
),
|
|
62
|
+
force: t.optional(
|
|
63
|
+
t.boolean({
|
|
64
|
+
aliases: ["f"],
|
|
65
|
+
description: "Override existing files",
|
|
66
|
+
}),
|
|
67
|
+
),
|
|
53
68
|
}),
|
|
54
69
|
handler: async ({ run, flags, root, args }) => {
|
|
55
|
-
if (flags.admin) {
|
|
56
|
-
flags.web = true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
70
|
if (args) {
|
|
60
71
|
root = this.fs.join(root, args);
|
|
61
72
|
await this.fs.mkdir(root);
|
|
62
73
|
}
|
|
63
74
|
|
|
75
|
+
if (flags.ui) {
|
|
76
|
+
flags.react = true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Detect workspace context (are we inside packages/ or apps/ of a monorepo?)
|
|
80
|
+
const workspace = await this.pm.getWorkspaceContext(root);
|
|
81
|
+
|
|
82
|
+
// Detect agent type: claude CLI → CLAUDE.md, else → AGENTS.md
|
|
83
|
+
let agentType: "claude" | "agents" | false = false;
|
|
84
|
+
if (flags.agent) {
|
|
85
|
+
const hasClaudeCli = await this.utils.isInstalledAsync("claude");
|
|
86
|
+
agentType = hasClaudeCli ? "claude" : "agents";
|
|
87
|
+
}
|
|
88
|
+
|
|
64
89
|
const isExpo = await this.pm.hasExpo(root);
|
|
65
90
|
|
|
91
|
+
const force = !!flags.force;
|
|
92
|
+
|
|
66
93
|
await run({
|
|
67
94
|
name: "ensuring configuration files",
|
|
68
95
|
handler: async () => {
|
|
69
96
|
await this.scaffolder.ensureConfig(root, {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
force,
|
|
98
|
+
tsconfigJson: !workspace.config.tsconfigJson,
|
|
99
|
+
packageJson: { ...flags, isPackage: workspace.isPackage },
|
|
100
|
+
// Skip workspace-level configs if they exist at workspace root
|
|
101
|
+
biomeJson: !workspace.config.biomeJson,
|
|
102
|
+
editorconfig: !workspace.config.editorconfig,
|
|
103
|
+
agentMd: agentType
|
|
104
|
+
? { type: agentType, react: !!flags.react, ui: !!flags.ui }
|
|
77
105
|
: false,
|
|
78
106
|
});
|
|
79
107
|
|
|
80
|
-
// Create
|
|
81
|
-
|
|
82
|
-
|
|
108
|
+
// Create project structure based on flags
|
|
109
|
+
await this.scaffolder.ensureMainServerTs(root, {
|
|
110
|
+
api: !!flags.api,
|
|
111
|
+
react: !!flags.react && !isExpo,
|
|
112
|
+
force,
|
|
113
|
+
});
|
|
114
|
+
if (flags.api) {
|
|
115
|
+
await this.scaffolder.ensureApiProject(root, { force });
|
|
116
|
+
}
|
|
117
|
+
if (flags.react && !isExpo) {
|
|
118
|
+
await this.scaffolder.ensureWebProject(root, {
|
|
119
|
+
api: !!flags.api,
|
|
120
|
+
ui: !!flags.ui,
|
|
121
|
+
force,
|
|
122
|
+
});
|
|
83
123
|
}
|
|
84
124
|
},
|
|
85
125
|
});
|
|
86
126
|
|
|
87
|
-
//
|
|
127
|
+
// Use workspace PM if detected, otherwise detect from current root
|
|
128
|
+
const pmName = await this.pm.getPackageManager(
|
|
129
|
+
workspace.workspaceRoot ?? root,
|
|
130
|
+
flags.pm ?? workspace.packageManager ?? undefined,
|
|
131
|
+
);
|
|
88
132
|
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
133
|
+
// Only setup PM files if not in a workspace package
|
|
134
|
+
if (!workspace.isPackage) {
|
|
135
|
+
if (pmName === "yarn") {
|
|
136
|
+
await this.pm.ensureYarn(root);
|
|
137
|
+
await run("yarn set version stable", { root });
|
|
138
|
+
} else if (pmName === "bun") {
|
|
139
|
+
await this.pm.ensureBun(root);
|
|
140
|
+
} else if (pmName === "pnpm") {
|
|
141
|
+
await this.pm.ensurePnpm(root);
|
|
142
|
+
} else {
|
|
143
|
+
await this.pm.ensureNpm(root);
|
|
144
|
+
}
|
|
99
145
|
}
|
|
100
146
|
|
|
147
|
+
// Run install from workspace root if in a package, otherwise from current root
|
|
148
|
+
const installRoot = workspace.workspaceRoot ?? root;
|
|
101
149
|
await run(`${pmName} install`, {
|
|
102
150
|
alias: `installing dependencies with ${pmName}`,
|
|
103
|
-
root,
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
if (!isExpo) {
|
|
107
|
-
await this.pm.ensureDependency(root, "vite", {
|
|
108
|
-
run,
|
|
109
|
-
exec: (cmd, opts) => this.utils.exec(cmd, opts),
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
await this.pm.ensureDependency(root, "@biomejs/biome", {
|
|
114
|
-
run,
|
|
115
|
-
exec: (cmd, opts) => this.utils.exec(cmd, opts),
|
|
151
|
+
root: installRoot,
|
|
116
152
|
});
|
|
117
153
|
|
|
118
|
-
//
|
|
154
|
+
// Create test directory if --test flag is set (vitest is in package.json)
|
|
119
155
|
if (flags.test) {
|
|
120
156
|
await this.scaffolder.ensureTestDir(root);
|
|
121
|
-
await run(
|
|
122
|
-
`${pmName} ${pmName === "yarn" ? "add" : "install"} -D vitest`,
|
|
123
|
-
{
|
|
124
|
-
alias: "setup testing with Vitest",
|
|
125
|
-
},
|
|
126
|
-
);
|
|
127
157
|
}
|
|
128
158
|
|
|
129
159
|
await run(`${pmName} run lint`, {
|
|
130
160
|
alias: "running linter",
|
|
131
|
-
root,
|
|
161
|
+
root: installRoot,
|
|
132
162
|
});
|
|
163
|
+
|
|
164
|
+
// Initialize git repository if not in a workspace package
|
|
165
|
+
if (!workspace.isPackage) {
|
|
166
|
+
const gitInitialized = await this.scaffolder.ensureGitRepo(root, {
|
|
167
|
+
force,
|
|
168
|
+
});
|
|
169
|
+
if (gitInitialized) {
|
|
170
|
+
await run("git add .", {
|
|
171
|
+
alias: "staging generated files",
|
|
172
|
+
root,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
133
176
|
},
|
|
134
177
|
});
|
|
135
178
|
}
|
package/src/cli/commands/lint.ts
CHANGED
|
@@ -13,11 +13,17 @@ export class LintCommand {
|
|
|
13
13
|
name: "lint",
|
|
14
14
|
description: "Run linter across the codebase using Biome",
|
|
15
15
|
handler: async ({ root }) => {
|
|
16
|
-
await this.scaffolder.ensureConfig(root, {
|
|
16
|
+
await this.scaffolder.ensureConfig(root, {
|
|
17
|
+
biomeJson: true,
|
|
18
|
+
checkWorkspace: true,
|
|
19
|
+
});
|
|
20
|
+
|
|
17
21
|
await this.pm.ensureDependency(root, "@biomejs/biome", {
|
|
22
|
+
checkWorkspace: true,
|
|
18
23
|
exec: (cmd, opts) => this.utils.exec(cmd, opts),
|
|
19
24
|
});
|
|
20
|
-
|
|
25
|
+
|
|
26
|
+
await this.utils.exec("biome check --fix");
|
|
21
27
|
},
|
|
22
28
|
});
|
|
23
29
|
}
|
|
@@ -3,11 +3,13 @@ import { $command } from "alepha/command";
|
|
|
3
3
|
import { $logger } from "alepha/logger";
|
|
4
4
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
5
5
|
import { PackageManagerUtils } from "../services/PackageManagerUtils.ts";
|
|
6
|
+
import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
|
|
6
7
|
|
|
7
8
|
export class TypecheckCommand {
|
|
8
9
|
protected readonly utils = $inject(AlephaCliUtils);
|
|
9
10
|
protected readonly pm = $inject(PackageManagerUtils);
|
|
10
11
|
protected readonly log = $logger();
|
|
12
|
+
protected readonly scaffolder = $inject(ProjectScaffolder);
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Run TypeScript type checking across the codebase with no emit.
|
|
@@ -18,10 +20,19 @@ export class TypecheckCommand {
|
|
|
18
20
|
description: "Check TypeScript types across the codebase",
|
|
19
21
|
handler: async ({ root }) => {
|
|
20
22
|
this.log.info("Starting TypeScript type checking...");
|
|
23
|
+
|
|
24
|
+
await this.scaffolder.ensureConfig(root, {
|
|
25
|
+
tsconfigJson: true,
|
|
26
|
+
checkWorkspace: true,
|
|
27
|
+
});
|
|
28
|
+
|
|
21
29
|
await this.pm.ensureDependency(root, "typescript", {
|
|
30
|
+
checkWorkspace: true,
|
|
22
31
|
exec: (cmd, opts) => this.utils.exec(cmd, opts),
|
|
23
32
|
});
|
|
33
|
+
|
|
24
34
|
await this.utils.exec("tsc --noEmit");
|
|
35
|
+
|
|
25
36
|
this.log.info("TypeScript type checking completed successfully.");
|
|
26
37
|
},
|
|
27
38
|
});
|
package/src/cli/defineConfig.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { Alepha } from "alepha";
|
|
2
2
|
import type { CommandPrimitive } from "alepha/command";
|
|
3
|
+
import {
|
|
4
|
+
type AppEntryOptions,
|
|
5
|
+
appEntryOptions,
|
|
6
|
+
} from "./atoms/appEntryOptions.ts";
|
|
3
7
|
import { type BuildOptions, buildOptions } from "./atoms/buildOptions.ts";
|
|
4
8
|
|
|
5
9
|
export interface AlephaCliConfig {
|
|
10
|
+
entry?: AppEntryOptions;
|
|
6
11
|
/**
|
|
7
12
|
* Add custom commands to the Alepha CLI.
|
|
8
13
|
*
|
|
@@ -54,6 +59,10 @@ export const defineConfig = (
|
|
|
54
59
|
alepha.set(buildOptions, config.build);
|
|
55
60
|
}
|
|
56
61
|
|
|
62
|
+
if (config.entry) {
|
|
63
|
+
alepha.set(appEntryOptions, config.entry);
|
|
64
|
+
}
|
|
65
|
+
|
|
57
66
|
return {
|
|
58
67
|
...config.commands,
|
|
59
68
|
};
|
package/src/cli/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export * from "./apps/AlephaCli.ts";
|
|
2
2
|
export * from "./apps/AlephaPackageBuilderCli.ts";
|
|
3
|
+
export { default as AlephaPackageBuilderCli } from "./apps/AlephaPackageBuilderCli.ts";
|
|
3
4
|
export * from "./atoms/changelogOptions.ts";
|
|
4
5
|
export * from "./commands/build.ts";
|
|
5
6
|
export * from "./commands/clean.ts";
|
|
6
7
|
export * from "./commands/db.ts";
|
|
7
8
|
export * from "./commands/deploy.ts";
|
|
8
9
|
export * from "./commands/dev.ts";
|
|
9
|
-
export * from "./commands/format.ts";
|
|
10
10
|
export * from "./commands/gen/changelog.ts";
|
|
11
11
|
export * from "./commands/gen/openapi.ts";
|
|
12
12
|
export * from "./commands/init.ts";
|
|
@@ -16,6 +16,7 @@ export * from "./commands/test.ts";
|
|
|
16
16
|
export * from "./commands/typecheck.ts";
|
|
17
17
|
export * from "./commands/verify.ts";
|
|
18
18
|
export * from "./defineConfig.ts";
|
|
19
|
+
export * from "./providers/AppEntryProvider.ts";
|
|
19
20
|
export * from "./services/AlephaCliUtils.ts";
|
|
20
21
|
export * from "./services/GitMessageParser.ts";
|
|
21
22
|
export * from "./version.ts";
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { $inject, $use, AlephaError } from "alepha";
|
|
2
|
+
import { FileSystemProvider } from "alepha/system";
|
|
3
|
+
import { appEntryOptions } from "../atoms/appEntryOptions.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Service for locating entry files in Alepha projects.
|
|
7
|
+
*
|
|
8
|
+
* Originally in alepha/vite, moved to CLI to avoid cli -> vite dependency.
|
|
9
|
+
*/
|
|
10
|
+
export class AppEntryProvider {
|
|
11
|
+
protected readonly fs = $inject(FileSystemProvider);
|
|
12
|
+
protected readonly options = $use(appEntryOptions);
|
|
13
|
+
|
|
14
|
+
protected readonly serverEntries = [
|
|
15
|
+
"main.server.ts",
|
|
16
|
+
"main.server.tsx",
|
|
17
|
+
"main.ts",
|
|
18
|
+
"main.tsx",
|
|
19
|
+
] as const;
|
|
20
|
+
|
|
21
|
+
protected readonly browserEntries = [
|
|
22
|
+
"main.browser.ts",
|
|
23
|
+
"main.browser.tsx",
|
|
24
|
+
"main.ts",
|
|
25
|
+
"main.tsx",
|
|
26
|
+
] as const;
|
|
27
|
+
|
|
28
|
+
protected readonly styleEntries = [
|
|
29
|
+
"main.css",
|
|
30
|
+
"styles.css",
|
|
31
|
+
"style.css",
|
|
32
|
+
] as const;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Get application entry points.
|
|
36
|
+
*
|
|
37
|
+
* Server entry is required, an error is thrown if not found.
|
|
38
|
+
* Browser entry is optional.
|
|
39
|
+
*
|
|
40
|
+
* It will first check for custom entries in options, see appEntryOptions.
|
|
41
|
+
*/
|
|
42
|
+
public async getAppEntry(root: string): Promise<AppEntry> {
|
|
43
|
+
const appEntry: AppEntry = {
|
|
44
|
+
root,
|
|
45
|
+
server: "",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
if (this.options.server) {
|
|
49
|
+
const serverExists = await this.fs.exists(
|
|
50
|
+
this.fs.join(root, this.options.server),
|
|
51
|
+
);
|
|
52
|
+
if (!serverExists) {
|
|
53
|
+
throw new AlephaError(
|
|
54
|
+
`Custom server entry "${this.options.server}" not found.`,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
appEntry.server = this.options.server;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (this.options.browser) {
|
|
61
|
+
const browserExists = await this.fs.exists(
|
|
62
|
+
this.fs.join(root, this.options.browser),
|
|
63
|
+
);
|
|
64
|
+
if (!browserExists) {
|
|
65
|
+
throw new AlephaError(
|
|
66
|
+
`Custom browser entry "${this.options.browser}" not found.`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
appEntry.browser = this.options.browser;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (this.options.style) {
|
|
73
|
+
const styleExists = await this.fs.exists(
|
|
74
|
+
this.fs.join(root, this.options.style),
|
|
75
|
+
);
|
|
76
|
+
if (!styleExists) {
|
|
77
|
+
throw new AlephaError(
|
|
78
|
+
`Custom style entry "${this.options.style}" not found.`,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
appEntry.style = this.options.style;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const srcFiles = await this.fs.ls(this.fs.join(root, "src"));
|
|
85
|
+
|
|
86
|
+
if (!appEntry.server) {
|
|
87
|
+
// find in conventional locations
|
|
88
|
+
for (const entry of this.serverEntries) {
|
|
89
|
+
if (srcFiles.includes(entry)) {
|
|
90
|
+
appEntry.server = this.fs.join("src", entry);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!appEntry.server) {
|
|
97
|
+
throw new AlephaError(
|
|
98
|
+
"No server entry found. Please, add a main.server.ts file in the src/ directory or configure a custom entry in alepha.config.ts.",
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!appEntry.browser) {
|
|
103
|
+
// find in conventional locations
|
|
104
|
+
for (const entry of this.browserEntries) {
|
|
105
|
+
if (srcFiles.includes(entry)) {
|
|
106
|
+
appEntry.browser = this.fs.join("src", entry);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!appEntry.style) {
|
|
113
|
+
// find in conventional locations
|
|
114
|
+
for (const entry of this.styleEntries) {
|
|
115
|
+
if (srcFiles.includes(entry)) {
|
|
116
|
+
appEntry.style = this.fs.join("src", entry);
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return appEntry;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface AppEntry {
|
|
127
|
+
root: string;
|
|
128
|
+
server: string;
|
|
129
|
+
browser?: string;
|
|
130
|
+
style?: string;
|
|
131
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { $inject, type Alepha, AlephaError } from "alepha";
|
|
2
|
+
import { ViteUtils } from "../services/ViteUtils.ts";
|
|
3
|
+
import type { AppEntry } from "./AppEntryProvider.ts";
|
|
4
|
+
|
|
5
|
+
export class ViteBuildProvider {
|
|
6
|
+
protected alepha?: Alepha;
|
|
7
|
+
protected appEntry?: AppEntry;
|
|
8
|
+
protected readonly viteUtils = $inject(ViteUtils);
|
|
9
|
+
|
|
10
|
+
public async init(opts: { entry: AppEntry }) {
|
|
11
|
+
const alepha = await this.viteUtils.runAlepha({
|
|
12
|
+
entry: opts.entry,
|
|
13
|
+
mode: "production",
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
this.alepha = alepha;
|
|
17
|
+
this.appEntry = opts.entry;
|
|
18
|
+
|
|
19
|
+
return alepha;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public hasClient(): boolean {
|
|
23
|
+
if (!this.alepha) {
|
|
24
|
+
throw new AlephaError("ViteBuildProvider not initialized");
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
this.alepha.inject("ReactServerProvider");
|
|
28
|
+
return true;
|
|
29
|
+
} catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public generateIndexHtml(): string {
|
|
35
|
+
if (!this.appEntry) {
|
|
36
|
+
throw new AlephaError("ViteBuildProvider not initialized");
|
|
37
|
+
}
|
|
38
|
+
return this.viteUtils.generateIndexHtml(this.appEntry);
|
|
39
|
+
}
|
|
40
|
+
}
|