diff --git a/package-lock.json b/package-lock.json index d7de6bfcf..288c2f4cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "@microsoft/api-extractor": "^7.52.9", "@modelcontextprotocol/sdk": "^1.25.2", "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", "@types/jasmine": "^5.1.2", "@types/node": "^20.9.0", "@types/node-fetch": "^2.6.13", @@ -1422,6 +1423,31 @@ } } }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", @@ -2050,6 +2076,13 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -3335,6 +3368,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-require-extensions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", @@ -5757,6 +5800,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", diff --git a/package.json b/package.json index afbd342ef..0e2082ed1 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "@microsoft/api-extractor": "^7.52.9", "@modelcontextprotocol/sdk": "^1.25.2", "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", "@types/jasmine": "^5.1.2", "@types/node": "^20.9.0", "@types/node-fetch": "^2.6.13", diff --git a/rollup.config.mjs b/rollup.config.mjs index 508de8b7f..e800d38d3 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,4 +1,5 @@ import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; import {readFileSync} from 'fs'; import typescript from 'rollup-plugin-typescript2'; @@ -37,6 +38,17 @@ const externalDeps = [ 'p-retry', ]; +// Web builds must not leave bare npm specifiers — browsers cannot resolve them. +// Bundle `p-retry` into dist/web; keep other externals that are Node-only unused. +const webExternalDeps = externalDeps.filter((dep) => dep !== 'p-retry'); +const webPlugins = [ + ...rollupPlugins, + resolve({ + browser: true, + preferBuiltins: false, + }), +]; + export default [ // Cross ES module (dist/index.mjs) { @@ -94,8 +106,8 @@ export default [ format: 'es', sourcemap: true, }, - plugins: rollupPlugins, - external: externalDeps, + plugins: webPlugins, + external: webExternalDeps, }, // The `tokenizer/node` ES module (dist/tokenizer/node.mjs)