alepha 0.14.2 → 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/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 +1137 -1123
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +827 -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 +13 -13
- 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/bin/index.d.ts +1 -2
- package/dist/bin/index.js +0 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/cli/index.d.ts +137 -112
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +371 -259
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +45 -5
- 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 +14 -18
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +14 -18
- package/dist/core/index.native.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/mcp/index.d.ts.map +1 -1
- package/dist/orm/index.d.ts +32 -32
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +12 -12
- package/dist/orm/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- 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/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/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/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/security/index.d.ts +9 -9
- 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/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.d.ts +7 -7
- 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 +9 -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 +25 -4
- package/src/cli/commands/dev.ts +19 -7
- package/src/cli/commands/gen/changelog.spec.ts +315 -0
- package/src/cli/commands/{changelog.ts → gen/changelog.ts} +9 -9
- package/src/cli/commands/gen/openapi.ts +71 -0
- package/src/cli/commands/gen.ts +18 -0
- package/src/cli/commands/init.ts +2 -0
- package/src/cli/commands/root.ts +12 -3
- package/src/cli/commands/typecheck.ts +5 -0
- package/src/cli/index.ts +2 -1
- 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 +45 -0
- 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/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/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
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { Alepha } from "alepha";
|
|
2
|
+
import { describe, it } from "vitest";
|
|
3
|
+
import {
|
|
4
|
+
LogDestinationProvider,
|
|
5
|
+
LogFormatterProvider,
|
|
6
|
+
MemoryDestinationProvider,
|
|
7
|
+
PrettyFormatterProvider,
|
|
8
|
+
} from "../index.ts";
|
|
9
|
+
import { Logger } from "../services/Logger.ts";
|
|
10
|
+
|
|
11
|
+
describe("Logger", () => {
|
|
12
|
+
const createLogger = (service = "TestService", module = "test.module") => {
|
|
13
|
+
const alepha = Alepha.create({
|
|
14
|
+
env: { LOG_LEVEL: "info" },
|
|
15
|
+
})
|
|
16
|
+
.with({
|
|
17
|
+
provide: LogDestinationProvider,
|
|
18
|
+
use: MemoryDestinationProvider,
|
|
19
|
+
})
|
|
20
|
+
.with({
|
|
21
|
+
provide: LogFormatterProvider,
|
|
22
|
+
use: PrettyFormatterProvider,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return alepha.inject(Logger, {
|
|
26
|
+
lifetime: "transient",
|
|
27
|
+
args: [service, module],
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
describe("parseLevel", () => {
|
|
32
|
+
it("should return global level when no matching module found", ({
|
|
33
|
+
expect,
|
|
34
|
+
}) => {
|
|
35
|
+
const logger = createLogger();
|
|
36
|
+
// When no module-specific config matches, it falls back to global level
|
|
37
|
+
expect(logger.parseLevel("debug", "non.matching.module")).toBe("DEBUG");
|
|
38
|
+
expect(
|
|
39
|
+
logger.parseLevel("specific.module:trace,warn", "non.matching.module"),
|
|
40
|
+
).toBe("WARN");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should parse simple global level", ({ expect }) => {
|
|
44
|
+
const logger = createLogger();
|
|
45
|
+
expect(logger.parseLevel("debug", "any.module")).toBe("DEBUG");
|
|
46
|
+
expect(logger.parseLevel("trace", "any.module")).toBe("TRACE");
|
|
47
|
+
expect(logger.parseLevel("warn", "any.module")).toBe("WARN");
|
|
48
|
+
expect(logger.parseLevel("error", "any.module")).toBe("ERROR");
|
|
49
|
+
expect(logger.parseLevel("silent", "any.module")).toBe("SILENT");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should parse module-specific level with colon separator", ({
|
|
53
|
+
expect,
|
|
54
|
+
}) => {
|
|
55
|
+
const logger = createLogger();
|
|
56
|
+
expect(logger.parseLevel("test:debug,info", "test.module")).toBe("DEBUG");
|
|
57
|
+
expect(logger.parseLevel("alepha:trace,warn", "alepha.core")).toBe(
|
|
58
|
+
"TRACE",
|
|
59
|
+
);
|
|
60
|
+
expect(logger.parseLevel("my.app:error,info", "my.app.service")).toBe(
|
|
61
|
+
"ERROR",
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("should parse module-specific level with equals separator", ({
|
|
66
|
+
expect,
|
|
67
|
+
}) => {
|
|
68
|
+
const logger = createLogger();
|
|
69
|
+
expect(logger.parseLevel("test=debug,info", "test.module")).toBe("DEBUG");
|
|
70
|
+
expect(logger.parseLevel("alepha=TRACE,warn", "alepha.core")).toBe(
|
|
71
|
+
"TRACE",
|
|
72
|
+
);
|
|
73
|
+
expect(logger.parseLevel("my.app=error,info", "my.app.service")).toBe(
|
|
74
|
+
"ERROR",
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("should handle multiple module configurations", ({ expect }) => {
|
|
79
|
+
const logger = createLogger();
|
|
80
|
+
const config = "alepha.core:trace,alepha.server:debug,my.app:error,info";
|
|
81
|
+
|
|
82
|
+
expect(logger.parseLevel(config, "alepha.core")).toBe("TRACE");
|
|
83
|
+
expect(logger.parseLevel(config, "alepha.server")).toBe("DEBUG");
|
|
84
|
+
expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
|
|
85
|
+
expect(logger.parseLevel(config, "other.module")).toBe("INFO");
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("should handle semicolon separators", ({ expect }) => {
|
|
89
|
+
const logger = createLogger();
|
|
90
|
+
const config = "alepha:trace;my.app:error;info";
|
|
91
|
+
|
|
92
|
+
expect(logger.parseLevel(config, "alepha.core")).toBe("TRACE");
|
|
93
|
+
expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
|
|
94
|
+
expect(logger.parseLevel(config, "other.module")).toBe("INFO");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("should use startsWith matching for modules", ({ expect }) => {
|
|
98
|
+
const logger = createLogger();
|
|
99
|
+
const config = "alepha:debug,info";
|
|
100
|
+
|
|
101
|
+
expect(logger.parseLevel(config, "alepha")).toBe("DEBUG");
|
|
102
|
+
expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
|
|
103
|
+
expect(logger.parseLevel(config, "alepha.server.cache")).toBe("DEBUG");
|
|
104
|
+
expect(logger.parseLevel(config, "other.alepha")).toBe("INFO");
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("should prioritize first matching module", ({ expect }) => {
|
|
108
|
+
const logger = createLogger();
|
|
109
|
+
const config = "alepha:debug,alepha.core:trace,info";
|
|
110
|
+
|
|
111
|
+
// alepha.core matches both "alepha" and "alepha.core", but first match wins
|
|
112
|
+
expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("should handle case insensitive levels", ({ expect }) => {
|
|
116
|
+
const logger = createLogger();
|
|
117
|
+
expect(logger.parseLevel("DEBUG", "any.module")).toBe("DEBUG");
|
|
118
|
+
expect(logger.parseLevel("Test:TRACE,INFO", "test.module")).toBe("TRACE");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("should handle whitespace around separators", ({ expect }) => {
|
|
122
|
+
const logger = createLogger();
|
|
123
|
+
const config = " alepha : debug , my.app : error , info ";
|
|
124
|
+
|
|
125
|
+
expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
|
|
126
|
+
expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
|
|
127
|
+
expect(logger.parseLevel(config, "other")).toBe("INFO");
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("should fall back to global level when no module match", ({
|
|
131
|
+
expect,
|
|
132
|
+
}) => {
|
|
133
|
+
const logger = createLogger();
|
|
134
|
+
const config = "specific.module:debug,trace";
|
|
135
|
+
|
|
136
|
+
expect(logger.parseLevel(config, "other.module")).toBe("TRACE");
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("should handle empty parts gracefully", ({ expect }) => {
|
|
140
|
+
const logger = createLogger();
|
|
141
|
+
// Empty parts are now skipped gracefully
|
|
142
|
+
expect(logger.parseLevel(",,debug,,", "any.module")).toBe("DEBUG");
|
|
143
|
+
expect(logger.parseLevel("alepha:trace,,info", "alepha.core")).toBe(
|
|
144
|
+
"TRACE",
|
|
145
|
+
);
|
|
146
|
+
expect(logger.parseLevel("alepha:trace,,", "other.module")).toBe("INFO");
|
|
147
|
+
expect(logger.parseLevel(" , , debug , ", "any.module")).toBe(
|
|
148
|
+
"DEBUG",
|
|
149
|
+
);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("should provide better error messages", ({ expect }) => {
|
|
153
|
+
const logger = createLogger();
|
|
154
|
+
expect(() =>
|
|
155
|
+
logger.parseLevel("alepha:invalid,info", "alepha.core"),
|
|
156
|
+
).toThrow("Invalid log level 'invalid' for module pattern 'alepha'");
|
|
157
|
+
expect(() => logger.parseLevel("badlevel", "any.module")).toThrow(
|
|
158
|
+
'Invalid global log level "badlevel"',
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("should support wildcard patterns", ({ expect }) => {
|
|
163
|
+
const logger = createLogger();
|
|
164
|
+
|
|
165
|
+
// Basic wildcard matching
|
|
166
|
+
expect(logger.parseLevel("alepha.*:debug,info", "alepha.core")).toBe(
|
|
167
|
+
"DEBUG",
|
|
168
|
+
);
|
|
169
|
+
expect(logger.parseLevel("alepha.*:debug,info", "alepha.server")).toBe(
|
|
170
|
+
"DEBUG",
|
|
171
|
+
);
|
|
172
|
+
expect(logger.parseLevel("alepha.*:debug,info", "other.module")).toBe(
|
|
173
|
+
"INFO",
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
// More specific patterns
|
|
177
|
+
expect(
|
|
178
|
+
logger.parseLevel("*.test:silent,*.core:trace,info", "alepha.test"),
|
|
179
|
+
).toBe("SILENT");
|
|
180
|
+
expect(
|
|
181
|
+
logger.parseLevel("*.test:silent,*.core:trace,info", "my.core"),
|
|
182
|
+
).toBe("TRACE");
|
|
183
|
+
expect(
|
|
184
|
+
logger.parseLevel("*.test:silent,*.core:trace,info", "other.module"),
|
|
185
|
+
).toBe("INFO");
|
|
186
|
+
|
|
187
|
+
// Exact prefix match still works (existing behavior)
|
|
188
|
+
expect(logger.parseLevel("alepha.core:debug,info", "alepha.core")).toBe(
|
|
189
|
+
"DEBUG",
|
|
190
|
+
);
|
|
191
|
+
expect(
|
|
192
|
+
logger.parseLevel("alepha.core:debug,info", "alepha.core.service"),
|
|
193
|
+
).toBe("DEBUG"); // startsWith behavior
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it("should prioritize more specific wildcard matches", ({ expect }) => {
|
|
197
|
+
const logger = createLogger();
|
|
198
|
+
// First match wins, so order matters
|
|
199
|
+
const config = "alepha.*:debug,alepha.core.*:trace,info";
|
|
200
|
+
expect(logger.parseLevel(config, "alepha.core.service")).toBe("DEBUG"); // matches alepha.* first
|
|
201
|
+
|
|
202
|
+
// Reverse order
|
|
203
|
+
const config2 = "alepha.core.*:trace,alepha.*:debug,info";
|
|
204
|
+
expect(logger.parseLevel(config2, "alepha.core.service")).toBe("TRACE"); // matches alepha.core.* first
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
describe("asLogLevel", () => {
|
|
209
|
+
it("should return valid log levels", ({ expect }) => {
|
|
210
|
+
const logger = createLogger();
|
|
211
|
+
expect(logger.asLogLevel("trace")).toBe("TRACE");
|
|
212
|
+
expect(logger.asLogLevel("debug")).toBe("DEBUG");
|
|
213
|
+
expect(logger.asLogLevel("info")).toBe("INFO");
|
|
214
|
+
expect(logger.asLogLevel("warn")).toBe("WARN");
|
|
215
|
+
expect(logger.asLogLevel("error")).toBe("ERROR");
|
|
216
|
+
expect(logger.asLogLevel("silent")).toBe("SILENT");
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("should handle whitespace", ({ expect }) => {
|
|
220
|
+
const logger = createLogger();
|
|
221
|
+
expect(logger.asLogLevel(" debug ")).toBe("DEBUG");
|
|
222
|
+
expect(logger.asLogLevel(" trace ")).toBe("TRACE");
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("should throw error for invalid levels", ({ expect }) => {
|
|
226
|
+
const logger = createLogger();
|
|
227
|
+
expect(() => logger.asLogLevel("invalid")).toThrow(
|
|
228
|
+
"Invalid log level: invalid",
|
|
229
|
+
);
|
|
230
|
+
expect(() => logger.asLogLevel("")).toThrow("Invalid log level: ");
|
|
231
|
+
expect(() => logger.asLogLevel("DEBUqG")).toThrow(
|
|
232
|
+
"Invalid log level: DEBUqG",
|
|
233
|
+
);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
describe("level getter", () => {
|
|
238
|
+
it("should update logLevel when state changes", ({ expect }) => {
|
|
239
|
+
const alepha = Alepha.create({
|
|
240
|
+
env: { LOG_LEVEL: "info" },
|
|
241
|
+
})
|
|
242
|
+
.with({
|
|
243
|
+
provide: LogDestinationProvider,
|
|
244
|
+
use: MemoryDestinationProvider,
|
|
245
|
+
})
|
|
246
|
+
.with({
|
|
247
|
+
provide: LogFormatterProvider,
|
|
248
|
+
use: PrettyFormatterProvider,
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
const logger = alepha.inject(Logger, {
|
|
252
|
+
lifetime: "transient",
|
|
253
|
+
args: ["TestService", "test.module"],
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Initial state
|
|
257
|
+
expect(logger.level).toBe("INFO");
|
|
258
|
+
|
|
259
|
+
// Change state
|
|
260
|
+
alepha.store.set("alepha.logger.level", "debug");
|
|
261
|
+
expect(logger.level).toBe("DEBUG");
|
|
262
|
+
|
|
263
|
+
// Change to module-specific config
|
|
264
|
+
alepha.store.set("alepha.logger.level", "test:trace,warn");
|
|
265
|
+
expect(logger.level).toBe("TRACE");
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
it("should cache parsed level until state changes", ({ expect }) => {
|
|
269
|
+
const alepha = Alepha.create({
|
|
270
|
+
env: { LOG_LEVEL: "info" },
|
|
271
|
+
})
|
|
272
|
+
.with({
|
|
273
|
+
provide: LogDestinationProvider,
|
|
274
|
+
use: MemoryDestinationProvider,
|
|
275
|
+
})
|
|
276
|
+
.with({
|
|
277
|
+
provide: LogFormatterProvider,
|
|
278
|
+
use: PrettyFormatterProvider,
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
const logger = alepha.inject(Logger, {
|
|
282
|
+
lifetime: "transient",
|
|
283
|
+
args: ["TestService", "test.module"],
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
alepha.store.set("alepha.logger.level", "test:debug,info");
|
|
287
|
+
const level1 = logger.level;
|
|
288
|
+
const level2 = logger.level;
|
|
289
|
+
|
|
290
|
+
expect(level1).toBe("DEBUG");
|
|
291
|
+
expect(level2).toBe("DEBUG");
|
|
292
|
+
expect(level1).toBe(level2); // Should be same instance/value
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
});
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
JsonRpcErrorCodes,
|
|
4
|
+
McpError,
|
|
5
|
+
McpInvalidParamsError,
|
|
6
|
+
McpMethodNotFoundError,
|
|
7
|
+
McpPromptNotFoundError,
|
|
8
|
+
McpResourceNotFoundError,
|
|
9
|
+
McpToolNotFoundError,
|
|
10
|
+
} from "../index.ts";
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
describe("McpError", () => {
|
|
15
|
+
test("should be an instance of Error", () => {
|
|
16
|
+
const error = new McpError("Test error");
|
|
17
|
+
expect(error).toBeInstanceOf(Error);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("should have correct name", () => {
|
|
21
|
+
const error = new McpError("Test error");
|
|
22
|
+
expect(error.name).toBe("McpError");
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test("should have correct message", () => {
|
|
26
|
+
const error = new McpError("Test error message");
|
|
27
|
+
expect(error.message).toBe("Test error message");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("should default to INTERNAL_ERROR code", () => {
|
|
31
|
+
const error = new McpError("Test error");
|
|
32
|
+
expect(error.code).toBe(JsonRpcErrorCodes.INTERNAL_ERROR);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("should accept custom error code", () => {
|
|
36
|
+
const error = new McpError("Test error", -32000);
|
|
37
|
+
expect(error.code).toBe(-32000);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
describe("McpMethodNotFoundError", () => {
|
|
44
|
+
test("should be an instance of McpError", () => {
|
|
45
|
+
const error = new McpMethodNotFoundError("unknown/method");
|
|
46
|
+
expect(error).toBeInstanceOf(McpError);
|
|
47
|
+
expect(error).toBeInstanceOf(Error);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("should have correct name", () => {
|
|
51
|
+
const error = new McpMethodNotFoundError("unknown/method");
|
|
52
|
+
expect(error.name).toBe("McpMethodNotFoundError");
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test("should include method name in message", () => {
|
|
56
|
+
const error = new McpMethodNotFoundError("custom/method");
|
|
57
|
+
expect(error.message).toBe("Method not found: custom/method");
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("should have METHOD_NOT_FOUND code", () => {
|
|
61
|
+
const error = new McpMethodNotFoundError("test");
|
|
62
|
+
expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
67
|
+
|
|
68
|
+
describe("McpToolNotFoundError", () => {
|
|
69
|
+
test("should be an instance of McpError", () => {
|
|
70
|
+
const error = new McpToolNotFoundError("unknown-tool");
|
|
71
|
+
expect(error).toBeInstanceOf(McpError);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("should have correct name", () => {
|
|
75
|
+
const error = new McpToolNotFoundError("test-tool");
|
|
76
|
+
expect(error.name).toBe("McpToolNotFoundError");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test("should include tool name in message", () => {
|
|
80
|
+
const error = new McpToolNotFoundError("my-tool");
|
|
81
|
+
expect(error.message).toBe("Tool not found: my-tool");
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test("should store tool name as property", () => {
|
|
85
|
+
const error = new McpToolNotFoundError("calculator");
|
|
86
|
+
expect(error.tool).toBe("calculator");
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("should have METHOD_NOT_FOUND code", () => {
|
|
90
|
+
const error = new McpToolNotFoundError("test");
|
|
91
|
+
expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
describe("McpResourceNotFoundError", () => {
|
|
98
|
+
test("should be an instance of McpError", () => {
|
|
99
|
+
const error = new McpResourceNotFoundError("file:///test");
|
|
100
|
+
expect(error).toBeInstanceOf(McpError);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test("should have correct name", () => {
|
|
104
|
+
const error = new McpResourceNotFoundError("file:///test");
|
|
105
|
+
expect(error.name).toBe("McpResourceNotFoundError");
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("should include URI in message", () => {
|
|
109
|
+
const error = new McpResourceNotFoundError("config://app");
|
|
110
|
+
expect(error.message).toBe("Resource not found: config://app");
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("should store URI as property", () => {
|
|
114
|
+
const error = new McpResourceNotFoundError("db://users/123");
|
|
115
|
+
expect(error.uri).toBe("db://users/123");
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test("should have METHOD_NOT_FOUND code", () => {
|
|
119
|
+
const error = new McpResourceNotFoundError("test://");
|
|
120
|
+
expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
125
|
+
|
|
126
|
+
describe("McpPromptNotFoundError", () => {
|
|
127
|
+
test("should be an instance of McpError", () => {
|
|
128
|
+
const error = new McpPromptNotFoundError("unknown-prompt");
|
|
129
|
+
expect(error).toBeInstanceOf(McpError);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("should have correct name", () => {
|
|
133
|
+
const error = new McpPromptNotFoundError("test-prompt");
|
|
134
|
+
expect(error.name).toBe("McpPromptNotFoundError");
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test("should include prompt name in message", () => {
|
|
138
|
+
const error = new McpPromptNotFoundError("greeting");
|
|
139
|
+
expect(error.message).toBe("Prompt not found: greeting");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("should store prompt name as property", () => {
|
|
143
|
+
const error = new McpPromptNotFoundError("code-review");
|
|
144
|
+
expect(error.prompt).toBe("code-review");
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("should have METHOD_NOT_FOUND code", () => {
|
|
148
|
+
const error = new McpPromptNotFoundError("test");
|
|
149
|
+
expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
describe("McpInvalidParamsError", () => {
|
|
156
|
+
test("should be an instance of McpError", () => {
|
|
157
|
+
const error = new McpInvalidParamsError("Invalid params");
|
|
158
|
+
expect(error).toBeInstanceOf(McpError);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("should have correct name", () => {
|
|
162
|
+
const error = new McpInvalidParamsError("test");
|
|
163
|
+
expect(error.name).toBe("McpInvalidParamsError");
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test("should have provided message", () => {
|
|
167
|
+
const error = new McpInvalidParamsError("Missing required parameter: name");
|
|
168
|
+
expect(error.message).toBe("Missing required parameter: name");
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
test("should have INVALID_PARAMS code", () => {
|
|
172
|
+
const error = new McpInvalidParamsError("test");
|
|
173
|
+
expect(error.code).toBe(JsonRpcErrorCodes.INVALID_PARAMS);
|
|
174
|
+
});
|
|
175
|
+
});
|