UNPKG

@mojojs/core

Version:

Real-time web framework

82 lines (80 loc) 2.95 kB
import chalk from 'chalk'; import nopt from 'nopt'; /** * Get command. */ export default async function getCommand(app, args) { const parsed = nopt({ body: String, header: [String, Array], insecure: Boolean, method: String, redirect: Boolean, 'socket-path': String, verbose: Boolean }, { b: '--body', H: '--header', k: '--insecure', X: '--method', P: '--socket-path', r: '--redirect', v: '--verbose' }, args, 1); const argv = parsed.argv; const request = { body: parsed.body, headers: parseHeaders(parsed.header), insecure: parsed.insecure, method: parsed.method ?? 'GET', socketPath: parsed['socket-path'], url: argv.remain[0] ?? '/' }; const ua = await app.newMockUserAgent({ maxRedirects: parsed.redirect === true ? 10 : 0 }); const res = await ua.request(request); if (parsed.verbose === true) { const stderr = process.stderr; const resVersion = chalk.blue('HTTP') + '/' + chalk.blue(res.httpVersion); const statusCode = res.statusCode; const statusMessage = chalk.blue(res.statusMessage); stderr.write(`${resVersion} ${statusCode} ${statusMessage}\n`); writeHeaders(res.headers.toArray()); } if (argv.remain[1] !== undefined) { const html = await res.html(); process.stdout.write(html .find(argv.remain[1]) .map(el => el.toString()) .join('') ?? ''); } else { await res.pipe(process.stdout); } await ua.stop(); } getCommand.description = 'Perform HTTP request'; getCommand.usage = `Usage: APPLICATION get [OPTIONS] URL [SELECTOR] node index.js get / node index.js get -X POST /hello node index.js get -H 'Accept: application/json' /api/test node index.js get https://mojolicious.org node index.js get https://mojolicious.org 'head > title' Options: -b, --body <data> Content to send with request -H, --header <name:value> One or more additional HTTP headers -h, --help Show this summary of available options -k, --insecure Do not require a valid TLS certificate to access HTTPS sites -P, --socket-path <path> UNIX domain socket path -r, --redirect Follow up to 10 redirects -X, --method <method> HTTP method to use, defaults to "GET" -v, --verbose Print response headers to stderr `; function parseHeaders(list = []) { const headers = {}; for (const pair of list) { const header = pair.split(/:\s+/); headers[header[0]] = header[1]; } return headers; } function writeHeaders(headers) { const stderr = process.stderr; for (let i = 0; i < headers.length; i += 2) { stderr.write(chalk.cyan(headers[i]) + `: ${headers[i + 1]}\n`); } stderr.write('\n'); } //# sourceMappingURL=get.js.map