40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import 'dotenv/config';
|
|
import { NestFactory } from '@nestjs/core';
|
|
import * as repl from 'repl';
|
|
import * as Logger from 'purdy';
|
|
|
|
const LOGGER_OPTIONS = {
|
|
indent: 2,
|
|
depth: 1,
|
|
};
|
|
|
|
class InteractiveNestJS {
|
|
async run() {
|
|
// create the application context
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const targetModule = require(`${__dirname}/app.module`);
|
|
const applicationContext = await NestFactory.createApplicationContext(
|
|
// tslint:disable-next-line: no-string-literal
|
|
targetModule['AppModule'],
|
|
);
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const awaitOutside = require('await-outside');
|
|
// start node repl
|
|
const server = repl.start({
|
|
useColors: true,
|
|
prompt: '> ',
|
|
writer: replWriter,
|
|
ignoreUndefined: true,
|
|
});
|
|
server.context.app = applicationContext;
|
|
awaitOutside.addAwaitOutsideToReplServer(server);
|
|
}
|
|
}
|
|
|
|
function replWriter(value: any): string {
|
|
return Logger.stringify(value, LOGGER_OPTIONS);
|
|
}
|
|
|
|
const session = new InteractiveNestJS();
|
|
session.run();
|