UNPKG

@whook/whook

Version:

Build strong and efficient REST web services.

55 lines 1.88 kB
import { autoService } from 'knifecycle'; import { printStackTrace, YError } from 'yerror'; import { noop } from '../libs/utils.js'; export const definition = { name: 'route', description: 'Runs the given server route for testing purpose', example: `whook route --name getPing --parameters '{}'`, config: { promptArgs: true }, arguments: [ { name: 'name', required: true, description: 'Handler to invoke', schema: { type: 'string', }, }, { name: 'parameters', required: true, description: 'Parameters to invoke the route with', schema: { type: 'string', default: '{}', }, }, ], }; async function initRouteCommand({ $injector, log = noop, }) { return async (args) => { const { namedArguments: { name: routeName, parameters: routeParameters }, } = args; let parsedParameters; try { parsedParameters = JSON.parse(routeParameters || '{}'); } catch (err) { throw YError.wrap(err, 'E_BAD_PARAMETERS', routeParameters); } log('debug', 'route', routeName); log('debug', 'parameters', parsedParameters); // Maybe infer and check command definition from route definition // with ajv or else try { const route = (await $injector([routeName]))[routeName]; const response = await route(parsedParameters, undefined); log('info', JSON.stringify(response, null, 2)); } catch (err) { log('error', 'Got an error while running the route.'); log('error-stack', printStackTrace(err)); } }; } export default autoService(initRouteCommand); //# sourceMappingURL=route.js.map