alepha 0.14.1 → 0.14.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 +3 -3
- package/dist/api/audits/index.browser.js +5 -5
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +784 -784
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +13 -13
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +57 -57
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +71 -71
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +165 -165
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +10 -10
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +10 -10
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +583 -171
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +12 -12
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +163 -10
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +281 -276
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +196 -91
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.browser.js +19 -19
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +778 -764
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +831 -596
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js +6 -6
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +125 -125
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +6 -6
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/bin/index.d.ts +1 -2
- package/dist/bin/index.js +0 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cli/index.d.ts +249 -218
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +951 -821
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +40 -0
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +97 -17
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +14 -18
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +29 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +21 -24
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +21 -24
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.js.map +1 -1
- package/dist/fake/index.js +195 -168
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +8 -0
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +3 -0
- package/dist/file/index.js.map +1 -1
- package/dist/lock/redis/index.js.map +1 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +26 -5
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.d.ts +146 -121
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +49 -24
- package/dist/orm/index.js.map +1 -1
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.js.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +6 -6
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +29 -29
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +171 -155
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +0 -1
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/compress/index.js +2 -0
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/cookies/index.browser.js.map +1 -1
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +1 -1
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/health/index.d.ts +17 -17
- package/dist/server/helmet/index.js.map +1 -1
- package/dist/server/links/index.browser.js +22 -6
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +46 -44
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +24 -41
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/multipart/index.js.map +1 -1
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/security/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +2 -1
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +8 -3
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.js.map +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +12 -4
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.js.map +1 -1
- package/package.json +7 -7
- package/src/api/audits/controllers/{AuditController.ts → AdminAuditController.ts} +5 -6
- package/src/api/audits/entities/audits.ts +5 -5
- package/src/api/audits/index.browser.ts +1 -1
- package/src/api/audits/index.ts +3 -3
- package/src/api/audits/primitives/$audit.spec.ts +276 -0
- package/src/api/audits/services/AuditService.spec.ts +495 -0
- package/src/api/files/__tests__/$bucket.spec.ts +91 -0
- package/src/api/files/controllers/AdminFileStatsController.spec.ts +166 -0
- package/src/api/files/controllers/{StorageStatsController.ts → AdminFileStatsController.ts} +2 -2
- package/src/api/files/controllers/FileController.spec.ts +558 -0
- package/src/api/files/controllers/FileController.ts +4 -5
- package/src/api/files/entities/files.ts +5 -5
- package/src/api/files/index.browser.ts +1 -1
- package/src/api/files/index.ts +4 -4
- package/src/api/files/jobs/FileJobs.spec.ts +52 -0
- package/src/api/files/services/FileService.spec.ts +109 -0
- package/src/api/jobs/__tests__/JobController.spec.ts +343 -0
- package/src/api/jobs/controllers/{JobController.ts → AdminJobController.ts} +2 -2
- package/src/api/jobs/entities/jobExecutions.ts +5 -5
- package/src/api/jobs/index.ts +3 -3
- package/src/api/jobs/primitives/$job.spec.ts +476 -0
- package/src/api/notifications/controllers/{NotificationController.ts → AdminNotificationController.ts} +4 -5
- package/src/api/notifications/entities/notifications.ts +5 -5
- package/src/api/notifications/index.browser.ts +1 -1
- package/src/api/notifications/index.ts +4 -4
- package/src/api/parameters/controllers/{ConfigController.ts → AdminConfigController.ts} +46 -107
- package/src/api/parameters/entities/parameters.ts +7 -17
- package/src/api/parameters/index.ts +3 -3
- package/src/api/parameters/primitives/$config.spec.ts +356 -0
- package/src/api/parameters/schemas/activateConfigBodySchema.ts +12 -0
- package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configCurrentResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/configHistoryResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configNameParamSchema.ts +10 -0
- package/src/api/parameters/schemas/configNamesResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configTreeNodeSchema.ts +13 -0
- package/src/api/parameters/schemas/configVersionParamSchema.ts +9 -0
- package/src/api/parameters/schemas/configVersionResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +24 -0
- package/src/api/parameters/schemas/index.ts +15 -0
- package/src/api/parameters/schemas/parameterResponseSchema.ts +26 -0
- package/src/api/parameters/schemas/parameterStatusSchema.ts +13 -0
- package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +15 -0
- package/src/api/parameters/schemas/statusParamSchema.ts +9 -0
- package/src/api/users/__tests__/EmailVerification.spec.ts +369 -0
- package/src/api/users/__tests__/PasswordReset.spec.ts +550 -0
- package/src/api/users/controllers/AdminIdentityController.spec.ts +365 -0
- package/src/api/users/controllers/{IdentityController.ts → AdminIdentityController.ts} +3 -4
- package/src/api/users/controllers/AdminSessionController.spec.ts +274 -0
- package/src/api/users/controllers/{SessionController.ts → AdminSessionController.ts} +3 -4
- package/src/api/users/controllers/AdminUserController.spec.ts +372 -0
- package/src/api/users/controllers/AdminUserController.ts +116 -0
- package/src/api/users/controllers/UserController.ts +4 -107
- package/src/api/users/controllers/UserRealmController.ts +3 -0
- package/src/api/users/entities/identities.ts +6 -6
- package/src/api/users/entities/sessions.ts +6 -6
- package/src/api/users/entities/users.ts +9 -9
- package/src/api/users/index.ts +13 -6
- package/src/api/users/primitives/$userRealm.ts +13 -8
- package/src/api/users/services/CredentialService.spec.ts +509 -0
- package/src/api/users/services/CredentialService.ts +46 -0
- package/src/api/users/services/IdentityService.ts +15 -0
- package/src/api/users/services/RegistrationService.spec.ts +630 -0
- package/src/api/users/services/RegistrationService.ts +18 -0
- package/src/api/users/services/SessionService.spec.ts +301 -0
- package/src/api/users/services/SessionService.ts +110 -1
- package/src/api/users/services/UserService.ts +67 -2
- package/src/api/verifications/__tests__/CodeVerification.spec.ts +318 -0
- package/src/api/verifications/__tests__/LinkVerification.spec.ts +279 -0
- package/src/api/verifications/entities/verifications.ts +6 -6
- package/src/api/verifications/jobs/VerificationJobs.spec.ts +50 -0
- package/src/batch/__tests__/startup-buffering.spec.ts +458 -0
- package/src/batch/primitives/$batch.spec.ts +766 -0
- package/src/batch/providers/BatchProvider.spec.ts +786 -0
- package/src/bin/index.ts +0 -1
- package/src/bucket/__tests__/shared.ts +194 -0
- package/src/bucket/primitives/$bucket.spec.ts +104 -0
- package/src/bucket/providers/FileStorageProvider.spec.ts +13 -0
- package/src/bucket/providers/LocalFileStorageProvider.spec.ts +77 -0
- package/src/bucket/providers/MemoryFileStorageProvider.spec.ts +82 -0
- package/src/cache/core/__tests__/shared.ts +377 -0
- package/src/cache/core/primitives/$cache.spec.ts +111 -0
- package/src/cache/redis/__tests__/cache-redis.spec.ts +70 -0
- package/src/cli/apps/AlephaCli.ts +54 -16
- package/src/cli/apps/AlephaPackageBuilderCli.ts +2 -1
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/commands/{ViteCommands.ts → build.ts} +2 -105
- package/src/cli/commands/clean.ts +14 -0
- package/src/cli/commands/{DrizzleCommands.ts → db.ts} +10 -117
- package/src/cli/commands/{DeployCommands.ts → deploy.ts} +1 -1
- package/src/cli/commands/dev.ts +69 -0
- package/src/cli/commands/format.ts +17 -0
- package/src/cli/commands/gen/changelog.spec.ts +315 -0
- package/src/cli/commands/{ChangelogCommands.ts → gen/changelog.ts} +16 -31
- package/src/cli/commands/gen/openapi.ts +71 -0
- package/src/cli/commands/gen.ts +18 -0
- package/src/cli/commands/{CoreCommands.ts → init.ts} +4 -40
- package/src/cli/commands/lint.ts +17 -0
- package/src/cli/commands/root.ts +41 -0
- package/src/cli/commands/run.ts +24 -0
- package/src/cli/commands/test.ts +42 -0
- package/src/cli/commands/typecheck.ts +24 -0
- package/src/cli/commands/{VerifyCommands.ts → verify.ts} +1 -13
- package/src/cli/defineConfig.ts +10 -1
- package/src/cli/index.ts +17 -7
- package/src/cli/services/AlephaCliUtils.ts +71 -32
- package/src/cli/services/GitMessageParser.ts +1 -1
- package/src/command/helpers/Asker.spec.ts +127 -0
- package/src/command/helpers/Runner.spec.ts +126 -0
- package/src/command/primitives/$command.spec.ts +1588 -0
- package/src/command/providers/CliProvider.ts +74 -24
- package/src/core/Alepha.ts +52 -4
- package/src/core/__tests__/Alepha-emit.spec.ts +22 -0
- package/src/core/__tests__/Alepha-graph.spec.ts +93 -0
- package/src/core/__tests__/Alepha-has.spec.ts +41 -0
- package/src/core/__tests__/Alepha-inject.spec.ts +93 -0
- package/src/core/__tests__/Alepha-register.spec.ts +81 -0
- package/src/core/__tests__/Alepha-start.spec.ts +176 -0
- package/src/core/__tests__/Alepha-with.spec.ts +14 -0
- package/src/core/__tests__/TypeBox-usecases.spec.ts +35 -0
- package/src/core/__tests__/TypeBoxLocale.spec.ts +15 -0
- package/src/core/__tests__/descriptor.spec.ts +34 -0
- package/src/core/__tests__/fixtures/A.ts +5 -0
- package/src/core/__tests__/pagination.spec.ts +77 -0
- package/src/core/helpers/jsonSchemaToTypeBox.ts +2 -2
- package/src/core/primitives/$atom.spec.ts +43 -0
- package/src/core/primitives/$hook.spec.ts +130 -0
- package/src/core/primitives/$inject.spec.ts +175 -0
- package/src/core/primitives/$module.spec.ts +115 -0
- package/src/core/providers/CodecManager.spec.ts +740 -0
- package/src/core/providers/EventManager.spec.ts +762 -0
- package/src/core/providers/EventManager.ts +4 -0
- package/src/core/providers/StateManager.spec.ts +365 -0
- package/src/core/providers/TypeProvider.spec.ts +1607 -0
- package/src/core/providers/TypeProvider.ts +20 -26
- package/src/datetime/primitives/$interval.spec.ts +103 -0
- package/src/datetime/providers/DateTimeProvider.spec.ts +86 -0
- package/src/email/primitives/$email.spec.ts +175 -0
- package/src/email/providers/LocalEmailProvider.spec.ts +341 -0
- package/src/fake/__tests__/keyName.example.ts +40 -0
- package/src/fake/__tests__/keyName.spec.ts +152 -0
- package/src/fake/__tests__/module.example.ts +32 -0
- package/src/fake/providers/FakeProvider.spec.ts +438 -0
- package/src/file/providers/FileSystemProvider.ts +8 -0
- package/src/file/providers/NodeFileSystemProvider.spec.ts +418 -0
- package/src/file/providers/NodeFileSystemProvider.ts +5 -0
- package/src/file/services/FileDetector.spec.ts +591 -0
- package/src/lock/core/__tests__/shared.ts +190 -0
- package/src/lock/core/providers/MemoryLockProvider.spec.ts +25 -0
- package/src/lock/redis/providers/RedisLockProvider.spec.ts +25 -0
- package/src/logger/__tests__/SimpleFormatterProvider.spec.ts +109 -0
- package/src/logger/primitives/$logger.spec.ts +108 -0
- package/src/logger/services/Logger.spec.ts +295 -0
- package/src/mcp/__tests__/errors.spec.ts +175 -0
- package/src/mcp/__tests__/integration.spec.ts +450 -0
- package/src/mcp/helpers/jsonrpc.spec.ts +380 -0
- package/src/mcp/primitives/$prompt.spec.ts +468 -0
- package/src/mcp/primitives/$resource.spec.ts +390 -0
- package/src/mcp/primitives/$tool.spec.ts +406 -0
- package/src/mcp/providers/McpServerProvider.spec.ts +797 -0
- package/src/orm/__tests__/$repository-crud.spec.ts +276 -0
- package/src/orm/__tests__/$repository-hooks.spec.ts +325 -0
- package/src/orm/__tests__/$repository-orderBy.spec.ts +128 -0
- package/src/orm/__tests__/$repository-pagination-sort.spec.ts +149 -0
- package/src/orm/__tests__/$repository-save.spec.ts +37 -0
- package/src/orm/__tests__/ModelBuilder-integration.spec.ts +490 -0
- package/src/orm/__tests__/ModelBuilder-types.spec.ts +186 -0
- package/src/orm/__tests__/PostgresProvider.spec.ts +46 -0
- package/src/orm/__tests__/delete-returning.spec.ts +256 -0
- package/src/orm/__tests__/deletedAt.spec.ts +80 -0
- package/src/orm/__tests__/enums.spec.ts +315 -0
- package/src/orm/__tests__/execute.spec.ts +72 -0
- package/src/orm/__tests__/fixtures/bigEntitySchema.ts +65 -0
- package/src/orm/__tests__/fixtures/userEntitySchema.ts +27 -0
- package/src/orm/__tests__/joins.spec.ts +1114 -0
- package/src/orm/__tests__/page.spec.ts +287 -0
- package/src/orm/__tests__/primaryKey.spec.ts +87 -0
- package/src/orm/__tests__/query-date-encoding.spec.ts +402 -0
- package/src/orm/__tests__/ref-auto-onDelete.spec.ts +156 -0
- package/src/orm/__tests__/references.spec.ts +102 -0
- package/src/orm/__tests__/security.spec.ts +710 -0
- package/src/orm/__tests__/sqlite.spec.ts +111 -0
- package/src/orm/__tests__/string-operators.spec.ts +429 -0
- package/src/orm/__tests__/timestamps.spec.ts +388 -0
- package/src/orm/__tests__/validation.spec.ts +183 -0
- package/src/orm/__tests__/version.spec.ts +64 -0
- package/src/orm/helpers/parseQueryString.spec.ts +196 -0
- package/src/orm/index.browser.ts +1 -1
- package/src/orm/index.ts +10 -6
- package/src/orm/primitives/$repository.spec.ts +137 -0
- package/src/orm/primitives/$sequence.spec.ts +29 -0
- package/src/orm/primitives/$transaction.spec.ts +82 -0
- package/src/orm/providers/{PostgresTypeProvider.ts → DatabaseTypeProvider.ts} +25 -3
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +1 -1
- package/src/orm/providers/drivers/DatabaseProvider.ts +1 -1
- package/src/orm/providers/drivers/NodePostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +2 -2
- package/src/orm/services/ModelBuilder.spec.ts +575 -0
- package/src/orm/services/Repository.spec.ts +137 -0
- package/src/queue/core/__tests__/shared.ts +143 -0
- package/src/queue/core/providers/MemoryQueueProvider.spec.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.spec.ts +378 -0
- package/src/queue/redis/providers/RedisQueueProvider.spec.ts +23 -0
- package/src/redis/__tests__/redis.spec.ts +58 -0
- package/src/retry/primitives/$retry.spec.ts +234 -0
- package/src/retry/providers/RetryProvider.spec.ts +438 -0
- package/src/router/__tests__/match.spec.ts +252 -0
- package/src/router/providers/RouterProvider.spec.ts +197 -0
- package/src/scheduler/__tests__/$scheduler-cron.spec.ts +25 -0
- package/src/scheduler/__tests__/$scheduler-interval.spec.ts +25 -0
- package/src/scheduler/__tests__/shared.ts +77 -0
- package/src/security/__tests__/bug-1-wildcard-after-start.spec.ts +229 -0
- package/src/security/__tests__/bug-2-password-validation.spec.ts +245 -0
- package/src/security/__tests__/bug-3-regex-vulnerability.spec.ts +407 -0
- package/src/security/__tests__/bug-4-oauth2-validation.spec.ts +439 -0
- package/src/security/__tests__/multi-layer-permissions.spec.ts +522 -0
- package/src/security/primitives/$permission.spec.ts +30 -0
- package/src/security/primitives/$permission.ts +2 -2
- package/src/security/primitives/$realm.spec.ts +101 -0
- package/src/security/primitives/$role.spec.ts +52 -0
- package/src/security/primitives/$serviceAccount.spec.ts +61 -0
- package/src/security/providers/SecurityProvider.spec.ts +350 -0
- package/src/server/auth/providers/ServerAuthProvider.ts +0 -2
- package/src/server/cache/providers/ServerCacheProvider.spec.ts +942 -0
- package/src/server/compress/providers/ServerCompressProvider.spec.ts +31 -0
- package/src/server/compress/providers/ServerCompressProvider.ts +2 -0
- package/src/server/cookies/providers/ServerCookiesProvider.spec.ts +253 -0
- package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +334 -0
- package/src/server/core/__tests__/ServerRouterProvider-requestId.spec.ts +129 -0
- package/src/server/core/primitives/$action.spec.ts +191 -0
- package/src/server/core/primitives/$route.spec.ts +65 -0
- package/src/server/core/providers/ServerBodyParserProvider.spec.ts +93 -0
- package/src/server/core/providers/ServerLoggerProvider.spec.ts +100 -0
- package/src/server/core/providers/ServerProvider.ts +3 -1
- package/src/server/core/services/HttpClient.spec.ts +123 -0
- package/src/server/core/services/UserAgentParser.spec.ts +111 -0
- package/src/server/cors/providers/ServerCorsProvider.spec.ts +481 -0
- package/src/server/health/providers/ServerHealthProvider.spec.ts +22 -0
- package/src/server/helmet/providers/ServerHelmetProvider.spec.ts +105 -0
- package/src/server/links/__tests__/$action.spec.ts +238 -0
- package/src/server/links/__tests__/fixtures/CrudApp.ts +122 -0
- package/src/server/links/__tests__/requestId.spec.ts +120 -0
- package/src/server/links/primitives/$remote.spec.ts +228 -0
- package/src/server/links/providers/LinkProvider.spec.ts +54 -0
- package/src/server/links/providers/LinkProvider.ts +49 -3
- package/src/server/links/providers/ServerLinksProvider.ts +1 -53
- package/src/server/links/schemas/apiLinksResponseSchema.ts +7 -0
- package/src/server/metrics/providers/ServerMetricsProvider.spec.ts +25 -0
- package/src/server/multipart/providers/ServerMultipartProvider.spec.ts +528 -0
- package/src/server/proxy/primitives/$proxy.spec.ts +87 -0
- package/src/server/rate-limit/__tests__/ActionRateLimit.spec.ts +211 -0
- package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +344 -0
- package/src/server/security/__tests__/BasicAuth.spec.ts +684 -0
- package/src/server/security/__tests__/ServerSecurityProvider-realm.spec.ts +388 -0
- package/src/server/security/providers/ServerSecurityProvider.spec.ts +123 -0
- package/src/server/static/primitives/$serve.spec.ts +193 -0
- package/src/server/swagger/__tests__/ui.spec.ts +52 -0
- package/src/server/swagger/primitives/$swagger.spec.ts +193 -0
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +18 -8
- package/src/sms/primitives/$sms.spec.ts +165 -0
- package/src/sms/providers/LocalSmsProvider.spec.ts +224 -0
- package/src/sms/providers/MemorySmsProvider.spec.ts +193 -0
- package/src/thread/primitives/$thread.spec.ts +186 -0
- package/src/topic/core/__tests__/shared.ts +144 -0
- package/src/topic/core/providers/MemoryTopicProvider.spec.ts +23 -0
- package/src/topic/redis/providers/RedisTopicProvider.spec.ts +23 -0
- package/src/vite/plugins/viteAlephaDev.ts +16 -4
- package/src/vite/tasks/runAlepha.ts +7 -1
- package/src/websocket/__tests__/$websocket-new.spec.ts +195 -0
- package/src/websocket/primitives/$channel.spec.ts +30 -0
- package/src/cli/commands/BiomeCommands.ts +0 -29
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
import { t } from "alepha";
|
|
2
|
+
import { describe, test } from "vitest";
|
|
3
|
+
import { FakeProvider } from "../providers/FakeProvider.ts";
|
|
4
|
+
|
|
5
|
+
describe("FakeProvider", () => {
|
|
6
|
+
test("generates string values", ({ expect }) => {
|
|
7
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
8
|
+
const schema = t.string();
|
|
9
|
+
const result = fake.generate(schema);
|
|
10
|
+
|
|
11
|
+
expect(typeof result).toBe("string");
|
|
12
|
+
expect(result.length).toBeGreaterThan(0);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test("generates text with size constraints", ({ expect }) => {
|
|
16
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
17
|
+
|
|
18
|
+
const shortText = fake.generate(t.shortText());
|
|
19
|
+
expect(typeof shortText).toBe("string");
|
|
20
|
+
expect(shortText.length).toBeLessThanOrEqual(64);
|
|
21
|
+
|
|
22
|
+
const regularText = fake.generate(t.text());
|
|
23
|
+
expect(typeof regularText).toBe("string");
|
|
24
|
+
expect(regularText.length).toBeLessThanOrEqual(255);
|
|
25
|
+
|
|
26
|
+
const longText = fake.generate(t.longText());
|
|
27
|
+
expect(typeof longText).toBe("string");
|
|
28
|
+
expect(longText.length).toBeLessThanOrEqual(1024);
|
|
29
|
+
|
|
30
|
+
const richText = fake.generate(t.richText());
|
|
31
|
+
expect(typeof richText).toBe("string");
|
|
32
|
+
expect(richText.length).toBeLessThanOrEqual(65535);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("generates number values", ({ expect }) => {
|
|
36
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
37
|
+
const schema = t.number();
|
|
38
|
+
const result = fake.generate(schema);
|
|
39
|
+
|
|
40
|
+
expect(typeof result).toBe("number");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("generates number with constraints", ({ expect }) => {
|
|
44
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
45
|
+
const schema = t.number({ minimum: 10, maximum: 20 });
|
|
46
|
+
const result = fake.generate(schema);
|
|
47
|
+
|
|
48
|
+
expect(result).toBeGreaterThanOrEqual(10);
|
|
49
|
+
expect(result).toBeLessThanOrEqual(20);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("generates integer values", ({ expect }) => {
|
|
53
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
54
|
+
const schema = t.integer();
|
|
55
|
+
const result = fake.generate(schema);
|
|
56
|
+
|
|
57
|
+
expect(typeof result).toBe("number");
|
|
58
|
+
expect(Number.isInteger(result)).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("generates integer with constraints", ({ expect }) => {
|
|
62
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
63
|
+
const schema = t.integer({ minimum: 5, maximum: 15 });
|
|
64
|
+
const result = fake.generate(schema);
|
|
65
|
+
|
|
66
|
+
expect(Number.isInteger(result)).toBe(true);
|
|
67
|
+
expect(result).toBeGreaterThanOrEqual(5);
|
|
68
|
+
expect(result).toBeLessThanOrEqual(15);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("generates boolean values", ({ expect }) => {
|
|
72
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
73
|
+
const schema = t.boolean();
|
|
74
|
+
const result = fake.generate(schema);
|
|
75
|
+
|
|
76
|
+
expect(typeof result).toBe("boolean");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test("generates UUID", ({ expect }) => {
|
|
80
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
81
|
+
const schema = t.uuid();
|
|
82
|
+
const result = fake.generate(schema);
|
|
83
|
+
|
|
84
|
+
expect(typeof result).toBe("string");
|
|
85
|
+
expect(result).toMatch(
|
|
86
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("generates email", ({ expect }) => {
|
|
91
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
92
|
+
const schema = t.email();
|
|
93
|
+
const result = fake.generate(schema);
|
|
94
|
+
|
|
95
|
+
expect(typeof result).toBe("string");
|
|
96
|
+
expect(result).toMatch(/^[^\s@]+@[^\s@]+\.[^\s@]+$/);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("generates URL", ({ expect }) => {
|
|
100
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
101
|
+
const schema = t.string({ format: "url" });
|
|
102
|
+
const result = fake.generate(schema);
|
|
103
|
+
|
|
104
|
+
expect(typeof result).toBe("string");
|
|
105
|
+
expect(result).toMatch(/^https?:\/\//);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("generates bigint", ({ expect }) => {
|
|
109
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
110
|
+
const schema = t.string({ format: "bigint" });
|
|
111
|
+
const result = fake.generate(schema);
|
|
112
|
+
|
|
113
|
+
expect(typeof result).toBe("string");
|
|
114
|
+
expect(/^-?\d+$/.test(result)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test("generates E.164 phone number", ({ expect }) => {
|
|
118
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
119
|
+
const schema = t.e164();
|
|
120
|
+
const result = fake.generate(schema);
|
|
121
|
+
|
|
122
|
+
expect(typeof result).toBe("string");
|
|
123
|
+
expect(result).toMatch(/^\+[1-9]\d{1,14}$/);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("generates BCP 47 language tag", ({ expect }) => {
|
|
127
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
128
|
+
const schema = t.bcp47();
|
|
129
|
+
const result = fake.generate(schema);
|
|
130
|
+
|
|
131
|
+
expect(typeof result).toBe("string");
|
|
132
|
+
expect(result).toMatch(/^[a-z]{2,3}(?:-[A-Z]{2})?$/);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test("generates snake_case string", ({ expect }) => {
|
|
136
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
137
|
+
const schema = t.snakeCase();
|
|
138
|
+
const result = fake.generate(schema);
|
|
139
|
+
|
|
140
|
+
expect(typeof result).toBe("string");
|
|
141
|
+
expect(result).toMatch(/^[A-Z_-]+$/);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("generates enum values", ({ expect }) => {
|
|
145
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
146
|
+
const schema = t.enum(["red", "green", "blue"]);
|
|
147
|
+
const result = fake.generate(schema);
|
|
148
|
+
|
|
149
|
+
expect(["red", "green", "blue"]).toContain(result);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
test("generates array of values", ({ expect }) => {
|
|
153
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
154
|
+
const schema = t.array(t.string());
|
|
155
|
+
const result = fake.generate(schema);
|
|
156
|
+
|
|
157
|
+
expect(Array.isArray(result)).toBe(true);
|
|
158
|
+
expect(result.length).toBeGreaterThanOrEqual(0);
|
|
159
|
+
expect(result.length).toBeLessThanOrEqual(5);
|
|
160
|
+
result.forEach((item: unknown) => {
|
|
161
|
+
expect(typeof item).toBe("string");
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test("generates array with size constraints", ({ expect }) => {
|
|
166
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
167
|
+
const schema = t.array(t.number(), { minItems: 3, maxItems: 7 });
|
|
168
|
+
const result = fake.generate(schema);
|
|
169
|
+
|
|
170
|
+
expect(Array.isArray(result)).toBe(true);
|
|
171
|
+
expect(result.length).toBeGreaterThanOrEqual(3);
|
|
172
|
+
expect(result.length).toBeLessThanOrEqual(7);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test("generates object with properties", ({ expect }) => {
|
|
176
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
177
|
+
const schema = t.object({
|
|
178
|
+
id: t.uuid(),
|
|
179
|
+
name: t.text(),
|
|
180
|
+
age: t.integer(),
|
|
181
|
+
active: t.boolean(),
|
|
182
|
+
});
|
|
183
|
+
const result = fake.generate(schema);
|
|
184
|
+
|
|
185
|
+
expect(typeof result).toBe("object");
|
|
186
|
+
expect(result).toHaveProperty("id");
|
|
187
|
+
expect(result).toHaveProperty("name");
|
|
188
|
+
expect(result).toHaveProperty("age");
|
|
189
|
+
expect(result).toHaveProperty("active");
|
|
190
|
+
expect(typeof result.id).toBe("string");
|
|
191
|
+
expect(typeof result.name).toBe("string");
|
|
192
|
+
expect(typeof result.age).toBe("number");
|
|
193
|
+
expect(typeof result.active).toBe("boolean");
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test("generates nested objects", ({ expect }) => {
|
|
197
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
198
|
+
const schema = t.object({
|
|
199
|
+
user: t.object({
|
|
200
|
+
name: t.text(),
|
|
201
|
+
email: t.email(),
|
|
202
|
+
}),
|
|
203
|
+
settings: t.object({
|
|
204
|
+
theme: t.enum(["light", "dark"]),
|
|
205
|
+
notifications: t.boolean(),
|
|
206
|
+
}),
|
|
207
|
+
});
|
|
208
|
+
const result = fake.generate(schema);
|
|
209
|
+
|
|
210
|
+
expect(typeof result).toBe("object");
|
|
211
|
+
expect(typeof result.user).toBe("object");
|
|
212
|
+
expect(typeof result.user.name).toBe("string");
|
|
213
|
+
expect(typeof result.user.email).toBe("string");
|
|
214
|
+
expect(typeof result.settings).toBe("object");
|
|
215
|
+
expect(["light", "dark"]).toContain(result.settings.theme);
|
|
216
|
+
expect(typeof result.settings.notifications).toBe("boolean");
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
test("generates optional values", ({ expect }) => {
|
|
220
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
221
|
+
const schema = t.object({
|
|
222
|
+
required: t.text(),
|
|
223
|
+
optional: t.optional(t.text()),
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// Generate multiple times to check both defined and undefined cases
|
|
227
|
+
const results = Array.from({ length: 20 }, () => fake.generate(schema));
|
|
228
|
+
|
|
229
|
+
// At least one should be undefined
|
|
230
|
+
const hasUndefined = results.some((r) => r.optional === undefined);
|
|
231
|
+
// At least one should be defined
|
|
232
|
+
const hasDefined = results.some((r) => r.optional !== undefined);
|
|
233
|
+
|
|
234
|
+
expect(hasUndefined || hasDefined).toBe(true);
|
|
235
|
+
results.forEach((result) => {
|
|
236
|
+
expect(typeof result.required).toBe("string");
|
|
237
|
+
if (result.optional !== undefined) {
|
|
238
|
+
expect(typeof result.optional).toBe("string");
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
test("generates nullable values", ({ expect }) => {
|
|
244
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
245
|
+
const schema = t.object({
|
|
246
|
+
required: t.text(),
|
|
247
|
+
nullable: t.nullable(t.text()),
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// Generate multiple times to check both null and non-null cases
|
|
251
|
+
const results = Array.from({ length: 20 }, () => fake.generate(schema));
|
|
252
|
+
|
|
253
|
+
// At least one should be null
|
|
254
|
+
const hasNull = results.some((r) => r.nullable === null);
|
|
255
|
+
// At least one should be non-null
|
|
256
|
+
const hasNonNull = results.some((r) => r.nullable !== null);
|
|
257
|
+
|
|
258
|
+
expect(hasNull || hasNonNull).toBe(true);
|
|
259
|
+
results.forEach((result) => {
|
|
260
|
+
expect(typeof result.required).toBe("string");
|
|
261
|
+
if (result.nullable !== null) {
|
|
262
|
+
expect(typeof result.nullable).toBe("string");
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
test("generates union types", ({ expect }) => {
|
|
268
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
269
|
+
const schema = t.union([t.string(), t.number(), t.boolean()]);
|
|
270
|
+
const result = fake.generate(schema);
|
|
271
|
+
|
|
272
|
+
const validTypes = ["string", "number", "boolean"];
|
|
273
|
+
expect(validTypes).toContain(typeof result);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("generates record types", ({ expect }) => {
|
|
277
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
278
|
+
const schema = t.record(t.string(), t.number());
|
|
279
|
+
const result = fake.generate(schema);
|
|
280
|
+
|
|
281
|
+
expect(typeof result).toBe("object");
|
|
282
|
+
const entries = Object.entries(result);
|
|
283
|
+
expect(entries.length).toBeGreaterThan(0);
|
|
284
|
+
entries.forEach(([key, value]) => {
|
|
285
|
+
expect(typeof key).toBe("string");
|
|
286
|
+
expect(typeof value).toBe("number");
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test("generates tuple types", ({ expect }) => {
|
|
291
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
292
|
+
const schema = t.tuple([t.string(), t.number(), t.boolean()]);
|
|
293
|
+
const result = fake.generate(schema);
|
|
294
|
+
|
|
295
|
+
expect(Array.isArray(result)).toBe(true);
|
|
296
|
+
expect(result.length).toBe(3);
|
|
297
|
+
expect(typeof result[0]).toBe("string");
|
|
298
|
+
expect(typeof result[1]).toBe("number");
|
|
299
|
+
expect(typeof result[2]).toBe("boolean");
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
test("generates literal values", ({ expect }) => {
|
|
303
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
304
|
+
const schema = t.const("ACTIVE");
|
|
305
|
+
const result = fake.generate(schema);
|
|
306
|
+
|
|
307
|
+
expect(result).toBe("ACTIVE");
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
test("generates null", ({ expect }) => {
|
|
311
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
312
|
+
const schema = t.null();
|
|
313
|
+
const result = fake.generate(schema);
|
|
314
|
+
|
|
315
|
+
expect(result).toBeNull();
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
test("generates undefined", ({ expect }) => {
|
|
319
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
320
|
+
const schema = t.undefined();
|
|
321
|
+
const result = fake.generate(schema);
|
|
322
|
+
|
|
323
|
+
expect(result).toBeUndefined();
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test("generates void as undefined", ({ expect }) => {
|
|
327
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
328
|
+
const schema = t.void();
|
|
329
|
+
const result = fake.generate(schema);
|
|
330
|
+
|
|
331
|
+
expect(result).toBeUndefined();
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
test("generates any type", ({ expect }) => {
|
|
335
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
336
|
+
const schema = t.any();
|
|
337
|
+
const result = fake.generate(schema);
|
|
338
|
+
|
|
339
|
+
const validTypes = ["string", "number", "boolean"];
|
|
340
|
+
expect(validTypes).toContain(typeof result);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test("generateMany produces multiple values", ({ expect }) => {
|
|
344
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
345
|
+
const schema = t.object({
|
|
346
|
+
id: t.uuid(),
|
|
347
|
+
name: t.text(),
|
|
348
|
+
});
|
|
349
|
+
const results = fake.generateMany(schema, 5);
|
|
350
|
+
|
|
351
|
+
expect(Array.isArray(results)).toBe(true);
|
|
352
|
+
expect(results.length).toBe(5);
|
|
353
|
+
results.forEach((result: { id: unknown; name: unknown }) => {
|
|
354
|
+
expect(typeof result.id).toBe("string");
|
|
355
|
+
expect(typeof result.name).toBe("string");
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
test("uses seed for deterministic generation", ({ expect }) => {
|
|
360
|
+
const schema = t.object({
|
|
361
|
+
id: t.uuid(),
|
|
362
|
+
name: t.text(),
|
|
363
|
+
age: t.integer(),
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
// Generate with same seed - should produce same results
|
|
367
|
+
const fake1 = new FakeProvider({ seed: 99999 });
|
|
368
|
+
const result1a = fake1.generate(schema);
|
|
369
|
+
const result1b = fake1.generate(schema);
|
|
370
|
+
|
|
371
|
+
// Create new instance with same seed
|
|
372
|
+
const fake2 = new FakeProvider({ seed: 99999 });
|
|
373
|
+
const result2a = fake2.generate(schema);
|
|
374
|
+
|
|
375
|
+
// First result from both instances should match
|
|
376
|
+
expect(result2a).toEqual(result1a);
|
|
377
|
+
|
|
378
|
+
// But sequential results from same instance should differ
|
|
379
|
+
expect(result1b).not.toEqual(result1a);
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
test("generates different values without seed", ({ expect }) => {
|
|
383
|
+
const fake = new FakeProvider();
|
|
384
|
+
const schema = t.uuid();
|
|
385
|
+
|
|
386
|
+
const result1 = fake.generate(schema);
|
|
387
|
+
const result2 = fake.generate(schema);
|
|
388
|
+
|
|
389
|
+
// They should be different (highly unlikely to be the same)
|
|
390
|
+
expect(result1).not.toBe(result2);
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
test("complex nested schema", ({ expect }) => {
|
|
394
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
395
|
+
const schema = t.object({
|
|
396
|
+
id: t.uuid(),
|
|
397
|
+
user: t.object({
|
|
398
|
+
name: t.shortText(),
|
|
399
|
+
email: t.email(),
|
|
400
|
+
age: t.integer({ minimum: 18, maximum: 99 }),
|
|
401
|
+
phone: t.optional(t.e164()),
|
|
402
|
+
}),
|
|
403
|
+
tags: t.array(t.enum(["urgent", "important", "review"])),
|
|
404
|
+
metadata: t.record(t.string(), t.any()),
|
|
405
|
+
status: t.enum(["active", "inactive", "pending"]),
|
|
406
|
+
createdAt: t.string({ format: "date-time" }),
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
const result = fake.generate(schema);
|
|
410
|
+
|
|
411
|
+
expect(typeof result).toBe("object");
|
|
412
|
+
expect(typeof result.id).toBe("string");
|
|
413
|
+
expect(typeof result.user).toBe("object");
|
|
414
|
+
expect(typeof result.user.name).toBe("string");
|
|
415
|
+
expect(typeof result.user.email).toBe("string");
|
|
416
|
+
expect(typeof result.user.age).toBe("number");
|
|
417
|
+
expect(result.user.age).toBeGreaterThanOrEqual(18);
|
|
418
|
+
expect(result.user.age).toBeLessThanOrEqual(99);
|
|
419
|
+
expect(Array.isArray(result.tags)).toBe(true);
|
|
420
|
+
expect(typeof result.metadata).toBe("object");
|
|
421
|
+
expect(["active", "inactive", "pending"]).toContain(result.status);
|
|
422
|
+
expect(typeof result.createdAt).toBe("string");
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
test("valueLabel pattern", ({ expect }) => {
|
|
426
|
+
const fake = new FakeProvider({ seed: 12345 });
|
|
427
|
+
const schema = t.valueLabel();
|
|
428
|
+
const result = fake.generate(schema);
|
|
429
|
+
|
|
430
|
+
expect(typeof result).toBe("object");
|
|
431
|
+
expect(typeof result.value).toBe("string");
|
|
432
|
+
expect(typeof result.label).toBe("string");
|
|
433
|
+
expect(result.value).toMatch(/^[A-Z_-]+$/);
|
|
434
|
+
if (result.description !== undefined) {
|
|
435
|
+
expect(typeof result.description).toBe("string");
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
});
|
|
@@ -222,6 +222,14 @@ export interface LsOptions {
|
|
|
222
222
|
* FileSystem interface providing utilities for working with files.
|
|
223
223
|
*/
|
|
224
224
|
export abstract class FileSystemProvider {
|
|
225
|
+
/**
|
|
226
|
+
* Joins multiple path segments into a single path.
|
|
227
|
+
*
|
|
228
|
+
* @param paths - The path segments to join
|
|
229
|
+
* @returns The joined path
|
|
230
|
+
*/
|
|
231
|
+
abstract join(...paths: string[]): string;
|
|
232
|
+
|
|
225
233
|
/**
|
|
226
234
|
* Creates a FileLike object from various sources.
|
|
227
235
|
*
|