#!/usr/bin/env node import { RestParser } from "rest-cli"; import flatten from "flat"; const usage = (errorNumber = 0) => { console.error("Usage: ./bin/generate-example-metadata.mjs <instance> [requestName|requestNumber]"); process.exit(errorNumber); } const json2dotNotation = ( json, prefix = "post.responses.default.content.application/json.example." ) => { const flattened = flatten(json); const str = Object.keys(flattened) .map(key => prefix + key + ": " + JSON.stringify(flattened[key])) .join("\n"); return str; }; /** @param {string} s */ const isInteger = (s) => Number.isInteger(Number(s)); ///////////////////////////////////////////////////////////: const [, , instanceName, requestName] = process.argv; if (!instanceName) { console.error("Instance name needed as a first paramater!"); usage(1); } // Get Response from examples.http file const parser = new RestParser(); await parser.readFile(`./${instanceName}/examples.http`); const requestId = isInteger(requestName) ? Number(requestName) : requestName; if (requestId === undefined) { console.error("requestName needed as a second parameter (could be a string or an integer)."); usage(2); } const request = await parser.get(requestId); if (request) { // request const body = request.getBody(); console.log( json2dotNotation( JSON.parse(body), "post.requestBody.content.application/json.example.") ); // response const { response } = await request.request(); const json = JSON.parse(response.getBody()); console.log(json2dotNotation(json)); }