repomix
Version:
A tool to pack repository contents to single file for AI consumption
75 lines (63 loc) • 1.97 kB
JavaScript
// https://nodejs.org/api/module.html#module-compile-cache
// Enable compile cache for the main process and propagate the cache directory
// via NODE_COMPILE_CACHE env var so child_process workers inherit it at startup
// (before any modules are loaded), which is critical for ESM static imports.
const nodeModule = require('node:module');
if (nodeModule.enableCompileCache && !process.env.NODE_DISABLE_COMPILE_CACHE) {
try {
const result = nodeModule.enableCompileCache();
if (result && result.directory && !process.env.NODE_COMPILE_CACHE) {
process.env.NODE_COMPILE_CACHE = result.directory;
}
} catch {
// Ignore errors
}
}
const nodeVersion = process.versions.node;
const [major] = nodeVersion.split('.').map(Number);
const EXIT_CODES = {
SUCCESS: 0,
ERROR: 1,
};
if (major < 20) {
console.warn(
`Warning: Repomix recommends Node.js version 20 or higher. Current version: ${nodeVersion}. Some features may not work as expected.\n`,
);
}
function setupErrorHandlers() {
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
process.exit(EXIT_CODES.ERROR);
});
process.on('unhandledRejection', (reason) => {
console.error('Unhandled Promise Rejection:', reason);
process.exit(EXIT_CODES.ERROR);
});
function shutdown() {
process.exit(EXIT_CODES.SUCCESS);
}
process.on('SIGINT', () => {
console.log('\nReceived SIGINT. Shutting down...');
shutdown();
});
process.on('SIGTERM', shutdown);
}
(async () => {
try {
setupErrorHandlers();
const { run } = await import('../lib/cli/cliRun.js');
await run();
} catch (error) {
if (error instanceof Error) {
console.error('Fatal Error:', {
name: error.name,
message: error.message,
stack: error.stack,
});
} else {
console.error('Fatal Error:', error);
}
process.exit(EXIT_CODES.ERROR);
}
})();