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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFile, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { AlephaError } from "alepha";
|
|
3
|
+
import { type Alepha, AlephaError } from "alepha";
|
|
4
4
|
import type * as vite from "vite";
|
|
5
5
|
import type { UserConfig } from "vite";
|
|
6
6
|
import { analyzer as viteAnalyzer } from "vite-bundle-analyzer";
|
|
@@ -27,11 +27,6 @@ export interface BuildServerOptions {
|
|
|
27
27
|
*/
|
|
28
28
|
clientDir?: string;
|
|
29
29
|
|
|
30
|
-
/**
|
|
31
|
-
* Override Vite config options.
|
|
32
|
-
*/
|
|
33
|
-
config?: UserConfig;
|
|
34
|
-
|
|
35
30
|
/**
|
|
36
31
|
* If true, generate build stats report.
|
|
37
32
|
*/
|
|
@@ -48,6 +43,11 @@ export interface BuildServerOptions {
|
|
|
48
43
|
* Add more entry point conditions for SSR module resolution (e.g., "bun").
|
|
49
44
|
*/
|
|
50
45
|
conditions?: string[];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Alepha instance to set SSR manifest for pre-rendering.
|
|
49
|
+
*/
|
|
50
|
+
alepha: Alepha;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export interface BuildServerResult {
|
|
@@ -55,6 +55,16 @@ export interface BuildServerResult {
|
|
|
55
55
|
* The filename of the built server entry (e.g., "abc123.js").
|
|
56
56
|
*/
|
|
57
57
|
entryFile: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* SSR manifest data for module preloading.
|
|
61
|
+
* Can be used to set in alepha store for pre-rendering.
|
|
62
|
+
*/
|
|
63
|
+
manifest?: {
|
|
64
|
+
base?: string;
|
|
65
|
+
client?: Record<string, any>;
|
|
66
|
+
preload?: Record<string, string>;
|
|
67
|
+
};
|
|
58
68
|
}
|
|
59
69
|
|
|
60
70
|
/**
|
|
@@ -67,7 +77,7 @@ export interface BuildServerResult {
|
|
|
67
77
|
export async function buildServer(
|
|
68
78
|
opts: BuildServerOptions,
|
|
69
79
|
): Promise<BuildServerResult> {
|
|
70
|
-
const { build: viteBuild,
|
|
80
|
+
const { build: viteBuild, resolveConfig } = await importVite();
|
|
71
81
|
const plugins: any[] = [];
|
|
72
82
|
|
|
73
83
|
const viteReact = await importViteReact();
|
|
@@ -93,6 +103,7 @@ export async function buildServer(
|
|
|
93
103
|
conditions.unshift(...opts.conditions);
|
|
94
104
|
}
|
|
95
105
|
|
|
106
|
+
// note: we still can override this config via config file (vite.config.ts)
|
|
96
107
|
const viteBuildServerConfig: UserConfig = {
|
|
97
108
|
mode: "production",
|
|
98
109
|
logLevel: opts.silent ? "silent" : undefined,
|
|
@@ -121,24 +132,32 @@ export async function buildServer(
|
|
|
121
132
|
},
|
|
122
133
|
},
|
|
123
134
|
esbuild: { legalComments: "none", keepNames: true },
|
|
124
|
-
customLogger: logger,
|
|
135
|
+
customLogger: logger, // mock logger to avoid noisy output
|
|
125
136
|
plugins,
|
|
126
137
|
};
|
|
127
138
|
|
|
139
|
+
// create inline config by merging alepha built-in + extended config
|
|
140
|
+
|
|
128
141
|
let result: vite.Rollup.RollupOutput | vite.Rollup.RollupOutput[];
|
|
129
142
|
try {
|
|
130
|
-
result = (await viteBuild(
|
|
131
|
-
|
|
132
|
-
|
|
143
|
+
result = (await viteBuild(viteBuildServerConfig)) as
|
|
144
|
+
| vite.Rollup.RollupOutput
|
|
145
|
+
| vite.Rollup.RollupOutput[];
|
|
133
146
|
} catch (error) {
|
|
134
|
-
//
|
|
147
|
+
// flush buffered logs on failure so user can see what happened
|
|
135
148
|
logger?.flush();
|
|
136
149
|
throw error;
|
|
137
150
|
}
|
|
138
151
|
|
|
139
|
-
//
|
|
140
|
-
const resolvedConfig = (
|
|
141
|
-
|
|
152
|
+
// resolve final config to read externals
|
|
153
|
+
const resolvedConfig = await resolveConfig(viteBuildServerConfig, "build");
|
|
154
|
+
|
|
155
|
+
// extract resolved config to get externals
|
|
156
|
+
const externals: string[] = [];
|
|
157
|
+
|
|
158
|
+
if (Array.isArray(resolvedConfig?.ssr?.external)) {
|
|
159
|
+
externals.push(...resolvedConfig.ssr.external);
|
|
160
|
+
}
|
|
142
161
|
|
|
143
162
|
// Generate package.json with externals
|
|
144
163
|
await generateExternals({
|
|
@@ -161,21 +180,44 @@ export async function buildServer(
|
|
|
161
180
|
// Embed SSR manifests if client was built
|
|
162
181
|
// This bundles all manifest data into index.js for serverless deployments
|
|
163
182
|
let manifest = "";
|
|
183
|
+
let manifestData:
|
|
184
|
+
| {
|
|
185
|
+
base?: string;
|
|
186
|
+
client?: Record<string, any>;
|
|
187
|
+
preload?: Record<string, string>;
|
|
188
|
+
}
|
|
189
|
+
| undefined;
|
|
190
|
+
|
|
164
191
|
if (opts.clientDir) {
|
|
165
192
|
const viteDir = `${opts.distDir}/${opts.clientDir}/.vite`;
|
|
166
|
-
const ssrManifest = await loadJsonFile(`${viteDir}/ssr-manifest.json`);
|
|
167
193
|
const clientManifest = await loadJsonFile(`${viteDir}/manifest.json`);
|
|
168
194
|
const preloadManifest = await loadJsonFile(
|
|
169
195
|
`${viteDir}/preload-manifest.json`,
|
|
170
196
|
);
|
|
171
197
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
198
|
+
// Strip unused fields from client manifest to reduce bundle size
|
|
199
|
+
const strippedClientManifest = stripClientManifest(clientManifest);
|
|
200
|
+
|
|
201
|
+
// Get base path from resolved config (defaults to "/" if not set)
|
|
202
|
+
// Normalize: ensure it starts with "/" and doesn't end with "/" (unless it's just "/")
|
|
203
|
+
let base = resolvedConfig.base || "/";
|
|
204
|
+
if (!base.startsWith("/")) {
|
|
205
|
+
base = `/${base}`;
|
|
206
|
+
}
|
|
207
|
+
if (base.length > 1 && base.endsWith("/")) {
|
|
208
|
+
base = base.slice(0, -1);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
manifestData = {
|
|
212
|
+
base: base !== "/" ? base : undefined, // Only include if not default
|
|
213
|
+
client: strippedClientManifest,
|
|
175
214
|
preload: preloadManifest,
|
|
176
215
|
};
|
|
177
216
|
|
|
178
|
-
manifest = `__alepha.set("alepha.react.ssr.manifest", ${JSON.stringify(
|
|
217
|
+
manifest = `__alepha.set("alepha.react.ssr.manifest", ${JSON.stringify(manifestData)});\n`;
|
|
218
|
+
|
|
219
|
+
// Set manifest in alepha store for pre-rendering
|
|
220
|
+
opts.alepha.store.set("alepha.react.ssr.manifest" as any, manifestData);
|
|
179
221
|
|
|
180
222
|
// Remove .vite directory - no longer needed at runtime
|
|
181
223
|
await rm(viteDir, { recursive: true, force: true });
|
|
@@ -191,7 +233,7 @@ export async function buildServer(
|
|
|
191
233
|
`${warning}\n${template}${manifest}import './server/${entryFile}';\n`.trim(),
|
|
192
234
|
);
|
|
193
235
|
|
|
194
|
-
return { entryFile };
|
|
236
|
+
return { entryFile, manifest: manifestData };
|
|
195
237
|
}
|
|
196
238
|
|
|
197
239
|
/**
|
|
@@ -206,6 +248,27 @@ async function loadJsonFile(path: string): Promise<any> {
|
|
|
206
248
|
}
|
|
207
249
|
}
|
|
208
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Strip unused fields from client manifest to reduce bundle size.
|
|
253
|
+
* Only keeps: file, isEntry, imports, css
|
|
254
|
+
*/
|
|
255
|
+
function stripClientManifest(
|
|
256
|
+
manifest: Record<string, any> | undefined,
|
|
257
|
+
): Record<string, any> | undefined {
|
|
258
|
+
if (!manifest) return undefined;
|
|
259
|
+
|
|
260
|
+
const stripped: Record<string, any> = {};
|
|
261
|
+
for (const [key, entry] of Object.entries(manifest)) {
|
|
262
|
+
stripped[key] = {
|
|
263
|
+
file: entry.file,
|
|
264
|
+
...(entry.isEntry && { isEntry: entry.isEntry }),
|
|
265
|
+
...(entry.imports?.length && { imports: entry.imports }),
|
|
266
|
+
...(entry.css?.length && { css: entry.css }),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
return stripped;
|
|
270
|
+
}
|
|
271
|
+
|
|
209
272
|
/**
|
|
210
273
|
* Extract entry filename from Vite build result.
|
|
211
274
|
*/
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { cp, mkdir } from "node:fs/promises";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import type { Alepha } from "alepha";
|
|
5
5
|
|
|
6
6
|
export interface CopyAssetsOptions {
|
|
7
|
+
alepha: Alepha;
|
|
7
8
|
/**
|
|
8
9
|
* Entry point for the built Alepha application.
|
|
9
10
|
*/
|
|
@@ -17,7 +18,7 @@ export interface CopyAssetsOptions {
|
|
|
17
18
|
/**
|
|
18
19
|
* @default process.cwd()
|
|
19
20
|
*/
|
|
20
|
-
root
|
|
21
|
+
root: string;
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Add Runner for logging (@see Alepha CLI)
|
|
@@ -38,8 +39,8 @@ export interface CopyAssetsOptions {
|
|
|
38
39
|
* Used by modules like AlephaServerSwagger to distribute UI files.
|
|
39
40
|
*/
|
|
40
41
|
export async function copyAssets(opts: CopyAssetsOptions): Promise<void> {
|
|
41
|
-
const root = opts.root
|
|
42
|
-
const alepha =
|
|
42
|
+
const root = opts.root;
|
|
43
|
+
const alepha = opts.alepha;
|
|
43
44
|
const assets = alepha.store.get("alepha.build.assets");
|
|
44
45
|
|
|
45
46
|
if (!assets || assets.length === 0) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
1
2
|
import type { Alepha } from "alepha";
|
|
2
|
-
import { importAlepha } from "../helpers/importAlepha.ts";
|
|
3
3
|
|
|
4
4
|
export interface GenerateSitemapOptions {
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Alepha instance to use for generating the sitemap.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
alepha: Alepha;
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Base URL for the sitemap (e.g., "https://example.com").
|
|
@@ -13,52 +13,93 @@ export interface GenerateSitemapOptions {
|
|
|
13
13
|
baseUrl: string;
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Output file path for the sitemap. If provided, writes the sitemap to disk.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
output?: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Add Runner for logging (@see Alepha CLI)
|
|
22
|
+
*/
|
|
23
|
+
run?: (opts: {
|
|
24
|
+
name: string;
|
|
25
|
+
handler: () => Promise<void>;
|
|
26
|
+
}) => Promise<string>;
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
/**
|
|
22
30
|
* Generate sitemap.xml from Alepha page primitives.
|
|
23
31
|
*
|
|
24
|
-
*
|
|
25
|
-
* queries all page primitives, and generates a sitemap.xml
|
|
32
|
+
* Queries all page primitives and generates a sitemap.xml
|
|
26
33
|
* containing URLs for all accessible pages.
|
|
27
34
|
*/
|
|
28
35
|
export async function generateSitemap(
|
|
29
36
|
opts: GenerateSitemapOptions,
|
|
30
37
|
): Promise<string> {
|
|
31
|
-
const
|
|
38
|
+
const pages = getSitemapPages(opts.alepha);
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
// Nothing to generate
|
|
41
|
+
if (pages.length === 0) {
|
|
42
|
+
return "";
|
|
35
43
|
}
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
let result = "";
|
|
46
|
+
|
|
47
|
+
const fn = async () => {
|
|
48
|
+
result = generateSitemapFromPages(pages, opts.baseUrl);
|
|
49
|
+
if (opts.output) {
|
|
50
|
+
await writeFile(opts.output, result);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
if (opts.run) {
|
|
55
|
+
await opts.run({
|
|
56
|
+
name: "generate sitemap",
|
|
57
|
+
handler: fn,
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
await fn();
|
|
40
61
|
}
|
|
41
62
|
|
|
42
|
-
return
|
|
63
|
+
return result;
|
|
43
64
|
}
|
|
44
65
|
|
|
45
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Get all pages that should be included in the sitemap.
|
|
68
|
+
*/
|
|
69
|
+
function getSitemapPages(alepha: Alepha): any[] {
|
|
46
70
|
const pages = alepha.primitives("page") as any[];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for (const page of pages) {
|
|
71
|
+
return pages.filter((page) => {
|
|
50
72
|
const options = page.options;
|
|
51
|
-
|
|
52
73
|
// Skip pages with children (parent pages that can't be rendered directly)
|
|
53
74
|
if (options.children) {
|
|
54
|
-
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
// Include pages without parameters or static pages with entries
|
|
78
|
+
if (!options.schema?.params) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
if (
|
|
82
|
+
options.static &&
|
|
83
|
+
typeof options.static === "object" &&
|
|
84
|
+
options.static.entries
|
|
85
|
+
) {
|
|
86
|
+
return true;
|
|
55
87
|
}
|
|
88
|
+
return false;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function generateSitemapFromPages(pages: any[], baseUrl: string): string {
|
|
93
|
+
const urls: string[] = [];
|
|
94
|
+
const normalizedBaseUrl = baseUrl.replace(/\/$/, "");
|
|
95
|
+
|
|
96
|
+
for (const page of pages) {
|
|
97
|
+
const options = page.options;
|
|
56
98
|
|
|
57
|
-
// Only include static pages or pages without parameters
|
|
58
99
|
if (!options.schema?.params) {
|
|
59
100
|
// Simple page without parameters
|
|
60
101
|
const path = options.path || "";
|
|
61
|
-
const url = `${
|
|
102
|
+
const url = `${normalizedBaseUrl}${path === "" ? "/" : path}`;
|
|
62
103
|
urls.push(url);
|
|
63
104
|
} else if (
|
|
64
105
|
options.static &&
|
|
@@ -71,7 +112,7 @@ function generateSitemapFromAlepha(alepha: Alepha, baseUrl: string): string {
|
|
|
71
112
|
options.path || "",
|
|
72
113
|
entry.params || {},
|
|
73
114
|
);
|
|
74
|
-
const url = `${
|
|
115
|
+
const url = `${normalizedBaseUrl}${path}`;
|
|
75
116
|
urls.push(url);
|
|
76
117
|
}
|
|
77
118
|
}
|
package/src/vite/tasks/index.ts
CHANGED
|
@@ -13,11 +13,9 @@
|
|
|
13
13
|
export * from "./buildClient.ts";
|
|
14
14
|
export * from "./buildServer.ts";
|
|
15
15
|
export * from "./copyAssets.ts";
|
|
16
|
-
export * from "./devServer.ts";
|
|
17
16
|
export * from "./generateCloudflare.ts";
|
|
18
17
|
export * from "./generateDocker.ts";
|
|
19
18
|
export * from "./generateExternals.ts";
|
|
20
19
|
export * from "./generateSitemap.ts";
|
|
21
20
|
export * from "./generateVercel.ts";
|
|
22
21
|
export * from "./prerenderPages.ts";
|
|
23
|
-
export * from "./runAlepha.ts";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
2
|
import type { Alepha } from "alepha";
|
|
3
|
-
import { importAlepha } from "../helpers/importAlepha.ts";
|
|
4
3
|
import {
|
|
5
4
|
compressFile,
|
|
6
5
|
type ViteCompressOptions,
|
|
@@ -8,9 +7,9 @@ import {
|
|
|
8
7
|
|
|
9
8
|
export interface PrerenderPagesOptions {
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
10
|
+
* Alepha instance to use for pre-rendering.
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
alepha: Alepha;
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Client dist directory for output files.
|
|
@@ -21,6 +20,14 @@ export interface PrerenderPagesOptions {
|
|
|
21
20
|
* Optional compression options.
|
|
22
21
|
*/
|
|
23
22
|
compress?: ViteCompressOptions | boolean;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Add Runner for logging (@see Alepha CLI)
|
|
26
|
+
*/
|
|
27
|
+
run?: (opts: {
|
|
28
|
+
name: string;
|
|
29
|
+
handler: () => Promise<void>;
|
|
30
|
+
}) => Promise<string>;
|
|
24
31
|
}
|
|
25
32
|
|
|
26
33
|
export interface PrerenderPagesResult {
|
|
@@ -33,45 +40,63 @@ export interface PrerenderPagesResult {
|
|
|
33
40
|
/**
|
|
34
41
|
* Pre-render static pages defined in the Alepha application.
|
|
35
42
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* `static.entries` configuration.
|
|
43
|
+
* Queries all page primitives with `static: true` and generates
|
|
44
|
+
* static HTML files for each page. Supports pages with parameterized
|
|
45
|
+
* routes via `static.entries` configuration.
|
|
40
46
|
*/
|
|
41
47
|
export async function prerenderPages(
|
|
42
48
|
opts: PrerenderPagesOptions,
|
|
43
49
|
): Promise<PrerenderPagesResult> {
|
|
44
|
-
const alepha =
|
|
50
|
+
const alepha = opts.alepha;
|
|
51
|
+
const pages = getStaticPages(alepha);
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
// Nothing to pre-render
|
|
54
|
+
if (pages.length === 0) {
|
|
55
|
+
return { count: 0 };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let result: PrerenderPagesResult = { count: 0 };
|
|
47
59
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
(alepha
|
|
60
|
+
const fn = async () => {
|
|
61
|
+
// TODO: running configure here is a temporary workaround
|
|
62
|
+
if (!alepha.isConfigured()) {
|
|
63
|
+
await alepha.events.emit("configure", alepha);
|
|
64
|
+
}
|
|
65
|
+
result = await prerenderFromAlepha(pages, opts.dist, opts.compress);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
if (opts.run) {
|
|
69
|
+
await opts.run({
|
|
70
|
+
name: "pre-render pages",
|
|
71
|
+
handler: fn,
|
|
72
|
+
});
|
|
73
|
+
} else {
|
|
74
|
+
await fn();
|
|
51
75
|
}
|
|
52
76
|
|
|
53
|
-
return
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Get all static pages from the Alepha instance.
|
|
82
|
+
*/
|
|
83
|
+
function getStaticPages(alepha: Alepha): any[] {
|
|
84
|
+
const pages = alepha.primitives("page") as any[];
|
|
85
|
+
return pages.filter((page) => {
|
|
86
|
+
const options = page.options;
|
|
87
|
+
return options.static && !options.children;
|
|
88
|
+
});
|
|
54
89
|
}
|
|
55
90
|
|
|
56
91
|
async function prerenderFromAlepha(
|
|
57
|
-
|
|
92
|
+
pages: any[],
|
|
58
93
|
dist: string,
|
|
59
94
|
compress?: ViteCompressOptions | boolean,
|
|
60
95
|
): Promise<PrerenderPagesResult> {
|
|
61
96
|
let count = 0;
|
|
62
|
-
const pages = alepha.primitives("page") as any[];
|
|
63
97
|
|
|
64
98
|
for (const page of pages) {
|
|
65
99
|
const options = page.options;
|
|
66
|
-
|
|
67
|
-
if (options.children) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (!options.static) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
100
|
const config = typeof options.static === "object" ? options.static : {};
|
|
76
101
|
|
|
77
102
|
if (!options.schema?.params) {
|
package/src/websocket/index.ts
CHANGED
|
@@ -58,17 +58,21 @@ export * from "./providers/NodeWebSocketServerProvider.ts";
|
|
|
58
58
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* | type | quality | stability |
|
|
62
|
+
* |------|---------|-----------|
|
|
63
|
+
* | backend | rare | experimental |
|
|
62
64
|
*
|
|
63
|
-
*
|
|
64
|
-
* on class properties. It provides automatic connection management, message routing, type-safe
|
|
65
|
-
* message handling, and seamless integration with other Alepha modules.
|
|
65
|
+
* Real-time bidirectional communication.
|
|
66
66
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
67
|
+
* **Features:**
|
|
68
|
+
* - WebSocket server definition
|
|
69
|
+
* - Named communication channels
|
|
70
|
+
* - Type-safe message handling
|
|
71
|
+
* - Connection lifecycle management
|
|
72
|
+
* - Room/channel grouping
|
|
73
|
+
* - Browser compatibility
|
|
69
74
|
*
|
|
70
|
-
* @
|
|
71
|
-
* @module alepha.websockets
|
|
75
|
+
* @module alepha.websocket
|
|
72
76
|
*/
|
|
73
77
|
export const AlephaWebSocket = $module({
|
|
74
78
|
name: "alepha.websocket",
|