UNPKG

@usebruno/converters

Version:

The converters package is responsible for converting collections from one format to a Bruno collection. It can be used as a standalone package or as a part of the Bruno framework.

1 lines 101 kB
import e from"lodash/get";import t from"lodash/each";import{customAlphabet as r}from"nanoid";import"lodash/cloneDeep";import{collectionSchema as s}from"@usebruno/schema";import n from"lodash/map";import a from"js-yaml";import{each as o,get as i}from"lodash";const l=e=>e.hasOwnProperty("request")&&["http-request","graphql-request"].includes(e.type)&&!e.items,p=()=>r("useandom26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict",21)(),u=(e={})=>{try{return s.validateSync(e),e}catch(e){throw console.log("Error validating schema",e),new Error("The Collection has an invalid schema")}},c=r=>{const s=(r=[])=>{t(r,(r=>{if(["http","graphql"].includes(r.type)){r.type=`${r.type}-request`,r.request.query&&(r.request.params=r.request.query.map((e=>({...e,type:"query",uid:e.uid||p()})))),delete r.request.query;let s=e(r,"request.body.multipartForm");s&&t(s,(e=>{e.type||(e.type="text")}))}r.items&&r.items.length&&s(r.items)}))};return s(r.items),r},d=e=>{const r=(e=[])=>{let s=1;t(e,(e=>{l(e)&&!e.seq&&(e.seq=s,s++),e.items&&e.items.length&&r(e.items)}))};return r(e.items),e},m=r=>{t(r,(r=>{delete r.uid,["http-request","graphql-request","grpc-request"].includes(r.type)&&(t(e(r,"request.headers"),(e=>delete e.uid)),t(e(r,"request.params"),(e=>delete e.uid)),t(e(r,"request.vars.req"),(e=>delete e.uid)),t(e(r,"request.vars.res"),(e=>delete e.uid)),t(e(r,"request.vars.assertions"),(e=>delete e.uid)),t(e(r,"request.body.multipartForm"),(e=>delete e.uid)),t(e(r,"request.body.formUrlEncoded"),(e=>delete e.uid)),t(e(r,"request.body.file"),(e=>delete e.uid))),r.items&&r.items.length&&m(r.items)}))},y=(e,t)=>{const r=e.objectExpression([]);return"ArrayExpression"===t.type&&t.elements.forEach((t=>{if("ObjectExpression"===t.type){const s=t.properties.find((e=>"key"===e.key.name||"key"===e.key.value)),n=t.properties.find((e=>"value"===e.key.name||"value"===e.key.value));s&&n&&r.properties.push(e.property("init",e.literal(s.value.value),n.value))}})),r},h=(e,t,r,s)=>{let n=t.properties.find((e=>"headers"===e.key.name||"headers"===e.key.value));n?"ObjectExpression"!==n.value.type&&(n.value=e.objectExpression([])):(n=e.property("init",e.identifier("headers"),e.objectExpression([])),t.properties.push(n)),n.value.properties=n.value.properties.filter((e=>"Literal"!==e.key.type||e.key.value.toLowerCase()!==r.toLowerCase())),n.value.properties.push(e.property("init",e.literal(r),e.literal(s)))},f=(e,t)=>{"ObjectExpression"===t.type&&t.properties.forEach((t=>{"header"!==t.key.name&&"header"!==t.key.value||(t.key.name="headers",t.key.value="headers","ArrayExpression"===t.value.type&&(t.value=y(e,t.value)))}))},b=(e,t)=>{if("ObjectExpression"!==t.type)return null;t.properties.forEach((r=>{if(("body"===r.key.name||"body"===r.key.value)&&"ObjectExpression"===r.value.type){const s=r.value.properties,n=s.find((e=>"mode"===e.key.name||"mode"===e.key.value));if(n&&"Literal"===n.value.type){const a=n.value.value;if("raw"===a){const e=s.find((e=>"raw"===e.key.name||"raw"===e.key.value));e&&(r.key.name="data",r.key.value="data",r.value=e.value)}else if("urlencoded"===a){const n=s.find((e=>("urlencoded"===e.key.name||"urlencoded"===e.key.value)&&"ArrayExpression"===e.value.type));n&&(r.key.name="data",r.key.value="data",r.value=y(e,n.value),h(e,t,"Content-Type","application/x-www-form-urlencoded"))}else if("formdata"===a){const n=s.find((e=>("formdata"===e.key.name||"formdata"===e.key.value)&&"ArrayExpression"===e.value.type));n&&(r.key.name="data",r.key.value="data",r.value=y(e,n.value),h(e,t,"Content-Type","multipart/form-data"))}}}}))},g=(e,t,r,s=new Set)=>{if(s.has(r))return null;s.add(r);let n=null;return t.find(e.VariableDeclarator,{id:{name:r}}).forEach((r=>{const a=r.value.init;if(a&&"ObjectExpression"===a.type){const t=e(a).at(0).get().value;f(e,t),b(e,t),n=t}else if(a&&"Identifier"===a.type){const r=a.name;n=g(e,t,r,s)}})),n},q=require("jscodeshift"),v=require("lodash/cloneDeep");function x(e){if("Identifier"===e.type)return e.name;if("CallExpression"===e.type){return`${x(e.callee)}()`}if("MemberExpression"===e.type){const t=x(e.object);if(e.computed)return"Literal"===e.property.type&&"string"==typeof e.property.value?`${t}.${e.property.value}`:`${t}.[computed]`;if("Identifier"===e.property.type)return`${t}.${e.property.name}`}return"[unsupported]"}const k={"pm.globals.get":"bru.getGlobalEnvVar","pm.globals.set":"bru.setGlobalEnvVar","pm.environment.get":"bru.getEnvVar","pm.environment.set":"bru.setEnvVar","pm.environment.name":"bru.getEnvName()","pm.environment.unset":"bru.deleteEnvVar","pm.variables.get":"bru.getVar","pm.variables.set":"bru.setVar","pm.variables.has":"bru.hasVar","pm.variables.replaceIn":"bru.interpolate","pm.collectionVariables.get":"bru.getVar","pm.collectionVariables.set":"bru.setVar","pm.collectionVariables.has":"bru.hasVar","pm.collectionVariables.unset":"bru.deleteVar","pm.setNextRequest":"bru.setNextRequest","pm.test":"test","pm.expect":"expect","pm.expect.fail":"expect.fail","pm.info.requestName":"req.getName()","pm.request.url":"req.getUrl()","pm.request.method":"req.getMethod()","pm.request.headers":"req.getHeaders()","pm.request.body":"req.getBody()","request.url":"req.getUrl()","request.method":"req.getMethod()","request.headers":"req.getHeaders()","request.body":"req.getBody()","request.name":"req.getName()","pm.response.json":"res.getBody","pm.response.code":"res.getStatus()","pm.response.status":"res.statusText","pm.response.responseTime":"res.getResponseTime()","pm.response.statusText":"res.statusText","pm.response.headers":"res.getHeaders()","pm.response.size":"res.getSize","pm.response.responseSize":"res.getSize().body","pm.response.size().body":"res.getSize().body","pm.response.size().header":"res.getSize().header","pm.response.size().total":"res.getSize().total","pm.cookies.jar":"bru.cookies.jar","pm.cookies.jar().get":"bru.cookies.jar().getCookie","pm.cookies.jar().getAll":"bru.cookies.jar().getCookies","pm.cookies.jar().set":"bru.cookies.jar().setCookie","pm.cookies.jar().unset":"bru.cookies.jar().deleteCookie","pm.cookies.jar().clear":"bru.cookies.jar().deleteCookies","pm.execution.skipRequest":"bru.runner.skipRequest","pm.setEnvironmentVariable":"bru.setEnvVar","pm.getEnvironmentVariable":"bru.getEnvVar","pm.clearEnvironmentVariable":"bru.deleteEnvVar"},w=[{pattern:"pm.sendRequest",transform:(e,t)=>{const r=e.parent.value;if("CallExpression"!==r.type)return;const s=[...r.arguments];if(!s.length)return;const n=s[0],a=s[1],o="AwaitExpression"===e.parent.parent.value.type;if("ObjectExpression"===n.type)f(t,n),b(t,n);else if("Identifier"===n.type){const r=n.name,s=t(e).closest(t.Program);g(t,s,r)}if(a){const e=((e,t)=>{if(!t||"FunctionExpression"!==t.type&&"ArrowFunctionExpression"!==t.type)return null;const r=t.params,s=t.body;let n="response";r.length>=2&&"Identifier"===r[1].type&&(n=r[1].name);let a="error";r.length>=1&&"Identifier"===r[0].type&&(a=r[0].name);const o={json:"data",text:"data",code:"status",status:"statusText"};return e(s).find(e.MemberExpression,{object:{type:"Identifier",name:n}}).forEach((t=>{const r=t.node.property;if("Identifier"===r.type&&o[r.name]){const s=o[r.name];if(s){const r=t.parent;r&&"CallExpression"===r.node.type?e(r).replaceWith(e.memberExpression(e.identifier(n),e.identifier(s))):e(t).replaceWith(e.memberExpression(e.identifier(n),e.identifier(s)))}}})),e.functionExpression(null,[e.identifier(a),e.identifier(n)],e.blockStatement(s.body))})(t,a);!e||"FunctionExpression"!==e.type&&"ArrowFunctionExpression"!==e.type||(e.async=!0);const r=t.callExpression(t.identifier("bru.sendRequest"),e?[n,e]:[n]);return o?r:t.awaitExpression(r)}const i=t.callExpression(t.identifier("bru.sendRequest"),[n]);return o?i:t.awaitExpression(i)}},{pattern:"pm.environment.has",transform:(e,t)=>{const r=e.parent.value.arguments;return t.logicalExpression("&&",t.binaryExpression("!==",t.callExpression(t.identifier("bru.getEnvVar"),r),t.identifier("undefined")),t.binaryExpression("!==",t.callExpression(t.identifier("bru.getEnvVar"),r),t.identifier("null")))}},{pattern:"pm.response.text",transform:(e,t)=>t.callExpression(t.identifier("JSON.stringify"),[t.identifier("res.getBody()")])},{pattern:"pm.response.headers.get",transform:(e,t)=>t.callExpression(t.identifier("res.getHeader"),e.parent.value.arguments)},{pattern:"pm.response.to.have.status",transform:(e,t)=>{const r=e.parent.value.arguments;return t.callExpression(t.memberExpression(t.callExpression(t.identifier("expect"),[t.callExpression(t.identifier("res.getStatus"),[])]),t.identifier("to.equal")),r)}},{pattern:"pm.response.to.have.header",transform:(e,t)=>{const r=e.parent.value.arguments;return r.length>0&&(r[0]=t.callExpression(t.memberExpression(r[0],t.identifier("toLowerCase")),[])),t.callExpression(t.memberExpression(t.callExpression(t.identifier("expect"),[t.callExpression(t.identifier("res.getHeaders"),[])]),t.identifier("to.have.property")),r)}},{pattern:"pm.response.to.have.body",transform:(e,t)=>{const r=e.parent.value.arguments;return t.callExpression(t.memberExpression(t.callExpression(t.identifier("expect"),[t.identifier("res.getBody()")]),t.identifier("to.equal")),r)}},{pattern:"pm.execution.setNextRequest",transform:(e,t)=>{const r=e.parent.value.arguments;return"Literal"!==r[0].type||null!==r[0].value&&"null"!==r[0].value?t.callExpression(t.identifier("bru.runner.setNextRequest"),r):t.callExpression(t.identifier("bru.runner.stopExecution"),[])}}],E={};w.forEach((e=>{E[e.pattern]=e}));const T=new Set(["pm","postman","pm.request","pm.response","pm.test","pm.expect","pm.environment","pm.variables","pm.collectionVariables","pm.execution","pm.globals"]);function U(e){e=e.replace(/\bpostman\b/g,"pm");const t=q(e),r=new Set;return function(e){const t=new Map,r=5;let s,n=0;do{s=!1,A(e,t),s=j(e,t)||!1,s=C(e,t)||!1,n++}while(s&&n<r)}(t),function(e){const t={get:"getCookie",getAll:"getCookies",set:"setCookie",unset:"deleteCookie",clear:"deleteCookies"},r=new Set;e.find(q.VariableDeclarator).forEach((e=>{if(e.value.init&&"CallExpression"===e.value.init.type){const t=e.value.init;if("MemberExpression"===t.callee.type){const s=x(t.callee);"pm.cookies.jar"!==s&&"bru.cookies.jar"!==s||"Identifier"===e.value.id.type&&r.add(e.value.id.name)}}})),e.find(q.CallExpression).forEach((e=>{if("MemberExpression"===e.value.callee.type&&"Identifier"===e.value.callee.object.type&&"Identifier"===e.value.callee.property.type){const s=e.value.callee.object.name,n=e.value.callee.property.name;if(r.has(s)&&t[n]){const r=t[n];e.value.callee.property.name=r}}}))}(t),function(e,t){e.find(q.MemberExpression).forEach((e=>{if(t.has(e.node))return;const r=x(e.value);if(k.hasOwnProperty(r)){const s=k[r];return q(e).replaceWith(q.identifier(s)),void t.add(e.node)}if(E.hasOwnProperty(r)&&"CallExpression"===e.parent.value.type){const s=E[r].transform(e,q);Array.isArray(s)?s.forEach(((r,s)=>{0===s?q(e.parent).replaceWith(r):q(e.parent.parent).insertAfter(r),t.add(r.node),t.add(e.parent.node)})):(q(e.parent).replaceWith(s),t.add(e.node),t.add(e.parent.node))}}))}(t,r),function(e,t,r){const s=/responseBody|responseHeaders|responseTime/;if(!s.test(r))return;const n=new Set;e.find(q.VariableDeclarator).forEach((e=>{if("Identifier"===e.value.id.type){const t=e.value.id.name;s.test(t)&&n.add(t)}})),n.has("responseBody")||e.find(q.CallExpression).forEach((e=>{if(t.has(e.node))return;const r=e.value;if("MemberExpression"===r.callee.type&&"JSON"===r.callee.object.name&&"parse"===r.callee.property.name){const s=r.arguments;s.length>0&&"Identifier"===s[0].type&&"responseBody"===s[0].name&&(q(e).replaceWith(q.identifier("res.getBody()")),t.add(e.node))}}));[{name:"responseBody",replacement:"res.getBody()"},{name:"responseHeaders",replacement:"res.getHeaders()"},{name:"responseTime",replacement:"res.getResponseTime()"}].forEach((({name:r,replacement:s})=>{n.has(r)||e.find(q.Identifier,{name:r}).forEach((e=>{if(t.has(e.node))return;const r=e.parent.value;"VariableDeclarator"===r.type&&r.id===e.node||"AssignmentExpression"===r.type&&r.left===e.node||"FunctionDeclaration"!==r.type&&"FunctionExpression"!==r.type&&("Property"!==r.type||r.key!==e.node&&r.value!==e.node)&&(q(e).replaceWith(q.identifier(s)),t.add(e.node))}))}))}(t,r,e),function(e){e.find(q.ExpressionStatement,{expression:{type:"AssignmentExpression",left:{type:"MemberExpression",object:{name:"tests"},computed:!0,property:{}}}}).forEach((e=>{const t=e.value.expression,r=t.left;if("Identifier"===r.object.type&&"tests"===r.object.name&&!0===r.computed){const s=r.property,n=t.right;if("Literal"===s.type&&"string"==typeof s.value){const t=s.value;q(e).replaceWith(q.expressionStatement(q.callExpression(q.identifier("test"),[q.literal(t),q.functionExpression(null,[],q.blockStatement([q.expressionStatement(q.memberExpression(q.callExpression(q.identifier("expect"),[q.callExpression(q.identifier("Boolean"),[n])]),q.identifier("to.be.true")))]))])))}else if("TemplateLiteral"===s.type){const t=q.templateLiteral(s.quasis,s.expressions);q(e).replaceWith(q.expressionStatement(q.callExpression(q.identifier("test"),[t,q.functionExpression(null,[],q.blockStatement([q.expressionStatement(q.memberExpression(q.callExpression(q.identifier("expect"),[q.callExpression(q.identifier("Boolean"),[n])]),q.identifier("to.be.true")))]))])))}}}))}(t),t.toSource()}function A(e,t){e.find(q.VariableDeclarator).forEach((e=>{if(e.value.init)if("Identifier"===e.value.id.type){const r=e.value.id.name;if("Identifier"===e.value.init.type)t.set(r,{type:"identifier",value:e.value.init.name});else if("MemberExpression"===e.value.init.type){const s=x(e.value.init);t.set(r,{type:"memberExpression",value:s,node:e.value.init})}}else if("ObjectPattern"===e.value.id.type&&"Identifier"===e.value.init.type){const r=e.value.init.name;e.value.id.properties.forEach((e=>{if(e.key.name&&"Identifier"===e.value.type){const s=e.value.name;t.set(s,{type:"memberExpression",value:`${r}.${e.key.name}`,node:q.memberExpression(q.identifier(r),q.identifier(e.key.name))})}}))}}))}function j(e,t){let r=!1;return e.find(q.Identifier).forEach((e=>{const s=e.value.name;if("VariableDeclarator"===e.parent.value.type&&e.parent.value.id===e.value)return;if("MemberExpression"===e.parent.value.type&&e.parent.value.property===e.value&&!e.parent.value.computed)return;if(!t.has(s))return;const n=t.get(s);if(!T.has(n.value))return;const a=v(n.node);q(e).replaceWith(a),t.set(s,{type:"memberExpression",value:n.value,node:a}),r=!0})),r}function C(e,t){let r=!1;return e.find(q.VariableDeclarator).forEach((e=>{if("Identifier"===e.value.id.type){const s=e.value.id.name,n=t.get(s);if(!n||!T.has(n.value))return;const a=q(e).closest(q.VariableDeclaration);1===a.get().value.declarations.length?a.remove():q(e).remove(),r=!0}else if("ObjectPattern"===e.value.id.type&&e.value.init&&"Identifier"===e.value.init.type&&"pm"===e.value.init.name){const t=q(e).closest(q.VariableDeclaration);1===t.get().value.declarations.length?t.remove():q(e).remove(),r=!0}})),r}const S={"pm\\.environment\\.get\\(":"bru.getEnvVar(","pm\\.environment\\.set\\(":"bru.setEnvVar(","pm\\.variables\\.get\\(":"bru.getVar(","pm\\.variables\\.set\\(":"bru.setVar(","pm\\.variables\\.replaceIn\\(":"bru.interpolate(","pm\\.collectionVariables\\.get\\(":"bru.getVar(","pm\\.collectionVariables\\.set\\(":"bru.setVar(","pm\\.collectionVariables\\.has\\(":"bru.hasVar(","pm\\.collectionVariables\\.unset\\(":"bru.deleteVar(","pm\\.setNextRequest\\(":"bru.setNextRequest(","pm\\.test\\(":"test(","pm.response.to.have\\.status\\(":"expect(res.getStatus()).to.equal(","pm\\.response\\.to\\.have\\.status\\(":"expect(res.getStatus()).to.equal(","pm\\.response\\.json\\(":"res.getBody(","pm\\.expect\\(":"expect(","pm\\.environment\\.has\\(([^)]+)\\)":"bru.getEnvVar($1) !== undefined && bru.getEnvVar($1) !== null","pm\\.response\\.code":"res.getStatus()","pm\\.response\\.text\\(\\)":"JSON.stringify(res.getBody())","pm\\.expect\\.fail\\(":"expect.fail(","pm\\.response\\.responseTime":"res.getResponseTime()","pm\\.globals\\.set\\(":"bru.setGlobalEnvVar(","pm\\.globals\\.get\\(":"bru.getGlobalEnvVar(","pm\\.response\\.headers\\.get\\(":"res.getHeader(","pm\\.response\\.to\\.have\\.body\\(":"expect(res.getBody()).to.equal(","pm\\.response\\.to\\.have\\.header\\(":"expect(res.getHeaders()).to.have.property(","pm\\.response\\.size\\(\\)":"res.getSize()","pm\\.response\\.size\\(\\)\\.body":"res.getSize().body","pm\\.response\\.responseSize":"res.getSize().body","pm\\.response\\.size\\(\\)\\.header":"res.getSize().header","pm\\.response\\.size\\(\\)\\.total":"res.getSize().total","pm\\.environment\\.name":"bru.getEnvName()","pm\\.response\\.status":"res.statusText","pm\\.response\\.headers":"res.getHeaders()","tests\\['([^']+)'\\]\\s*=\\s*([^;]+);":'test("$1", function() { expect(Boolean($2)).to.be.true; });',"pm\\.request\\.url":"req.getUrl()","pm\\.request\\.method":"req.getMethod()","pm\\.request\\.headers":"req.getHeaders()","pm\\.request\\.body":"req.getBody()","pm\\.info\\.requestName":"req.getName()","request\\.url":"req.getUrl()","request\\.method":"req.getMethod()","request\\.headers":"req.getHeaders()","request\\.body":"req.getBody()","request\\.name":"req.getName()","postman\\.setEnvironmentVariable\\(":"bru.setEnvVar(","postman\\.getEnvironmentVariable\\(":"bru.getEnvVar(","postman\\.clearEnvironmentVariable\\(":"bru.deleteEnvVar(","pm\\.execution\\.skipRequest\\(\\)":"bru.runner.skipRequest()","pm\\.execution\\.skipRequest":"bru.runner.skipRequest","pm\\.execution\\.setNextRequest\\(null\\)":"bru.runner.stopExecution()","pm\\.execution\\.setNextRequest\\('null'\\)":"bru.runner.stopExecution()","pm\\.cookies\\.jar\\(\\)":"bru.cookies.jar()","pm\\.cookies\\.jar\\(\\)\\.get\\(":"bru.cookies.jar().getCookie(","pm\\.cookies\\.jar\\(\\)\\.set\\(":"bru.cookies.jar().setCookie(","pm\\.cookies\\.jar\\(\\)\\.unset\\(":"bru.cookies.jar().deleteCookie(","pm\\.cookies\\.jar\\(\\)\\.clear\\(":"bru.cookies.jar().deleteCookies(","pm\\.cookies\\.jar\\(\\)\\.getAll\\(":"bru.cookies.jar().getCookies("},_=Object.keys(S).reduce(((e,t)=>{const r=t.replace(/^pm\\\./,"postman\\.");return e[t]=S[t],e[r]=S[t],e}),{}),R=Object.entries(_).map((([e,t])=>({regex:new RegExp(e,"g"),replacement:t}))),I=(e,t={})=>{let r=Array.isArray(e)?e.join("\n"):e;try{let e=U(r);return(e.includes("pm.")||e.includes("postman."))&&(e=e.replace(/^(.*(pm\.|postman\.).*)$/gm,"// $1")),e}catch(e){console.warn("Error in postman translation:",e);try{return(e=>{for(const{regex:t,replacement:r}of R)t.test(e)&&(e=e.replace(t,r));return(e.includes("pm.")||e.includes("postman."))&&(e=e.replace(/^(.*(pm\.|postman\.).*)$/gm,"// $1")),e})(r)}catch(e){return console.warn("Error in postman translation:",e),r}}},P=/[^\w-.]/g,$=Object.freeze({BASIC:"basic",BEARER:"bearer",AWSV4:"awsv4",APIKEY:"apikey",DIGEST:"digest",OAUTH2:"oauth2",NOAUTH:"noauth",NONE:"none"}),O=e=>e?"string"==typeof e?e:"object"==typeof e&&e.hasOwnProperty("content")?e.content:"":"",N=e=>{if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e){const{raw:t}=e;return t&&"string"==typeof t?t.includes("#")?t.split("#")[0]:t:(e=>{if(!e)return"";const{protocol:t="http",host:r,path:s,port:n,query:a,hash:o}=e||{},i=Array.isArray(r)?r.filter(Boolean).join("."):r||"",l=Array.isArray(s)?s.join("/"):s||"";return`${t}://${i}${n?`:${n}`:""}${l?`/${l}`:""}${a&&Array.isArray(a)&&a.length>0?`?${a.filter((e=>e&&e.key)).map((e=>`${e.key}=${e.value||""}`)).join("&")}`:""}`})(e)}return""},F=(e,t)=>{e.forEach((e=>{e.script&&e.script.exec&&("prerequest"===e.listen&&(t.script||(t.script={}),e.script.exec&&e.script.exec.length>0?t.script.req=I(e.script.exec):(t.script.req="",console.warn("Unexpected event.script.exec type",typeof e.script.exec))),"test"===e.listen&&(t.script||(t.script={}),e.script.exec&&e.script.exec.length>0?t.script.res=I(e.script.exec):(t.script.res="",console.warn("Unexpected event.script.exec type",typeof e.script.exec))))}))},V=(e,t,r=!1)=>{if(r&&!e)return;if(!e)return;if(e.type===$.NOAUTH)return void(t.auth.mode=$.NONE);let s=e[e.type]??[];switch(Array.isArray(s)&&(s=s.reduce(((e,t)=>(e[t.key]=t.value,e)),{})),t.auth.mode=e.type,e.type){case $.BASIC:t.auth.basic={username:s.username||"",password:s.password||""};break;case $.BEARER:t.auth.bearer={token:s.token||""};break;case $.AWSV4:t.auth.awsv4={accessKeyId:s.accessKey||"",secretAccessKey:s.secretKey||"",sessionToken:s.sessionToken||"",service:s.service||"",region:s.region||"",profileName:""};break;case $.APIKEY:t.auth.apikey={key:s.key||"",value:s.value?.toString()||"",placement:"header"};break;case $.DIGEST:t.auth.digest={username:s.username||"",password:s.password||""};break;case $.OAUTH2:const r=e=>s[e]||"",n={authorization_code_with_pkce:"authorization_code",authorization_code:"authorization_code",client_credentials:"client_credentials",password_credentials:"password"},a=r("grant_type"),o=n[a]||"client_credentials",i={grantType:o,accessTokenUrl:r("accessTokenUrl"),refreshTokenUrl:r("refreshTokenUrl"),clientId:r("clientId"),clientSecret:r("clientSecret"),scope:r("scope"),state:r("state"),tokenPlacement:"header"===r("addTokenTo")?"header":"url",credentialsPlacement:"body"===r("client_authentication")?"body":"basic_auth_header"};switch(a){case"authorization_code":t.auth.oauth2={...i,authorizationUrl:r("authUrl"),callbackUrl:r("redirect_uri"),pkce:!1};break;case"authorization_code_with_pkce":t.auth.oauth2={...i,authorizationUrl:r("authUrl"),callbackUrl:r("redirect_uri"),pkce:!0};break;case"password_credentials":t.auth.oauth2={...i,username:r("username"),password:r("password")};break;case"client_credentials":t.auth.oauth2=i;break;default:console.warn("Unexpected OAuth2 grant type after mapping:",o),t.auth.oauth2=i}break;default:t.auth.mode=$.NONE,console.warn("Unexpected auth.type:",e.type,"- Mode set, but no specific config generated.")}},B=(r,s,{useWorkers:n=!1}={},a)=>{r.items=r.items||[];const o={},i={};s.forEach(((s,l)=>{if((e=>!e.request)(s)){const e=s.name||"Untitled Folder";let t=e,i=1;for(;o[t];)t=`${e}_${i}`,i++;const u={uid:p(),name:t,type:"folder",items:[],seq:l+1,root:{docs:O(s.description),meta:{name:t},request:{auth:{mode:"inherit",basic:null,bearer:null,awsv4:null,apikey:null,oauth2:null,digest:null},headers:[],script:{},tests:"",vars:{}}}};r.items.push(u),V(s.auth,u.root.request),s.item&&s.item.length&&B(u,s.item,{useWorkers:n},a),s.event&&(n?a.set(u.uid,{events:s.event,request:u.root.request}):F(s.event,u.root.request)),o[t]=u}else if(s.request){const o=s?.request?.method?.toUpperCase();if(!o||"string"!=typeof o||!o.trim())return void console.warn("Missing or invalid request.method",o);const u=s.name||"Untitled Request";let c=u,d=1;for(;i[c];)c=`${u}_${d}`,d++;const m=N(s.request.url),y={uid:p(),name:c,type:"http-request",seq:l+1,request:{url:m,method:o,auth:{mode:"inherit",basic:null,bearer:null,awsv4:null,apikey:null,oauth2:null,digest:null},headers:[],params:[],body:{mode:"none",json:null,text:null,xml:null,formUrlEncoded:[],multipartForm:[]},docs:O(s.request.description)}},h={encodeUrl:!0!==s.protocolProfileBehavior?.disableUrlEncoding};void 0!==s.protocolProfileBehavior?.followRedirects&&(h.followRedirects=s.protocolProfileBehavior.followRedirects),void 0!==s.protocolProfileBehavior?.maxRedirects&&(h.maxRedirects=s.protocolProfileBehavior.maxRedirects),y.settings=h,r.items.push(y),s.event&&(n?a.set(y.uid,{events:s.event,request:y.request}):s.event.forEach((e=>{"prerequest"===e.listen&&e.script&&e.script.exec&&(y.request?.script||(y.request.script={}),e.script.exec&&e.script.exec.length>0?y.request.script.req=I(e.script.exec):(y.request.script.req="",console.warn("Unexpected event.script.exec type",typeof e.script.exec))),"test"===e.listen&&e.script&&e.script.exec&&(y.request?.script||(y.request.script={}),e.script.exec&&e.script.exec.length>0?y.request.script.res=I(e.script.exec):(y.request.script.res="",console.warn("Unexpected event.script.exec type",typeof e.script.exec)))})));const f=e(s,"request.body.mode");if(f&&("formdata"===f&&(y.request.body.mode="multipartForm",t(s.request.body.formdata,(e=>{let t,r;"file"===e.type?(t=Array.isArray(e.src)?e.src:"string"==typeof e.src?[e.src]:null,r="file"):(t=e.value,r="text"),y.request.body.multipartForm.push({uid:p(),type:r,name:e.key,value:t,description:O(e.description),enabled:!e.disabled})}))),"urlencoded"===f&&(y.request.body.mode="formUrlEncoded",t(s.request.body.urlencoded,(e=>{y.request.body.formUrlEncoded.push({uid:p(),name:e.key,value:e.value,description:O(e.description),enabled:!e.disabled})}))),"raw"===f)){let t=e(s,"request.body.options.raw.language");t||(t=z(s.request.header)),"json"===t?(y.request.body.mode="json",y.request.body.json=s.request.body.raw):"xml"===t?(y.request.body.mode="xml",y.request.body.xml=s.request.body.raw):(y.request.body.mode="text",y.request.body.text=s.request.body.raw)}"graphql"===f&&(y.type="graphql-request",y.request.body.mode="graphql",y.request.body.graphql=(e=>{try{let t={query:"",variables:""};return"string"==typeof e&&(e=JSON.parse(e)),e.hasOwnProperty("variables")&&""!==e.variables&&(t.variables=e.variables),e.hasOwnProperty("query")&&""!==e.query&&(t.query=e.query),t}catch(e){return{query:"",variables:""}}})(s.request.body.graphql)),t(s.request.header,(e=>{y.request.headers.push({uid:p(),name:e.key,value:e.value,description:O(e.description),enabled:!e.disabled})})),V(s.request.auth,y.request),t(e(s,"request.url.query"),(e=>{y.request.params.push({uid:p(),name:e.key,value:e.value,description:O(e.description),type:"query",enabled:!e.disabled})})),t(e(s,"request.url.variable",[]),(e=>{e.key&&y.request.params.push({uid:p(),name:e.key,value:e.value??"",description:O(e.description),type:"path",enabled:!0})})),s.response&&Array.isArray(s.response)&&(y.examples=[],s.response.forEach(((t,r)=>{const s=t.name||`Example ${r+1}`,n=t.originalRequest||{},a=N(n.url),i=n.method?.toUpperCase()||o,l={uid:p(),itemUid:y.uid,name:s,description:"",type:"http-request",request:{url:a,method:i,headers:[],params:[],body:{mode:"none",json:null,text:null,xml:null,formUrlEncoded:[],multipartForm:[]}},response:{status:t.status||"",statusText:t.code?t.code.toString():"",headers:[],body:{type:M(t.header),content:t.body||""}}};if(n.header&&Array.isArray(n.header)&&n.header.forEach((e=>{l.request.headers.push({uid:p(),name:e.key,value:e.value,description:O(e.description),enabled:!e.disabled})})),n.url&&n.url.query&&Array.isArray(n.url.query)&&n.url.query.forEach((e=>{l.request.params.push({uid:p(),name:e.key,value:e.value,description:O(e.description),type:"query",enabled:!e.disabled})})),n.url&&n.url.variable&&Array.isArray(n.url.variable)&&n.url.variable.forEach((e=>{l.request.params.push({uid:p(),name:e.key,value:e.value??"",description:O(e.description),type:"path",enabled:!0})})),n.body){const t=n.body.mode;if("formdata"===t)l.request.body.mode="multipartForm",n.body.formdata&&Array.isArray(n.body.formdata)&&n.body.formdata.forEach((e=>{let t,r;"file"===e.type?(t=Array.isArray(e.src)?e.src:"string"==typeof e.src?[e.src]:null,r="file"):(t=e.value,r="text"),l.request.body.multipartForm.push({uid:p(),type:r,name:e.key,value:t,description:O(e.description),enabled:!e.disabled})}));else if("urlencoded"===t)l.request.body.mode="formUrlEncoded",n.body.urlencoded&&Array.isArray(n.body.urlencoded)&&n.body.urlencoded.forEach((e=>{l.request.body.formUrlEncoded.push({uid:p(),name:e.key,value:e.value,description:O(e.description),enabled:!e.disabled})}));else if("raw"===t){let t=e(n,"body.options.raw.language");t||(t=z(n.header||[])),"json"===t?(l.request.body.mode="json",l.request.body.json=n.body.raw):"xml"===t?(l.request.body.mode="xml",l.request.body.xml=n.body.raw):(l.request.body.mode="text",l.request.body.text=n.body.raw)}}t.header&&Array.isArray(t.header)&&t.header.forEach((e=>{l.response.headers.push({uid:p(),name:e.key,value:e.value,description:O(e.description),enabled:!0})})),y.examples.push(l)}))),i[c]=y}}))},z=e=>{let r;return t(e,(e=>{if("content-type"===e.key.toLowerCase()&&!e.disabled)return"string"==typeof e.value&&/^[\w\-]+\/([\w\-]+\+)?json/.test(e.value)?r="json":"string"==typeof e.value&&/^[\w\-]+\/([\w\-]+\+)?xml/.test(e.value)&&(r="xml"),!1})),r},M=e=>{if(!e||!Array.isArray(e))return"text";const t=e.find((e=>"content-type"===e.key.toLowerCase()));if(t){const e=t.value?.toLowerCase();if(e?.includes("application/json"))return"json";if(e?.includes("application/xml")||e?.includes("text/xml"))return"xml";if(e?.includes("text/html"))return"html"}return"text"},L=async(e,{useWorkers:t=!1})=>{const r={name:e.info.name||"Untitled Collection",uid:p(),version:"1",items:[],environments:[],root:{docs:O(e.info.description),meta:{name:e.info.name||"Untitled Collection"},request:{auth:{mode:"none",basic:null,bearer:null,awsv4:null,apikey:null,oauth2:null,digest:null},headers:[],script:{},tests:"",vars:{}}}};e.event&&F(e.event,r.root.request),e?.variable&&((e,t)=>{const r=e.filter((e=>!(null==e.key&&null==e.value))).map((e=>({uid:p(),name:(e.key??"").replace(P,"_"),value:e.value??"",enabled:!0})));t.vars.req=r})(e.variable,r.root.request),V(e.auth,r.root.request,!0);const s=t?new Map:null;if(B(r,e.item,{useWorkers:t},s),t&&s&&s.size>0)try{const{default:e}=await import("./postman-translator-worker-fd766331.js"),t=await e(s),n=e=>{e.forEach((e=>{if("folder"===e.type){if(t.has(e.uid)){e.root.request.script||(e.root.request.script={}),e.root.request.tests||(e.root.request.tests="");const r=t.get(e.uid).request?.script?.req,s=t.get(e.uid).request?.script?.res;e.root.request.script.req=r&&r.length>0?r:"",e.root.request.script.res=s&&s.length>0?s:""}e.items&&e.items.length>0&&n(e.items)}else if(t.has(e.uid)){e.request.script||(e.request.script={}),e.request.tests||(e.request.tests="");const r=t.get(e.uid).request?.script?.req,s=t.get(e.uid).request?.script?.res;e.request.script.req=r&&r.length>0?r:"",e.request.script.res=s&&s.length>0?s:""}}))};n(r.items)}catch(e){console.error("Error in script translation worker:",e)}finally{s.clear()}return r},D=async(t,{useWorkers:r=!1}={})=>{try{const s=await(async(t,{useWorkers:r=!1})=>{try{let s=e(t,"info.schema");if(["https://schema.getpostman.com/json/collection/v2.0.0/collection.json","https://schema.getpostman.com/json/collection/v2.1.0/collection.json","https://schema.postman.com/json/collection/v2.0.0/collection.json","https://schema.postman.com/json/collection/v2.1.0/collection.json"].includes(s))return await L(t,{useWorkers:r});throw new Error("Unsupported Postman schema version. Only Postman Collection v2.0 and v2.1 are supported.")}catch(e){if(console.log(e),e instanceof Error)throw e;throw new Error("Invalid Postman collection format. Please check your JSON file.")}})(t,{useWorkers:r}),n=c(s),a=d(n);return u(a)}catch(e){throw console.log(e),new Error(`Import collection failed: ${e.message}`)}},K=e=>{const r={uid:p(),name:e.name,variables:[]};return((e,r=[])=>{e.variables=e.variables||[],t(r.filter((e=>!(null==e.key&&null==e.value))),(t=>{const r={uid:p(),name:(t.key??"").replace(P,"_"),value:t.value??"",enabled:t.enabled,type:"text",secret:(s=t.type,"secret"===s)};var s;e.variables.push(r)}))})(r,e.values),r},H=e=>{try{return K(e)}catch(e){throw console.log(e),new Error("Unable to parse the postman environment json file")}},W=(e,t)=>{"string"==typeof e&&e.trim()||(e="",console.error("Invalid URL input:",e));const r=/:\/\//,s=/\/(.+)/,n=/\./,a=/\//,o=/\?/,i={raw:e};try{const{protocol:t,rawHostAndPath:l}=(e=>{const t=e.split(r);if(1===t.length)return{protocol:"",rawHostAndPath:t[0]};if(2===t.length){const[e,r]=t[1].split(o);return{protocol:t[0],rawHostAndPath:e}}throw new Error(`Invalid URL format: ${e}`)})(e);i.protocol=t;const{host:p,path:u}=(e=>{const[t,r=""]=e.split(s);return{host:t,path:r}})(l);i.host=p?p.split(n):[],i.path=u?u.split(a):[]}catch(e){return console.error(e.message),{}}return i.query=t.filter((e=>"query"===e.type)).map((({name:e,value:t,description:r})=>({key:e,value:t,description:r}))),i.variable=t.filter((e=>"path"===e.type)).map((({name:e,value:t,description:r})=>({key:e,value:t,description:r}))),i},G=e=>(e=>e.replace(/(?<!:)\/{2,}/g,"/"))(e.replace(/\\/g,"//")),J=e=>{var r;delete e.uid,delete e.processEnvVariables,m(e.items),r=e.environments,t(r,(e=>{delete e.uid,t(e.variables,(e=>delete e.uid))})),(e=>{t(e,(e=>{t(e.variables,(e=>{e.secret&&(e.value="")}))}))})(e.environments);const s=e=>{const t=[],r=e?.script||e?.root?.request?.script||e?.request?.script||{},s=e?.tests||e?.root?.request?.tests||e?.request?.tests;if(r.req&&"string"==typeof r.req&&t.push({listen:"prerequest",script:{type:"text/javascript",packages:{},requests:{},exec:r.req.split("\n")}}),r.res||s){const e=[];r.res&&"string"==typeof r.res&&e.push(...r.res.split("\n")),s&&"string"==typeof s&&(e.length>0&&e.push(""),e.push("// Tests"),e.push(...s.split("\n"))),e.length>0&&t.push({listen:"test",script:{type:"text/javascript",packages:{},requests:{},exec:e}})}return t},a=e=>e&&Array.isArray(e)?n(e,(e=>({key:e.name||"",value:e.value||"",disabled:!e.enabled,type:"default"}))):[],o=e=>{if(!e||!e.mode)return{mode:"raw",raw:""};switch(e.mode){case"formUrlEncoded":return{mode:"urlencoded",urlencoded:n(e.formUrlEncoded||[],(e=>({key:e.name||"",value:e.value||"",disabled:!e.enabled,type:"default"})))};case"multipartForm":return{mode:"formdata",formdata:n(e.multipartForm||[],(e=>({key:e.name||"",value:e.value||"",disabled:!e.enabled,type:"default"})))};case"json":return{mode:"raw",raw:e.json||"",options:{raw:{language:"json"}}};case"xml":return{mode:"raw",raw:e.xml||"",options:{raw:{language:"xml"}}};case"text":return{mode:"raw",raw:e.text||"",options:{raw:{language:"text"}}};case"graphql":return{mode:"graphql",graphql:e.graphql||{}};default:return{mode:"raw",raw:""}}},i=e=>{switch(e?.mode){case"bearer":return{type:"bearer",bearer:{key:"token",value:e.bearer?.token||"",type:"string"}};case"basic":return{type:"basic",basic:[{key:"password",value:e.basic?.password||"",type:"string"},{key:"username",value:e.basic?.username||"",type:"string"}]};case"apikey":return{type:"apikey",apikey:[{key:"key",value:e.apikey?.key||"",type:"string"},{key:"value",value:e.apikey?.value||"",type:"string"}]};default:return{type:"noauth"}}},p=e=>{if(!e)return{};const t={method:e.method||"GET",header:a(e.headers),auth:i(e.auth),description:e.docs||"",url:W(G(e.url||""),e.params||[])};return e.body&&"none"!==e.body.mode&&(t.body=o(e.body)),t},u=e=>{if(!e)return{method:"GET",header:[],url:{raw:"",protocol:"https",host:[],path:[]}};const t={method:e.method||"GET",header:a(e.headers),url:W(G(e.url||""),e.params||[])};return e.body&&"none"!==e.body.mode&&(t.body=o(e.body)),t},c=e=>e&&Array.isArray(e)?n(e,(e=>({key:e.name||"",value:e.value||"",name:e.name||"",description:e.description||"",type:"text"}))):[],d=e=>{if(!e||!Array.isArray(e))return null;const t=e.find((e=>e.name&&"content-type"===e.name.toLowerCase()));return t?t.value:null},y=e=>e&&Array.isArray(e)?n(e,(e=>{if(!e)return null;if("grpc-request"===e.type)return null;if("folder"===e.type){const t=s(e);return{name:e.name||"Untitled Folder",item:y(e.items),...t.length?{event:t}:{}}}if(l(e)){const r=s(e.request),a={name:e.name||"Untitled Request",request:p(e.request),...r.length?{event:r}:{}};return e.examples&&Array.isArray(e.examples)&&e.examples.length>0&&(a.response=(t=e.examples)&&Array.isArray(t)?n(t,(e=>{if(!e)return null;const t={name:e.name||"Example Response",originalRequest:u(e.request),status:e.response?.statusText||"OK",code:parseInt(e.response?.status)||200,header:c(e.response?.headers),cookie:[],body:e.response?.body?.content||""},r=d(e.response?.headers);return r&&(r.includes("application/json")?t._postman_previewlanguage="json":r.includes("application/xml")||r.includes("text/xml")?t._postman_previewlanguage="xml":r.includes("text/html")?t._postman_previewlanguage="html":r.includes("text/plain")&&(t._postman_previewlanguage="text")),t})).filter(Boolean):[]),a}var t;return null})).filter(Boolean):[],h={};h.info={name:e.name,description:e.root?.docs,schema:"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},h.item=y(e.items),h.variable=(e=>{const t=/{{[^{}]+}}/g;let r=[];const s=(e,r)=>{if("object"==typeof e)if(Array.isArray(e))e.forEach((e=>s(e,r)));else for(const t in e)s(e[t],r);else"string"==typeof e&&e.replace(t,(e=>{const t=e.replace(/{{|}}/g,"");r.push({key:t,value:"",type:"default"})}))};s(e,r);const n=[...(e.root?.request?.vars?.req||[]).map((e=>({key:e.name,value:e.value,type:"default"}))),...(e.root?.request?.vars?.res||[]).map((e=>({key:e.name,value:e.value,type:"default"}))),...r],a=new Map;return n.forEach((e=>{a.has(e.key)||a.set(e.key,e)})),Array.from(a.values())})(e);const f=s(e.root);return f.length&&(h.event=f),h},Q={JSON:/^[\w\-.+]+\/([\w\-.+]+\+)?json$/,XML:/^[\w\-.+]+\/([\w\-.+]+\+)?xml$/,HTML:/^[\w\-.+]+\/([\w\-.+]+\+)?html$/},Y=e=>({100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"unused",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",510:"Not Extended",511:"Network Authentication Required"}[e]||"Unknown"),X=e=>{if(!e||"string"!=typeof e)return"text";const t=e.toLowerCase();return Q.JSON.test(t)?"json":Q.XML.test(t)?"xml":Q.HTML.test(t)?"html":"text"},Z=(e,r=new Map)=>{if(r.has(e))return{};r.set(e,!0);let s={};return t(e.properties||{},((e,t)=>{"object"===e.type||e.properties?s[t]=Z(e,r):"array"===e.type?e.items&&("object"===e.items.type||e.items.properties)?s[t]=[Z(e.items,r)]:s[t]=[]:"integer"===e.type||"number"===e.type?s[t]=0:"boolean"===e.type?s[t]=!1:s[t]=""})),s},ee=e=>{if(void 0!==e.example)return e.example;if("object"===e.type||e.properties&&!e.type)return Z(e);if("array"===e.type){if(e.items){if("object"===e.items.type||e.items.properties)return[Z(e.items)];if("integer"===e.items.type||"number"===e.items.type)return[0];if("boolean"===e.items.type)return[!1];if("string"===e.items.type)return[""]}return[]}return"integer"===e.type||"number"===e.type?0:"boolean"!==e.type&&""},te=({brunoRequestItem:e,exampleValue:t,exampleName:r,exampleDescription:s,statusCode:n,contentType:a,requestBodyValue:o=null,requestBodyContentType:i=null})=>{const l={uid:p(),itemUid:e.uid,name:r,description:s,type:"http-request",request:{url:e.request.url,method:e.request.method,headers:[...e.request.headers],params:[...e.request.params],body:{...e.request.body}},response:{status:String(n),statusText:Y(n),headers:a?[{uid:p(),name:"Content-Type",value:a,description:"",enabled:!0}]:[],body:{type:X(a),content:"object"==typeof t?JSON.stringify(t,null,2):t}}};return null!==o&&(({body:e,requestBodyValue:t,contentType:r})=>{if(!t||!r||"string"!=typeof r)return;const s=r.toLowerCase();Q.JSON.test(s)?(e.mode="json",e.json="object"==typeof t?JSON.stringify(t,null,2):t):"application/x-www-form-urlencoded"===s?e.mode="formUrlEncoded":"multipart/form-data"===s?e.mode="multipartForm":"text/plain"===s?(e.mode="text",e.text="object"==typeof t?JSON.stringify(t):String(t)):Q.XML.test(s)&&(e.mode="xml",e.xml="object"==typeof t?JSON.stringify(t):String(t))})({body:l.request.body,requestBodyValue:o,contentType:i}),l},re=(r,s=new Set)=>{let n=r.operationObject,a=n.summary||n.operationId||n.description;if(a||(a=`${r.method} ${r.path}`),a&&(a=a.replace(/[\r\n\s]+/g," ").trim()),s.has(a)){let e=`${a} (${r.method.toUpperCase()})`,t=1;for(;s.has(e);)e=`${a} (${t})`,t++;a=e}s.add(a);let o=r.path.replace(/{([a-zA-Z]+)}/g,`{{${n.operationId}_$1}}`);const i={uid:p(),name:a,type:"http-request",request:{url:(l=r.global.server+o,l.replace(/([^:])\/{2,}/g,"$1/")),method:r.method.toUpperCase(),auth:{mode:"inherit",basic:null,bearer:null,digest:null,apikey:null,oauth2:null},headers:[],params:[],body:{mode:"none",json:null,text:null,xml:null,formUrlEncoded:[],multipartForm:[]},script:{res:null}}};var l;if(t(n.parameters||[],(e=>{"query"===e.in?i.request.params.push({uid:p(),name:e.name,value:"",description:e.description||"",enabled:e.required,type:"query"}):"path"===e.in?i.request.params.push({uid:p(),name:e.name,value:"",description:e.description||"",enabled:e.required,type:"path"}):"header"===e.in&&i.request.headers.push({uid:p(),name:e.name,value:"",description:e.description||"",enabled:e.required})})),Array.isArray(n.security)&&0===n.security.length)return i.request.auth.mode="inherit",i;let u=null;if(n.security&&n.security.length>0){const e=Object.keys(n.security[0])[0];u=r.global.security.getScheme(e)}if(u)if("http"===u.type&&"basic"===u.scheme)i.request.auth.mode="basic",i.request.auth.basic={username:"{{username}}",password:"{{password}}"};else if("http"===u.type&&"bearer"===u.scheme)i.request.auth.mode="bearer",i.request.auth.bearer={token:"{{token}}"};else if("http"===u.type&&"digest"===u.scheme)i.request.auth.mode="digest",i.request.auth.digest={username:"{{username}}",password:"{{password}}"};else if("apiKey"===u.type){const e={key:u.name,value:"{{apiKey}}",placement:"query"===u.in?"queryparams":"header"};i.request.auth.mode="apikey",i.request.auth.apikey=e,"header"===u.in||"cookie"===u.in?i.request.headers.push({uid:p(),name:u.name,value:"{{apiKey}}",description:u.description||"",enabled:!0}):"query"===u.in&&i.request.params.push({uid:p(),name:u.name,value:"{{apiKey}}",description:u.description||"",enabled:!0,type:"query"})}else if("oauth2"===u.type){let e=u.flows||{},t="client_credentials";e.authorizationCode?t="authorization_code":e.implicit?t="implicit":e.password?t="password":e.clientCredentials&&(t="client_credentials");let r={};switch(t){case"authorization_code":r=e.authorizationCode||{};break;case"implicit":r=e.implicit||{};break;case"password":r=e.password||{};break;default:r=e.clientCredentials||{}}i.request.auth.mode="oauth2",i.request.auth.oauth2={grantType:t,authorizationUrl:r.authorizationUrl||"{{oauth_authorize_url}}",accessTokenUrl:r.tokenUrl||"{{oauth_token_url}}",refreshTokenUrl:r.refreshUrl||"{{oauth_refresh_url}}",callbackUrl:"{{oauth_callback_url}}",clientId:"{{oauth_client_id}}",clientSecret:"{{oauth_client_secret}}",scope:Array.isArray(r.scopes)?r.scopes.join(" "):Object.keys(r.scopes||{}).join(" "),state:"{{oauth_state}}",credentialsPlacement:"header",tokenPlacement:"header",tokenHeaderPrefix:"Bearer",autoFetchToken:!1,autoRefreshToken:!0}}if(n.requestBody){let r=e(n,"requestBody.content",{}),s=Object.keys(r)[0],a=(r[s]||{}).schema;const o="string"==typeof s?s.toLowerCase():"";if(Q.JSON.test(o)){if(i.request.body.mode="json",a&&("object"===a.type||a.properties)){let e=Z(a);i.request.body.json=JSON.stringify(e,null,2)}a&&"array"===a.type&&(i.request.body.json=JSON.stringify([Z(a.items)],null,2))}else"application/x-www-form-urlencoded"===o?(i.request.body.mode="formUrlEncoded",a&&("object"===a.type||a.properties)&&t(a.properties||{},((e,t)=>{i.request.body.formUrlEncoded.push({uid:p(),name:t,value:"",description:e.description||"",enabled:!0})}))):"multipart/form-data"===o?(i.request.body.mode="multipartForm",a&&("object"===a.type||a.properties)&&t(a.properties||{},((e,t)=>{i.request.body.multipartForm.push({uid:p(),type:"text",name:t,value:"",description:e.description||"",enabled:!0})}))):"text/plain"===o?(i.request.body.mode="text",i.request.body.text=""):Q.XML.test(o)&&(i.request.body.mode="xml",i.request.body.xml="")}let c=[];if(t(n.responses||[],((e,r)=>{Object.hasOwn(e,"links")&&(c.push(`if (res.status === ${r}) {`),t(e.links,(e=>{t(e.parameters||[],((t,r)=>{let s=ne(t);c.push(` bru.setVar('${e.operationId}_${r}', ${s});`)}))})),c.push("}"))})),c.length>0&&(i.request.script.res=c.join("\n")),n.responses){const e=[],t=[],r=({responseExampleValue:r,exampleName:s,exampleDescription:n,statusCode:a,responseContentType:o,responseExampleKey:l=null})=>{const p=t.filter((e=>null!==e.key)),u=t.filter((e=>null===e.key)),c=l?p.find((e=>e.key===l)):null;if(c)e.push(te({brunoRequestItem:i,exampleValue:r,exampleName:s,exampleDescription:n,statusCode:a,contentType:o,requestBodyValue:c.value,requestBodyContentType:c.contentType}));else if(p.length>0)p.forEach((t=>{const l=`${s} (${t.summary||t.key})`,p=n||t.description||"";e.push(te({brunoRequestItem:i,exampleValue:r,exampleName:l,exampleDescription:p,statusCode:a,contentType:o,requestBodyValue:t.value,requestBodyContentType:t.contentType}))}));else if(u.length>0){const t=u[0];e.push(te({brunoRequestItem:i,exampleValue:r,exampleName:s,exampleDescription:n,statusCode:a,contentType:o,requestBodyValue:t.value,requestBodyContentType:t.contentType}))}else e.push(te({brunoRequestItem:i,exampleValue:r,exampleName:s,exampleDescription:n,statusCode:a,contentType:o}))};n.requestBody&&n.requestBody.content&&Object.entries(n.requestBody.content).forEach((([e,r])=>{r.examples?Object.entries(r.examples).forEach((([r,s])=>{t.push({key:r,value:void 0!==s.value?s.value:s,summary:s.summary,description:s.description,contentType:e})})):void 0!==r.example?t.push({key:null,value:r.example,summary:null,description:null,contentType:e}):r.schema&&t.push({key:null,value:ee(r.schema),summary:null,description:null,contentType:e,isSchema:!0})})),n.responses&&Object.entries(n.responses).forEach((([e,t])=>{if(t.content)Object.entries(t.content).forEach((([s,n])=>{if(n.examples)Object.entries(n.examples).forEach((([t,n])=>{const a=n.summary||t||`${e} Response`,o=n.description||"",i=void 0!==n.value?n.value:n;r({responseExampleValue:i,exampleName:a,exampleDescription:o,statusCode:e,responseContentType:s,responseExampleKey:t})}));else if(void 0!==n.example){const a=`${e} Response`,o=t.description||"";r({responseExampleValue:n.example,exampleName:a,exampleDescription:o,statusCode:e,responseContentType:s})}else if(n.schema){const a=ee(n.schema),o=`${e} Response`,i=t.description||"";r({responseExampleValue:a,exampleName:o,exampleDescription:i,statusCode:e,responseContentType:s})}}));else{const s=`${e} Response`,n=t.description||"";r({responseExampleValue:"",exampleName:s,exampleDescription:n,statusCode:e,responseContentType:null})}})),e.length>0&&(i.examples=e)}return i},se=(e,t=e?.components,r=new Map)=>{if(!e||"object"!=typeof e)return e;if(r.has(e))return r.get(e);if(Array.isArray(e))return e.map((e=>se(e,t,r)));var s;if("string"==typeof(s=e.$ref)&&s.startsWith("#/components/")){const s=e.$ref;if(r.has(s))return r.get(s);if(s.startsWith("#/components/")){const n=s.replace("#/components/","").split("/");let a=t;for(const t of n){if(!a||!a[t])return e;a=a[t]}r.set(s,{});const o=se(a,t,r);return r.set(s,o),o}return e}const n={};r.set(e,n);for(const[s,a]of Object.entries(e))n[s]=se(a,t,r);return n},ne=e=>{if("$response.body"===e)return"res.body";if(e.startsWith("$response.body#")){return`res.body${e.substring(15).replace("/",".")}`}return e},ae=(r,s={})=>{const n=new Set,a={name:"",uid:p(),version:"1",items:[],environments:[]};try{const o=se(r);if(!o)throw new Error("Invalid OpenAPI collection. Failed to resolve refs.");if(o.openapi&&!o.openapi.startsWith("3"))throw new Error("Only OpenAPI v3 is supported currently.");a.name=o.info?.title?.trim()||"Untitled Collection",(o.servers||[]).forEach(((e,r)=>{let s=(e=>{let r=e.url;return e.variables&&t(e.variables,((e,t)=>{let s=e.default||(e.enum?e.enum[0]:`{{${t}}}`);r=r.replace(`{${t}}`,s)})),r.endsWith("/")?r.slice(0,-1):r})(e),n=e.description?e.description:`Environment ${r+1}`;a.environments.push({uid:p(),name:n,variables:[{uid:p(),name:"baseUrl",value:s,type:"text",enabled:!0,secret:!1}]})}));let i=(t=>{let r=t.security||[],s=e(t,"components.securitySchemes",{});return{supported:Object.keys(s).length>0?r.map((e=>s[Object.keys(e)[0]])).filter(Boolean):[],schemes:s,getScheme:e=>s[e]}})(o),l=Object.entries(o.paths).map((([e,t])=>Object.entries(t).filter((([e,t])=>["get","put","post","delete","options","head","patch","trace"].includes(e.toLowerCase()))).map((([t,r])=>({method:t,path:e.replace(/{([^}]+)}/g,":$1"),originalPath:e,operationObject:r,global:{server:"{{baseUrl}}",security:i}}))))).reduce(((e,t)=>e.concat(t)),[]);if("path"===(s.groupBy||"tags"))a.items=(e=>{const t={};e.forEach((e=>{const r=(e.originalPath||e.path).split("/").filter((e=>""!==e));if(0===r.length){const r="Root";return t[r]||(t[r]={name:r,requests:[],subGroups:{}}),void t[r].requests.push(e)}let s=r[0];if(t[s]||(t[s]={name:s,requests:[],subGroups:{}}),r.length<=1)t[s].requests.push(e);else{let n=t[s];for(let e=1;e<r.length;e++){let t=r[e];n.subGroups[t]||(n.subGroups[t]={name:t,requests:[],subGroups:{}}),n=n.subGroups[t]}n.requests.push(e)}}));const r=e=>{const t=new Set,s=e.requests.map((e=>re(e,t))),n=[];return Object.values(e.subGroups).forEach((e=>{const t=r(e);t.length>0&&n.push({uid:p(),name:e.name,type:"folder",items:t})})),[...s,...n]};return Object.values(t).map((e=>({uid:p(),name:e.name,type:"folder",items:r(e)})))})(l);else{let[e,r]=(e=>{let r={},s=[];return t(e,(e=>{let t=e.operationObject.tags||[];if(t.length>0){let n=t[0].trim();n?(r[n]||(r[n]=[]),r[n].push(e)):s.push(e)}else s.push(e)})),[Object.keys(r).map((e=>({name:e,requests:r[e]}))),s]})(l),s=e.map((e=>({uid:p(),name:e.name,type:"folder",root:{request:{auth:{mode:"inherit