depxbox
Version:
Test npm packages super quick and easy.
49 lines (48 loc) • 1.61 kB
JavaScript
import chalk from 'chalk';
import { start } from 'node:repl';
import { createRequire } from 'node:module';
import { BaseMode } from './Base.js';
import Logger from '../utils/logger.js';
import path from 'node:path';
export class Repl extends BaseMode {
constructor(config) {
super(config);
}
createREPL(packageNames) {
Logger.green('\nStarting REPL with loaded dependencies:');
packageNames.forEach((pkg) => {
Logger.blue(` - ${pkg}`);
});
const sandboxRequire = createRequire(path.join(this.workingDir, 'node_modules/'));
const loadedDependencies = {};
for (const pkg of packageNames) {
loadedDependencies[pkg] = sandboxRequire(pkg);
}
const replServer = start({
prompt: chalk.yellow('sandbox> '),
useColors: true,
});
Object.entries(loadedDependencies).forEach(([name, module]) => {
replServer.context[name] = module;
});
replServer.context.require = sandboxRequire;
replServer.on('close', async () => {
console.log('close');
console.log(this);
await this.deleteWorkspace();
});
}
async run(packageNames) {
try {
await this.createWorkspace();
await this.installDependencies(packageNames);
this.createREPL(packageNames);
}
catch (error) {
Logger.error('Error occurred while creating REPL Enviorment');
Logger.logError(error);
process.exit(1);
}
}
}
export default Repl;