Files
homeassistant-mcp/jest-resolver.cjs
jango-blockchained 8f0b9eb909 Enhance Jest Configuration and Resolver for ESM and TypeScript Support
- Updated Jest configuration to handle .mts and .mjs file extensions
- Improved Jest resolver to better support ESM modules and @digital-alchemy packages
- Added comprehensive test coverage for AI router, Home Assistant integration, and WebSocket client
- Expanded test scenarios for error handling, event subscriptions, and service interactions
2025-02-01 13:53:55 +01:00

61 lines
2.1 KiB
JavaScript

const path = require('path');
module.exports = (request, options) => {
// Handle chalk and related packages
if (request === 'chalk' || request === '#ansi-styles' || request === '#supports-color') {
return path.resolve(__dirname, 'node_modules', request.replace('#', ''));
}
// Handle .js extensions for TypeScript files
if (request.endsWith('.js')) {
const tsRequest = request.replace(/\.js$/, '.ts');
try {
return options.defaultResolver(tsRequest, options);
} catch (e) {
// If the .ts file doesn't exist, continue with the original request
}
}
// Handle @digital-alchemy packages
if (request.startsWith('@digital-alchemy/')) {
try {
const packagePath = path.resolve(__dirname, 'node_modules', request);
return options.defaultResolver(packagePath, {
...options,
packageFilter: pkg => {
if (pkg.type === 'module') {
if (pkg.exports && pkg.exports.import) {
pkg.main = pkg.exports.import;
} else if (pkg.module) {
pkg.main = pkg.module;
}
}
return pkg;
}
});
} catch (e) {
// If resolution fails, continue with default resolver
}
}
// Call the default resolver
return options.defaultResolver(request, {
...options,
// Handle ESM modules
packageFilter: pkg => {
// Preserve ESM modules
if (pkg.type === 'module') {
if (pkg.exports) {
if (pkg.exports.import) {
pkg.main = pkg.exports.import;
} else if (typeof pkg.exports === 'string') {
pkg.main = pkg.exports;
}
} else if (pkg.module) {
pkg.main = pkg.module;
}
}
return pkg;
},
});
};