|
| 1 | +// Compiles a small consumer against the BUILT declaration files with |
| 2 | +// `skipLibCheck: false`, catching dangling type references that the dts |
| 3 | +// bundler emits only as non-fatal warnings (its failOnWarn does not fail on |
| 4 | +// MISSING_EXPORT). Run after `pnpm build:all`. |
| 5 | +import { execFileSync } from 'node:child_process'; |
| 6 | +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; |
| 7 | +import { tmpdir } from 'node:os'; |
| 8 | +import path from 'node:path'; |
| 9 | + |
| 10 | +const repo = path.resolve(import.meta.dirname, '..'); |
| 11 | +const dir = mkdtempSync(path.join(tmpdir(), 'dist-types-smoke-')); |
| 12 | +try { |
| 13 | + writeFileSync( |
| 14 | + path.join(dir, 'consumer.ts'), |
| 15 | + [ |
| 16 | + "import { Client } from '@modelcontextprotocol/client';", |
| 17 | + "import type { AjvJsonSchemaValidator as ClientAjv } from '@modelcontextprotocol/client';", |
| 18 | + "import { AjvJsonSchemaValidator } from '@modelcontextprotocol/client/validators/ajv';", |
| 19 | + "import { CfWorkerJsonSchemaValidator as ClientCf } from '@modelcontextprotocol/client/validators/cf-worker';", |
| 20 | + "import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';", |
| 21 | + "import { McpServer } from '@modelcontextprotocol/server';", |
| 22 | + "import { AjvJsonSchemaValidator as ServerAjv } from '@modelcontextprotocol/server/validators/ajv';", |
| 23 | + "import { CfWorkerJsonSchemaValidator as ServerCf } from '@modelcontextprotocol/server/validators/cf-worker';", |
| 24 | + "import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';", |
| 25 | + "export const c = new Client({ name: 'smoke', version: '1.0.0' });", |
| 26 | + "export const s = new McpServer({ name: 'smoke', version: '1.0.0' });", |
| 27 | + 'export type T = ClientAjv;', |
| 28 | + 'export { AjvJsonSchemaValidator, ServerAjv, ClientCf, ServerCf, StdioClientTransport, StdioServerTransport };', |
| 29 | + '' |
| 30 | + ].join('\n') |
| 31 | + ); |
| 32 | + writeFileSync( |
| 33 | + path.join(dir, 'tsconfig.json'), |
| 34 | + JSON.stringify( |
| 35 | + { |
| 36 | + compilerOptions: { |
| 37 | + strict: true, |
| 38 | + noEmit: true, |
| 39 | + skipLibCheck: false, |
| 40 | + module: 'esnext', |
| 41 | + moduleResolution: 'bundler', |
| 42 | + target: 'es2022', |
| 43 | + types: ['node'], |
| 44 | + typeRoots: [path.join(repo, 'node_modules', '@types')], |
| 45 | + paths: { |
| 46 | + '@modelcontextprotocol/client': [path.join(repo, 'packages/client/dist/index.d.mts')], |
| 47 | + '@modelcontextprotocol/client/validators/ajv': [path.join(repo, 'packages/client/dist/validators/ajv.d.mts')], |
| 48 | + '@modelcontextprotocol/client/validators/cf-worker': [ |
| 49 | + path.join(repo, 'packages/client/dist/validators/cfWorker.d.mts') |
| 50 | + ], |
| 51 | + '@modelcontextprotocol/client/stdio': [path.join(repo, 'packages/client/dist/stdio.d.mts')], |
| 52 | + '@modelcontextprotocol/server': [path.join(repo, 'packages/server/dist/index.d.mts')], |
| 53 | + '@modelcontextprotocol/server/validators/ajv': [path.join(repo, 'packages/server/dist/validators/ajv.d.mts')], |
| 54 | + '@modelcontextprotocol/server/validators/cf-worker': [ |
| 55 | + path.join(repo, 'packages/server/dist/validators/cfWorker.d.mts') |
| 56 | + ], |
| 57 | + '@modelcontextprotocol/server/stdio': [path.join(repo, 'packages/server/dist/stdio.d.mts')] |
| 58 | + } |
| 59 | + }, |
| 60 | + include: ['consumer.ts'] |
| 61 | + }, |
| 62 | + null, |
| 63 | + 2 |
| 64 | + ) |
| 65 | + ); |
| 66 | + execFileSync('pnpm', ['exec', 'tsc', '-p', dir], { cwd: repo, stdio: 'inherit' }); |
| 67 | + console.log('dist-types smoke: clean (skipLibCheck: false)'); |
| 68 | +} finally { |
| 69 | + rmSync(dir, { recursive: true, force: true }); |
| 70 | +} |
0 commit comments