feat: auto-select JSON Schema validator based on runtime (#1456)
This commit is contained in:
parent
1fb7b25697
commit
bc883afe3c
6 changed files with 1176 additions and 107 deletions
|
|
@ -25,6 +25,24 @@
|
|||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
},
|
||||
"./_shims": {
|
||||
"workerd": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"import": "./dist/shimsWorkerd.mjs"
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"import": "./dist/shimsWorkerd.mjs"
|
||||
},
|
||||
"node": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
},
|
||||
"default": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { DefaultJsonSchemaValidator } from '@modelcontextprotocol/client/_shims';
|
||||
import type {
|
||||
CallToolRequest,
|
||||
ClientCapabilities,
|
||||
|
|
@ -35,7 +36,6 @@ import type {
|
|||
UnsubscribeRequest
|
||||
} from '@modelcontextprotocol/core';
|
||||
import {
|
||||
AjvJsonSchemaValidator,
|
||||
assertClientRequestTaskCapability,
|
||||
assertToolsCallTaskCapability,
|
||||
CallToolResultSchema,
|
||||
|
|
@ -153,28 +153,7 @@ export type ClientOptions = ProtocolOptions & {
|
|||
* The validator is used to validate structured content returned by tools
|
||||
* against their declared output schemas.
|
||||
*
|
||||
* @default AjvJsonSchemaValidator
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* // ajv
|
||||
* const client = new Client(
|
||||
* { name: 'my-client', version: '1.0.0' },
|
||||
* {
|
||||
* capabilities: {},
|
||||
* jsonSchemaValidator: new AjvJsonSchemaValidator()
|
||||
* }
|
||||
* );
|
||||
*
|
||||
* // @cfworker/json-schema
|
||||
* const client = new Client(
|
||||
* { name: 'my-client', version: '1.0.0' },
|
||||
* {
|
||||
* capabilities: {},
|
||||
* jsonSchemaValidator: new CfWorkerJsonSchemaValidator()
|
||||
* }
|
||||
* );
|
||||
* ```
|
||||
* @default DefaultJsonSchemaValidator (AjvJsonSchemaValidator on Node.js, CfWorkerJsonSchemaValidator on Cloudflare Workers)
|
||||
*/
|
||||
jsonSchemaValidator?: jsonSchemaValidator;
|
||||
|
||||
|
|
@ -259,7 +238,7 @@ export class Client<
|
|||
) {
|
||||
super(options);
|
||||
this._capabilities = options?.capabilities ?? {};
|
||||
this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new AjvJsonSchemaValidator();
|
||||
this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new DefaultJsonSchemaValidator();
|
||||
this._enforceStrictCapabilities = options?.enforceStrictCapabilities ?? false;
|
||||
|
||||
// Store list changed config for setup after connection (when we know server capabilities)
|
||||
|
|
|
|||
6
packages/client/src/shimsNode.ts
Normal file
6
packages/client/src/shimsNode.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Node.js runtime shims for client package
|
||||
*
|
||||
* This file is selected via package.json export conditions when running in Node.js.
|
||||
*/
|
||||
export { AjvJsonSchemaValidator as DefaultJsonSchemaValidator } from '@modelcontextprotocol/core';
|
||||
6
packages/client/src/shimsWorkerd.ts
Normal file
6
packages/client/src/shimsWorkerd.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Cloudflare Workers runtime shims for client package
|
||||
*
|
||||
* This file is selected via package.json export conditions when running in workerd.
|
||||
*/
|
||||
export { CfWorkerJsonSchemaValidator as DefaultJsonSchemaValidator } from '@modelcontextprotocol/core';
|
||||
|
|
@ -6,7 +6,8 @@
|
|||
"paths": {
|
||||
"*": ["./*"],
|
||||
"@modelcontextprotocol/core": ["./node_modules/@modelcontextprotocol/core/src/index.ts"],
|
||||
"@modelcontextprotocol/test-helpers": ["./node_modules/@modelcontextprotocol/test-helpers/src/index.ts"]
|
||||
"@modelcontextprotocol/test-helpers": ["./node_modules/@modelcontextprotocol/test-helpers/src/index.ts"],
|
||||
"@modelcontextprotocol/client/_shims": ["./src/shimsNode.ts"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
// 1. Entry Points
|
||||
// Directly matches package.json include/exclude globs
|
||||
entry: ['src/index.ts'],
|
||||
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts'],
|
||||
|
||||
// 2. Output Configuration
|
||||
format: ['esm'],
|
||||
|
|
@ -30,5 +30,8 @@ export default defineConfig({
|
|||
},
|
||||
// 5. Vendoring Strategy - Bundle the code for this specific package into the output,
|
||||
// but treat all other dependencies as external (require/import).
|
||||
noExternal: ['@modelcontextprotocol/core']
|
||||
noExternal: ['@modelcontextprotocol/core'],
|
||||
|
||||
// 6. External packages - keep self-reference imports external for runtime resolution
|
||||
external: ['@modelcontextprotocol/client/_shims']
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue