@kya-os/mcp-i
Version:
The TypeScript MCP framework with identity features built-in
85 lines (84 loc) • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getExternals = getExternals;
const compiler_context_1 = require("../compiler-context");
const module_1 = require("module");
const plugins_1 = require("./plugins");
/**
* This function will decide if a file is bundled by xmcp compiler or not.
* - Built-in Node modules: externalized
* - npm packages: externalized
* - User code (tools, etc): bundled
* For adapters, tool files must be bundled so they're available at runtime.
*/
function getExternals() {
const xmcpConfig = (0, compiler_context_1.getXmcpConfig)();
return [
function (data, callback) {
const { request } = data;
if (!request) {
return callback();
}
/**
* Externalize Node.js built-in modules, bundle everything else
*/
const isBuiltinModule = module_1.builtinModules.includes(request) ||
module_1.builtinModules.includes(request.replace(/^node:/, ""));
if (isBuiltinModule) {
return callback(null, `commonjs ${request}`);
}
/**
* Externalize packages with native binaries (.node files)
* These can't be bundled by webpack and must be external
*/
const nativeBinaryPackages = [
'fsevents',
'cpu-features',
'@swc/wasm',
'@swc/core-darwin-arm64',
'@swc/core-darwin-x64',
'@swc/core-linux-arm64-gnu',
'@swc/core-linux-arm64-musl',
'@swc/core-linux-arm-gnueabihf',
'@swc/core-linux-x64-gnu',
'@swc/core-linux-x64-musl',
'@swc/core-win32-arm64-msvc',
'@swc/core-win32-ia32-msvc',
'@swc/core-win32-x64-msvc',
'@swc/core-android-arm64',
'@swc/core-android-arm-eabi',
];
if (nativeBinaryPackages.some(pkg => request === pkg || request.startsWith(`${pkg}/`))) {
return callback(null, `commonjs ${request}`);
}
// Check if request is inside .xmcp folder - if so, bundle it
if (request.includes(".xmcp")) {
return callback();
}
// Check if request is a runtime file - if so, bundle it
const filesToInclude = [...Object.keys(plugins_1.runtimeFiles), "import-map.js"];
for (const file of filesToInclude) {
if (request.endsWith(`./${file}`) ||
request.endsWith(`./${file.replace(".js", "")}`)) {
return callback();
}
}
/**
* For adapters (Next.js, Express), bundle tool files into the adapter
* so they're available when the adapter runs at runtime.
* Only externalize npm packages - let webpack bundle user code.
*/
if (xmcpConfig.experimental?.adapter) {
// Bundle local/relative imports (tool files, etc)
if (request.startsWith("./") || request.startsWith("../")) {
return callback();
}
// Externalize npm packages only
if (!request.startsWith(".") && !request.startsWith("/")) {
return callback(null, `commonjs ${request}`);
}
}
callback();
},
];
}