UNPKG

grafana-mcp-analyzer

Version:

让AI助手直接分析你的Grafana监控数据 - A Model Context Protocol server for Grafana data analysis

5 lines (4 loc) 2.64 kB
function c(n){let r=n.trim();r.startsWith("curl ")&&(r=r.substring(5));const t={url:"",method:"GET",headers:{},data:void 0,params:{},timeout:void 0},s=d(r);let e=0;for(;e<s.length;){const i=s[e];if(i==="-X"||i==="--request")if(e+1<s.length){const a=s[e+1].toUpperCase();h(a)&&(t.method=a),e+=2}else e++;else if(i==="-H"||i==="--header")if(e+1<s.length){const a=s[e+1],l=a.indexOf(":");if(l>0){const o=a.substring(0,l).trim(),f=a.substring(l+1).trim();t.headers[o]=f}e+=2}else e++;else if(i==="-d"||i==="--data"||i==="--data-raw")if(e+1<s.length){let a=s[e+1];if(a.includes(` `))t.data=a;else try{t.data=JSON.parse(a)}catch{t.data=a}t.method==="GET"&&(t.method="POST"),e+=2}else e++;else if(i==="--connect-timeout"||i==="--max-time")if(e+1<s.length){const a=s[e+1],l=parseInt(a,10);isNaN(l)||(t.timeout=l*1e3),e+=2}else e++;else if(i==="-u"||i==="--user")if(e+1<s.length){const a=s[e+1],l=Buffer.from(a).toString("base64");t.headers.Authorization=`Basic ${l}`,e+=2}else e++;else i==="-A"||i==="--user-agent"?e+1<s.length?(t.headers["User-Agent"]=s[e+1],e+=2):e++:i==="-e"||i==="--referer"?e+1<s.length?(t.headers.Referer=s[e+1],e+=2):e++:i==="-b"||i==="--cookie"?e+1<s.length?(t.headers.Cookie=s[e+1],e+=2):e++:(i.startsWith("-")||t.url||(t.url=i),e++)}return t.data&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(typeof t.data=="object"?t.headers["Content-Type"]="application/json":t.headers["Content-Type"]="application/x-www-form-urlencoded"),t}function d(n){const r=[];let t="",s=!1,e="",i=!1,a=!1;for(let l=0;l<n.length;l++){const o=n[l];if(i){t+=o,i=!1;continue}if(o==="\\"&&s&&!a){i=!0;continue}if(s)if(o===e&&!a)s=!1,e="";else if(o==="'"&&a)s=!1,e="",a=!1;else if(a&&o==="\\"&&l+1<n.length){const f=n[l+1];f==="n"?(t+=` `,l++):f==="t"?(t+=" ",l++):f==="r"?(t+="\r",l++):f==="\\"?(t+="\\",l++):f==="'"?(t+="'",l++):f==='"'?(t+='\\"',l++):t+=o}else t+=o;else o==="$"&&l+1<n.length&&n[l+1]==="'"?(a=!0,s=!0,e="'",l++):o==='"'||o==="'"?(s=!0,e=o):o===" "||o===" "||o===` `?t.length>0&&(r.push(t),t=""):t+=o}return t.length>0&&r.push(t),r}function h(n){return["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].includes(n)}function u(n,r){let t="curl",s=n.url;if(r&&!s.startsWith("http")){const e=r.replace(/\/$/,""),i=s.replace(/^\//,"");s=`${e}/${i}`}if(t+=` '${s}'`,n.method&&n.method!=="GET"&&(t+=` -X ${n.method}`),n.headers)for(const[e,i]of Object.entries(n.headers))t+=` -H '${e}: ${i}'`;if(n.data){const e=typeof n.data=="string"?n.data:JSON.stringify(n.data);t+=` -d '${e}'`}if(n.timeout){const e=Math.ceil(n.timeout/1e3);t+=` --connect-timeout ${e}`}return t}export{u as httpRequestToCurl,c as parseCurlCommand};