alepha 0.15.1 → 0.15.3
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 +68 -80
- package/dist/api/audits/index.d.ts +10 -33
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +10 -33
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +10 -3
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +10 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +162 -155
- 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.d.ts +10 -4
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +10 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +43 -50
- 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 +1081 -760
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +2539 -218
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +138 -132
- 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 +20 -40
- 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 +440 -8
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +1861 -12
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/core/index.d.ts +179 -7
- 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 +4 -0
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +638 -5645
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2550 -368
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +203 -45
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +2060 -71
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +70 -40
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +34 -13
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +90 -40
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +70 -40
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +15 -0
- 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 +323 -20
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +1857 -7
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +90 -8
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +91 -20
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +11 -4
- 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/logger/index.d.ts +17 -66
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +14 -63
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +10 -30
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +12 -35
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +3 -3
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +39 -20
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +517 -540
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +58 -71
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +18 -10
- 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/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 +1974 -0
- package/dist/react/router/index.browser.js.map +1 -0
- package/dist/react/router/index.d.ts +1956 -0
- package/dist/react/router/index.d.ts.map +1 -0
- package/dist/react/router/index.js +4722 -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 +41 -44
- 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 +11 -2
- 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/scheduler/index.d.ts +11 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +11 -2
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +140 -49
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +164 -32
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +12 -7
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +12 -7
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +7 -22
- 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 +10 -2
- 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 +40 -16
- 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 +124 -23
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +231 -14
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +13 -23
- 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 +8 -2
- 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 +11 -3
- 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.d.ts +11 -6
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +11 -6
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +10 -3
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +10 -3
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts +9 -3
- 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 +8 -2
- 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 +30 -35
- 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 +137 -4
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js +1853 -5
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +309 -6
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1854 -6
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +309 -7
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +1856 -7
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.browser.js +1218 -0
- package/dist/system/index.browser.js.map +1 -0
- package/dist/{file → system}/index.d.ts +343 -16
- package/dist/system/index.d.ts.map +1 -0
- package/dist/{file → system}/index.js +419 -22
- package/dist/system/index.js.map +1 -0
- package/dist/thread/index.d.ts +11 -2
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +11 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts +12 -5
- 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/vite/index.d.ts +5 -6272
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +23 -10
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts +12 -8
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +12 -8
- package/dist/websocket/index.js.map +1 -1
- package/package.json +82 -11
- 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 +55 -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 -1
- 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 +1 -14
- package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -1
- package/src/cli/atoms/buildOptions.ts +99 -9
- package/src/cli/commands/build.ts +150 -37
- package/src/cli/commands/db.ts +22 -18
- package/src/cli/commands/deploy.ts +1 -1
- package/src/cli/commands/dev.ts +1 -20
- package/src/cli/commands/gen/env.ts +5 -2
- package/src/cli/commands/gen/openapi.ts +5 -2
- package/src/cli/commands/init.spec.ts +588 -0
- package/src/cli/commands/init.ts +115 -58
- package/src/cli/commands/lint.ts +7 -1
- package/src/cli/commands/typecheck.ts +11 -0
- package/src/cli/providers/AppEntryProvider.ts +1 -1
- package/src/cli/providers/ViteBuildProvider.ts +8 -50
- package/src/cli/providers/ViteDevServerProvider.ts +35 -16
- package/src/cli/services/AlephaCliUtils.ts +52 -121
- package/src/cli/services/PackageManagerUtils.ts +129 -11
- package/src/cli/services/ProjectScaffolder.spec.ts +97 -0
- package/src/cli/services/ProjectScaffolder.ts +148 -81
- package/src/cli/services/ViteUtils.ts +82 -0
- package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +37 -24
- package/src/cli/templates/apiAppSecurityTs.ts +11 -0
- package/src/cli/templates/apiIndexTs.ts +30 -0
- package/src/cli/templates/gitignore.ts +39 -0
- package/src/cli/{assets → templates}/mainCss.ts +11 -2
- package/src/cli/templates/mainServerTs.ts +33 -0
- package/src/cli/templates/webAppRouterTs.ts +74 -0
- package/src/cli/templates/webHelloComponentTsx.ts +30 -0
- package/src/command/helpers/Runner.spec.ts +139 -0
- package/src/command/helpers/Runner.ts +7 -22
- package/src/command/index.ts +12 -4
- package/src/command/providers/CliProvider.spec.ts +1392 -0
- package/src/command/providers/CliProvider.ts +320 -47
- package/src/core/Alepha.ts +34 -27
- 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/providers/EventManager.spec.ts +0 -71
- package/src/core/providers/EventManager.ts +3 -15
- package/src/core/providers/Json.ts +2 -14
- 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/mcp/index.ts +10 -27
- package/src/mcp/transports/SseMcpTransport.ts +0 -11
- package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
- package/src/orm/index.browser.ts +2 -2
- package/src/orm/index.bun.ts +5 -3
- package/src/orm/index.ts +23 -53
- package/src/orm/providers/drivers/BunSqliteProvider.ts +5 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +57 -30
- package/src/orm/providers/drivers/DatabaseProvider.ts +9 -1
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +4 -1
- package/src/orm/services/Repository.ts +7 -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 +146 -0
- package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
- package/src/react/router/primitives/$page.spec.tsx +676 -0
- package/src/react/router/primitives/$page.ts +489 -0
- package/src/react/router/providers/ReactBrowserProvider.ts +312 -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/ReactPreloadProvider.spec.ts +142 -0
- package/src/react/router/providers/ReactPreloadProvider.ts +85 -0
- package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
- package/src/react/router/providers/ReactServerProvider.ts +487 -0
- package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +210 -0
- package/src/react/router/providers/ReactServerTemplateProvider.ts +542 -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 +90 -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 +63 -41
- 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 +16 -6
- 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/NodeHttpServerProvider.spec.ts +9 -3
- package/src/server/core/providers/NodeHttpServerProvider.ts +9 -3
- 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/index.ts +11 -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 +36 -0
- package/src/system/index.ts +62 -0
- package/src/system/index.workerd.ts +1 -0
- package/src/{file → system}/providers/FileSystemProvider.ts +24 -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 +47 -2
- 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/tasks/buildClient.ts +2 -7
- package/src/vite/tasks/buildServer.ts +19 -13
- package/src/vite/tasks/generateCloudflare.ts +10 -7
- package/src/vite/tasks/generateDocker.ts +4 -0
- package/src/websocket/index.ts +12 -8
- package/dist/file/index.d.ts.map +0 -1
- package/dist/file/index.js.map +0 -1
- package/src/cli/assets/apiIndexTs.ts +0 -16
- package/src/cli/assets/mainServerTs.ts +0 -24
- package/src/cli/assets/webAppRouterTs.ts +0 -16
- package/src/cli/assets/webHelloComponentTsx.ts +0 -20
- package/src/cli/providers/ViteTemplateProvider.ts +0 -27
- package/src/file/index.ts +0 -43
- /package/src/cli/{assets → templates}/apiHelloControllerTs.ts +0 -0
- /package/src/cli/{assets → templates}/biomeJson.ts +0 -0
- /package/src/cli/{assets → templates}/dummySpecTs.ts +0 -0
- /package/src/cli/{assets → templates}/editorconfig.ts +0 -0
- /package/src/cli/{assets → templates}/mainBrowserTs.ts +0 -0
- /package/src/cli/{assets → templates}/tsconfigJson.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/react/auth/providers/ReactAuthProvider.ts","../../../src/react/auth/services/ReactAuth.ts","../../../src/react/auth/hooks/useAuth.ts","../../../src/react/auth/index.ts"],"sourcesContent":["import { $hook, $inject, Alepha } from \"alepha\";\n\nexport class ReactAuthProvider {\n protected readonly alepha = $inject(Alepha);\n\n public readonly onRender = $hook({\n on: \"react:server:render:begin\",\n handler: async ({ request, state }) => {\n if (request?.user) {\n const { token, realm, ...user } = request.user; // do not send token and realm to the client\n this.alepha.store.set(\"alepha.server.request.user\", user); // for hydration, browser, etc...\n state.user = user;\n }\n },\n });\n}\n","import { $hook, $inject, Alepha } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { ReactBrowserProvider, Redirection } from \"alepha/react/router\";\nimport type { UserAccountToken } from \"alepha/security\";\nimport { HttpClient } from \"alepha/server\";\nimport {\n alephaServerAuthRoutes,\n type Tokens,\n tokenResponseSchema,\n userinfoResponseSchema,\n} from \"alepha/server/auth\";\nimport { LinkProvider } from \"alepha/server/links\";\n\n/**\n * Browser, SSR friendly, service to handle authentication.\n */\nexport class ReactAuth {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly httpClient = $inject(HttpClient);\n protected readonly linkProvider = $inject(LinkProvider);\n\n protected readonly onBeginTransition = $hook({\n on: \"react:transition:begin\",\n handler: async (event) => {\n if (this.alepha.isBrowser()) {\n Object.defineProperty(event.state, \"user\", {\n get: () => this.user,\n });\n }\n },\n });\n\n protected readonly onFetchRequest = $hook({\n on: \"client:onRequest\",\n handler: async ({ request }) => {\n if (this.alepha.isBrowser() && this.user) {\n // ensure cookies are sent with requests and refresh-able\n request.credentials ??= \"include\";\n }\n },\n });\n\n /**\n * Get the current authenticated user.\n *\n * Alias for `alepha.state.get(\"user\")`\n */\n public get user(): UserAccountToken | undefined {\n return this.alepha.store.get(\"alepha.server.request.user\");\n }\n\n public async ping() {\n const { data } = await this.httpClient.fetch(\n alephaServerAuthRoutes.userinfo,\n {\n schema: { response: userinfoResponseSchema },\n },\n );\n\n this.alepha.store.set(\"alepha.server.request.apiLinks\", data.api);\n this.alepha.store.set(\"alepha.server.request.user\", data.user);\n\n return data.user;\n }\n\n public can(action: string): boolean {\n if (!this.user) {\n return false;\n }\n\n return this.linkProvider.can(action);\n }\n\n public async login(\n provider: string,\n options: {\n hostname?: string;\n username?: string;\n password?: string;\n redirect?: string;\n realm?: string;\n [extra: string]: any;\n },\n ): Promise<Tokens> {\n const realmParam = options.realm\n ? `&realm=${encodeURIComponent(options.realm)}`\n : \"\";\n\n if (options.username || options.password) {\n const { data } = await this.httpClient.fetch(\n `${options.hostname || \"\"}${alephaServerAuthRoutes.token}?provider=${provider}${realmParam}`,\n {\n method: \"POST\",\n body: JSON.stringify({\n username: options.username,\n password: options.password,\n }),\n schema: { response: tokenResponseSchema },\n },\n );\n\n this.alepha.store.set(\"alepha.server.request.apiLinks\", data.api);\n this.alepha.store.set(\"alepha.server.request.user\", data.user);\n\n return data;\n }\n\n if (this.alepha.isBrowser()) {\n const browser = this.alepha.inject(ReactBrowserProvider);\n const redirect =\n options.redirect ||\n (browser.transitioning\n ? window.location.origin + browser.transitioning.to\n : window.location.href);\n\n const href = `${window.location.origin}${alephaServerAuthRoutes.login}?provider=${provider}${realmParam}&redirect_uri=${encodeURIComponent(redirect)}`;\n\n if (browser.transitioning) {\n throw new Redirection(href);\n } else {\n window.location.href = href;\n return {} as Tokens;\n }\n }\n\n throw new Redirection(\n `${alephaServerAuthRoutes.login}?provider=${provider}${realmParam}&redirect_uri=${options.redirect || \"/\"}`,\n );\n }\n\n public logout() {\n window.location.href = `${alephaServerAuthRoutes.logout}?post_logout_redirect_uri=${encodeURIComponent(window.location.origin)}`;\n }\n}\n","import { useAlepha, useStore } from \"alepha/react\";\nimport { type HttpVirtualClient, LinkProvider } from \"alepha/server/links\";\nimport { ReactAuth } from \"../services/ReactAuth.ts\";\n\nexport const useAuth = <T extends object = any>() => {\n const alepha = useAlepha();\n const [user] = useStore(\"alepha.server.request.user\");\n\n return {\n user,\n logout: () => {\n alepha.inject(ReactAuth).logout();\n },\n login: async (\n provider: keyof T,\n options: {\n username?: string;\n password?: string;\n redirect?: string;\n realm?: string;\n [extra: string]: any;\n } = {},\n ) => {\n await alepha.inject(ReactAuth).login(provider as string, options);\n },\n can: <Api extends object = any>(\n name: keyof HttpVirtualClient<Api>,\n ): boolean => {\n return alepha.inject(LinkProvider).can(name as string);\n },\n };\n};\n","import { $module } from \"alepha\";\nimport { AlephaReact } from \"alepha/react\";\nimport type { UserAccount } from \"alepha/security\";\nimport { $auth, AlephaServerAuth } from \"alepha/server/auth\";\nimport { AlephaServerLinks } from \"alepha/server/links\";\nimport { ReactAuthProvider } from \"./providers/ReactAuthProvider.ts\";\nimport { ReactAuth } from \"./services/ReactAuth.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\nexport * from \"./providers/ReactAuthProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha/react/router\" {\n interface ReactRouterState {\n user?: UserAccount;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | type | quality | stability |\n * |------|---------|-----------|\n * | frontend | rare | stable |\n *\n * Auth-related React components and hooks.\n *\n * **Features:**\n * - Login/logout components\n * - Protected route wrappers\n * - Auth state hooks\n *\n * @module alepha.react.auth\n */\nexport const AlephaReactAuth = $module({\n name: \"alepha.react.auth\",\n primitives: [$auth],\n services: [\n AlephaReact,\n AlephaServerLinks,\n AlephaServerAuth,\n ReactAuthProvider,\n ReactAuth,\n ],\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import * as alepha0 from "alepha";
|
|
2
|
+
import { Alepha, Async, Atom, Hook, Hooks, Service, State, Static, TAtomObject } from "alepha";
|
|
3
|
+
import * as react0 from "react";
|
|
4
|
+
import React, { DependencyList, ErrorInfo, PropsWithChildren, ReactNode } from "react";
|
|
5
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
6
|
+
import { DurationLike } from "alepha/datetime";
|
|
7
|
+
import { ClientScope, HttpVirtualClient } from "alepha/server/links";
|
|
8
|
+
|
|
9
|
+
//#region ../../src/react/core/components/ClientOnly.d.ts
|
|
10
|
+
interface ClientOnlyProps {
|
|
11
|
+
fallback?: ReactNode;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A small utility component that renders its children only on the client side.
|
|
16
|
+
*
|
|
17
|
+
* Optionally, you can provide a fallback React node that will be rendered.
|
|
18
|
+
*
|
|
19
|
+
* You should use this component when
|
|
20
|
+
* - you have code that relies on browser-specific APIs
|
|
21
|
+
* - you want to avoid server-side rendering for a specific part of your application
|
|
22
|
+
* - you want to prevent pre-rendering of a component
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* import { ClientOnly } from "alepha/react";
|
|
27
|
+
*
|
|
28
|
+
* const MyComponent = () => {
|
|
29
|
+
* // Avoids SSR issues with Date API
|
|
30
|
+
* return (
|
|
31
|
+
* <ClientOnly>
|
|
32
|
+
* {new Date().toLocaleTimeString()}
|
|
33
|
+
* </ClientOnly>
|
|
34
|
+
* );
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare const ClientOnly: (props: PropsWithChildren<ClientOnlyProps>) => ReactNode;
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region ../../src/react/core/components/ErrorBoundary.d.ts
|
|
41
|
+
/**
|
|
42
|
+
* Props for the ErrorBoundary component.
|
|
43
|
+
*/
|
|
44
|
+
interface ErrorBoundaryProps {
|
|
45
|
+
/**
|
|
46
|
+
* Fallback React node to render when an error is caught.
|
|
47
|
+
* If not provided, a default error message will be shown.
|
|
48
|
+
*/
|
|
49
|
+
fallback: (error: Error) => ReactNode;
|
|
50
|
+
/**
|
|
51
|
+
* Optional callback that receives the error and error info.
|
|
52
|
+
* Use this to log errors to a monitoring service.
|
|
53
|
+
*/
|
|
54
|
+
onError?: (error: Error, info: ErrorInfo) => void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* State of the ErrorBoundary component.
|
|
58
|
+
*/
|
|
59
|
+
interface ErrorBoundaryState {
|
|
60
|
+
error?: Error;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A reusable error boundary for catching rendering errors in any part of the React component tree.
|
|
64
|
+
*
|
|
65
|
+
* It's already included in the Alepha React framework when using page or layout components.
|
|
66
|
+
*/
|
|
67
|
+
declare class ErrorBoundary extends React.Component<PropsWithChildren<ErrorBoundaryProps>, ErrorBoundaryState> {
|
|
68
|
+
constructor(props: ErrorBoundaryProps);
|
|
69
|
+
/**
|
|
70
|
+
* Update state so the next render shows the fallback UI.
|
|
71
|
+
*/
|
|
72
|
+
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
|
|
73
|
+
/**
|
|
74
|
+
* Lifecycle method called when an error is caught.
|
|
75
|
+
* You can log the error or perform side effects here.
|
|
76
|
+
*/
|
|
77
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
78
|
+
render(): ReactNode;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region ../../src/react/core/contexts/AlephaContext.d.ts
|
|
82
|
+
/**
|
|
83
|
+
* React context to provide the Alepha instance throughout the component tree.
|
|
84
|
+
*/
|
|
85
|
+
declare const AlephaContext: react0.Context<Alepha | undefined>;
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region ../../src/react/core/contexts/AlephaProvider.d.ts
|
|
88
|
+
interface AlephaProviderProps {
|
|
89
|
+
children: ReactNode;
|
|
90
|
+
onError: (error: Error) => ReactNode;
|
|
91
|
+
onLoading: () => ReactNode;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* AlephaProvider component to initialize and provide Alepha instance to the app.
|
|
95
|
+
*
|
|
96
|
+
* This isn't recommended for apps using `alepha/react/router`, as Router will handle this for you.
|
|
97
|
+
*/
|
|
98
|
+
declare const AlephaProvider: (props: AlephaProviderProps) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react0.ReactPortal | react0.ReactElement<unknown, string | react0.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime0.JSX.Element | null | undefined;
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region ../../src/react/core/hooks/useAction.d.ts
|
|
101
|
+
/**
|
|
102
|
+
* Hook for handling async actions with automatic error handling and event emission.
|
|
103
|
+
*
|
|
104
|
+
* By default, prevents concurrent executions - if an action is running and you call it again,
|
|
105
|
+
* the second call will be ignored. Use `debounce` option to delay execution instead.
|
|
106
|
+
*
|
|
107
|
+
* Emits lifecycle events:
|
|
108
|
+
* - `react:action:begin` - When action starts
|
|
109
|
+
* - `react:action:success` - When action completes successfully
|
|
110
|
+
* - `react:action:error` - When action throws an error
|
|
111
|
+
* - `react:action:end` - Always emitted at the end
|
|
112
|
+
*
|
|
113
|
+
* @example Basic usage
|
|
114
|
+
* ```tsx
|
|
115
|
+
* const action = useAction({
|
|
116
|
+
* handler: async (data) => {
|
|
117
|
+
* await api.save(data);
|
|
118
|
+
* }
|
|
119
|
+
* }, []);
|
|
120
|
+
*
|
|
121
|
+
* <button onClick={() => action.run(data)} disabled={action.loading}>
|
|
122
|
+
* Save
|
|
123
|
+
* </button>
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* @example With debounce (search input)
|
|
127
|
+
* ```tsx
|
|
128
|
+
* const search = useAction({
|
|
129
|
+
* handler: async (query: string) => {
|
|
130
|
+
* await api.search(query);
|
|
131
|
+
* },
|
|
132
|
+
* debounce: 300 // Wait 300ms after last call
|
|
133
|
+
* }, []);
|
|
134
|
+
*
|
|
135
|
+
* <input onChange={(e) => search.run(e.target.value)} />
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @example Run on component mount
|
|
139
|
+
* ```tsx
|
|
140
|
+
* const fetchData = useAction({
|
|
141
|
+
* handler: async () => {
|
|
142
|
+
* const data = await api.getData();
|
|
143
|
+
* return data;
|
|
144
|
+
* },
|
|
145
|
+
* runOnInit: true // Runs once when component mounts
|
|
146
|
+
* }, []);
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @example Run periodically (polling)
|
|
150
|
+
* ```tsx
|
|
151
|
+
* const pollStatus = useAction({
|
|
152
|
+
* handler: async () => {
|
|
153
|
+
* const status = await api.getStatus();
|
|
154
|
+
* return status;
|
|
155
|
+
* },
|
|
156
|
+
* runEvery: 5000 // Run every 5 seconds
|
|
157
|
+
* }, []);
|
|
158
|
+
*
|
|
159
|
+
* // Or with duration tuple
|
|
160
|
+
* const pollStatus = useAction({
|
|
161
|
+
* handler: async () => {
|
|
162
|
+
* const status = await api.getStatus();
|
|
163
|
+
* return status;
|
|
164
|
+
* },
|
|
165
|
+
* runEvery: [30, 'seconds'] // Run every 30 seconds
|
|
166
|
+
* }, []);
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @example With AbortController
|
|
170
|
+
* ```tsx
|
|
171
|
+
* const fetch = useAction({
|
|
172
|
+
* handler: async (url, { signal }) => {
|
|
173
|
+
* const response = await fetch(url, { signal });
|
|
174
|
+
* return response.json();
|
|
175
|
+
* }
|
|
176
|
+
* }, []);
|
|
177
|
+
* // Automatically cancelled on unmount or when new request starts
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example With error handling
|
|
181
|
+
* ```tsx
|
|
182
|
+
* const deleteAction = useAction({
|
|
183
|
+
* handler: async (id: string) => {
|
|
184
|
+
* await api.delete(id);
|
|
185
|
+
* },
|
|
186
|
+
* onError: (error) => {
|
|
187
|
+
* if (error.code === 'NOT_FOUND') {
|
|
188
|
+
* // Custom error handling
|
|
189
|
+
* }
|
|
190
|
+
* }
|
|
191
|
+
* }, []);
|
|
192
|
+
*
|
|
193
|
+
* {deleteAction.error && <div>Error: {deleteAction.error.message}</div>}
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* @example Global error handling
|
|
197
|
+
* ```tsx
|
|
198
|
+
* // In your root app setup
|
|
199
|
+
* alepha.events.on("react:action:error", ({ error }) => {
|
|
200
|
+
* toast.danger(error.message);
|
|
201
|
+
* Sentry.captureException(error);
|
|
202
|
+
* });
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
declare function useAction<Args extends any[], Result = void>(options: UseActionOptions<Args, Result>, deps: DependencyList): UseActionReturn<Args, Result>;
|
|
206
|
+
/**
|
|
207
|
+
* Context object passed as the last argument to action handlers.
|
|
208
|
+
* Contains an AbortSignal that can be used to cancel the request.
|
|
209
|
+
*/
|
|
210
|
+
interface ActionContext {
|
|
211
|
+
/**
|
|
212
|
+
* AbortSignal that can be passed to fetch or other async operations.
|
|
213
|
+
* The signal will be aborted when:
|
|
214
|
+
* - The component unmounts
|
|
215
|
+
* - A new action is triggered (cancels previous)
|
|
216
|
+
* - The cancel() method is called
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```tsx
|
|
220
|
+
* const action = useAction({
|
|
221
|
+
* handler: async (url, { signal }) => {
|
|
222
|
+
* const response = await fetch(url, { signal });
|
|
223
|
+
* return response.json();
|
|
224
|
+
* }
|
|
225
|
+
* }, []);
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
signal: AbortSignal;
|
|
229
|
+
}
|
|
230
|
+
interface UseActionOptions<Args extends any[] = any[], Result = any> {
|
|
231
|
+
/**
|
|
232
|
+
* The async action handler function.
|
|
233
|
+
* Receives the action arguments plus an ActionContext as the last parameter.
|
|
234
|
+
*/
|
|
235
|
+
handler: (...args: [...Args, ActionContext]) => Async<Result>;
|
|
236
|
+
/**
|
|
237
|
+
* Custom error handler. If provided, prevents default error re-throw.
|
|
238
|
+
*/
|
|
239
|
+
onError?: (error: Error) => void | Promise<void>;
|
|
240
|
+
/**
|
|
241
|
+
* Custom success handler.
|
|
242
|
+
*/
|
|
243
|
+
onSuccess?: (result: Result) => void | Promise<void>;
|
|
244
|
+
/**
|
|
245
|
+
* Optional identifier for this action (useful for debugging/analytics)
|
|
246
|
+
*/
|
|
247
|
+
id?: string;
|
|
248
|
+
name?: string;
|
|
249
|
+
/**
|
|
250
|
+
* Debounce delay in milliseconds. If specified, the action will only execute
|
|
251
|
+
* after the specified delay has passed since the last call. Useful for search inputs
|
|
252
|
+
* or other high-frequency events.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```tsx
|
|
256
|
+
* // Execute search 300ms after user stops typing
|
|
257
|
+
* const search = useAction({ handler: search, debounce: 300 }, [])
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
debounce?: number;
|
|
261
|
+
/**
|
|
262
|
+
* If true, the action will be executed once when the component mounts.
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```tsx
|
|
266
|
+
* const fetchData = useAction({
|
|
267
|
+
* handler: async () => await api.getData(),
|
|
268
|
+
* runOnInit: true
|
|
269
|
+
* }, []);
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
runOnInit?: boolean;
|
|
273
|
+
/**
|
|
274
|
+
* If specified, the action will be executed periodically at the given interval.
|
|
275
|
+
* The interval is specified as a DurationLike value (number in ms, Duration object, or [number, unit] tuple).
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```tsx
|
|
279
|
+
* // Run every 5 seconds
|
|
280
|
+
* const poll = useAction({
|
|
281
|
+
* handler: async () => await api.poll(),
|
|
282
|
+
* runEvery: 5000
|
|
283
|
+
* }, []);
|
|
284
|
+
* ```
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```tsx
|
|
288
|
+
* // Run every 1 minute
|
|
289
|
+
* const poll = useAction({
|
|
290
|
+
* handler: async () => await api.poll(),
|
|
291
|
+
* runEvery: [1, 'minute']
|
|
292
|
+
* }, []);
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
runEvery?: DurationLike;
|
|
296
|
+
}
|
|
297
|
+
interface UseActionReturn<Args extends any[], Result> {
|
|
298
|
+
/**
|
|
299
|
+
* Execute the action with the provided arguments.
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```tsx
|
|
303
|
+
* const action = useAction({ handler: async (data) => { ... } }, []);
|
|
304
|
+
* action.run(data);
|
|
305
|
+
* ```
|
|
306
|
+
*/
|
|
307
|
+
run: (...args: Args) => Promise<Result | undefined>;
|
|
308
|
+
/**
|
|
309
|
+
* Loading state - true when action is executing.
|
|
310
|
+
*/
|
|
311
|
+
loading: boolean;
|
|
312
|
+
/**
|
|
313
|
+
* Error state - contains error if action failed, undefined otherwise.
|
|
314
|
+
*/
|
|
315
|
+
error?: Error;
|
|
316
|
+
/**
|
|
317
|
+
* Cancel any pending debounced action or abort the current in-flight request.
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* ```tsx
|
|
321
|
+
* const action = useAction({ ... }, []);
|
|
322
|
+
*
|
|
323
|
+
* <button onClick={action.cancel} disabled={!action.loading}>
|
|
324
|
+
* Cancel
|
|
325
|
+
* </button>
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
cancel: () => void;
|
|
329
|
+
/**
|
|
330
|
+
* The result data from the last successful action execution.
|
|
331
|
+
*/
|
|
332
|
+
result?: Result;
|
|
333
|
+
}
|
|
334
|
+
//#endregion
|
|
335
|
+
//#region ../../src/react/core/hooks/useAlepha.d.ts
|
|
336
|
+
/**
|
|
337
|
+
* Main Alepha hook.
|
|
338
|
+
*
|
|
339
|
+
* It provides access to the Alepha instance within a React component.
|
|
340
|
+
*
|
|
341
|
+
* With Alepha, you can access the core functionalities of the framework:
|
|
342
|
+
*
|
|
343
|
+
* - alepha.state() for state management
|
|
344
|
+
* - alepha.inject() for dependency injection
|
|
345
|
+
* - alepha.events.emit() for event handling
|
|
346
|
+
* etc...
|
|
347
|
+
*/
|
|
348
|
+
declare const useAlepha: () => Alepha;
|
|
349
|
+
//#endregion
|
|
350
|
+
//#region ../../src/react/core/hooks/useClient.d.ts
|
|
351
|
+
/**
|
|
352
|
+
* Hook to get a virtual client for the specified scope.
|
|
353
|
+
*
|
|
354
|
+
* It's the React-hook version of `$client()`, from `AlephaServerLinks` module.
|
|
355
|
+
*/
|
|
356
|
+
declare const useClient: <T extends object>(scope?: ClientScope) => HttpVirtualClient<T>;
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region ../../src/react/core/hooks/useEvents.d.ts
|
|
359
|
+
/**
|
|
360
|
+
* Allow subscribing to multiple Alepha events. See {@link Hooks} for available events.
|
|
361
|
+
*
|
|
362
|
+
* useEvents is fully typed to ensure correct event callback signatures.
|
|
363
|
+
*
|
|
364
|
+
* @example
|
|
365
|
+
* ```tsx
|
|
366
|
+
* useEvents(
|
|
367
|
+
* {
|
|
368
|
+
* "react:transition:begin": (ev) => {
|
|
369
|
+
* console.log("Transition began to:", ev.to);
|
|
370
|
+
* },
|
|
371
|
+
* "react:transition:error": {
|
|
372
|
+
* priority: "first",
|
|
373
|
+
* callback: (ev) => {
|
|
374
|
+
* console.error("Transition error:", ev.error);
|
|
375
|
+
* },
|
|
376
|
+
* },
|
|
377
|
+
* },
|
|
378
|
+
* [],
|
|
379
|
+
* );
|
|
380
|
+
* ```
|
|
381
|
+
*/
|
|
382
|
+
declare const useEvents: (opts: UseEvents, deps: DependencyList) => void;
|
|
383
|
+
type UseEvents = { [T in keyof Hooks]?: Hook<T> | ((payload: Hooks[T]) => Async<void>) };
|
|
384
|
+
//#endregion
|
|
385
|
+
//#region ../../src/react/core/hooks/useInject.d.ts
|
|
386
|
+
/**
|
|
387
|
+
* Hook to inject a service instance.
|
|
388
|
+
* It's a wrapper of `useAlepha().inject(service)` with a memoization.
|
|
389
|
+
*/
|
|
390
|
+
declare const useInject: <T extends object>(service: Service<T>) => T;
|
|
391
|
+
//#endregion
|
|
392
|
+
//#region ../../src/react/core/hooks/useStore.d.ts
|
|
393
|
+
/**
|
|
394
|
+
* Hook to access and mutate the Alepha state.
|
|
395
|
+
*/
|
|
396
|
+
declare function useStore<T extends TAtomObject>(target: Atom<T>, defaultValue?: Static<T>): UseStoreReturn<Static<T>>;
|
|
397
|
+
declare function useStore<Key extends keyof State>(target: Key, defaultValue?: State[Key]): UseStoreReturn<State[Key]>;
|
|
398
|
+
type UseStoreReturn<T> = [T, (value: T) => void];
|
|
399
|
+
//#endregion
|
|
400
|
+
//#region ../../src/react/core/index.d.ts
|
|
401
|
+
declare module "alepha" {
|
|
402
|
+
interface Hooks {
|
|
403
|
+
/**
|
|
404
|
+
* Fires when a user action is starting.
|
|
405
|
+
* Action can be a form submission, a route transition, or a custom action.
|
|
406
|
+
*/
|
|
407
|
+
"react:action:begin": {
|
|
408
|
+
type: string;
|
|
409
|
+
id?: string;
|
|
410
|
+
};
|
|
411
|
+
/**
|
|
412
|
+
* Fires when a user action has succeeded.
|
|
413
|
+
* Action can be a form submission, a route transition, or a custom action.
|
|
414
|
+
*/
|
|
415
|
+
"react:action:success": {
|
|
416
|
+
type: string;
|
|
417
|
+
id?: string;
|
|
418
|
+
};
|
|
419
|
+
/**
|
|
420
|
+
* Fires when a user action has failed.
|
|
421
|
+
* Action can be a form submission, a route transition, or a custom action.
|
|
422
|
+
*/
|
|
423
|
+
"react:action:error": {
|
|
424
|
+
type: string;
|
|
425
|
+
id?: string;
|
|
426
|
+
error: Error;
|
|
427
|
+
};
|
|
428
|
+
/**
|
|
429
|
+
* Fires when a user action has completed, regardless of success or failure.
|
|
430
|
+
* Action can be a form submission, a route transition, or a custom action.
|
|
431
|
+
*/
|
|
432
|
+
"react:action:end": {
|
|
433
|
+
type: string;
|
|
434
|
+
id?: string;
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* | type | quality | stability |
|
|
440
|
+
* |------|---------|-----------|
|
|
441
|
+
* | frontend | epic | stable |
|
|
442
|
+
*
|
|
443
|
+
* Full-stack React framework with server-side rendering.
|
|
444
|
+
*
|
|
445
|
+
* **Features:**
|
|
446
|
+
* - React page routes with type-safe params
|
|
447
|
+
* - Async action handler with loading/error/cancel states
|
|
448
|
+
* - Type-safe HTTP client access
|
|
449
|
+
* - Dependency injection in components
|
|
450
|
+
* - Global state management
|
|
451
|
+
* - Router navigation methods
|
|
452
|
+
* - Current route state access
|
|
453
|
+
* - Check if path is active
|
|
454
|
+
* - URL query parameters
|
|
455
|
+
* - Access route schema
|
|
456
|
+
* - Subscribe to Alepha events
|
|
457
|
+
* - Type-safe form handling with validation
|
|
458
|
+
* - Error handling wrapper component
|
|
459
|
+
* - Client-side only rendering component
|
|
460
|
+
* - Server-side rendering with hydration
|
|
461
|
+
* - Automatic code splitting
|
|
462
|
+
* - Event system for action tracking
|
|
463
|
+
*
|
|
464
|
+
* @module alepha.react
|
|
465
|
+
*/
|
|
466
|
+
declare const AlephaReact: alepha0.Service<alepha0.Module>;
|
|
467
|
+
//#endregion
|
|
468
|
+
export { ActionContext, AlephaContext, AlephaProvider, AlephaProviderProps, AlephaReact, ClientOnly, ClientOnlyProps, ErrorBoundary, ErrorBoundaryProps, UseActionOptions, UseActionReturn, UseStoreReturn, useAction, useAlepha, useClient, useEvents, useInject, useStore };
|
|
469
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/react/core/components/ClientOnly.tsx","../../../src/react/core/components/ErrorBoundary.tsx","../../../src/react/core/contexts/AlephaContext.ts","../../../src/react/core/contexts/AlephaProvider.tsx","../../../src/react/core/hooks/useAction.ts","../../../src/react/core/hooks/useAlepha.ts","../../../src/react/core/hooks/useClient.ts","../../../src/react/core/hooks/useEvents.ts","../../../src/react/core/hooks/useInject.ts","../../../src/react/core/hooks/useStore.ts","../../../src/react/core/index.ts"],"mappings":"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"}
|