[
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Test\n\non:\n  push:\n    branches:\n    - gh-pages\n  pull_request:\n    branches:\n    - gh-pages\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v1\n    - name: Set up Ruby 2.6\n      uses: actions/setup-ruby@v1\n      with:\n        ruby-version: 2.6.x\n    - name: Set up Node.js 8.x\n      uses: actions/setup-node@v1\n      with:\n        node-version: 8.x\n    - name: Install dependencies\n      run: |\n        gem install bundler\n        bundle install --jobs 4 --retry 3\n        yarn\n    - name: Build and run tests\n      run: |\n        yarn run compile\n        bundle exec ruby test.rb\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nThumbs.db\n_gitignore\nnode_modules\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\ngem 'execjs'\ngem 'execjs-fastnode'\ngem 'minitest'\ngem 'pry'\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Matthew Holt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "curl-to-ruby\n============\n\ncurl-to-ruby is a tool to instantly convert [curl](http://curl.haxx.se) commands to ruby code using [net/http](http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html) in the browser. It does *not* guarantee high-fidelity conversions, but it's good enough for most API docs that have curl samples.\n\n### Try it\n\n**[Check it out!](https://jhawthorn.github.io/curl-to-ruby)** It works inside your browser.\n\n\n### FAQ\n\n#### Does any curl command work?\n\nAny curl command should work, but only certain flags are understood and converted into ruby code. The rest of the flags will be ignored.\n\n#### Which kinds of curl commands are understood?\n\nMostly simple HTTP commands (headers, basic auth, body, etc).\n\n#### Will you consider supporting *this-or-that* flag?\n\ncurl has like a bajillion options, so don't expect all of them to be implemented; just the most common/important ones to stub out code from API samples and docs, etc. But feel free to open an issue or submit a pull request!\n\n\n\n### Credits\n\nUpdated to ruby by John Hawthorn ([jhawthorn](https://twitter.com/jhawthorn))\n\nBased on [curl-to-Go](https://github.com/mholt/curl-to-go) by Matt Holt ([mholt6](https://twitter.com/mholt6)).\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>curl-to-ruby: Convert curl commands to ruby's net/http</title>\n    <meta charset=\"utf-8\">\n    <link rel=\"stylesheet\" href=\"resources/css/color-brewer.css\">\n    <link rel=\"stylesheet\" href=\"resources/css/common.css\">\n  </head>\n  <body>\n\n    <header>\n      <h1>curl-to-ruby</h1>\n      <h2>Instantly convert <a href=\"http://curl.haxx.se/\">curl</a> commands to <a href=\"https://www.ruby-lang.org/\">Ruby</a>'s <a href=\"http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/Net/HTTP.html\">net/http</a></h2>\n\n      <p>\n        Ruby's <code>net/http</code> is notorious for not having the friendliest API, but it isn't all that bad.\n        Ruby has great gems like <a href=\"https://github.com/lostisland/faraday\">faraday</a>, but in libraries and small utilities it's better to <a href=\"http://www.mikeperham.com/2016/02/09/kill-your-dependencies/\">kill your dependencies</a> and use what the stdlib provides.\n      </p>\n      <p>\n        This tool turns a curl command into ruby (2.0+) code using <code>net/http</code>. Currently, it knows the following options: <code>-d</code>/<code>--data</code>, <code>-H</code>/<code>--header</code>, <code>-I</code>/<code>--head</code>, <code>-u</code>/<code>--user</code>, <code>-k</code>/<code>--insecure</code>, <code>--url</code>, and <code>-X</code>/<code>--request</code>.\n      </p>\n      <p>\n        There's probably bugs; please <a href=\"https://github.com/jhawthorn/curl-to-ruby\">contribute on GitHub</a>. Based on <a href=\"https://mholt.github.io/curl-to-go\">curl-to-go</a>.\n      </p>\n\n      <p class=\"examples\">\n        <a href=\"javascript: useExample('example1')\">Simple</a> &middot;\n        <a href=\"javascript: useExample('example2')\">Basic Auth</a> &middot;\n        <a href=\"javascript: useExample('example3')\">JSON</a> &middot;\n        <a href=\"javascript: useExample('example4')\">Complex JSON</a> &middot;\n        <a href=\"javascript: useExample('example5')\">Form Data</a>\n      </p>\n\n    </header>\n    <main>\n<script id=\"example1\" language=\"text/x-shellscript\">curl echoip.com</script>\n<script id=\"example2\" language=\"text/x-shellscript\">\ncurl https://api.example.com/surprise \\\n     -u banana:coconuts \\\n     -d \"sample data\"\n</script>\n<script id=\"example3\" language=\"text/x-shellscript\">\ncurl -X POST -H \"Content-Type: application/json\" -H \"Authorization: Bearer b7d03a6947b217efb6f3ec3bd3504582\" -d '{\"type\":\"A\",\"name\":\"www\",\"data\":\"162.10.66.0\",\"priority\":null,\"port\":null,\"weight\":null}' \"https://api.digitalocean.com/v2/domains/example.com/records\"\n</script>\n<script id=\"example4\" language=\"text/x-shellscript\">\n     curl -u \"demo:\" -X POST -H \"Content-Type: application/json\" -d '{\"array\": [1,2,3], \"object\": {\"foo\": \"bar\", \"nested\": {\"baz\": true}}}' https://example.com/\n</script>\n<script id=\"example5\" language=\"text/x-shellscript\">\ncurl -X POST https://api.easypost.com/v2/shipments \\\n     -u API_KEY: \\\n     -d 'shipment[to_address][id]=adr_HrBKVA85' \\\n     -d 'shipment[from_address][id]=adr_VtuTOj7o' \\\n     -d 'shipment[parcel][id]=prcl_WDv2VzHp' \\\n     -d 'shipment[is_return]=true' \\\n     -d 'shipment[customs_info][id]=cstinfo_bl5sE20Y'\n</script>\n\n      <textarea id=\"input\" rows=\"4\" placeholder=\"Paste curl here\"></textarea>\n      <div id=\"output\"></div>\n    </main>\n    <footer>\n      <p>\n        Protip™: Both chrome and firefox allow <a href=\"https://daniel.haxx.se/blog/2015/11/23/copy-as-curl/\">copying any request as curl</a>.\n      </p>\n    </footer>\n    <script src=\"resources/js/default.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"curl-to-ruby\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"description\": \"curl-to-ruby ============\",\n  \"scripts\": {\n    \"watch\": \"webpack --watch --colors --progress --display-error-details\",\n    \"compile\": \"webpack --no-colors -p --display-error-details\",\n    \"eslint\": \"eslint src\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/jhawthorn/curl-to-ruby.git\"\n  },\n  \"author\": \"John Hawthorn\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jhawthorn/curl-to-ruby/issues\"\n  },\n  \"homepage\": \"https://github.com/jhawthorn/curl-to-ruby#readme\",\n  \"dependencies\": {\n    \"@babel/core\": \"^7.5.5\",\n    \"@babel/preset-env\": \"^7.5.5\",\n    \"babel-loader\": \"^8.0.6\",\n    \"highlight.js\": \"^9.4.0\",\n    \"query-string\": \"^6.8.2\",\n    \"shell-quote\": \"^1.6.0\",\n    \"webpack\": \"^4.39.2\"\n  },\n  \"devDependencies\": {\n    \"babel-eslint\": \"^10.0.2\",\n    \"expose-loader\": \"^0.7.1\",\n    \"webpack-cli\": \"^3.3.6\"\n  }\n}\n"
  },
  {
    "path": "resources/css/color-brewer.css",
    "content": "/*\n\nColorbrewer theme\nOriginal: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock <mike@ocks.org>\nPorted by Fabrício Tavares de Oliveira\n\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #fff;\n}\n\n.hljs,\n.hljs-subst {\n  color: #000;\n}\n\n.hljs-string,\n.hljs-meta,\n.hljs-symbol,\n.hljs-template-tag,\n.hljs-template-variable,\n.hljs-addition {\n  color: #756bb1;\n}\n\n.hljs-comment,\n.hljs-quote {\n  color: #636363;\n}\n\n.hljs-number,\n.hljs-regexp,\n.hljs-literal,\n.hljs-bullet,\n.hljs-link {\n  color: #31a354;\n}\n\n.hljs-deletion,\n.hljs-variable {\n  color: #88f;\n}\n\n\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-title,\n.hljs-section,\n.hljs-built_in,\n.hljs-doctag,\n.hljs-type,\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-strong {\n  color: #3182bd;\n}\n\n.hljs-emphasis {\n  font-style: italic;\n}\n\n.hljs-attribute {\n  color: #e6550d;\n}\n"
  },
  {
    "path": "resources/css/common.css",
    "content": "/*\n\tEric Meyer's Reset CSS v2.0\n\t\n\tNOTICE: This copy of the CSS reset has been modified\n\tto make main tag \"display: block\" because the default in\n\teven IE 11 is \"display: inline\", which is not correct.\n*/\nhtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}\n\n* {\n\tbox-sizing: border-box;\n}\n\nbody {\n\tfont: 14px/1.5em sans-serif;\n}\n\nheader,\nmain,\nfooter {\n\twidth: 85%;\n\tmax-width: 900px;\n\tmargin: 0 auto;\n}\n\nheader {\n\tmargin-bottom: 50px;\n}\n\nh1 {\n\tfont-size: 48px;\n\tfont-weight: bold;\n\tline-height: 1.5em;\n\ttext-align: center;\n}\n\nh2 {\n\tfont-size: 18px;\n\tline-height: 1.3em;\n\ttext-align: center;\n\tmargin-bottom: 25px;\n}\n\np {\n\tmax-width: 625px;\n\tmargin: 10px auto;\n}\n\ncode {\n\tfont-family: 'Consolas', 'Menlo', 'Monaco', 'Courier New', monospace;\n\tpadding: 1px 3px;\n\tbackground-color: #EEE;\n\tfont-size: 12px;\n}\n\n.examples {\n\tmax-width: none;\n\ttext-align: center;\n}\n\n.examples a {\n\tmargin: 0 3px;\n}\n\n.clr-red {\n\tcolor: #CC0000;\n}\n\n#input,\n#output {\n\tborder: 1px solid #CCC;\n\tpadding: 10px;\n\toutline: none;\n\tfont: 16px/1.5em Consolas, Menlo, Monaco, 'Courier New', monospace;\n\twhite-space: pre;\n\ttab-size: 4;\n}\n\n#input {\n\twidth: 100%;\n\tmargin-bottom: 50px;\n\toverflow-y: auto;\n\tresize: vertical;\n}\n\n#output {\n\tbackground-color: #F0F8FF; /* \"aliceblue\" - happened on that by chance choosing a color in chrome inspector tools */\n\tword-wrap: break-word;\n\tfont-size: 14px;\n}\n\nfooter {\n\tmargin: 50px auto;\n\ttext-align: center;\n}\n"
  },
  {
    "path": "resources/js/curl-to-ruby.js",
    "content": "!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=8)}([function(e,t,r){\"use strict\";const n=r(3),o=r(4),s=r(5);function i(e,t){return t.encode?t.strict?n(e):encodeURIComponent(e):e}function a(e,t){return t.decode?o(e):e}function u(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function c(e){const t=(e=u(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function l(e,t){const r=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,r,n)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===n[e]&&(n[e]={}),n[e][t[1]]=r):n[e]=r};case\"bracket\":return(e,r,n)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==n[e]?n[e]=[].concat(n[e],r):n[e]=[r]:n[e]=r};case\"comma\":return(e,t,r)=>{const n=\"string\"==typeof t&&t.split(\"\").indexOf(\",\")>-1?t.split(\",\"):t;r[e]=n};default:return(e,t,r)=>{void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=t}}}(t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",parseNumbers:!1,parseBooleans:!1},t)),n=Object.create(null);if(\"string\"!=typeof e)return n;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return n;for(const o of e.split(\"&\")){let[e,i]=s(o.replace(/\\+/g,\" \"),\"=\");i=void 0===i?null:a(i,t),t.parseNumbers&&!Number.isNaN(Number(i))&&\"string\"==typeof i&&\"\"!==i.trim()?i=Number(i):!t.parseBooleans||null===i||\"true\"!==i.toLowerCase()&&\"false\"!==i.toLowerCase()||(i=\"true\"===i.toLowerCase()),r(a(e,t),i,n)}return!1===t.sort?n:(!0===t.sort?Object.keys(n).sort():Object.keys(n).sort(t.sort)).reduce((e,t)=>{const r=n[t];return Boolean(r)&&\"object\"==typeof r&&!Array.isArray(r)?e[t]=function e(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?e(Object.keys(t)).sort((e,t)=>Number(e)-Number(t)).map(e=>t[e]):t}(r):e[t]=r,e},Object.create(null))}t.extract=c,t.parse=l,t.stringify=(e,t)=>{if(!e)return\"\";const r=function(e){switch(e.arrayFormat){case\"index\":return t=>(r,n)=>{const o=r.length;return void 0===n?r:null===n?[...r,[i(t,e),\"[\",o,\"]\"].join(\"\")]:[...r,[i(t,e),\"[\",i(o,e),\"]=\",i(n,e)].join(\"\")]};case\"bracket\":return t=>(r,n)=>void 0===n?r:null===n?[...r,[i(t,e),\"[]\"].join(\"\")]:[...r,[i(t,e),\"[]=\",i(n,e)].join(\"\")];case\"comma\":return t=>(r,n,o)=>null==n||0===n.length?r:0===o?[[i(t,e),\"=\",i(n,e)].join(\"\")]:[[r,i(n,e)].join(\",\")];default:return t=>(r,n)=>void 0===n?r:null===n?[...r,i(t,e)]:[...r,[i(t,e),\"=\",i(n,e)].join(\"\")]}}(t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\"},t)),n=Object.keys(e);return!1!==t.sort&&n.sort(t.sort),n.map(n=>{const o=e[n];return void 0===o?\"\":null===o?i(n,t):Array.isArray(o)?o.reduce(r(n),[]).join(\"&\"):i(n,t)+\"=\"+i(o,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>({url:u(e).split(\"?\")[0]||\"\",query:l(c(e),t)})},function(e,t){t.quote=function(e){return e.map(function(e){return e&&\"object\"==typeof e?e.op.replace(/(.)/g,\"\\\\$1\"):/[\"\\s]/.test(e)&&!/'/.test(e)?\"'\"+e.replace(/(['\\\\])/g,\"\\\\$1\")+\"'\":/[\"'\\s]/.test(e)?'\"'+e.replace(/([\"\\\\$`!])/g,\"\\\\$1\")+'\"':e=(e=String(e).replace(/([A-z]:)?([#!\"$&'()*,:;<=>?@\\[\\\\\\]^`{|}])/g,\"$1\\\\$2\")).replace(/\\\\\\\\/g,\"\\\\\")}).join(\" \")};for(var r=\"(?:\"+[\"\\\\|\\\\|\",\"\\\\&\\\\&\",\";;\",\"\\\\|\\\\&\",\"\\\\<\\\\(\",\">>\",\">\\\\&\",\"[&;()|<>]\"].join(\"|\")+\")\",n=\"(\\\\\\\\['\\\"|&;()<> \\\\t]|[^\\\\s'\\\"|&;()<> \\\\t])+\",o='\"((\\\\\\\\\"|[^\"])*?)\"',s=\"'((\\\\\\\\'|[^'])*?)'\",i=\"\",a=0;a<4;a++)i+=(Math.pow(16,8)*Math.random()).toString(16);t.parse=function(e,t,a){var u=function(e,t,a){var u=new RegExp([\"(\"+r+\")\",\"(\"+n+\"|\"+o+\"|\"+s+\")*\"].join(\"|\"),\"g\"),c=e.match(u).filter(Boolean),l=!1;if(!c)return[];t||(t={});a||(a={});return c.map(function(e,n){if(!l){if(RegExp(\"^\"+r+\"$\").test(e))return{op:e};for(var o=a.escape||\"\\\\\",s=!1,u=!1,f=\"\",p=!1,d=0,h=e.length;d<h;d++){var g=e.charAt(d);if(p=p||!s&&(\"*\"===g||\"?\"===g),u)f+=g,u=!1;else if(s)g===s?s=!1:\"'\"==s?f+=g:g===o?(d+=1,f+='\"'===(g=e.charAt(d))||g===o||\"$\"===g?g:o+g):f+=\"$\"===g?b():g;else if('\"'===g||\"'\"===g)s=g;else{if(RegExp(\"^\"+r+\"$\").test(g))return{op:e};if(RegExp(\"^#$\").test(g))return l=!0,f.length?[f,{comment:e.slice(d+1)+c.slice(n+1).join(\" \")}]:[{comment:e.slice(d+1)+c.slice(n+1).join(\" \")}];g===o?u=!0:f+=\"$\"===g?b():g}}return p?{op:\"glob\",pattern:f}:f}function b(){var r,n;if(d+=1,\"{\"===e.charAt(d)){if(d+=1,\"}\"===e.charAt(d))throw new Error(\"Bad substitution: \"+e.substr(d-2,3));if((r=e.indexOf(\"}\",d))<0)throw new Error(\"Bad substitution: \"+e.substr(d));n=e.substr(d,r-d),d=r}else/[*@#?$!_\\-]/.test(e.charAt(d))?(n=e.charAt(d),d+=1):(r=e.substr(d).match(/[^\\w\\d_]/))?(n=e.substr(d,r.index),d+=r.index-1):(n=e.substr(d),d=e.length);return function(e,r,n){var o=\"function\"==typeof t?t(n):t[n];void 0===o&&\"\"!=n?o=\"\":void 0===o&&(o=\"$\");return\"object\"==typeof o?r+i+JSON.stringify(o)+i:r+o}(0,\"\",n)}}).reduce(function(e,t){return void 0===t?e:e.concat(t)},[])}(e,t,a);return\"function\"!=typeof t?u:u.reduce(function(e,t){if(\"object\"==typeof t)return e.concat(t);var r=t.split(RegExp(\"(\"+i+\".*?\"+i+\")\",\"g\"));return 1===r.length?e.concat(r[0]):e.concat(r.filter(Boolean).map(function(e){return RegExp(\"^\"+i).test(e)?JSON.parse(e.split(i)[1]):e}))},[])}},function(e,t,r){\"use strict\";r.r(t);var n=r(0),o=r.n(n);function s(e){return(s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var i=r(1);function a(e){var t=\"require 'net/http'\\nrequire 'uri'\\n\",r=\"\\n# response.code\\n# response.body\\n\",n={COPY:\"Copy\",DELETE:\"Delete\",GET:\"Get\",HEAD:\"Head\",LOCK:\"Lock\",MKCOL:\"Mkcol\",MoVE:\"Move\",OPTIONS:\"Options\",PATCH:\"Patch\",POST:\"Post\",PROPFIND:\"Propfind\",PROPPATCH:\"Proppatch\",PUT:\"Put\",TRACE:\"Trace\",UNLOCK:\"Unlock\"},a=/^([^\\s]+=[^\\s]+)(&[^\\s]+=[^\\s]+)*$/;if(e.trim()){var u=function(e,t){void 0===t&&(t={}),e=(e=e.replace(/\\\\\\n/g,\"\")).trim();var r=Object(i.parse)(e),n={_:[]};function o(e,t){n[e]||(n[e]=[]),n[e].push(t)}for(;r.length;){var s=r.shift();if(\"glob\"==s.op&&(s=s.pattern),\"-\"==s[0]){if(\"-\"==(s=s.substring(1,s.length))[0])if(a(s=s.substring(1,s.length)))n[s]=!0;else if(s.indexOf(\"=\")>0)o(s.substring(0,s.indexOf(\"=\")),s.substring(s.indexOf(\"=\")+1,s.length));else o(s,r.shift());else a(s)?n[s]=!0:s.length>1?o(s[0],s.substring(1,s.length)):o(s[0],r.shift());a(s)&&(n[s]=!0)}else o(\"_\",s)}return n;function a(e){if(Array.isArray(t.boolFlags))for(var r=0;r<t.boolFlags.length;r++)if(t.boolFlags[r]==e)return!0;return!1}}(e,{boolFlags:[\"#\",\"progress-bar\",\"-\",\"next\",\"0\",\"http1.0\",\"http1.1\",\"http2\",\"no-npn\",\"no-alpn\",\"1\",\"tlsv1\",\"2\",\"sslv2\",\"3\",\"sslv3\",\"4\",\"ipv4\",\"6\",\"ipv6\",\"a\",\"append\",\"anyauth\",\"B\",\"use-ascii\",\"basic\",\"compressed\",\"create-dirs\",\"crlf\",\"digest\",\"disable-eprt\",\"disable-epsv\",\"environment\",\"cert-status\",\"false-start\",\"f\",\"fail\",\"ftp-create-dirs\",\"ftp-pasv\",\"ftp-skip-pasv-ip\",\"ftp-pret\",\"ftp-ssl-ccc\",\"ftp-ssl-control\",\"g\",\"globoff\",\"G\",\"get\",\"ignore-content-length\",\"i\",\"include\",\"I\",\"head\",\"j\",\"junk-session-cookies\",\"J\",\"remote-header-name\",\"k\",\"insecure\",\"l\",\"list-only\",\"L\",\"location\",\"location-trusted\",\"metalink\",\"n\",\"netrc\",\"N\",\"no-buffer\",\"netrc-file\",\"netrc-optional\",\"negotiate\",\"no-keepalive\",\"no-sessionid\",\"ntlm\",\"O\",\"remote-name\",\"oauth2-bearer\",\"p\",\"proxy-tunnel\",\"path-as-is\",\"post301\",\"post302\",\"post303\",\"proxy-anyauth\",\"proxy-basic\",\"proxy-digest\",\"proxy-negotiate\",\"proxy-ntlm\",\"q\",\"raw\",\"remote-name-all\",\"s\",\"silent\",\"sasl-ir\",\"S\",\"show-error\",\"ssl\",\"ssl-reqd\",\"ssl-allow-beast\",\"ssl-no-revoke\",\"socks5-gssapi-nec\",\"tcp-nodelay\",\"tlsv1.0\",\"tlsv1.1\",\"tlsv1.2\",\"tr-encoding\",\"trace-time\",\"v\",\"verbose\",\"xattr\",\"h\",\"help\",\"M\",\"manual\",\"V\",\"version\"]});if(\"curl\"!=u._[0])throw\"Not a curl command\";var c=function(e){var t={url:\"\",method:\"\",headers:[],data:{}};e.url&&e.url.length>0?t.url=e.url[0]:e._.length>1&&(t.url=e._[1]);t.url=function(e){return e&&!new RegExp(\"^https?://\",\"i\").test(e)?\"http://\"+e:e}(t.url),e.H&&(t.headers=t.headers.concat(e.H));e.header&&(t.headers=t.headers.concat(e.header));(e.I||e.head)&&(t.method=\"HEAD\");e.request&&e.request.length>0?t.method=e.request[e.request.length-1].toUpperCase():e.X&&e.X.length>0&&(t.method=e.X[e.X.length-1].toUpperCase());var r=[],n=[],o=function(e){t.method||(t.method=\"POST\");for(var o=0;o<e.length;o++)e[o].length>0&&\"@\"==e[o][0]?n.push(e[o].substr(1)):r.push(e[o])};e.d&&o(e.d);e.data&&o(e.data);e[\"data-binary\"]&&o(e[\"data-binary\"]);r.length>0&&(t.data.ascii=r.join(\"&\"));n.length>0&&(t.data.files=n);var s=\"\";e.user&&e.user.length>0?s=e.user[e.user.length-1]:e.u&&e.u.length>0&&(s=e.u[e.u.length-1]);var i=s.indexOf(\":\");i>-1?t.basicauth={user:s.substr(0,i),pass:s.substr(i+1)}:t.basicAuth={user:s,pass:\"<PASSWORD>\"};(e.k||e.insecure)&&(t.insecure=!0);t.method||(t.method=\"GET\");return t}(u);return 0!=c.headers.length||\"GET\"!=c.method||c.data.ascii||c.data.files||c.basicauth||c.insecure?function(e){for(var i={},u=0;u<e.headers.length;u++){var c=e.headers[u].indexOf(\":\");if(-1!=c){var f=e.headers[u].substr(0,c).trim(),p=e.headers[u].substr(c+1).trim();i[(d=f,d.replace(/\\w*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))]=p}}var d;delete i[\"Accept-Encoding\"];var h=\"\";h+='uri = URI.parse(\"'+l(e.url)+'\")\\n',n[e.method]?h+=\"request = Net::HTTP::\"+n[e.method]+\".new(uri)\\n\":h+='request = Net::HTTPGenericRequest.new(\"'+l(e.method)+'\", false, false, uri)\\n';e.basicauth&&(h+='request.basic_auth(\"'+l(e.basicauth.user)+'\", \"'+l(e.basicauth.pass)+'\")\\n');i[\"Content-Type\"]&&(h+='request.content_type = \"'+l(i[\"Content-Type\"])+'\"\\n',delete i[\"Content-Type\"]);for(var f in i)h+='request[\"'+l(f)+'\"] = \"'+l(i[f])+'\"\\n';if(e.data.ascii)if(function(e){try{return JSON.parse(e),!0}catch(e){return!1}}(e.data.ascii)){var g=JSON.parse(e.data.ascii);t+=\"require 'json'\\n\",h+=\"request.body = JSON.dump(\"+function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=s(t);if(null==t)return\"nil\";if(\"boolean\"==n)return t.toString();if(\"number\"==n)return t.toString();if(\"string\"==n)return'\"'+t.toString()+'\"';if(Array.isArray(t)){var o=\"[\\n\";return t.forEach(function(t){o+=r+\"  \",o+=e(t,r+\"  \"),o+=\",\\n\"}),o=o.slice(0,-2),o+=\"\\n\"+r+\"]\"}if(\"object\"==n){var i=\"{\\n\";for(var a in t)i+=r+\"  \",i+=e(a),i+=\" => \",i+=e(t[a],r+\"  \"),i+=\",\\n\";return i=i.slice(0,-2),i+=\"\\n\"+r+\"}\"}throw\"Invalid JSON object\"}(g)+\")\\n\"}else if(a.test(e.data.ascii)){var b=o.a.parse(e.data.ascii);for(var f in h+=\"request.set_form_data(\\n\",b){var y=b[f];h+='  \"'.concat(l(f),'\" => \"').concat(l(y),'\",\\n')}h+=\")\\n\"}else h+='request.body = \"'+l(e.data.ascii)+'\"\\n';if(e.data.files&&e.data.files.length>0){e.data.ascii||(h+='request.body = \"\"\\n');for(u=0;u<e.data.files.length;u++)h+='request.body << File.read(\"'+l(e.data.files[u])+'\").delete(\"\\\\r\\\\n\")\\n'}h+=\"\\n\",h+=\"req_options = {\\n\",h+='  use_ssl: uri.scheme == \"https\",\\n',e.insecure&&(t+=\"require 'openssl'\\n\",h+=\"  verify_mode: OpenSSL::SSL::VERIFY_NONE,\\n\");return h+=\"}\\n\",h+=\"\\n\",h+=\"response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\\n\",h+=\"  http.request(request)\\n\",t+\"\\n\"+(h+=\"end\\n\")+r}(c):function(e){var n=\"\";return n+='uri = URI.parse(\"'+l(e.url)+'\")\\n',t+\"\\n\"+(n+=\"response = Net::HTTP.get_response(uri)\\n\")+r}(c)}function l(e){return e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')}}r.d(t,\"default\",function(){return a})},function(e,t,r){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},function(e,t,r){\"use strict\";var n=new RegExp(\"%[a-f0-9]{2}\",\"gi\"),o=new RegExp(\"(%[a-f0-9]{2})+\",\"gi\");function s(e,t){try{return decodeURIComponent(e.join(\"\"))}catch(e){}if(1===e.length)return e;t=t||1;var r=e.slice(0,t),n=e.slice(t);return Array.prototype.concat.call([],s(r),s(n))}function i(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n),r=1;r<t.length;r++)t=(e=s(t,r).join(\"\")).match(n);return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},r=o.exec(e);r;){try{t[r[0]]=decodeURIComponent(r[0])}catch(e){var n=i(r[0]);n!==r[0]&&(t[r[0]]=n)}r=o.exec(e)}t[\"%C2\"]=\"�\";for(var s=Object.keys(t),a=0;a<s.length;a++){var u=s[a];e=e.replace(new RegExp(u,\"g\"),t[u])}return e}(e)}}},function(e,t,r){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const r=e.indexOf(t);return-1===r?[e]:[e.slice(0,r),e.slice(r+t.length)]}},,,function(e,t,r){r(9)},function(e,t,r){(function(t){e.exports=t.curlToRuby=r(2)}).call(this,r(10))},function(e,t){var r;r=function(){return this}();try{r=r||new Function(\"return this\")()}catch(e){\"object\"==typeof window&&(r=window)}e.exports=r}]);"
  },
  {
    "path": "resources/js/default.js",
    "content": "!function(e){var n={};function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&n&&\"string\"!=typeof e)for(var a in e)t.d(r,a,function(n){return e[n]}.bind(null,a));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p=\"\",t(t.s=11)}([function(e,n,t){\"use strict\";const r=t(3),a=t(4),s=t(5);function i(e,n){return n.encode?n.strict?r(e):encodeURIComponent(e):e}function o(e,n){return n.decode?a(e):e}function c(e){const n=e.indexOf(\"#\");return-1!==n&&(e=e.slice(0,n)),e}function u(e){const n=(e=c(e)).indexOf(\"?\");return-1===n?\"\":e.slice(n+1)}function l(e,n){const t=function(e){let n;switch(e.arrayFormat){case\"index\":return(e,t,r)=>{n=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[e]&&(r[e]={}),r[e][n[1]]=t):r[e]=t};case\"bracket\":return(e,t,r)=>{n=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),n?void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=[t]:r[e]=t};case\"comma\":return(e,n,t)=>{const r=\"string\"==typeof n&&n.split(\"\").indexOf(\",\")>-1?n.split(\",\"):n;t[e]=r};default:return(e,n,t)=>{void 0!==t[e]?t[e]=[].concat(t[e],n):t[e]=n}}}(n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",parseNumbers:!1,parseBooleans:!1},n)),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const a of e.split(\"&\")){let[e,i]=s(a.replace(/\\+/g,\" \"),\"=\");i=void 0===i?null:o(i,n),n.parseNumbers&&!Number.isNaN(Number(i))&&\"string\"==typeof i&&\"\"!==i.trim()?i=Number(i):!n.parseBooleans||null===i||\"true\"!==i.toLowerCase()&&\"false\"!==i.toLowerCase()||(i=\"true\"===i.toLowerCase()),t(o(e,n),i,r)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((e,n)=>{const t=r[n];return Boolean(t)&&\"object\"==typeof t&&!Array.isArray(t)?e[n]=function e(n){return Array.isArray(n)?n.sort():\"object\"==typeof n?e(Object.keys(n)).sort((e,n)=>Number(e)-Number(n)).map(e=>n[e]):n}(t):e[n]=t,e},Object.create(null))}n.extract=u,n.parse=l,n.stringify=(e,n)=>{if(!e)return\"\";const t=function(e){switch(e.arrayFormat){case\"index\":return n=>(t,r)=>{const a=t.length;return void 0===r?t:null===r?[...t,[i(n,e),\"[\",a,\"]\"].join(\"\")]:[...t,[i(n,e),\"[\",i(a,e),\"]=\",i(r,e)].join(\"\")]};case\"bracket\":return n=>(t,r)=>void 0===r?t:null===r?[...t,[i(n,e),\"[]\"].join(\"\")]:[...t,[i(n,e),\"[]=\",i(r,e)].join(\"\")];case\"comma\":return n=>(t,r,a)=>null==r||0===r.length?t:0===a?[[i(n,e),\"=\",i(r,e)].join(\"\")]:[[t,i(r,e)].join(\",\")];default:return n=>(t,r)=>void 0===r?t:null===r?[...t,i(n,e)]:[...t,[i(n,e),\"=\",i(r,e)].join(\"\")]}}(n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\"},n)),r=Object.keys(e);return!1!==n.sort&&r.sort(n.sort),r.map(r=>{const a=e[r];return void 0===a?\"\":null===a?i(r,n):Array.isArray(a)?a.reduce(t(r),[]).join(\"&\"):i(r,n)+\"=\"+i(a,n)}).filter(e=>e.length>0).join(\"&\")},n.parseUrl=(e,n)=>({url:c(e).split(\"?\")[0]||\"\",query:l(u(e),n)})},function(e,n){n.quote=function(e){return e.map(function(e){return e&&\"object\"==typeof e?e.op.replace(/(.)/g,\"\\\\$1\"):/[\"\\s]/.test(e)&&!/'/.test(e)?\"'\"+e.replace(/(['\\\\])/g,\"\\\\$1\")+\"'\":/[\"'\\s]/.test(e)?'\"'+e.replace(/([\"\\\\$`!])/g,\"\\\\$1\")+'\"':e=(e=String(e).replace(/([A-z]:)?([#!\"$&'()*,:;<=>?@\\[\\\\\\]^`{|}])/g,\"$1\\\\$2\")).replace(/\\\\\\\\/g,\"\\\\\")}).join(\" \")};for(var t=\"(?:\"+[\"\\\\|\\\\|\",\"\\\\&\\\\&\",\";;\",\"\\\\|\\\\&\",\"\\\\<\\\\(\",\">>\",\">\\\\&\",\"[&;()|<>]\"].join(\"|\")+\")\",r=\"(\\\\\\\\['\\\"|&;()<> \\\\t]|[^\\\\s'\\\"|&;()<> \\\\t])+\",a='\"((\\\\\\\\\"|[^\"])*?)\"',s=\"'((\\\\\\\\'|[^'])*?)'\",i=\"\",o=0;o<4;o++)i+=(Math.pow(16,8)*Math.random()).toString(16);n.parse=function(e,n,o){var c=function(e,n,o){var c=new RegExp([\"(\"+t+\")\",\"(\"+r+\"|\"+a+\"|\"+s+\")*\"].join(\"|\"),\"g\"),u=e.match(c).filter(Boolean),l=!1;if(!u)return[];n||(n={});o||(o={});return u.map(function(e,r){if(!l){if(RegExp(\"^\"+t+\"$\").test(e))return{op:e};for(var a=o.escape||\"\\\\\",s=!1,c=!1,d=\"\",f=!1,g=0,p=e.length;g<p;g++){var b=e.charAt(g);if(f=f||!s&&(\"*\"===b||\"?\"===b),c)d+=b,c=!1;else if(s)b===s?s=!1:\"'\"==s?d+=b:b===a?(g+=1,d+='\"'===(b=e.charAt(g))||b===a||\"$\"===b?b:a+b):d+=\"$\"===b?h():b;else if('\"'===b||\"'\"===b)s=b;else{if(RegExp(\"^\"+t+\"$\").test(b))return{op:e};if(RegExp(\"^#$\").test(b))return l=!0,d.length?[d,{comment:e.slice(g+1)+u.slice(r+1).join(\" \")}]:[{comment:e.slice(g+1)+u.slice(r+1).join(\" \")}];b===a?c=!0:d+=\"$\"===b?h():b}}return f?{op:\"glob\",pattern:d}:d}function h(){var t,r;if(g+=1,\"{\"===e.charAt(g)){if(g+=1,\"}\"===e.charAt(g))throw new Error(\"Bad substitution: \"+e.substr(g-2,3));if((t=e.indexOf(\"}\",g))<0)throw new Error(\"Bad substitution: \"+e.substr(g));r=e.substr(g,t-g),g=t}else/[*@#?$!_\\-]/.test(e.charAt(g))?(r=e.charAt(g),g+=1):(t=e.substr(g).match(/[^\\w\\d_]/))?(r=e.substr(g,t.index),g+=t.index-1):(r=e.substr(g),g=e.length);return function(e,t,r){var a=\"function\"==typeof n?n(r):n[r];void 0===a&&\"\"!=r?a=\"\":void 0===a&&(a=\"$\");return\"object\"==typeof a?t+i+JSON.stringify(a)+i:t+a}(0,\"\",r)}}).reduce(function(e,n){return void 0===n?e:e.concat(n)},[])}(e,n,o);return\"function\"!=typeof n?c:c.reduce(function(e,n){if(\"object\"==typeof n)return e.concat(n);var t=n.split(RegExp(\"(\"+i+\".*?\"+i+\")\",\"g\"));return 1===t.length?e.concat(t[0]):e.concat(t.filter(Boolean).map(function(e){return RegExp(\"^\"+i).test(e)?JSON.parse(e.split(i)[1]):e}))},[])}},function(e,n,t){\"use strict\";t.r(n);var r=t(0),a=t.n(r);function s(e){return(s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var i=t(1);function o(e){var n=\"require 'net/http'\\nrequire 'uri'\\n\",t=\"\\n# response.code\\n# response.body\\n\",r={COPY:\"Copy\",DELETE:\"Delete\",GET:\"Get\",HEAD:\"Head\",LOCK:\"Lock\",MKCOL:\"Mkcol\",MoVE:\"Move\",OPTIONS:\"Options\",PATCH:\"Patch\",POST:\"Post\",PROPFIND:\"Propfind\",PROPPATCH:\"Proppatch\",PUT:\"Put\",TRACE:\"Trace\",UNLOCK:\"Unlock\"},o=/^([^\\s]+=[^\\s]+)(&[^\\s]+=[^\\s]+)*$/;if(e.trim()){var c=function(e,n){void 0===n&&(n={}),e=(e=e.replace(/\\\\\\n/g,\"\")).trim();var t=Object(i.parse)(e),r={_:[]};function a(e,n){r[e]||(r[e]=[]),r[e].push(n)}for(;t.length;){var s=t.shift();if(\"glob\"==s.op&&(s=s.pattern),\"-\"==s[0]){if(\"-\"==(s=s.substring(1,s.length))[0])if(o(s=s.substring(1,s.length)))r[s]=!0;else if(s.indexOf(\"=\")>0)a(s.substring(0,s.indexOf(\"=\")),s.substring(s.indexOf(\"=\")+1,s.length));else a(s,t.shift());else o(s)?r[s]=!0:s.length>1?a(s[0],s.substring(1,s.length)):a(s[0],t.shift());o(s)&&(r[s]=!0)}else a(\"_\",s)}return r;function o(e){if(Array.isArray(n.boolFlags))for(var t=0;t<n.boolFlags.length;t++)if(n.boolFlags[t]==e)return!0;return!1}}(e,{boolFlags:[\"#\",\"progress-bar\",\"-\",\"next\",\"0\",\"http1.0\",\"http1.1\",\"http2\",\"no-npn\",\"no-alpn\",\"1\",\"tlsv1\",\"2\",\"sslv2\",\"3\",\"sslv3\",\"4\",\"ipv4\",\"6\",\"ipv6\",\"a\",\"append\",\"anyauth\",\"B\",\"use-ascii\",\"basic\",\"compressed\",\"create-dirs\",\"crlf\",\"digest\",\"disable-eprt\",\"disable-epsv\",\"environment\",\"cert-status\",\"false-start\",\"f\",\"fail\",\"ftp-create-dirs\",\"ftp-pasv\",\"ftp-skip-pasv-ip\",\"ftp-pret\",\"ftp-ssl-ccc\",\"ftp-ssl-control\",\"g\",\"globoff\",\"G\",\"get\",\"ignore-content-length\",\"i\",\"include\",\"I\",\"head\",\"j\",\"junk-session-cookies\",\"J\",\"remote-header-name\",\"k\",\"insecure\",\"l\",\"list-only\",\"L\",\"location\",\"location-trusted\",\"metalink\",\"n\",\"netrc\",\"N\",\"no-buffer\",\"netrc-file\",\"netrc-optional\",\"negotiate\",\"no-keepalive\",\"no-sessionid\",\"ntlm\",\"O\",\"remote-name\",\"oauth2-bearer\",\"p\",\"proxy-tunnel\",\"path-as-is\",\"post301\",\"post302\",\"post303\",\"proxy-anyauth\",\"proxy-basic\",\"proxy-digest\",\"proxy-negotiate\",\"proxy-ntlm\",\"q\",\"raw\",\"remote-name-all\",\"s\",\"silent\",\"sasl-ir\",\"S\",\"show-error\",\"ssl\",\"ssl-reqd\",\"ssl-allow-beast\",\"ssl-no-revoke\",\"socks5-gssapi-nec\",\"tcp-nodelay\",\"tlsv1.0\",\"tlsv1.1\",\"tlsv1.2\",\"tr-encoding\",\"trace-time\",\"v\",\"verbose\",\"xattr\",\"h\",\"help\",\"M\",\"manual\",\"V\",\"version\"]});if(\"curl\"!=c._[0])throw\"Not a curl command\";var u=function(e){var n={url:\"\",method:\"\",headers:[],data:{}};e.url&&e.url.length>0?n.url=e.url[0]:e._.length>1&&(n.url=e._[1]);n.url=function(e){return e&&!new RegExp(\"^https?://\",\"i\").test(e)?\"http://\"+e:e}(n.url),e.H&&(n.headers=n.headers.concat(e.H));e.header&&(n.headers=n.headers.concat(e.header));(e.I||e.head)&&(n.method=\"HEAD\");e.request&&e.request.length>0?n.method=e.request[e.request.length-1].toUpperCase():e.X&&e.X.length>0&&(n.method=e.X[e.X.length-1].toUpperCase());var t=[],r=[],a=function(e){n.method||(n.method=\"POST\");for(var a=0;a<e.length;a++)e[a].length>0&&\"@\"==e[a][0]?r.push(e[a].substr(1)):t.push(e[a])};e.d&&a(e.d);e.data&&a(e.data);e[\"data-binary\"]&&a(e[\"data-binary\"]);t.length>0&&(n.data.ascii=t.join(\"&\"));r.length>0&&(n.data.files=r);var s=\"\";e.user&&e.user.length>0?s=e.user[e.user.length-1]:e.u&&e.u.length>0&&(s=e.u[e.u.length-1]);var i=s.indexOf(\":\");i>-1?n.basicauth={user:s.substr(0,i),pass:s.substr(i+1)}:n.basicAuth={user:s,pass:\"<PASSWORD>\"};(e.k||e.insecure)&&(n.insecure=!0);n.method||(n.method=\"GET\");return n}(c);return 0!=u.headers.length||\"GET\"!=u.method||u.data.ascii||u.data.files||u.basicauth||u.insecure?function(e){for(var i={},c=0;c<e.headers.length;c++){var u=e.headers[c].indexOf(\":\");if(-1!=u){var d=e.headers[c].substr(0,u).trim(),f=e.headers[c].substr(u+1).trim();i[(g=d,g.replace(/\\w*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))]=f}}var g;delete i[\"Accept-Encoding\"];var p=\"\";p+='uri = URI.parse(\"'+l(e.url)+'\")\\n',r[e.method]?p+=\"request = Net::HTTP::\"+r[e.method]+\".new(uri)\\n\":p+='request = Net::HTTPGenericRequest.new(\"'+l(e.method)+'\", false, false, uri)\\n';e.basicauth&&(p+='request.basic_auth(\"'+l(e.basicauth.user)+'\", \"'+l(e.basicauth.pass)+'\")\\n');i[\"Content-Type\"]&&(p+='request.content_type = \"'+l(i[\"Content-Type\"])+'\"\\n',delete i[\"Content-Type\"]);for(var d in i)p+='request[\"'+l(d)+'\"] = \"'+l(i[d])+'\"\\n';if(e.data.ascii)if(function(e){try{return JSON.parse(e),!0}catch(e){return!1}}(e.data.ascii)){var b=JSON.parse(e.data.ascii);n+=\"require 'json'\\n\",p+=\"request.body = JSON.dump(\"+function e(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",r=s(n);if(null==n)return\"nil\";if(\"boolean\"==r)return n.toString();if(\"number\"==r)return n.toString();if(\"string\"==r)return'\"'+n.toString()+'\"';if(Array.isArray(n)){var a=\"[\\n\";return n.forEach(function(n){a+=t+\"  \",a+=e(n,t+\"  \"),a+=\",\\n\"}),a=a.slice(0,-2),a+=\"\\n\"+t+\"]\"}if(\"object\"==r){var i=\"{\\n\";for(var o in n)i+=t+\"  \",i+=e(o),i+=\" => \",i+=e(n[o],t+\"  \"),i+=\",\\n\";return i=i.slice(0,-2),i+=\"\\n\"+t+\"}\"}throw\"Invalid JSON object\"}(b)+\")\\n\"}else if(o.test(e.data.ascii)){var h=a.a.parse(e.data.ascii);for(var d in p+=\"request.set_form_data(\\n\",h){var m=h[d];p+='  \"'.concat(l(d),'\" => \"').concat(l(m),'\",\\n')}p+=\")\\n\"}else p+='request.body = \"'+l(e.data.ascii)+'\"\\n';if(e.data.files&&e.data.files.length>0){e.data.ascii||(p+='request.body = \"\"\\n');for(c=0;c<e.data.files.length;c++)p+='request.body << File.read(\"'+l(e.data.files[c])+'\").delete(\"\\\\r\\\\n\")\\n'}p+=\"\\n\",p+=\"req_options = {\\n\",p+='  use_ssl: uri.scheme == \"https\",\\n',e.insecure&&(n+=\"require 'openssl'\\n\",p+=\"  verify_mode: OpenSSL::SSL::VERIFY_NONE,\\n\");return p+=\"}\\n\",p+=\"\\n\",p+=\"response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\\n\",p+=\"  http.request(request)\\n\",n+\"\\n\"+(p+=\"end\\n\")+t}(u):function(e){var r=\"\";return r+='uri = URI.parse(\"'+l(e.url)+'\")\\n',n+\"\\n\"+(r+=\"response = Net::HTTP.get_response(uri)\\n\")+t}(u)}function l(e){return e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')}}t.d(n,\"default\",function(){return o})},function(e,n,t){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},function(e,n,t){\"use strict\";var r=new RegExp(\"%[a-f0-9]{2}\",\"gi\"),a=new RegExp(\"(%[a-f0-9]{2})+\",\"gi\");function s(e,n){try{return decodeURIComponent(e.join(\"\"))}catch(e){}if(1===e.length)return e;n=n||1;var t=e.slice(0,n),r=e.slice(n);return Array.prototype.concat.call([],s(t),s(r))}function i(e){try{return decodeURIComponent(e)}catch(a){for(var n=e.match(r),t=1;t<n.length;t++)n=(e=s(n,t).join(\"\")).match(r);return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(n){return function(e){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},t=a.exec(e);t;){try{n[t[0]]=decodeURIComponent(t[0])}catch(e){var r=i(t[0]);r!==t[0]&&(n[t[0]]=r)}t=a.exec(e)}n[\"%C2\"]=\"�\";for(var s=Object.keys(n),o=0;o<s.length;o++){var c=s[o];e=e.replace(new RegExp(c,\"g\"),n[c])}return e}(e)}}},function(e,n,t){\"use strict\";e.exports=(e,n)=>{if(\"string\"!=typeof e||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[e];const t=e.indexOf(n);return-1===t?[e]:[e.slice(0,t),e.slice(t+n.length)]}},function(e,n,t){var r,a,s;a=function(e){var n,t=[],r=Object.keys,a={},s={},i=/^(no-?highlight|plain|text)$/i,o=/\\blang(?:uage)?-([\\w-]+)\\b/i,c=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,u=\"</span>\",l={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0};function d(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function f(e){return e.nodeName.toLowerCase()}function g(e,n){var t=e&&e.exec(n);return t&&0===t.index}function p(e){return i.test(e)}function b(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function h(e){var n=[];return function e(t,r){for(var a=t.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(n.push({event:\"start\",offset:r,node:a}),r=e(a,r),f(a).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:r,node:a}));return r}(e,0),n}function m(e){if(n&&!e.langApiRestored){for(var t in e.langApiRestored=!0,n)e[t]&&(e[n[t]]=e[t]);(e.contains||[]).concat(e.variants||[]).forEach(m)}}function v(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.case_insensitive?\"i\":\"\")+(r?\"g\":\"\"))}!function a(s,i){if(!s.compiled){if(s.compiled=!0,s.keywords=s.keywords||s.beginKeywords,s.keywords){var o={},c=function(n,t){e.case_insensitive&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");o[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof s.keywords?c(\"keyword\",s.keywords):r(s.keywords).forEach(function(e){c(e,s.keywords[e])}),s.keywords=o}s.lexemesRe=t(s.lexemes||/\\w+/,!0),i&&(s.beginKeywords&&(s.begin=\"\\\\b(\"+s.beginKeywords.split(\" \").join(\"|\")+\")\\\\b\"),s.begin||(s.begin=/\\B|\\b/),s.beginRe=t(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\\B|\\b/),s.end&&(s.endRe=t(s.end)),s.terminator_end=n(s.end)||\"\",s.endsWithParent&&i.terminator_end&&(s.terminator_end+=(s.end?\"|\":\"\")+i.terminator_end)),s.illegal&&(s.illegalRe=t(s.illegal)),null==s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=Array.prototype.concat.apply([],s.contains.map(function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(n){return b(e,{variants:null},n)})),e.cached_variants||e.endsWithParent&&[b(e)]||[e]}(\"self\"===e?s:e)})),s.contains.forEach(function(e){a(e,s)}),s.starts&&a(s.starts,i);var u=s.contains.map(function(e){return e.beginKeywords?\"\\\\.?(?:\"+e.begin+\")\\\\.?\":e.begin}).concat([s.terminator_end,s.illegal]).map(n).filter(Boolean);s.terminators=u.length?t(function(e,t){for(var r=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./,a=0,s=\"\",i=0;i<e.length;i++){var o=a,c=n(e[i]);for(i>0&&(s+=t);c.length>0;){var u=r.exec(c);if(null==u){s+=c;break}s+=c.substring(0,u.index),c=c.substring(u.index+u[0].length),\"\\\\\"==u[0][0]&&u[1]?s+=\"\\\\\"+String(Number(u[1])+o):(s+=u[0],\"(\"==u[0]&&a++)}}return s}(u,\"|\"),!0):{exec:function(){return null}}}}(e)}function E(e,n,t,r){function s(e){return new RegExp(e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")}function i(e,n){var t=b.case_insensitive?n[0].toLowerCase():n[0];return e.keywords.hasOwnProperty(t)&&e.keywords[t]}function o(e,n,t,r){var a='<span class=\"'+(r?\"\":l.classPrefix);return e?(a+=e+'\">')+n+(t?\"\":u):n}function c(){w+=null!=m.subLanguage?function(){var e=\"string\"==typeof m.subLanguage;if(e&&!a[m.subLanguage])return d(N);var n=e?E(m.subLanguage,N,!0,_[m.subLanguage]):y(N,m.subLanguage.length?m.subLanguage:void 0);return m.relevance>0&&(x+=n.relevance),e&&(_[m.subLanguage]=n.top),o(n.language,n.value,!1,!0)}():function(){var e,n,t,r;if(!m.keywords)return d(N);for(r=\"\",n=0,m.lexemesRe.lastIndex=0,t=m.lexemesRe.exec(N);t;)r+=d(N.substring(n,t.index)),(e=i(m,t))?(x+=e[1],r+=o(e[0],d(t[0]))):r+=d(t[0]),n=m.lexemesRe.lastIndex,t=m.lexemesRe.exec(N);return r+d(N.substr(n))}(),N=\"\"}function f(e){w+=e.className?o(e.className,\"\",!0):\"\",m=Object.create(e,{parent:{value:m}})}function p(e,n){if(N+=e,null==n)return c(),0;var r=function(e,n){var t,r;for(t=0,r=n.contains.length;t<r;t++)if(g(n.contains[t].beginRe,e))return n.contains[t].endSameAsBegin&&(n.contains[t].endRe=s(n.contains[t].beginRe.exec(e)[0])),n.contains[t]}(n,m);if(r)return r.skip?N+=n:(r.excludeBegin&&(N+=n),c(),r.returnBegin||r.excludeBegin||(N=n)),f(r),r.returnBegin?0:n.length;var a=function e(n,t){if(g(n.endRe,t)){for(;n.endsParent&&n.parent;)n=n.parent;return n}if(n.endsWithParent)return e(n.parent,t)}(m,n);if(a){var i=m;i.skip?N+=n:(i.returnEnd||i.excludeEnd||(N+=n),c(),i.excludeEnd&&(N=n));do{m.className&&(w+=u),m.skip||m.subLanguage||(x+=m.relevance),m=m.parent}while(m!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),f(a.starts)),i.returnEnd?0:n.length}if(function(e,n){return!t&&g(n.illegalRe,e)}(n,m))throw new Error('Illegal lexeme \"'+n+'\" for mode \"'+(m.className||\"<unnamed>\")+'\"');return N+=n,n.length||1}var b=R(e);if(!b)throw new Error('Unknown language: \"'+e+'\"');v(b);var h,m=r||b,_={},w=\"\";for(h=m;h!==b;h=h.parent)h.className&&(w=o(h.className,\"\",!0)+w);var N=\"\",x=0;try{for(var O,S,A=0;m.terminators.lastIndex=A,O=m.terminators.exec(n);)S=p(n.substring(A,O.index),O[0]),A=O.index+S;for(p(n.substr(A)),h=m;h.parent;h=h.parent)h.className&&(w+=u);return{relevance:x,value:w,language:e,top:m}}catch(e){if(e.message&&-1!==e.message.indexOf(\"Illegal\"))return{relevance:0,value:d(n)};throw e}}function y(e,n){n=n||l.languages||r(a);var t={relevance:0,value:d(e)},s=t;return n.filter(R).filter(x).forEach(function(n){var r=E(n,e,!1);r.language=n,r.relevance>s.relevance&&(s=r),r.relevance>t.relevance&&(s=t,t=r)}),s.language&&(t.second_best=s),t}function _(e){return l.tabReplace||l.useBR?e.replace(c,function(e,n){return l.useBR&&\"\\n\"===e?\"<br>\":l.tabReplace?n.replace(/\\t/g,l.tabReplace):\"\"}):e}function w(e){var n,r,a,i,c,u=function(e){var n,t,r,a,s=e.className+\" \";if(s+=e.parentNode?e.parentNode.className:\"\",t=o.exec(s))return R(t[1])?t[1]:\"no-highlight\";for(n=0,r=(s=s.split(/\\s+/)).length;n<r;n++)if(p(a=s[n])||R(a))return a}(e);p(u)||(l.useBR?(n=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\")).innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\"):n=e,c=n.textContent,a=u?E(u,c,!0):y(c),(r=h(n)).length&&((i=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\")).innerHTML=a.value,a.value=function(e,n,r){var a=0,s=\"\",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:\"start\"===n[0].event?e:n:e.length?e:n}function c(e){s+=\"<\"+f(e)+t.map.call(e.attributes,function(e){return\" \"+e.nodeName+'=\"'+d(e.value).replace('\"',\"&quot;\")+'\"'}).join(\"\")+\">\"}function u(e){s+=\"</\"+f(e)+\">\"}function l(e){(\"start\"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=o();if(s+=d(r.substring(a,g[0].offset)),a=g[0].offset,g===e){i.reverse().forEach(u);do{l(g.splice(0,1)[0]),g=o()}while(g===e&&g.length&&g[0].offset===a);i.reverse().forEach(c)}else\"start\"===g[0].event?i.push(g[0].node):i.pop(),l(g.splice(0,1)[0])}return s+d(r.substr(a))}(r,h(i),c)),a.value=_(a.value),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}(e.className,u,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function N(){if(!N.called){N.called=!0;var e=document.querySelectorAll(\"pre code\");t.forEach.call(e,w)}}function R(e){return e=(e||\"\").toLowerCase(),a[e]||a[s[e]]}function x(e){var n=R(e);return n&&!n.disableAutodetect}return e.highlight=E,e.highlightAuto=y,e.fixMarkup=_,e.highlightBlock=w,e.configure=function(e){l=b(l,e)},e.initHighlighting=N,e.initHighlightingOnLoad=function(){addEventListener(\"DOMContentLoaded\",N,!1),addEventListener(\"load\",N,!1)},e.registerLanguage=function(n,t){var r=a[n]=t(e);m(r),r.aliases&&r.aliases.forEach(function(e){s[e]=n})},e.listLanguages=function(){return r(a)},e.getLanguage=R,e.autoDetection=x,e.inherit=b,e.IDENT_RE=\"[a-zA-Z]\\\\w*\",e.UNDERSCORE_IDENT_RE=\"[a-zA-Z_]\\\\w*\",e.NUMBER_RE=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.C_NUMBER_RE=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BINARY_NUMBER_RE=\"\\\\b(0b[01]+)\",e.RE_STARTERS_RE=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BACKSLASH_ESCAPE={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},e.APOS_STRING_MODE={className:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},e.COMMENT=function(n,t,r){var a=e.inherit({className:\"comment\",begin:n,end:t,contains:[]},r||{});return a.contains.push(e.PHRASAL_WORDS_MODE),a.contains.push({className:\"doctag\",begin:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",relevance:0}),a},e.C_LINE_COMMENT_MODE=e.COMMENT(\"//\",\"$\"),e.C_BLOCK_COMMENT_MODE=e.COMMENT(\"/\\\\*\",\"\\\\*/\"),e.HASH_COMMENT_MODE=e.COMMENT(\"#\",\"$\"),e.NUMBER_MODE={className:\"number\",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:\"number\",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:\"number\",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:\"number\",begin:e.NUMBER_RE+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},e.REGEXP_MODE={className:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\\[/,end:/\\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:\"title\",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:\"title\",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:\"\\\\.\\\\s*\"+e.UNDERSCORE_IDENT_RE,relevance:0},e},s=\"object\"==typeof window&&window||\"object\"==typeof self&&self,n.nodeType?s&&(s.hljs=a({}),void 0===(r=function(){return s.hljs}.apply(n,[]))||(e.exports=r)):a(n)},function(e,n){e.exports=function(e){var n=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",t={keyword:\"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",literal:\"true false nil\"},r={className:\"doctag\",begin:\"@[A-Za-z]+\"},a={begin:\"#<\",end:\">\"},s=[e.COMMENT(\"#\",\"$\",{contains:[r]}),e.COMMENT(\"^\\\\=begin\",\"^\\\\=end\",{contains:[r],relevance:10}),e.COMMENT(\"^__END__\",\"\\\\n$\")],i={className:\"subst\",begin:\"#\\\\{\",end:\"}\",keywords:t},o={className:\"string\",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/`/,end:/`/},{begin:\"%[qQwWx]?\\\\(\",end:\"\\\\)\"},{begin:\"%[qQwWx]?\\\\[\",end:\"\\\\]\"},{begin:\"%[qQwWx]?{\",end:\"}\"},{begin:\"%[qQwWx]?<\",end:\">\"},{begin:\"%[qQwWx]?/\",end:\"/\"},{begin:\"%[qQwWx]?%\",end:\"%\"},{begin:\"%[qQwWx]?-\",end:\"-\"},{begin:\"%[qQwWx]?\\\\|\",end:\"\\\\|\"},{begin:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/},{begin:/<<(-?)\\w+$/,end:/^\\s*\\w+$/}]},c={className:\"params\",begin:\"\\\\(\",end:\"\\\\)\",endsParent:!0,keywords:t},u=[o,a,{className:\"class\",beginKeywords:\"class module\",end:\"$|;\",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{begin:\"<\\\\s*\",contains:[{begin:\"(\"+e.IDENT_RE+\"::)?\"+e.IDENT_RE}]}].concat(s)},{className:\"function\",beginKeywords:\"def\",end:\"$|;\",contains:[e.inherit(e.TITLE_MODE,{begin:n}),c].concat(s)},{begin:e.IDENT_RE+\"::\"},{className:\"symbol\",begin:e.UNDERSCORE_IDENT_RE+\"(\\\\!|\\\\?)?:\",relevance:0},{className:\"symbol\",begin:\":(?!\\\\s)\",contains:[o,{begin:n}],relevance:0},{className:\"number\",begin:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",relevance:0},{begin:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{className:\"params\",begin:/\\|/,end:/\\|/,keywords:t},{begin:\"(\"+e.RE_STARTERS_RE+\"|unless)\\\\s*\",keywords:\"unless\",contains:[a,{className:\"regexp\",contains:[e.BACKSLASH_ESCAPE,i],illegal:/\\n/,variants:[{begin:\"/\",end:\"/[a-z]*\"},{begin:\"%r{\",end:\"}[a-z]*\"},{begin:\"%r\\\\(\",end:\"\\\\)[a-z]*\"},{begin:\"%r!\",end:\"![a-z]*\"},{begin:\"%r\\\\[\",end:\"\\\\][a-z]*\"}]}].concat(s),relevance:0}].concat(s);i.contains=u,c.contains=u;var l=[{begin:/^\\s*=>/,starts:{end:\"$\",contains:u}},{className:\"meta\",begin:\"^([>?]>|[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>|(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>)\",starts:{end:\"$\",contains:u}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],keywords:t,illegal:/\\/\\*/,contains:s.concat(l).concat(u)}}},,,,function(e,n,t){\"use strict\";t.r(n);var r=t(2),a=t(6),s=t.n(a),i=t(7),o=t.n(i);s.a.registerLanguage(\"ruby\",o.a);var c=s.a;function u(){var e='<span style=\"color: #777;\">Ruby code will appear here</span>';function n(){var n=document.getElementById(\"input\").value;document.getElementById(\"output\").innerHTML=function(n){if(!n)return e;try{var t=Object(r.default)(n);if(t)return c.highlight(\"ruby\",t).value}catch(e){return console.log(e),'<span class=\"clr-red\">'+e+\"</span>\"}}(n)}[\"focus\",\"blur\",\"keyup\"].forEach(function(e){document.getElementById(\"input\").addEventListener(e,n)}),n(),document.getElementById(\"output\").addEventListener(\"click\",function(){if(document.selection){var e=document.body.createTextRange();e.moveToElementText(this),e.select()}else if(window.getSelection){var n=document.createRange();n.selectNode(this),window.getSelection().addRange(n)}}),window.useExample=function(e){var t=document.getElementById(e).innerHTML.trim();document.getElementById(\"input\").value=t,n()}}\"loading\"!=document.readyState?u():document.addEventListener(\"DOMContentLoaded\",u)}]);"
  },
  {
    "path": "src/curl-to-ruby.js",
    "content": "require(\"expose-loader?curlToRuby!./curlToRuby\");\n"
  },
  {
    "path": "src/curlToRuby.js",
    "content": "/*\n\tcurl-to-ruby\n\n\tA simple utility to convert curl commands into ruby code.\n\n\tBased on curl-to-go by Matt Holt\n\thttps://github.com/mholt/curl-to-go\n*/\n\nimport queryString from 'query-string';\nimport jsonToRuby from './jsonToRuby';\nimport parseCommand from \"./parseCommand\";\n\nexport default function curlToRuby(curl) {\n\tvar prelude = \"require 'net/http'\\nrequire 'uri'\\n\";\n\tvar coda = \"\\n\" +\n\t\t\"# response.code\\n\" +\n\t\t\"# response.body\\n\";\n\n\t// List of curl flags that are boolean typed; this helps with parsing\n\t// a command like `curl -abc value` to know whether 'value' belongs to '-c'\n\t// or is just a positional argument instead.\n\tvar boolOptions = ['#', 'progress-bar', '-', 'next', '0', 'http1.0', 'http1.1', 'http2',\n\t\t'no-npn', 'no-alpn', '1', 'tlsv1', '2', 'sslv2', '3', 'sslv3', '4', 'ipv4', '6', 'ipv6',\n\t\t'a', 'append', 'anyauth', 'B', 'use-ascii', 'basic', 'compressed', 'create-dirs',\n\t\t'crlf', 'digest', 'disable-eprt', 'disable-epsv', 'environment', 'cert-status',\n\t\t'false-start', 'f', 'fail', 'ftp-create-dirs', 'ftp-pasv', 'ftp-skip-pasv-ip',\n\t\t'ftp-pret', 'ftp-ssl-ccc', 'ftp-ssl-control', 'g', 'globoff', 'G', 'get',\n\t\t'ignore-content-length', 'i', 'include', 'I', 'head', 'j', 'junk-session-cookies',\n\t\t'J', 'remote-header-name', 'k', 'insecure', 'l', 'list-only', 'L', 'location',\n\t\t'location-trusted', 'metalink', 'n', 'netrc', 'N', 'no-buffer', 'netrc-file',\n\t\t'netrc-optional', 'negotiate', 'no-keepalive', 'no-sessionid', 'ntlm', 'O',\n\t\t'remote-name', 'oauth2-bearer', 'p', 'proxy-tunnel', 'path-as-is', 'post301', 'post302',\n\t\t'post303', 'proxy-anyauth', 'proxy-basic', 'proxy-digest', 'proxy-negotiate',\n\t\t'proxy-ntlm', 'q', 'raw', 'remote-name-all', 's', 'silent', 'sasl-ir', 'S', 'show-error',\n\t\t'ssl', 'ssl-reqd', 'ssl-allow-beast', 'ssl-no-revoke', 'socks5-gssapi-nec', 'tcp-nodelay',\n\t\t'tlsv1.0', 'tlsv1.1', 'tlsv1.2', 'tr-encoding', 'trace-time', 'v', 'verbose', 'xattr',\n\t\t'h', 'help', 'M', 'manual', 'V', 'version'];\n\n\tvar httpMethods = {\n\t 'COPY':      'Copy',\n\t 'DELETE':    'Delete',\n\t 'GET':       'Get',\n\t 'HEAD':      'Head',\n\t 'LOCK':      'Lock',\n\t 'MKCOL':     'Mkcol',\n\t 'MoVE':      'Move',\n\t 'OPTIONS':   'Options',\n\t 'PATCH':     'Patch',\n\t 'POST':      'Post',\n\t 'PROPFIND':  'Propfind',\n\t 'PROPPATCH': 'Proppatch',\n\t 'PUT':       'Put',\n\t 'TRACE':     'Trace',\n\t 'UNLOCK':    'Unlock'\n\t};\n\n\tlet formUrlEncodedRegex = /^([^\\s]+=[^\\s]+)(&[^\\s]+=[^\\s]+)*$/;\n\n\tif (!curl.trim())\n\t\treturn;\n\tvar cmd = parseCommand(curl, { boolFlags: boolOptions });\n\n\tif (cmd._[0] != \"curl\")\n\t\tthrow \"Not a curl command\";\n\n\tvar req = extractRelevantPieces(cmd);\n\n\tif (isSimple(req)) {\n\t\treturn renderSimple(req);\n\t} else {\n\t \treturn renderComplex(req);\n\t}\n\n\n\t// renderSimple renders a simple HTTP request using net/http convenience methods\n\tfunction renderSimple(req) {\n\t\tvar ruby = \"\";\n\n\t\truby += 'uri = URI.parse(\"' + rubyEsc(req.url) + '\")\\n';\n\t\truby += 'response = Net::HTTP.get_response(uri)\\n';\n\n\t\treturn prelude + \"\\n\" + ruby + coda;\n\t}\n\n\t// renderComplex renders Go code that requires making a http.Request.\n\tfunction renderComplex(req) {\n\t\t// First, figure out the headers\n\t\tvar headers = {};\n\t\tfor (var i = 0; i < req.headers.length; i++) {\n\t\t\tvar split = req.headers[i].indexOf(\":\");\n\t\t\tif (split == -1) continue;\n\t\t\tvar name = req.headers[i].substr(0, split).trim();\n\t\t\tvar value = req.headers[i].substr(split+1).trim();\n\t\t\theaders[toTitleCase(name)] = value;\n\t\t}\n\n\t\tdelete headers[\"Accept-Encoding\"];\n\n\t\tvar ruby = \"\";\n\n\t\truby += 'uri = URI.parse(\"' + rubyEsc(req.url) + '\")\\n';\n\n\t\tif (httpMethods[req.method]) {\n\t\t\truby += 'request = Net::HTTP::'+httpMethods[req.method]+'.new(uri)\\n';\n\t\t} else {\n\t\t\truby += 'request = Net::HTTPGenericRequest.new(\"' + rubyEsc(req.method) + '\", false, false, uri)\\n';\n\t\t}\n\n\t\t// set basic auth\n\t\tif (req.basicauth) {\n\t\t\truby += 'request.basic_auth(\"'+rubyEsc(req.basicauth.user)+'\", \"'+rubyEsc(req.basicauth.pass)+'\")\\n';\n\t\t}\n\n\t\tif (headers[\"Content-Type\"]) {\n\t\t\truby += 'request.content_type = \"' + rubyEsc(headers[\"Content-Type\"]) + '\"\\n';\n\t\t\tdelete(headers[\"Content-Type\"]);\n\t\t}\n\n\t\t// set headers\n\t\tfor (var name in headers) {\n\t\t\truby += 'request[\"'+rubyEsc(name)+'\"] = \"'+rubyEsc(headers[name])+'\"\\n';\n\t\t}\n\n\t\tfunction isJson(json) {\n\t\t\ttry {\n\t\t\t\tJSON.parse(json);\n\t\t\t\treturn true;\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (req.data.ascii) {\n\t\t\tif (isJson(req.data.ascii)) {\n\t\t\t\tlet json = JSON.parse(req.data.ascii);\n\t\t\t\tprelude += \"require 'json'\\n\";\n\t\t\t\truby += \"request.body = JSON.dump(\" + jsonToRuby(json) + \")\\n\";\n\t\t\t} else if (formUrlEncodedRegex.test(req.data.ascii)) {\n\t\t\t\tlet formData = queryString.parse(req.data.ascii);\n\t\t\t\truby += \"request.set_form_data(\\n\";\n\t\t\t\tfor(var name in formData) {\n\t\t\t\t\tlet value = formData[name];\n\t\t\t\t\truby += `  \"${rubyEsc(name)}\" => \"${rubyEsc(value)}\",\\n`\n\t\t\t\t}\n\t\t\t\truby += \")\\n\";\n\t\t\t} else {\n\t\t\t\truby += 'request.body = \"' + rubyEsc(req.data.ascii) + '\"\\n';\n\t\t\t}\n\t\t}\n\n\t\tif (req.data.files && req.data.files.length > 0) {\n\t\t\tif (!req.data.ascii) {\n\t\t\t\truby += 'request.body = \"\"\\n';\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < req.data.files.length; i++) {\n\t\t\t\truby += 'request.body << File.read(\"'+rubyEsc(req.data.files[i])+'\").delete(\"\\\\r\\\\n\")\\n';\n\t\t\t}\n\t\t}\n\n\t\truby += '\\n'\n\t\truby += 'req_options = {\\n'\n\t\truby += '  use_ssl: uri.scheme == \"https\",\\n'\n\t\tif (req.insecure) {\n\t\tprelude += \"require 'openssl'\\n\"\n\t\truby += '  verify_mode: OpenSSL::SSL::VERIFY_NONE,\\n'\n\t\t}\n\t\truby += '}\\n'\n\n\t\truby += '\\n'\n\t\truby += 'response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\\n'\n\t\truby += '  http.request(request)\\n'\n\t\truby += 'end\\n'\n\n\t\treturn prelude + \"\\n\" + ruby + coda;\n\t}\n\n\t// extractRelevantPieces returns an object with relevant pieces\n\t// extracted from cmd, the parsed command. This accounts for\n\t// multiple flags that do the same thing and return structured\n\t// data that makes it easy to spit out Go code.\n\tfunction extractRelevantPieces(cmd) {\n\t\tvar relevant = {\n\t\t\turl: \"\",\n\t\t\tmethod: \"\",\n\t\t\theaders: [],\n\t\t\tdata: {}\n\t\t};\n\n\t\t// prefer --url over unnamed parameter, if it exists; keep first one only\n\t\tif (cmd.url && cmd.url.length > 0)\n\t\t\trelevant.url = cmd.url[0];\n\t\telse if (cmd._.length > 1)\n\t\t\trelevant.url = cmd._[1]; // position 1 because index 0 is the curl command itself\n\n\t\trelevant.url = fixUrl(relevant.url);\n\n\t\t// gather the headers together\n\t\tif (cmd.H)\n\t\t\trelevant.headers = relevant.headers.concat(cmd.H);\n\t\tif (cmd.header)\n\t\t\trelevant.headers = relevant.headers.concat(cmd.header);\n\n\t\t// set method to HEAD?\n\t\tif (cmd.I || cmd.head)\n\t\t\trelevant.method = \"HEAD\";\n\n\t\t// between -X and --request, prefer the long form I guess\n\t\tif (cmd.request && cmd.request.length > 0)\n\t\t\trelevant.method = cmd.request[cmd.request.length-1].toUpperCase();\n\t\telse if (cmd.X && cmd.X.length > 0)\n\t\t\trelevant.method = cmd.X[cmd.X.length-1].toUpperCase(); // if multiple, use last (according to curl docs)\n\n\t\t// join multiple request body data, if any\n\t\tvar dataAscii = [];\n\t\tvar dataFiles = [];\n\t\tvar loadData = function(d) {\n\t\t\tif (!relevant.method)\n\t\t\t\trelevant.method = \"POST\";\n\t\t\tfor (var i = 0; i < d.length; i++)\n\t\t\t{\n\t\t\t\tif (d[i].length > 0 && d[i][0] == \"@\")\n\t\t\t\t\tdataFiles.push(d[i].substr(1));\n\t\t\t\telse\n\t\t\t\t\tdataAscii.push(d[i]);\n\t\t\t}\n\t\t};\n\t\tif (cmd.d)\n\t\t\tloadData(cmd.d);\n\t\tif (cmd.data)\n\t\t\tloadData(cmd.data);\n\t\tif (cmd['data-binary'])\n\t\t\tloadData(cmd['data-binary']);\n\t\tif (dataAscii.length > 0)\n\t\t\trelevant.data.ascii = dataAscii.join(\"&\");\n\t\tif (dataFiles.length > 0)\n\t\t\trelevant.data.files = dataFiles;\n\n\t\t// between -u and --user, choose the long form...\n\t\tvar basicAuthString = \"\";\n\t\tif (cmd.user && cmd.user.length > 0)\n\t\t\tbasicAuthString = cmd.user[cmd.user.length-1];\n\t\telse if (cmd.u && cmd.u.length > 0)\n\t\t\tbasicAuthString = cmd.u[cmd.u.length-1];\n\t\tvar basicAuthSplit = basicAuthString.indexOf(\":\");\n\t\tif (basicAuthSplit > -1) {\n\t\t\trelevant.basicauth = {\n\t\t\t\tuser: basicAuthString.substr(0, basicAuthSplit),\n\t\t\t\tpass: basicAuthString.substr(basicAuthSplit+1)\n\t\t\t};\n\t\t} else {\n\t\t\trelevant.basicAuth = { user: basicAuthString, pass: \"<PASSWORD>\" };\n\t\t}\n\n\t\tif (cmd.k || cmd.insecure) {\n\t\t\trelevant.insecure = true;\n\t\t}\n\n\t\t// default to GET if nothing else specified\n\t\tif (!relevant.method)\n\t\t\trelevant.method = \"GET\";\n\n\t\treturn relevant;\n\t}\n\n\tfunction fixUrl(url) {\n\t\tif(url && !(new RegExp(\"^https?://\", \"i\")).test(url)) {\n\t\t\treturn \"http://\" +  url;\n\t\t} else {\n\t\t\treturn url;\n\t\t}\n\t}\n\n\tfunction toTitleCase(str) {\n\t\treturn str.replace(/\\w*/g, function(txt) {\n\t\t\treturn txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n\t\t});\n\t}\n\n\tfunction rubyEsc(s) {\n\t\treturn s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n\t}\n\n\tfunction isSimple() {\n\t\treturn req.headers.length == 0 && \n\t\t\treq.method == \"GET\" && \n\t\t\t!req.data.ascii && \n\t\t\t!req.data.files && \n\t\t\t!req.basicauth &&\n\t\t\t!req.insecure;\n\t}\n}\n"
  },
  {
    "path": "src/default.js",
    "content": "import curlToRuby from \"./curlToRuby\";\nimport hljs from \"./highlight.pack.js\";\n\nfunction init() {\n  const emptyOutputMsg = \"Ruby code will appear here\";\n  const formattedEmptyOutputMsg = '<span style=\"color: #777;\">'+emptyOutputMsg+'</span>';\n\n  function getOutputHTML(input) {\n    if (!input) {\n      return formattedEmptyOutputMsg;\n    }\n\n    try {\n      const output = curlToRuby(input);\n      if (output) {\n\tconst coloredOutput = hljs.highlight(\"ruby\", output);\n\treturn coloredOutput.value;\n      }\n    } catch (e) {\n      console.log(e);\n      return '<span class=\"clr-red\">'+e+'</span>';\n    }\n  }\n\n  function updateOutput() {\n    const input = document.getElementById('input').value;\n    const output = document.getElementById('output');\n\n    output.innerHTML = getOutputHTML(input);\n  }\n\n  // Update placeholder text\n  ['focus', 'blur', 'keyup'].forEach((ev) => {\n    document.getElementById('input').addEventListener(ev, updateOutput);\n  });\n  updateOutput();\n\n  // Highlights the output for the user\n  document.getElementById('output').addEventListener('click', function() {\n    if (document.selection) {\n      const range = document.body.createTextRange();\n      range.moveToElementText(this);\n      range.select();\n    } else if (window.getSelection) {\n      const range = document.createRange();\n      range.selectNode(this);\n      window.getSelection().addRange(range);\n    }\n  });\n\n  window.useExample = function(name) {\n    const example = document.getElementById(name).innerHTML.trim();\n    const input = document.getElementById('input');\n    input.value = example;\n    updateOutput();\n  }\n}\n\nif (document.readyState != 'loading'){\n  init();\n} else {\n  document.addEventListener('DOMContentLoaded', init);\n}\n"
  },
  {
    "path": "src/highlight.pack.js",
    "content": "import hljs from \"highlight.js/lib/highlight\";\nimport ruby from \"highlight.js/lib/languages/ruby\";\n\nhljs.registerLanguage('ruby', ruby);\n\nexport default hljs;\n"
  },
  {
    "path": "src/jsonToRuby.js",
    "content": "export default function jsonToRuby(json, indent = \"\") {\n\tlet type = typeof(json);\n\tif (json == null) {\n\t\treturn \"nil\";\n\t} else if (type == \"boolean\") {\n\t\treturn json.toString();\n\t} else if (type == \"number\") {\n\t\treturn json.toString();\n\t} else if (type == \"string\") {\n\t\treturn '\"' + json.toString() + '\"';\n\t} else if (Array.isArray(json)) {\n\t\tlet ret = \"[\\n\";\n\t\tjson.forEach((element) => {\n\t\t\tret += indent + \"  \";\n\t\t\tret += jsonToRuby(element, indent + \"  \");\n\t\t\tret += \",\\n\";\n\t\t});\n\t\tret = ret.slice(0, -2);\n\t\tret += \"\\n\" + indent + \"]\";\n\t\treturn ret;\n\t} else if (type == \"object\") {\n\t\tlet ret = \"{\\n\";\n\t\tfor (var key in json) {\n\t\t\tret += indent + \"  \";\n\t\t\tret += jsonToRuby(key);\n\t\t\tret += \" => \";\n\t\t\tret += jsonToRuby(json[key], indent + \"  \");\n\t\t\tret += \",\\n\";\n\t\t}\n\t\tret = ret.slice(0, -2);\n\t\tret += \"\\n\" + indent + \"}\";\n\t\treturn ret;\n\t} else {\n\t\tthrow \"Invalid JSON object\";\n\t}\n}\n"
  },
  {
    "path": "src/parseCommand.js",
    "content": "import {parse} from \"shell-quote\";\n\nexport default function parseCommand(input, options) {\n  if (typeof options === 'undefined') {\n    options = {};\n  }\n\n  // trim \\ at and of line\n  input = input.replace(/\\\\\\n/g, '');\n  input = input.trim();\n\n  let argv = parse(input);\n\n  let argObj = {_: []};\n\n  function setFlag(name, value) {\n    argObj[name] || (argObj[name] = []);\n    argObj[name].push(value);\n  }\n\n  while(argv.length) {\n    let flag = argv.shift();\n\n    /* Assume globs are typos/missing qutotes/shell-quote sillyness w */\n    if (flag.op == 'glob') {\n      flag = flag.pattern;\n    }\n\n    if (flag[0] == '-'){\n      flag = flag.substring(1, flag.length);\n      if (flag[0] == '-') { /* long argument */\n\tflag = flag.substring(1, flag.length);\n\tif (boolFlag(flag)) {\n\t  argObj[flag] = true;\n\t} else {\n\t  if (flag.indexOf('=') > 0) {\n\t    let flagName = flag.substring(0, flag.indexOf('='));\n\t    setFlag(flagName, flag.substring(flag.indexOf('=')+1, flag.length));\n\t  } else {\n\t    setFlag(flag, argv.shift());\n\t  }\n\t}\n      } else {\n\tif (boolFlag(flag)) {\n\t  argObj[flag] = true;\n\t} else if(flag.length > 1) {\n\t  setFlag(flag[0], flag.substring(1, flag.length));\n\t} else {\n\t  setFlag(flag[0], argv.shift());\n\t}\n      }\n      if (boolFlag(flag)) {\n\targObj[flag] = true;\n      }\n    } else {\n      setFlag('_', flag);\n    }\n  }\n\n  return argObj;\n\n  // boolFlag returns whether a flag is known to be boolean type\n  function boolFlag(flag) {\n    if (Array.isArray(options.boolFlags)) {\n      for (var i = 0; i < options.boolFlags.length; i++) {\n\tif (options.boolFlags[i] == flag)\n\t  return true;\n      }\n    }\n    return false;\n  }\n}\n"
  },
  {
    "path": "test.rb",
    "content": "require 'minitest'\nrequire 'minitest/autorun'\nrequire 'execjs'\nrequire 'webrick'\n\nclass TestCurlToGo < Minitest::Test\n  JS_CONTEXT = ExecJS.compile(File.read(\"resources/js/curl-to-ruby.js\"))\n\n  def test_simple_get\n    assert_curl_eq \"/\"\n    assert_curl_eq \"/foo.txt\"\n  end\n\n  def test_post\n    assert_curl_eq \"/\", '-X POST -d \"foo\"'\n    assert_curl_eq \"/\", '-X POST -d \"foobar\"'\n  end\n\n  def test_headers\n    assert_curl_eq \"/\", '-XPOST -H MyCrazyHeader:foo -d \"foo\"'\n  end\n\n  def test_basic_auth\n    assert_curl_eq \"/\", \"-u banana:coconuts\"\n  end\n\n  def test_complex_post\n    assert_curl_eq \"/\", <<-CURL\n     -X POST \\\n     -u API_KEY: \\\n     -d 'shipment[to_address][id]=adr_HrBKVA85' \\\n     -d 'shipment[from_address][id]=adr_VtuTOj7o' \\\n     -d 'shipment[parcel][id]=prcl_WDv2VzHp' \\\n     -d 'shipment[is_return]=true' \\\n     -d 'shipment[customs_info][id]=cstinfo_bl5sE20Y'\n     CURL\n  end\n\n  def test_simple_data\n    assert_curl_eq \"/\", \"-d foo=bar\"\n  end\n\n  def test_data_file_reference\n    assert_curl_eq \"/\", \"-d @README.md\"\n  end\n\n  def test_query_string\n    assert_curl_eq \"/curl-to-ruby/?foo=bar\", \"-d @README.md\"\n  end\n\n  private\n\n  def assert_curl_eq(path, curl_args=\"\")\n    curl_req = normalize_request capture_http { |url|\n      system \"curl -s -o /dev/null #{url}#{path} #{curl_args}\"\n    }\n\n    ruby_req = normalize_request capture_http { |url|\n      ruby = curl_to_ruby(\"curl #{url}#{path} #{curl_args}\")\n      eval(ruby)\n    }\n\n    assert_equal curl_req.verb, ruby_req.verb\n    assert_equal curl_req.path, ruby_req.path\n    if curl_req.body.nil?\n      assert_nil ruby_req.body\n    else\n      assert_equal curl_req.body, ruby_req.body\n    end\n    assert_equal curl_req.headers, ruby_req.headers\n  end\n\n  Request = Struct.new(:verb, :path, :headers, :body)\n\n  def curl_to_ruby(cmd)\n    JS_CONTEXT.call(\"curlToRuby.default\", cmd)\n  end\n\n  def normalize_request(original)\n    headers = original.headers.dup\n    headers.delete(\"accept-encoding\")\n    headers.delete(\"user-agent\")\n    headers.delete(\"host\")\n    headers.delete(\"expect\")\n\n    if original.body\n      body = original.body\n      if headers['content-type'] == ['application/x-www-form-urlencoded']\n        # May encode slightly differently\n        begin\n          body = URI.decode_www_form(body).sort\n          headers.delete(\"content-length\")\n        rescue ArgumentError\n        end\n      end\n    end\n\n    Request.new(\n      original.verb,\n      original.path,\n      headers,\n      body\n    )\n  end\n\n  def capture_http\n    server = WEBrick::HTTPServer.new(\n      Port: 0,\n      Logger: WEBrick::Log.new(\"/dev/null\"),\n      AccessLog: []\n    )\n    port = server[:Port]\n    request = nil\n\n    thread = Thread.new do\n      server.mount_proc('/') do |req, res|\n        request = Request.new(\n          req.request_method,\n          req.path,\n          req.header,\n          req.body\n        )\n        res.body = \"hello, world\"\n        server.shutdown\n      end\n\n      server.start\n\n      request\n    end\n\n    url = \"http://127.0.0.1:#{port}\"\n    yield url, port\n\n    thread.join\n    thread.value\n  end\nend\n"
  },
  {
    "path": "webpack.config.js",
    "content": "\"use strict\";\n\nvar path = require('path');\nvar webpack = require('webpack');\n\nmodule.exports = {\n  entry: {\n    default: './src/default.js',\n    \"curl-to-ruby\": './src/curl-to-ruby.js'\n  },\n\n  output: {\n    path: path.join(__dirname, \"resources/js/\"),\n    filename: \"[name].js\"\n  },\n\n  module: {\n    rules: [\n      {\n        test: /\\.js$/,\n        exclude: /node_modules/,\n        use: {\n          loader: 'babel-loader',\n          options: {\n            presets: ['@babel/preset-env']\n          }\n        }\n      }\n    ]\n  }\n}\n"
  }
]