@graphql-inspector/commands
Version:
Plugin system for commands in GraphQL Inspector
48 lines (47 loc) • 1.58 kB
JavaScript
import { isAbsolute, resolve } from 'path';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
export function useCommands(api) {
return api.config.commands.map(name => loadCommand(name)(api));
}
export function createCommand(factory) {
return factory;
}
function loadCommand(name) {
const mod = require(`@graphql-inspector/${name}-command`);
return mod.default || mod;
}
export function ensureAbsolute(filepath, basepath = process.cwd()) {
return isAbsolute(filepath) ? filepath : resolve(basepath, filepath);
}
export function parseGlobalArgs(args) {
const headers = {};
const leftHeaders = {};
const rightHeaders = {};
if (args.header) {
for (const header of args.header) {
const [name, ...values] = header.split(':');
headers[name] = values.join('');
}
}
if (args.leftHeader) {
for (const leftHeader of args.leftHeader) {
const [lname, ...lvalues] = leftHeader.split(':');
leftHeaders[lname] = lvalues.join('');
}
}
if (args.rightHeader) {
for (const rightHeader of args.rightHeader) {
const [rname, ...rvalues] = rightHeader.split(':');
rightHeaders[rname] = rvalues.join('');
}
}
if (args.require) {
for (const mod of args.require)
require(mod);
}
return { headers, leftHeaders, rightHeaders, token: args.token };
}
export function mockCommand(mod, cmd) {
return yargs(hideBin(process.argv)).command(mod).exitProcess(false).parseAsync(cmd);
}