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
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { t } from "alepha";
|
|
1
|
+
import { Type, t } from "alepha";
|
|
2
2
|
import { describe, test } from "vitest";
|
|
3
3
|
import { FakeProvider } from "../providers/FakeProvider.ts";
|
|
4
4
|
|
|
5
5
|
describe("FakeProvider", () => {
|
|
6
6
|
test("generates string values", ({ expect }) => {
|
|
7
|
-
const fake = new FakeProvider(
|
|
7
|
+
const fake = new FakeProvider();
|
|
8
8
|
const schema = t.string();
|
|
9
9
|
const result = fake.generate(schema);
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ describe("FakeProvider", () => {
|
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
test("generates text with size constraints", ({ expect }) => {
|
|
16
|
-
const fake = new FakeProvider(
|
|
16
|
+
const fake = new FakeProvider();
|
|
17
17
|
|
|
18
18
|
const shortText = fake.generate(t.shortText());
|
|
19
19
|
expect(typeof shortText).toBe("string");
|
|
@@ -33,7 +33,7 @@ describe("FakeProvider", () => {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
test("generates number values", ({ expect }) => {
|
|
36
|
-
const fake = new FakeProvider(
|
|
36
|
+
const fake = new FakeProvider();
|
|
37
37
|
const schema = t.number();
|
|
38
38
|
const result = fake.generate(schema);
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ describe("FakeProvider", () => {
|
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
test("generates number with constraints", ({ expect }) => {
|
|
44
|
-
const fake = new FakeProvider(
|
|
44
|
+
const fake = new FakeProvider();
|
|
45
45
|
const schema = t.number({ minimum: 10, maximum: 20 });
|
|
46
46
|
const result = fake.generate(schema);
|
|
47
47
|
|
|
@@ -50,7 +50,7 @@ describe("FakeProvider", () => {
|
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
test("generates integer values", ({ expect }) => {
|
|
53
|
-
const fake = new FakeProvider(
|
|
53
|
+
const fake = new FakeProvider();
|
|
54
54
|
const schema = t.integer();
|
|
55
55
|
const result = fake.generate(schema);
|
|
56
56
|
|
|
@@ -59,7 +59,7 @@ describe("FakeProvider", () => {
|
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
test("generates integer with constraints", ({ expect }) => {
|
|
62
|
-
const fake = new FakeProvider(
|
|
62
|
+
const fake = new FakeProvider();
|
|
63
63
|
const schema = t.integer({ minimum: 5, maximum: 15 });
|
|
64
64
|
const result = fake.generate(schema);
|
|
65
65
|
|
|
@@ -69,7 +69,7 @@ describe("FakeProvider", () => {
|
|
|
69
69
|
});
|
|
70
70
|
|
|
71
71
|
test("generates boolean values", ({ expect }) => {
|
|
72
|
-
const fake = new FakeProvider(
|
|
72
|
+
const fake = new FakeProvider();
|
|
73
73
|
const schema = t.boolean();
|
|
74
74
|
const result = fake.generate(schema);
|
|
75
75
|
|
|
@@ -77,7 +77,7 @@ describe("FakeProvider", () => {
|
|
|
77
77
|
});
|
|
78
78
|
|
|
79
79
|
test("generates UUID", ({ expect }) => {
|
|
80
|
-
const fake = new FakeProvider(
|
|
80
|
+
const fake = new FakeProvider();
|
|
81
81
|
const schema = t.uuid();
|
|
82
82
|
const result = fake.generate(schema);
|
|
83
83
|
|
|
@@ -88,7 +88,7 @@ describe("FakeProvider", () => {
|
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
test("generates email", ({ expect }) => {
|
|
91
|
-
const fake = new FakeProvider(
|
|
91
|
+
const fake = new FakeProvider();
|
|
92
92
|
const schema = t.email();
|
|
93
93
|
const result = fake.generate(schema);
|
|
94
94
|
|
|
@@ -97,7 +97,7 @@ describe("FakeProvider", () => {
|
|
|
97
97
|
});
|
|
98
98
|
|
|
99
99
|
test("generates URL", ({ expect }) => {
|
|
100
|
-
const fake = new FakeProvider(
|
|
100
|
+
const fake = new FakeProvider();
|
|
101
101
|
const schema = t.string({ format: "url" });
|
|
102
102
|
const result = fake.generate(schema);
|
|
103
103
|
|
|
@@ -106,7 +106,7 @@ describe("FakeProvider", () => {
|
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
test("generates bigint", ({ expect }) => {
|
|
109
|
-
const fake = new FakeProvider(
|
|
109
|
+
const fake = new FakeProvider();
|
|
110
110
|
const schema = t.string({ format: "bigint" });
|
|
111
111
|
const result = fake.generate(schema);
|
|
112
112
|
|
|
@@ -115,7 +115,7 @@ describe("FakeProvider", () => {
|
|
|
115
115
|
});
|
|
116
116
|
|
|
117
117
|
test("generates E.164 phone number", ({ expect }) => {
|
|
118
|
-
const fake = new FakeProvider(
|
|
118
|
+
const fake = new FakeProvider();
|
|
119
119
|
const schema = t.e164();
|
|
120
120
|
const result = fake.generate(schema);
|
|
121
121
|
|
|
@@ -124,7 +124,7 @@ describe("FakeProvider", () => {
|
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
test("generates BCP 47 language tag", ({ expect }) => {
|
|
127
|
-
const fake = new FakeProvider(
|
|
127
|
+
const fake = new FakeProvider();
|
|
128
128
|
const schema = t.bcp47();
|
|
129
129
|
const result = fake.generate(schema);
|
|
130
130
|
|
|
@@ -133,7 +133,7 @@ describe("FakeProvider", () => {
|
|
|
133
133
|
});
|
|
134
134
|
|
|
135
135
|
test("generates snake_case string", ({ expect }) => {
|
|
136
|
-
const fake = new FakeProvider(
|
|
136
|
+
const fake = new FakeProvider();
|
|
137
137
|
const schema = t.snakeCase();
|
|
138
138
|
const result = fake.generate(schema);
|
|
139
139
|
|
|
@@ -142,7 +142,7 @@ describe("FakeProvider", () => {
|
|
|
142
142
|
});
|
|
143
143
|
|
|
144
144
|
test("generates enum values", ({ expect }) => {
|
|
145
|
-
const fake = new FakeProvider(
|
|
145
|
+
const fake = new FakeProvider();
|
|
146
146
|
const schema = t.enum(["red", "green", "blue"]);
|
|
147
147
|
const result = fake.generate(schema);
|
|
148
148
|
|
|
@@ -150,30 +150,40 @@ describe("FakeProvider", () => {
|
|
|
150
150
|
});
|
|
151
151
|
|
|
152
152
|
test("generates array of values", ({ expect }) => {
|
|
153
|
-
const fake = new FakeProvider(
|
|
153
|
+
const fake = new FakeProvider();
|
|
154
|
+
// Note: Alepha's t.array() sets maxItems: 1000 by default
|
|
155
|
+
// FakeProvider caps it to maxArrayLength (default 20)
|
|
154
156
|
const schema = t.array(t.string());
|
|
155
157
|
const result = fake.generate(schema);
|
|
156
158
|
|
|
157
159
|
expect(Array.isArray(result)).toBe(true);
|
|
158
160
|
expect(result.length).toBeGreaterThanOrEqual(0);
|
|
159
|
-
expect(result.length).toBeLessThanOrEqual(
|
|
161
|
+
expect(result.length).toBeLessThanOrEqual(20); // maxArrayLength default
|
|
160
162
|
result.forEach((item: unknown) => {
|
|
161
163
|
expect(typeof item).toBe("string");
|
|
162
164
|
});
|
|
163
165
|
});
|
|
164
166
|
|
|
165
167
|
test("generates array with size constraints", ({ expect }) => {
|
|
166
|
-
const fake = new FakeProvider(
|
|
168
|
+
const fake = new FakeProvider();
|
|
167
169
|
const schema = t.array(t.number(), { minItems: 3, maxItems: 7 });
|
|
168
|
-
const result = fake.generate(schema);
|
|
169
170
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
// Generate multiple times to verify constraints are respected
|
|
172
|
+
const results = Array.from({ length: 20 }, () => fake.generate(schema));
|
|
173
|
+
|
|
174
|
+
for (const result of results) {
|
|
175
|
+
expect(Array.isArray(result)).toBe(true);
|
|
176
|
+
expect(result.length).toBeGreaterThanOrEqual(3);
|
|
177
|
+
expect(result.length).toBeLessThanOrEqual(7);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Verify we actually get some arrays with length > 5 (old cap was 5)
|
|
181
|
+
const hasLargerArray = results.some((r) => r.length > 5);
|
|
182
|
+
expect(hasLargerArray).toBe(true);
|
|
173
183
|
});
|
|
174
184
|
|
|
175
185
|
test("generates object with properties", ({ expect }) => {
|
|
176
|
-
const fake = new FakeProvider(
|
|
186
|
+
const fake = new FakeProvider();
|
|
177
187
|
const schema = t.object({
|
|
178
188
|
id: t.uuid(),
|
|
179
189
|
name: t.text(),
|
|
@@ -194,7 +204,7 @@ describe("FakeProvider", () => {
|
|
|
194
204
|
});
|
|
195
205
|
|
|
196
206
|
test("generates nested objects", ({ expect }) => {
|
|
197
|
-
const fake = new FakeProvider(
|
|
207
|
+
const fake = new FakeProvider();
|
|
198
208
|
const schema = t.object({
|
|
199
209
|
user: t.object({
|
|
200
210
|
name: t.text(),
|
|
@@ -217,7 +227,7 @@ describe("FakeProvider", () => {
|
|
|
217
227
|
});
|
|
218
228
|
|
|
219
229
|
test("generates optional values", ({ expect }) => {
|
|
220
|
-
const fake = new FakeProvider(
|
|
230
|
+
const fake = new FakeProvider();
|
|
221
231
|
const schema = t.object({
|
|
222
232
|
required: t.text(),
|
|
223
233
|
optional: t.optional(t.text()),
|
|
@@ -241,7 +251,7 @@ describe("FakeProvider", () => {
|
|
|
241
251
|
});
|
|
242
252
|
|
|
243
253
|
test("generates nullable values", ({ expect }) => {
|
|
244
|
-
const fake = new FakeProvider(
|
|
254
|
+
const fake = new FakeProvider();
|
|
245
255
|
const schema = t.object({
|
|
246
256
|
required: t.text(),
|
|
247
257
|
nullable: t.nullable(t.text()),
|
|
@@ -265,7 +275,7 @@ describe("FakeProvider", () => {
|
|
|
265
275
|
});
|
|
266
276
|
|
|
267
277
|
test("generates union types", ({ expect }) => {
|
|
268
|
-
const fake = new FakeProvider(
|
|
278
|
+
const fake = new FakeProvider();
|
|
269
279
|
const schema = t.union([t.string(), t.number(), t.boolean()]);
|
|
270
280
|
const result = fake.generate(schema);
|
|
271
281
|
|
|
@@ -274,7 +284,7 @@ describe("FakeProvider", () => {
|
|
|
274
284
|
});
|
|
275
285
|
|
|
276
286
|
test("generates record types", ({ expect }) => {
|
|
277
|
-
const fake = new FakeProvider(
|
|
287
|
+
const fake = new FakeProvider();
|
|
278
288
|
const schema = t.record(t.string(), t.number());
|
|
279
289
|
const result = fake.generate(schema);
|
|
280
290
|
|
|
@@ -288,7 +298,7 @@ describe("FakeProvider", () => {
|
|
|
288
298
|
});
|
|
289
299
|
|
|
290
300
|
test("generates tuple types", ({ expect }) => {
|
|
291
|
-
const fake = new FakeProvider(
|
|
301
|
+
const fake = new FakeProvider();
|
|
292
302
|
const schema = t.tuple([t.string(), t.number(), t.boolean()]);
|
|
293
303
|
const result = fake.generate(schema);
|
|
294
304
|
|
|
@@ -300,7 +310,7 @@ describe("FakeProvider", () => {
|
|
|
300
310
|
});
|
|
301
311
|
|
|
302
312
|
test("generates literal values", ({ expect }) => {
|
|
303
|
-
const fake = new FakeProvider(
|
|
313
|
+
const fake = new FakeProvider();
|
|
304
314
|
const schema = t.const("ACTIVE");
|
|
305
315
|
const result = fake.generate(schema);
|
|
306
316
|
|
|
@@ -308,7 +318,7 @@ describe("FakeProvider", () => {
|
|
|
308
318
|
});
|
|
309
319
|
|
|
310
320
|
test("generates null", ({ expect }) => {
|
|
311
|
-
const fake = new FakeProvider(
|
|
321
|
+
const fake = new FakeProvider();
|
|
312
322
|
const schema = t.null();
|
|
313
323
|
const result = fake.generate(schema);
|
|
314
324
|
|
|
@@ -316,7 +326,7 @@ describe("FakeProvider", () => {
|
|
|
316
326
|
});
|
|
317
327
|
|
|
318
328
|
test("generates undefined", ({ expect }) => {
|
|
319
|
-
const fake = new FakeProvider(
|
|
329
|
+
const fake = new FakeProvider();
|
|
320
330
|
const schema = t.undefined();
|
|
321
331
|
const result = fake.generate(schema);
|
|
322
332
|
|
|
@@ -324,7 +334,7 @@ describe("FakeProvider", () => {
|
|
|
324
334
|
});
|
|
325
335
|
|
|
326
336
|
test("generates void as undefined", ({ expect }) => {
|
|
327
|
-
const fake = new FakeProvider(
|
|
337
|
+
const fake = new FakeProvider();
|
|
328
338
|
const schema = t.void();
|
|
329
339
|
const result = fake.generate(schema);
|
|
330
340
|
|
|
@@ -332,7 +342,7 @@ describe("FakeProvider", () => {
|
|
|
332
342
|
});
|
|
333
343
|
|
|
334
344
|
test("generates any type", ({ expect }) => {
|
|
335
|
-
const fake = new FakeProvider(
|
|
345
|
+
const fake = new FakeProvider();
|
|
336
346
|
const schema = t.any();
|
|
337
347
|
const result = fake.generate(schema);
|
|
338
348
|
|
|
@@ -341,7 +351,7 @@ describe("FakeProvider", () => {
|
|
|
341
351
|
});
|
|
342
352
|
|
|
343
353
|
test("generateMany produces multiple values", ({ expect }) => {
|
|
344
|
-
const fake = new FakeProvider(
|
|
354
|
+
const fake = new FakeProvider();
|
|
345
355
|
const schema = t.object({
|
|
346
356
|
id: t.uuid(),
|
|
347
357
|
name: t.text(),
|
|
@@ -364,12 +374,12 @@ describe("FakeProvider", () => {
|
|
|
364
374
|
});
|
|
365
375
|
|
|
366
376
|
// Generate with same seed - should produce same results
|
|
367
|
-
const fake1 = new FakeProvider({ seed: 99999 });
|
|
377
|
+
const fake1 = new FakeProvider().configure({ seed: 99999 });
|
|
368
378
|
const result1a = fake1.generate(schema);
|
|
369
379
|
const result1b = fake1.generate(schema);
|
|
370
380
|
|
|
371
381
|
// Create new instance with same seed
|
|
372
|
-
const fake2 = new FakeProvider({ seed: 99999 });
|
|
382
|
+
const fake2 = new FakeProvider().configure({ seed: 99999 });
|
|
373
383
|
const result2a = fake2.generate(schema);
|
|
374
384
|
|
|
375
385
|
// First result from both instances should match
|
|
@@ -391,7 +401,7 @@ describe("FakeProvider", () => {
|
|
|
391
401
|
});
|
|
392
402
|
|
|
393
403
|
test("complex nested schema", ({ expect }) => {
|
|
394
|
-
const fake = new FakeProvider(
|
|
404
|
+
const fake = new FakeProvider();
|
|
395
405
|
const schema = t.object({
|
|
396
406
|
id: t.uuid(),
|
|
397
407
|
user: t.object({
|
|
@@ -423,7 +433,7 @@ describe("FakeProvider", () => {
|
|
|
423
433
|
});
|
|
424
434
|
|
|
425
435
|
test("valueLabel pattern", ({ expect }) => {
|
|
426
|
-
const fake = new FakeProvider(
|
|
436
|
+
const fake = new FakeProvider();
|
|
427
437
|
const schema = t.valueLabel();
|
|
428
438
|
const result = fake.generate(schema);
|
|
429
439
|
|
|
@@ -435,4 +445,212 @@ describe("FakeProvider", () => {
|
|
|
435
445
|
expect(typeof result.description).toBe("string");
|
|
436
446
|
}
|
|
437
447
|
});
|
|
448
|
+
|
|
449
|
+
test("context-aware generation for string fields", ({ expect }) => {
|
|
450
|
+
const fake = new FakeProvider();
|
|
451
|
+
const schema = t.object({
|
|
452
|
+
email: t.string(),
|
|
453
|
+
firstName: t.string(),
|
|
454
|
+
lastName: t.string(),
|
|
455
|
+
name: t.string(),
|
|
456
|
+
username: t.string(),
|
|
457
|
+
phone: t.string(),
|
|
458
|
+
address: t.string(),
|
|
459
|
+
city: t.string(),
|
|
460
|
+
country: t.string(),
|
|
461
|
+
company: t.string(),
|
|
462
|
+
url: t.string(),
|
|
463
|
+
});
|
|
464
|
+
const result = fake.generate(schema);
|
|
465
|
+
|
|
466
|
+
expect(result.email).toMatch(/@/);
|
|
467
|
+
expect(typeof result.firstName).toBe("string");
|
|
468
|
+
expect(typeof result.lastName).toBe("string");
|
|
469
|
+
expect(typeof result.name).toBe("string");
|
|
470
|
+
expect(typeof result.username).toBe("string");
|
|
471
|
+
expect(typeof result.phone).toBe("string");
|
|
472
|
+
expect(typeof result.address).toBe("string");
|
|
473
|
+
expect(typeof result.city).toBe("string");
|
|
474
|
+
expect(typeof result.country).toBe("string");
|
|
475
|
+
expect(typeof result.company).toBe("string");
|
|
476
|
+
expect(result.url).toMatch(/^https?:\/\//);
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
test("context-aware generation handles snake_case field names", ({
|
|
480
|
+
expect,
|
|
481
|
+
}) => {
|
|
482
|
+
const fake = new FakeProvider();
|
|
483
|
+
const schema = t.object({
|
|
484
|
+
user_name: t.string(),
|
|
485
|
+
first_name: t.string(),
|
|
486
|
+
last_name: t.string(),
|
|
487
|
+
full_name: t.string(),
|
|
488
|
+
phone_number: t.string(),
|
|
489
|
+
email_address: t.string(),
|
|
490
|
+
});
|
|
491
|
+
const result = fake.generate(schema);
|
|
492
|
+
|
|
493
|
+
expect(typeof result.user_name).toBe("string");
|
|
494
|
+
expect(typeof result.first_name).toBe("string");
|
|
495
|
+
expect(typeof result.last_name).toBe("string");
|
|
496
|
+
expect(typeof result.full_name).toBe("string");
|
|
497
|
+
expect(typeof result.phone_number).toBe("string");
|
|
498
|
+
expect(result.email_address).toMatch(/@/);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
test("context-aware generation handles kebab-case field names", ({
|
|
502
|
+
expect,
|
|
503
|
+
}) => {
|
|
504
|
+
const fake = new FakeProvider();
|
|
505
|
+
const schema = t.object({
|
|
506
|
+
"user-name": t.string(),
|
|
507
|
+
"first-name": t.string(),
|
|
508
|
+
"last-name": t.string(),
|
|
509
|
+
"e-mail": t.string(),
|
|
510
|
+
});
|
|
511
|
+
const result = fake.generate(schema);
|
|
512
|
+
|
|
513
|
+
expect(typeof result["user-name"]).toBe("string");
|
|
514
|
+
expect(typeof result["first-name"]).toBe("string");
|
|
515
|
+
expect(typeof result["last-name"]).toBe("string");
|
|
516
|
+
expect(result["e-mail"]).toMatch(/@/);
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
test("context-aware generation for number fields", ({ expect }) => {
|
|
520
|
+
const fake = new FakeProvider();
|
|
521
|
+
const schema = t.object({
|
|
522
|
+
age: t.integer(),
|
|
523
|
+
year: t.integer(),
|
|
524
|
+
month: t.integer(),
|
|
525
|
+
day: t.integer(),
|
|
526
|
+
price: t.number(),
|
|
527
|
+
user_age: t.integer(),
|
|
528
|
+
});
|
|
529
|
+
const result = fake.generate(schema);
|
|
530
|
+
|
|
531
|
+
expect(result.age).toBeGreaterThanOrEqual(18);
|
|
532
|
+
expect(result.age).toBeLessThanOrEqual(99);
|
|
533
|
+
expect(result.year).toBeGreaterThan(1900);
|
|
534
|
+
expect(result.month).toBeGreaterThanOrEqual(1);
|
|
535
|
+
expect(result.month).toBeLessThanOrEqual(12);
|
|
536
|
+
expect(result.day).toBeGreaterThanOrEqual(1);
|
|
537
|
+
expect(result.day).toBeLessThanOrEqual(31);
|
|
538
|
+
expect(result.price).toBeGreaterThan(0);
|
|
539
|
+
expect(result.user_age).toBeGreaterThanOrEqual(18);
|
|
540
|
+
expect(result.user_age).toBeLessThanOrEqual(99);
|
|
541
|
+
});
|
|
542
|
+
|
|
543
|
+
test("context-aware generation respects explicit formats", ({ expect }) => {
|
|
544
|
+
const fake = new FakeProvider();
|
|
545
|
+
const schema = t.object({
|
|
546
|
+
// Even though field is named "email", the uuid format takes precedence
|
|
547
|
+
email: t.uuid(),
|
|
548
|
+
});
|
|
549
|
+
const result = fake.generate(schema);
|
|
550
|
+
|
|
551
|
+
expect(result.email).toMatch(
|
|
552
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
|
|
553
|
+
);
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
test("context-aware generation respects enum values", ({ expect }) => {
|
|
557
|
+
const fake = new FakeProvider();
|
|
558
|
+
const schema = t.object({
|
|
559
|
+
// Even though field is named "username", the enum takes precedence
|
|
560
|
+
username: t.enum(["admin", "user", "guest"]),
|
|
561
|
+
});
|
|
562
|
+
const result = fake.generate(schema);
|
|
563
|
+
|
|
564
|
+
expect(["admin", "user", "guest"]).toContain(result.username);
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
test("respects optionalProbability option", ({ expect }) => {
|
|
568
|
+
// With probability 0, optional should never be undefined
|
|
569
|
+
const fakeNever = new FakeProvider().configure({ optionalProbability: 0 });
|
|
570
|
+
const schema = t.object({ value: t.optional(t.string()) });
|
|
571
|
+
const resultsNever = Array.from({ length: 20 }, () =>
|
|
572
|
+
fakeNever.generate(schema),
|
|
573
|
+
);
|
|
574
|
+
expect(resultsNever.every((r) => r.value !== undefined)).toBe(true);
|
|
575
|
+
|
|
576
|
+
// With probability 1, optional should always be undefined
|
|
577
|
+
const fakeAlways = new FakeProvider().configure({ optionalProbability: 1 });
|
|
578
|
+
const resultsAlways = Array.from({ length: 20 }, () =>
|
|
579
|
+
fakeAlways.generate(schema),
|
|
580
|
+
);
|
|
581
|
+
expect(resultsAlways.every((r) => r.value === undefined)).toBe(true);
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
test("respects nullableProbability option", ({ expect }) => {
|
|
585
|
+
// With probability 0, nullable should never be null
|
|
586
|
+
const fakeNever = new FakeProvider().configure({ nullableProbability: 0 });
|
|
587
|
+
const schema = t.object({ value: t.nullable(t.string()) });
|
|
588
|
+
const resultsNever = Array.from({ length: 20 }, () =>
|
|
589
|
+
fakeNever.generate(schema),
|
|
590
|
+
);
|
|
591
|
+
expect(resultsNever.every((r) => r.value !== null)).toBe(true);
|
|
592
|
+
|
|
593
|
+
// With probability 1, nullable should always be null
|
|
594
|
+
const fakeAlways = new FakeProvider().configure({ nullableProbability: 1 });
|
|
595
|
+
const resultsAlways = Array.from({ length: 20 }, () =>
|
|
596
|
+
fakeAlways.generate(schema),
|
|
597
|
+
);
|
|
598
|
+
expect(resultsAlways.every((r) => r.value === null)).toBe(true);
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
test("respects maxArrayLength option", ({ expect }) => {
|
|
602
|
+
// With maxArrayLength: 10, arrays should not exceed 10 items
|
|
603
|
+
const fake = new FakeProvider().configure({ maxArrayLength: 10 });
|
|
604
|
+
const schema = t.array(t.number(), { minItems: 1, maxItems: 100 });
|
|
605
|
+
const results = Array.from({ length: 20 }, () => fake.generate(schema));
|
|
606
|
+
|
|
607
|
+
for (const result of results) {
|
|
608
|
+
expect(result.length).toBeLessThanOrEqual(10);
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
test("respects defaultArrayLength option", ({ expect }) => {
|
|
613
|
+
// With defaultArrayLength: 3, arrays without maxItems should default to 3
|
|
614
|
+
// Note: Use TypeBox directly since Alepha's t.array() always sets maxItems: 1000
|
|
615
|
+
const fake = new FakeProvider().configure({
|
|
616
|
+
defaultArrayLength: 3,
|
|
617
|
+
maxArrayLength: 100,
|
|
618
|
+
});
|
|
619
|
+
const schema = Type.Array(Type.Number()); // No minItems/maxItems
|
|
620
|
+
const results = Array.from({ length: 20 }, () => fake.generate(schema));
|
|
621
|
+
|
|
622
|
+
for (const result of results) {
|
|
623
|
+
expect(result.length).toBeLessThanOrEqual(3);
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
|
|
627
|
+
test("respects defaultRecordEntries option", ({ expect }) => {
|
|
628
|
+
const fake = new FakeProvider().configure({
|
|
629
|
+
defaultRecordEntries: { min: 5, max: 5 },
|
|
630
|
+
});
|
|
631
|
+
const schema = t.record(t.string(), t.number());
|
|
632
|
+
const result = fake.generate(schema);
|
|
633
|
+
|
|
634
|
+
expect(Object.keys(result).length).toBe(5);
|
|
635
|
+
});
|
|
636
|
+
|
|
637
|
+
test("configure() reseeds faker when seed changes", ({ expect }) => {
|
|
638
|
+
const schema = t.uuid();
|
|
639
|
+
const fake = new FakeProvider();
|
|
640
|
+
|
|
641
|
+
// Generate with default seed
|
|
642
|
+
const result1 = fake.generate(schema);
|
|
643
|
+
|
|
644
|
+
// Reconfigure with same seed - should reset and produce same result
|
|
645
|
+
fake.configure({ seed: 12345 });
|
|
646
|
+
const result2 = fake.generate(schema);
|
|
647
|
+
|
|
648
|
+
expect(result2).toBe(result1);
|
|
649
|
+
|
|
650
|
+
// Reconfigure with different seed - should produce different result
|
|
651
|
+
fake.configure({ seed: 99999 });
|
|
652
|
+
const result3 = fake.generate(schema);
|
|
653
|
+
|
|
654
|
+
expect(result3).not.toBe(result1);
|
|
655
|
+
});
|
|
438
656
|
});
|