nestjs-repl
v1.0.0
Published
Typesafe NestJS REPL module
Downloads
4
Readme
Type Safe, REPL module for a NestJS application enabling you to create REPL commands in a consistent way.
Uses zod object defintions to create typesafe command args, with automatic validation.
Features a built in help
command which can be used to list all commands like so > .help
or used to describe the args for a specific command, like so > .help foo
.
Installation
npm i nestjs-repl
Example
- Register in
app.module
import { ReplModule } from 'nestjs-repl';
@Module({
imports: [ReplModule],
})
export class AppModule {}
- Wire-up to your repl entrypoint
export async function bootstrapRepl() {
const repl = await import('repl');
const app = await NestFactory.createApplicationContext(AppModule, {
abortOnError: false,
logger: new ReplLogger(),
});
await app.init();
const replServer = repl.start({
prompt: color(`> `),
ignoreUndefined: true,
preview: false,
});
replServer.setupHistory('.repl-history', (err, _repl) => {
if (err) {
console.error('error initializing history');
console.error(inspect(err));
throw err;
}
});
/**
* >>>>>>>> THIS BIT
*/
app.get(ReplModule).setup(replServer);
return replServer;
}
- Register your command
import { ReplCommand } from 'nestjs-repl';
import { z } from 'zod';
const schema = z.object({
id: z.string().uuid(),
});
@ReplCommand('foo')
export class TestCommand {
async execute(args: z.infer<typeof schema>) {
//do stuff
}
}
Usage
> help('foo')
foo: {
args: {
id: { type: string, format: 'uuid', required: true }
}
}
> await foo({ id: "'62f60dc1-230f-4be0-b85e-cb7245f77f4b" })
TODO
- Potentially wire-up
inquirerjs
to build args via a prompt? - Allow middlewares to only be applied to commands matching a pattern?