UNPKG

curlconverter

Version:

convert curl commands to Python, JavaScript, Go, PHP and more

73 lines (65 loc) 2.07 kB
import { CCError } from "./utils.js"; import { Word } from "./shell/Word.js"; import { tokenize } from "./shell/tokenizer.js"; import * as curl from "./curl/opts.js"; import { curlLongOpts, curlLongOptsShortened, curlShortOpts, } from "./curl/opts.js"; import { buildRequests } from "./Request.js"; import type { Request, RequestUrl } from "./Request.js"; import type { Warnings } from "./Warnings.js"; export { COMMON_SUPPORTED_ARGS } from "./curl/opts.js"; export { getFirst } from "./Request.js"; export type { Request, RequestUrl, Warnings }; export function clip(s: string, maxLength = 30): string { if (s.length > maxLength) { return s.slice(0, maxLength - 3) + "..."; } return s; } function findCommands( curlCommand: string | string[], warnings: Warnings, ): [Word[], Word?, Word?][] { if (typeof curlCommand === "string") { return tokenize(curlCommand, warnings); } if (curlCommand.length === 0) { throw new CCError("no arguments provided"); } if (curlCommand[0].trim() !== "curl") { throw new CCError( 'command should begin with "curl" but instead begins with ' + JSON.stringify(clip(curlCommand[0])), ); } return [[curlCommand.map((arg) => new Word(arg)), undefined, undefined]]; } /** * Accepts a string of Bash code or a tokenized argv array. * Returns an array of parsed curl objects. * @param command a string of Bash code containing at least one curl command or an * array of shell argument tokens (meant for passing process.argv). */ export function parse( command: string | string[], supportedArgs?: Set<string>, warnings: Warnings = [], ): Request[] { let requests: Request[] = []; const curlCommands = findCommands(command, warnings); for (const [argv, stdin, stdinFile] of curlCommands) { const [globalConfig] = curl.parseArgs( argv, curlLongOpts, curlLongOptsShortened, curlShortOpts, supportedArgs, warnings, ); requests = requests.concat(buildRequests(globalConfig, stdin, stdinFile)); } return requests; }