UNPKG

@kya-os/mcp-i

Version:

The TypeScript MCP framework with identity features built-in

85 lines (84 loc) 3.54 kB
"use strict"; 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(); }, ]; }