feat(packaging): ship CommonJS builds alongside ESM for v2 packages (#2405)
This commit is contained in:
parent
2f4ad132fe
commit
f172626a8e
19 changed files with 293 additions and 117 deletions
|
|
@ -21,40 +21,89 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
},
|
||||
"./stdio": {
|
||||
"types": "./dist/stdio.d.mts",
|
||||
"import": "./dist/stdio.mjs"
|
||||
"import": {
|
||||
"types": "./dist/stdio.d.mts",
|
||||
"default": "./dist/stdio.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/stdio.d.cts",
|
||||
"default": "./dist/stdio.cjs"
|
||||
}
|
||||
},
|
||||
"./validators/ajv": {
|
||||
"types": "./dist/validators/ajv.d.mts",
|
||||
"import": "./dist/validators/ajv.mjs"
|
||||
"import": {
|
||||
"types": "./dist/validators/ajv.d.mts",
|
||||
"default": "./dist/validators/ajv.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/validators/ajv.d.cts",
|
||||
"default": "./dist/validators/ajv.cjs"
|
||||
}
|
||||
},
|
||||
"./validators/cf-worker": {
|
||||
"types": "./dist/validators/cfWorker.d.mts",
|
||||
"import": "./dist/validators/cfWorker.mjs"
|
||||
"import": {
|
||||
"types": "./dist/validators/cfWorker.d.mts",
|
||||
"default": "./dist/validators/cfWorker.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/validators/cfWorker.d.cts",
|
||||
"default": "./dist/validators/cfWorker.cjs"
|
||||
}
|
||||
},
|
||||
"./_shims": {
|
||||
"workerd": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"import": "./dist/shimsWorkerd.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"default": "./dist/shimsWorkerd.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsWorkerd.d.cts",
|
||||
"default": "./dist/shimsWorkerd.cjs"
|
||||
}
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/shimsBrowser.d.mts",
|
||||
"import": "./dist/shimsBrowser.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsBrowser.d.mts",
|
||||
"default": "./dist/shimsBrowser.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsBrowser.d.cts",
|
||||
"default": "./dist/shimsBrowser.cjs"
|
||||
}
|
||||
},
|
||||
"node": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"default": "./dist/shimsNode.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsNode.d.cts",
|
||||
"default": "./dist/shimsNode.cjs"
|
||||
}
|
||||
},
|
||||
"default": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"default": "./dist/shimsNode.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsNode.d.cts",
|
||||
"default": "./dist/shimsNode.cjs"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ export default defineConfig({
|
|||
'src/validators/ajv.ts',
|
||||
'src/validators/cfWorker.ts'
|
||||
],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -25,10 +25,17 @@
|
|||
},
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/cli.ts', 'src/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ interface PackageManifest {
|
|||
name: string;
|
||||
private?: boolean;
|
||||
type?: string;
|
||||
main?: string;
|
||||
files?: string[];
|
||||
bin?: Record<string, string>;
|
||||
exports?: Record<string, unknown>;
|
||||
|
|
@ -75,16 +76,32 @@ describe('public package topology', () => {
|
|||
expect(Object.keys(manifest.exports ?? {})).toEqual(expected.exportKeys);
|
||||
});
|
||||
|
||||
test('ships ESM only', () => {
|
||||
test('ships dual ESM + CJS', () => {
|
||||
// The v2 packages are ESM-first but ship a CommonJS build too, so
|
||||
// require('@modelcontextprotocol/…') resolves natively. Pin that
|
||||
// deliberate dual surface: type stays 'module', a `.cjs` main is
|
||||
// present for bare-require fallback, and every export condition
|
||||
// that resolves a module format offers BOTH an `import` (ESM) and a
|
||||
// `require` (CJS) branch — recursively, so nested runtime conditions
|
||||
// (e.g. ./_shims → workerd/browser/node/default) are covered.
|
||||
expect(manifest.type).toBe('module');
|
||||
// No entry may grow a 'require' condition: the v2 packages are
|
||||
// ESM-only by design (a CJS build would be a new public surface).
|
||||
const conditionsOf = (entry: unknown): string[] =>
|
||||
entry !== null && typeof entry === 'object'
|
||||
? Object.entries(entry).flatMap(([key, value]) => [key, ...conditionsOf(value)])
|
||||
: [];
|
||||
expect(manifest.main).toMatch(/\.cjs$/);
|
||||
|
||||
const assertDual = (node: unknown): void => {
|
||||
if (node === null || typeof node !== 'object') {
|
||||
return;
|
||||
}
|
||||
const keys = Object.keys(node);
|
||||
if (keys.includes('import') || keys.includes('require')) {
|
||||
expect(keys).toContain('import');
|
||||
expect(keys).toContain('require');
|
||||
}
|
||||
for (const value of Object.values(node)) {
|
||||
assertDual(value);
|
||||
}
|
||||
};
|
||||
for (const entry of Object.values(manifest.exports ?? {})) {
|
||||
expect(conditionsOf(entry)).not.toContain('require');
|
||||
assertDual(entry);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -22,11 +22,18 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"import": "./dist/index.js"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"types": "./dist/index.d.ts",
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -23,10 +23,17 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"files": [
|
||||
"dist"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -23,10 +23,17 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"files": [
|
||||
"dist"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -23,10 +23,17 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"files": [
|
||||
"dist"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -22,10 +22,17 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"files": [
|
||||
"dist"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ export default defineConfig({
|
|||
entry: ['src/index.ts'],
|
||||
|
||||
// 2. Output Configuration
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true, // Recommended: Cleans 'dist' before building
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -26,18 +26,37 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
},
|
||||
"./sse": {
|
||||
"types": "./dist/sse/index.d.mts",
|
||||
"import": "./dist/sse/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/sse/index.d.mts",
|
||||
"default": "./dist/sse/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/sse/index.d.cts",
|
||||
"default": "./dist/sse/index.cjs"
|
||||
}
|
||||
},
|
||||
"./auth": {
|
||||
"types": "./dist/auth/index.d.mts",
|
||||
"import": "./dist/auth/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/auth/index.d.mts",
|
||||
"default": "./dist/auth/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/auth/index.d.cts",
|
||||
"default": "./dist/auth/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { defineConfig } from 'tsdown';
|
|||
export default defineConfig({
|
||||
failOnWarn: 'ci-only',
|
||||
entry: ['src/index.ts', 'src/sse/index.ts', 'src/auth/index.ts'],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
|
|
@ -21,40 +21,89 @@
|
|||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"import": "./dist/index.mjs"
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
},
|
||||
"./stdio": {
|
||||
"types": "./dist/stdio.d.mts",
|
||||
"import": "./dist/stdio.mjs"
|
||||
"import": {
|
||||
"types": "./dist/stdio.d.mts",
|
||||
"default": "./dist/stdio.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/stdio.d.cts",
|
||||
"default": "./dist/stdio.cjs"
|
||||
}
|
||||
},
|
||||
"./validators/ajv": {
|
||||
"types": "./dist/validators/ajv.d.mts",
|
||||
"import": "./dist/validators/ajv.mjs"
|
||||
"import": {
|
||||
"types": "./dist/validators/ajv.d.mts",
|
||||
"default": "./dist/validators/ajv.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/validators/ajv.d.cts",
|
||||
"default": "./dist/validators/ajv.cjs"
|
||||
}
|
||||
},
|
||||
"./validators/cf-worker": {
|
||||
"types": "./dist/validators/cfWorker.d.mts",
|
||||
"import": "./dist/validators/cfWorker.mjs"
|
||||
"import": {
|
||||
"types": "./dist/validators/cfWorker.d.mts",
|
||||
"default": "./dist/validators/cfWorker.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/validators/cfWorker.d.cts",
|
||||
"default": "./dist/validators/cfWorker.cjs"
|
||||
}
|
||||
},
|
||||
"./_shims": {
|
||||
"workerd": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"import": "./dist/shimsWorkerd.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"default": "./dist/shimsWorkerd.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsWorkerd.d.cts",
|
||||
"default": "./dist/shimsWorkerd.cjs"
|
||||
}
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"import": "./dist/shimsWorkerd.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsWorkerd.d.mts",
|
||||
"default": "./dist/shimsWorkerd.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsWorkerd.d.cts",
|
||||
"default": "./dist/shimsWorkerd.cjs"
|
||||
}
|
||||
},
|
||||
"node": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"default": "./dist/shimsNode.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsNode.d.cts",
|
||||
"default": "./dist/shimsNode.cjs"
|
||||
}
|
||||
},
|
||||
"default": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"import": "./dist/shimsNode.mjs"
|
||||
"import": {
|
||||
"types": "./dist/shimsNode.d.mts",
|
||||
"default": "./dist/shimsNode.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/shimsNode.d.cts",
|
||||
"default": "./dist/shimsNode.cjs"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.cjs",
|
||||
"types": "./dist/index.d.mts",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ export default defineConfig({
|
|||
'src/validators/ajv.ts',
|
||||
'src/validators/cfWorker.ts'
|
||||
],
|
||||
format: ['esm'],
|
||||
format: ['esm', 'cjs'],
|
||||
fixedExtension: true,
|
||||
outDir: 'dist',
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
|
|
|
|||
Loading…
Reference in a new issue