1?"":"relative"},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)}}},[Array.isArray(t.data)||t.isObject(t.data)?[a("bracket-left",{attrs:{visible:t.visible,data:t.data,"show-length":t.showLength,"not-last-key":t.notLastKey},on:{"update:visible":function(e){t.visible=e}}},[t.currentDeep>1&&!Array.isArray(t.parentData)?a("span",[t._v(t._s(t.currentKey)+":")]):t._e()]),t._l(t.data,function(e,r){return a("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],key:r,staticClass:"sw-tree-content"},[a("json-tree",{attrs:{"parent-data":t.data,data:e,deep:t.deep,"show-length":t.showLength,path:t.path+(Array.isArray(t.data)?"["+r+"]":"."+r),"allow-interaction":t.allowInteraction,"current-key":r,"display-format":t.displayFormat,"current-deep":t.currentDeep+1},on:{click:t.handleItemClick}})],1)}),a("bracket-right",{attrs:{visible:t.visible,data:t.data,"not-last-key":t.notLastKey},on:{"update:visible":function(e){t.visible=e}}})]:a("content-block",{attrs:{parentDataType:t.getDataType(t.parentData),dataType:t.getDataType(t.data),text:t.data+"",notLastKey:t.notLastKey,displayFormat:t.displayFormat,currentKey:t.currentKey}})],2)},n=[],s=(a("6b54"),a("a4bb")),i=a.n(s),o=a("a745"),c=a.n(o),l=(a("c5f6"),function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"sw-content-block"},["object"===t.parentDataType?a("div",{staticClass:"sw-content-key"},[t._v(t._s(t.currentKey)+":")]):t._e(),a("div",{class:"sw-content sw-datatype-"+("json"===t.displayFormat?t.dataType:t.text.substring(0,4))},[t._v(t._s(t.getText()))]),a("div",{staticStyle:{flex:"1","min-width":"15px"}}),a("div",{ref:"descrDiv",class:"sw-descr "+t.descrClass},[t._v("\n "+t._s(t.description)+" \n ")]),t.description?a("span",{staticClass:"sw-descr-expander",on:{click:function(e){return t.handleItemToggleDescr()}}},[t._v(" \n "+t._s("sw-descr-collapsed"===t.descrClass?"⤵":"⤴")+"\n ")]):t._e()])}),p=[],u=(a("28a5"),{props:{parentDataType:String,dataType:String,text:String,notLastKey:Boolean,currentKey:[Number,String],displayFormat:{type:String,default:"json"}},data:function(){return{description:this.getDescription(),descrClass:"sw-descr-collapsed",showDescrExpander:!0}},methods:{getText:function(){if("text"===this.displayFormat)return this.text.split("~|~")[0];var t=this.text;return"string"===this.dataType&&(t='"'.concat(t,'"')),this.notLastKey&&(t+=","),t},getDescription:function(){if("text"===this.displayFormat){var t=this.text.split("~|~");return t[1]?t[1]:""}return""},handleItemToggleDescr:function(){"sw-descr-collapsed"===this.descrClass?this.descrClass="sw-descr-expanded":this.descrClass="sw-descr-collapsed",this.$emit("toggleDescription")}}}),d=u,f=a("2877"),m=Object(f["a"])(d,l,p,!1,null,null,null),h=m.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[t._t("default"),a("span",{directives:[{name:"show",rawName:"v-show",value:t.dataVisiable,expression:"dataVisiable"}],staticClass:"sw-tree-bracket-left",on:{click:function(e){return e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(Array.isArray(t.data)?"[":"{")+"\n ")]),a("span",{directives:[{name:"show",rawName:"v-show",value:!t.dataVisiable,expression:"!dataVisiable"}],staticClass:"sw-tree-bracket-left",on:{click:function(e){return e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(t.doubleBracketsGenerator(t.data))+"\n ")])],2)},v=[],b={props:{visible:{required:!0,type:Boolean},data:{required:!0},notLastKey:Boolean},computed:{dataVisiable:{get:function(){return this.visible},set:function(t){this.$emit("update:visible",t)}}},methods:{toggleBrackets:function(){this.dataVisiable=!this.dataVisiable},bracketsFormatter:function(t){return this.notLastKey?"".concat(t,","):t}}},g={mixins:[b],props:{showLength:Boolean},methods:{doubleBracketsGenerator:function(t){var e=c()(t),a=e?"[...]":"{...}";if(this.showLength){var r=e?"".concat(t.length," items"):"".concat(i()(t).length," keys");a+=" // ".concat(r)}return this.bracketsFormatter(a)}}},w=g,_=Object(f["a"])(w,y,v,!1,null,null,null),x=_.exports,k=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{directives:[{name:"show",rawName:"v-show",value:t.dataVisiable,expression:"dataVisiable"}]},[a("span",{staticClass:"sw-tree-bracket-right",on:{click:function(e){return e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(t.bracketsFormatter(Array.isArray(t.data)?"]":"}"))+"\n ")])])},C=[],D={mixins:[b]},N=D,I=Object(f["a"])(N,k,C,!1,null,null,null),S=I.exports,A={name:"json-tree",components:{ContentBlock:h,BracketLeft:x,BracketRight:S},props:{data:{},deep:{type:Number,default:1/0},showLength:{type:Boolean,default:!1},path:{type:String,default:"root"},allowInteraction:{type:Boolean,default:!0},parentData:{},currentDeep:{type:Number,default:1},currentKey:[Number,String],displayFormat:{type:String,default:"json"}},data:function(){return{visible:this.currentDeep<=this.deep,treeContentBackground:"transparent",showDescr:!0}},computed:{lastKey:function(){if(c()(this.parentData))return this.parentData.length-1;if(this.isObject(this.parentData)){var t=i()(this.parentData);return t[t.length-1]}},notLastKey:function(){return this.currentKey!==this.lastKey}},methods:{handleClick:function(t){this.allowInteraction&&this.$emit("click",this.path,this.data)},handleItemClick:function(t,e){this.$emit("click",t,e)},isObject:function(t){return"object"===this.getDataType(t)},getDataType:function(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}},watch:{deep:function(t){this.visible=this.currentDeep<=t}}},T=A,L=(a("f1ac"),Object(f["a"])(T,r,n,!1,null,null,null));e["a"]=L.exports},"07a6":function(t,e,a){},"0ccf":function(t,e,a){},"11e9":function(t,e,a){var r=a("52a7"),n=a("4630"),s=a("6821"),i=a("6a99"),o=a("69a8"),c=a("c69a"),l=Object.getOwnPropertyDescriptor;e.f=a("9e1e")?l:function(t,e){if(t=s(t),e=i(e,!0),c)try{return l(t,e)}catch(a){}if(o(t,e))return n(!r.f.call(t,e),t[e])}},"1af6":function(t,e,a){var r=a("63b6");r(r.S,"Array",{isArray:a("9003")})},"4efa":function(t,e,a){"use strict";var r=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("table",{staticClass:"sw-table",staticStyle:{width:"100%"}},t._l(t.parameters,function(e,r){return a("tr",{key:r},[a("td",{staticStyle:{"min-width":"80px"}},[a("div",{staticClass:"sw-param-name"},[e.required?a("span",{staticClass:"sw-param-req"},[t._v("*")]):t._e(),t._v(t._s(e.name))]),a("div",{staticClass:"sw-param-type",domProps:{innerHTML:t._s(t.getTypeInfoHtml(e.schema))}})]),a("td",{staticStyle:{"min-width":"100px"}},["string"===e.schema.type&&e.schema.enum?a("el-select",{staticStyle:{width:"100%"},attrs:{"popper-class":"sw-small-height-options",size:"medium"},model:{value:e.example,callback:function(a){t.$set(e,"example",a)},expression:"param.example"}},t._l(e.schema.enum,function(t){return a("el-option",{key:t,attrs:{label:t.toString(),value:t}})}),1):"array"===e.schema.type&&e.schema.items?["string"===e.schema.items.type&&e.schema.items.enum?a("el-select",{staticStyle:{width:"100%"},attrs:{multiple:"","popper-class":"sw-small-height-options",size:"medium"},model:{value:e.example,callback:function(a){t.$set(e,"example",a)},expression:"param.example"}},t._l(e.schema.items.enum,function(t){return a("el-option",{key:t,attrs:{label:t.toString(),value:t}})}),1):a("textarea",{directives:[{name:"model",rawName:"v-model",value:e.example,expression:"param.example"}],staticClass:"sw-mono-font",staticStyle:{"min-height":"42px"},domProps:{value:e.example},on:{input:function(a){a.target.composing||t.$set(e,"example",a.target.value)}}})]:a("input",{directives:[{name:"model",rawName:"v-model",value:e.example,expression:"param.example"}],staticClass:"sw-medium",staticStyle:{width:"100%"},attrs:{type:"text"},domProps:{value:e.example},on:{input:function(a){a.target.composing||t.$set(e,"example",a.target.value)}}})],2),a("td",[a("div",{staticClass:"sw-markdown-block",staticStyle:{"word-break":"break-word"}},[a("span",{domProps:{innerHTML:t._s(t.$marked(e.description?e.description:""))}}),e.schema.enum?a("span",[t._v(" \n "+t._s(e.schema.pattern?"Pattern: "+e.schema.pattern:"")+" \n ")]):t._e()])])])}),0)},n=[],s=a("b279"),i={props:{parameters:{type:Array,default:function(){return[]}},showInputs:{type:Boolean,default:!0}},data:function(){return{parametersLocal:this.parameters}},methods:{getTypeInfoHtml:function(t){return Object(s["d"])(t)}}},o=i,c=(a("5d4e"),a("2877")),l=Object(c["a"])(o,r,n,!1,null,"949a757c",null);e["a"]=l.exports},"5d4e":function(t,e,a){"use strict";var r=a("0ccf"),n=a.n(r);n.a},"5dbc":function(t,e,a){var r=a("d3f4"),n=a("8b97").set;t.exports=function(t,e,a){var s,i=e.constructor;return i!==a&&"function"==typeof i&&(s=i.prototype)!==a.prototype&&r(s)&&n&&n(t,s),t}},"8b97":function(t,e,a){var r=a("d3f4"),n=a("cb7c"),s=function(t,e){if(n(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{r=a("9b43")(Function.call,a("11e9").f(Object.prototype,"__proto__").set,2),r(t,[]),e=!(t instanceof Array)}catch(n){e=!0}return function(t,a){return s(t,a),e?t.__proto__=a:r(t,a),t}}({},!1):void 0),check:s}},9093:function(t,e,a){var r=a("ce10"),n=a("e11e").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,n)}},a745:function(t,e,a){t.exports=a("f410")},aa77:function(t,e,a){var r=a("5ca1"),n=a("be13"),s=a("79e5"),i=a("fdef"),o="["+i+"]",c="
",l=RegExp("^"+o+o+"*"),p=RegExp(o+o+"*$"),u=function(t,e,a){var n={},o=s(function(){return!!i[t]()||c[t]()!=c}),l=n[t]=o?e(d):i[t];a&&(n[a]=l),r(r.P+r.F*o,"String",n)},d=u.trim=function(t,e){return t=String(n(t)),1&e&&(t=t.replace(l,"")),2&e&&(t=t.replace(p,"")),t};t.exports=u},c5f6:function(t,e,a){"use strict";var r=a("7726"),n=a("69a8"),s=a("2d95"),i=a("5dbc"),o=a("6a99"),c=a("79e5"),l=a("9093").f,p=a("11e9").f,u=a("86cc").f,d=a("aa77").trim,f="Number",m=r[f],h=m,y=m.prototype,v=s(a("2aeb")(y))==f,b="trim"in String.prototype,g=function(t){var e=o(t,!1);if("string"==typeof e&&e.length>2){e=b?e.trim():d(e,3);var a,r,n,s=e.charCodeAt(0);if(43===s||45===s){if(a=e.charCodeAt(2),88===a||120===a)return NaN}else if(48===s){switch(e.charCodeAt(1)){case 66:case 98:r=2,n=49;break;case 79:case 111:r=8,n=55;break;default:return+e}for(var i,c=e.slice(2),l=0,p=c.length;ln)return NaN;return parseInt(c,r)}}return+e};if(!m(" 0o1")||!m("0b1")||m("+0x1")){m=function(t){var e=arguments.length<1?0:t,a=this;return a instanceof m&&(v?c(function(){y.valueOf.call(a)}):s(a)!=f)?i(new h(g(e)),a,m):g(e)};for(var w,_=a("9e1e")?l(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;_.length>x;x++)n(h,w=_[x])&&!n(m,w)&&u(m,w,p(h,w));m.prototype=y,y.constructor=m,a("2aba")(r,f,m)}},f1ac:function(t,e,a){"use strict";var r=a("07a6"),n=a.n(r);n.a},f410:function(t,e,a){a("1af6"),t.exports=a("584a").Array.isArray},fdef:function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"}}]);
2 | //# sourceMappingURL=chunk-2f70627e-legacy.3eab5b78.js.map
--------------------------------------------------------------------------------
/dist/js/chunk-45efbef8-legacy.87a975ea.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-45efbef8"],{"044b":function(e,t){function s(e){return!!e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function n(e){return"function"===typeof e.readFloatLE&&"function"===typeof e.slice&&s(e.slice(0,0))}
2 | /*!
3 | * Determine if an object is a Buffer
4 | *
5 | * @author Feross Aboukhadijeh
6 | * @license MIT
7 | */
8 | e.exports=function(e){return null!=e&&(s(e)||n(e)||!!e._isBuffer)}},"0a06":function(e,t,s){"use strict";var n=s("2444"),r=s("c532"),a=s("f6b4"),o=s("5270");function i(e){this.defaults=e,this.interceptors={request:new a,response:new a}}i.prototype.request=function(e){"string"===typeof e&&(e=r.merge({url:arguments[0]},arguments[1])),e=r.merge(n,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[o,void 0],s=Promise.resolve(e);this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});while(t.length)s=s.then(t.shift(),t.shift());return s},r.forEach(["delete","get","head","options"],function(e){i.prototype[e]=function(t,s){return this.request(r.merge(s||{},{method:e,url:t}))}}),r.forEach(["post","put","patch"],function(e){i.prototype[e]=function(t,s,n){return this.request(r.merge(n||{},{method:e,url:t,data:s}))}}),e.exports=i},"0df6":function(e,t,s){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},"1d2b":function(e,t,s){"use strict";e.exports=function(e,t){return function(){for(var s=new Array(arguments.length),n=0;n=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],function(e){c.headers[e]={}}),n.forEach(["post","put","patch"],function(e){c.headers[e]=n.merge(a)}),e.exports=c}).call(this,s("4362"))},"2d83":function(e,t,s){"use strict";var n=s("387f");e.exports=function(e,t,s,r,a){var o=new Error(e);return n(o,t,s,r,a)}},"2e67":function(e,t,s){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"30b5":function(e,t,s){"use strict";var n=s("c532");function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,s){if(!t)return e;var a;if(s)a=s(t);else if(n.isURLSearchParams(t))a=t.toString();else{var o=[];n.forEach(t,function(e,t){null!==e&&"undefined"!==typeof e&&(n.isArray(e)?t+="[]":e=[e],n.forEach(e,function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),o.push(r(t)+"="+r(e))}))}),a=o.join("&")}return a&&(e+=(-1===e.indexOf("?")?"?":"&")+a),e}},"387f":function(e,t,s){"use strict";e.exports=function(e,t,s,n,r){return e.config=t,s&&(e.code=s),e.request=n,e.response=r,e}},3934:function(e,t,s){"use strict";var n=s("c532");e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),s=document.createElement("a");function r(e){var n=e;return t&&(s.setAttribute("href",n),n=s.href),s.setAttribute("href",n),{href:s.href,protocol:s.protocol?s.protocol.replace(/:$/,""):"",host:s.host,search:s.search?s.search.replace(/^\?/,""):"",hash:s.hash?s.hash.replace(/^#/,""):"",hostname:s.hostname,port:s.port,pathname:"/"===s.pathname.charAt(0)?s.pathname:"/"+s.pathname}}return e=r(window.location.href),function(t){var s=n.isString(t)?r(t):t;return s.protocol===e.protocol&&s.host===e.host}}():function(){return function(){return!0}}()},"467f":function(e,t,s){"use strict";var n=s("2d83");e.exports=function(e,t,s){var r=s.config.validateStatus;s.status&&r&&!r(s.status)?t(n("Request failed with status code "+s.status,s.config,null,s.request,s)):e(s)}},5270:function(e,t,s){"use strict";var n=s("c532"),r=s("c401"),a=s("2e67"),o=s("2444"),i=s("d925"),c=s("e683");function u(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){u(e),e.baseURL&&!i(e.url)&&(e.url=c(e.baseURL,e.url)),e.headers=e.headers||{},e.data=r(e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),n.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||o.adapter;return t(e).then(function(t){return u(e),t.data=r(t.data,t.headers,e.transformResponse),t},function(t){return a(t)||(u(e),t&&t.response&&(t.response.data=r(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},"5ee2":function(e,t,s){},"7a77":function(e,t,s){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},"7aac":function(e,t,s){"use strict";var n=s("c532");e.exports=n.isStandardBrowserEnv()?function(){return{write:function(e,t,s,r,a,o){var i=[];i.push(e+"="+encodeURIComponent(t)),n.isNumber(s)&&i.push("expires="+new Date(s).toGMTString()),n.isString(r)&&i.push("path="+r),n.isString(a)&&i.push("domain="+a),!0===o&&i.push("secure"),document.cookie=i.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"8df4":function(e,t,s){"use strict";var n=s("7a77");function r(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var s=this;e(function(e){s.reason||(s.reason=new n(e),t(s.reason))})}r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},"9fa6":function(e,t,s){"use strict";var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function r(){this.message="String contains an invalid character"}function a(e){for(var t,s,a=String(e),o="",i=0,c=n;a.charAt(0|i)||(c="=",i%1);o+=c.charAt(63&t>>8-i%1*8)){if(s=a.charCodeAt(i+=.75),s>255)throw new r;t=t<<8|s}return o}r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=a},ac6a:function(e,t,s){for(var n=s("cadf"),r=s("0d58"),a=s("2aba"),o=s("7726"),i=s("32e9"),c=s("84f2"),u=s("2b4c"),p=u("iterator"),l=u("toStringTag"),f=c.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},m=r(d),h=0;h0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" PATH PARAMETERS")]),s("parameter-inputs",{attrs:{parameters:e.pathParams}})],1):e._e(),e.queryParams.length>0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" QUERY PARAMETERS")]),s("parameter-inputs",{attrs:{parameters:e.queryParams}})],1):e._e(),e.formParams.length>0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" FORM DATA PARAMETERS")]),s("parameter-inputs",{attrs:{parameters:e.formParams,showItputs:!0}})],1):e._e(),void 0!==e.requestBody&&Object.keys(e.requestBody).length>0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" BODY PARAMETERS")]),s("div",{staticClass:"sw-row",staticStyle:{"align-items":"flex-end",padding:"0 8px 2px 0"}},[s("div",{staticClass:"sw-gray-small-text"},[e._v("\n "+e._s(e.requestBody.description)+"\n ")]),s("div",{staticStyle:{flex:"1"}}),s("div",{staticStyle:{position:"relative",top:"35px","min-width":"160px","z-index":"1",display:"flex"}},[1==e.mimeReqCount?s("span",{staticClass:"sw-section-heading",staticStyle:{"line-height":"26px"}},[e._v(" \n "+e._s(e.selectedMimeReqKey)+"\n ")]):e.mimeReqCount>1?s("el-select",{attrs:{size:"medium","popper-class":"sw-small-height-options"},model:{value:e.selectedMimeReqKey,callback:function(t){e.selectedMimeReqKey=t},expression:"selectedMimeReqKey"}},e._l(e.mimeRequestTypes,function(e,t){return s("el-option",{key:t,attrs:{label:t,value:t}})}),1):e._e()],1)]),e.mimeRequestTypes[e.selectedMimeReqKey]?s("el-tabs",{staticClass:"sw-no-tab-header-margin",model:{value:e.requestBodyActiveTab,callback:function(t){e.requestBodyActiveTab=t},expression:"requestBodyActiveTab"}},[s("el-tab-pane",{attrs:{label:"Value",name:"bodyParamExample"}},[e.mimeRequestTypes[e.selectedMimeReqKey].examples[0]?s("textarea",{directives:[{name:"model",rawName:"v-model",value:e.mimeRequestTypes[e.selectedMimeReqKey].examples[0].exampleValue,expression:"mimeRequestTypes[selectedMimeReqKey].examples[0].exampleValue"}],staticClass:"sw-mono-font",staticStyle:{"min-height":"170px"},domProps:{value:e.mimeRequestTypes[e.selectedMimeReqKey].examples[0].exampleValue},on:{input:function(t){t.target.composing||e.$set(e.mimeRequestTypes[e.selectedMimeReqKey].examples[0],"exampleValue",t.target.value)}}}):e._e()]),s("el-tab-pane",{attrs:{label:"Model",name:"bodyParamModel"}},[s("json-tree",{attrs:{path:"/",data:e.mimeRequestTypes[e.selectedMimeReqKey].schemaTree,"display-format":"text"}})],1)],1):e._e()],1):e._e(),e.headerParams.length>0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" HEADER PARAMETERS")]),s("parameter-inputs",{attrs:{parameters:e.headerParams,showItputs:!0}})],1):e._e(),e.cookieParams.length>0?s("div",{staticClass:"sw-section-gap"},[s("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" COOKIE PARAMETERS")]),s("parameter-inputs",{attrs:{parameters:e.cookieParams,showItputs:!0}})],1):e._e(),s("div",{directives:[{name:"show",rawName:"v-show",value:e.$store.state.isDevMode,expression:"$store.state.isDevMode"},{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"sw-make-request"},[s("div",{staticClass:"sw-row",staticStyle:{margin:"2px 0"}},[s("button",{staticClass:"sw-btn sw-primary",on:{click:e.onTry}},[e._v(" TRY ")]),e.responseStatusCode?s("div",{class:"sw-response-status "+e.responseStatusCssClass},[e._v("\n "+e._s(e.responseStatusCode)+" : "+e._s(e.responseStatusText)+"\n ")]):e._e(),s("div",{staticStyle:{flex:"1"}}),e.showTextViewer||e.showJsonViewer?s("button",{staticClass:"sw-btn sw-plain",staticStyle:{"margin-right":"5px"},on:{click:e.onClearResponseData}},[e._v(" CLEAR ")]):e._e(),e.showTextViewer||e.showJsonViewer?s("button",{staticClass:"sw-btn sw-plain"},[e._v(" COPY ")]):e._e()]),e.showTextViewer||e.showJsonViewer?s("div",{staticClass:"sw-response-details"},[s("el-tabs",{staticClass:"sw-no-tab-header-margin",model:{value:e.responseDetailsActiveTab,callback:function(t){e.responseDetailsActiveTab=t},expression:"responseDetailsActiveTab"}},[s("el-tab-pane",{attrs:{label:"Response Text",name:"responseData"}},[e.showJsonViewer?s("json-tree",{staticClass:"sw-live-response sw-light-border",attrs:{path:"/",data:e.jsonResponse.data}}):e._e(),e.showTextViewer?s("textarea",{directives:[{name:"model",rawName:"v-model",value:e.jsonRespText,expression:"jsonRespText"}],class:"sw-response-data sw-mono-font "+e.responseStatusCssClass,staticStyle:{"min-height":"175px"},domProps:{value:e.jsonRespText},on:{input:function(t){t.target.composing||(e.jsonRespText=t.target.value)}}}):e._e()],1),s("el-tab-pane",{attrs:{label:"Response Headers",name:"responseHeader"}},[s("json-tree",{staticClass:"sw-light-border",attrs:{path:"/",data:e.responseHeaders}})],1)],1)],1):e._e()])])},r=[function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"sw-section-heading1",staticStyle:{display:"flex","align-items":"center"}},[s("i",{staticClass:"el-icon-upload2",staticStyle:{"font-sixe":"16px"}}),s("div",{staticStyle:{"margin-left":"5px"}},[e._v("REQUEST")])])}],a=s("a4bb"),o=s.n(a),i=(s("7f7f"),s("f499")),c=s.n(i),u=s("004a"),p=(s("28a5"),s("7618")),l=(s("ac6a"),s("6762"),s("2fdb"),s("a481"),s("c0d6")),f=s("bc3a"),d=s.n(f);function m(e,t,s,n,r,a,i,c,u){var p=t,f={},m={};s&&s.map(function(e){p=p.replace("{"+e.name+"}",e.example)}),n&&n.map(function(e){e.example&&(f[e.name]=e.example)}),i&&i.map(function(e){e.example&&(m[e.name]=e.example)}),"bearer"===l["a"].state.reqTokenType&&(m["Authorization"]="Bearer "+l["a"].state.reqToken),"basic"===l["a"].state.reqTokenType?m["Authorization"]="Basic "+l["a"].state.reqToken:"apikey"===l["a"].state.reqTokenType&&"header"===l["a"].state.reqSendTokenIn&&(m[l["a"].state.reqHeader]=l["a"].state.reqToken);var y="";if(0===o()(a).length||0===o()(a[r]).length)y="";else if(m["Content-Type"]=r,a[r].examples[0])if(r.toLowerCase().includes("json"))try{y=JSON.parse(a[r].examples[0])}catch(w){y=""}else y=a[r].examples[0];return p=l["a"].state.selectedApiServer.replace(/^\/|\/$/g,"")+"/"+p.replace(/^\/|\/$/g,""),d.a.request({method:e,url:p,params:f,data:y,headers:m,paramsSerializer:function(e){return h(e)}})}function h(e){var t=o()(e),s="";return t.forEach(function(t){var n="object"===Object(p["a"])(e[t]),r=n&&e[t].length>=0;n||(s+="".concat(t,"=").concat(e[t],"&")),n&&r&&e[t].forEach(function(e){s+="".concat(t,"=").concat(e,"&")})}),s?s.slice(0,-1):s}var y=s("b279"),w=s("4efa"),v={props:{method:{type:String},url:{type:String},parameters:{type:[Array,String],default:function(){return[]}},requestBody:{type:Object}},data:function(){return{loading:!1,defaultTreeProps:{children:"children",label:"label"},requestBodyActiveTab:"bodyParamExample",responseDetailsActiveTab:"responseData",pathParams:[],queryParams:[],headerParams:[],formParams:[],cookieParams:[],mimeRequestTypes:{},mimeReqCount:0,selectedMimeReqKey:"",jsonRespText:"",jsonResponse:{data:{},headers:{}},showJsonViewer:!1,showTextViewer:!1,responseStatusCode:"",responseStatusText:"",responseHeaders:{},responseStatusCssClass:""}},methods:{onTry:function(){var e=this;e.loading=!0,this.res=m(this.method,this.url,this.pathParams,this.queryParams,this.selectedMimeReqKey,this.mimeRequestTypes,this.headerParams,this.formParams,this.cookieParams).then(function(t){e.responseStatusCode=t.status,e.responseStatusText=t.statusText,e.responseStatusCssClass="sw-2xx",e.responseHeaders=t.headers,t.request.responseText.length<2e4?(e.showJsonViewer=!0,e.showTextViewer=!1,e.jsonResponse.data=t.data):(e.showJsonViewer=!1,e.showTextViewer=!0,e.jsonRespText=c()(t.data,null,2)),e.loading=!1}).catch(function(t){e.loading=!1,e.showJsonViewer=!1,e.showTextViewer=!0,t.response&&t.response.status?(e.responseStatusCode=t.response.status,e.responseStatusText=t.response.statusText,e.responseStatusCssClass="sw-4xx",e.responseHeaders=t.response.headers,e.jsonRespText=c()(t.response.data,null,2)):(e.responseStatusCode="ERROR",e.responseStatusText=t.message,e.responseStatusCssClass="sw-4xx"),e.loading=!1})},onClearResponseData:function(){this.responseStatusCode="",this.responseStatusText="",this.responseHeaders={},this.jsonRespText="",this.jsonResponse={data:{},headers:{}},this.showJsonViewer=!1,this.showTextViewer=!1}},mounted:function(){var e=this;if(this.parameters.map(function(t){if(t){var s="";"path"===t.in?s="pathParams":"query"===t.in?s="queryParams":"header"===t.in?s="headerParams":"cookie"===t.in?s="cookieParams":"formData"===t.in&&(s="formParams"),e[s]?e[s].push({name:t.name,required:!!t.required&&t.required,description:t.description?t.description:"",schema:t.schema?t.schema:{type:"string"},example:t["x-example"]?t["x-example"]:""}):console.error("Parameter Type is not defined in the vue component: %s",t.in)}}),void 0!==e.requestBody&&o()(e.requestBody.content).length>0){var t=e.requestBody.content;for(var s in t){var n=t[s],r="",a="";try{n.schema=JSON.parse(c()(n.schema,Object(y["e"])()))}catch(i){return void console.error("Unable to resolve circular refs in schema",n.schema)}r=Object(y["f"])(n.schema,{}),a=Object(y["b"])(n.examples,n.example,n.schema,s,"text"),e.$set(e.mimeRequestTypes,s,{examples:a,schemaTree:r}),e.selectedMimeReqKey=s,e.mimeReqCount++}}},components:{ParameterInputs:w["a"],JsonTree:u["a"]}},x=v,g=(s("e1da"),s("2877")),T=Object(g["a"])(x,n,r,!1,null,"cc7e0de4",null);t["default"]=T.exports},b50d:function(e,t,s){"use strict";var n=s("c532"),r=s("467f"),a=s("30b5"),o=s("c345"),i=s("3934"),c=s("2d83"),u="undefined"!==typeof window&&window.btoa&&window.btoa.bind(window)||s("9fa6");e.exports=function(e){return new Promise(function(t,p){var l=e.data,f=e.headers;n.isFormData(l)&&delete f["Content-Type"];var d=new XMLHttpRequest,m="onreadystatechange",h=!1;if("undefined"===typeof window||!window.XDomainRequest||"withCredentials"in d||i(e.url)||(d=new window.XDomainRequest,m="onload",h=!0,d.onprogress=function(){},d.ontimeout=function(){}),e.auth){var y=e.auth.username||"",w=e.auth.password||"";f.Authorization="Basic "+u(y+":"+w)}if(d.open(e.method.toUpperCase(),a(e.url,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d[m]=function(){if(d&&(4===d.readyState||h)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var s="getAllResponseHeaders"in d?o(d.getAllResponseHeaders()):null,n=e.responseType&&"text"!==e.responseType?d.response:d.responseText,a={data:n,status:1223===d.status?204:d.status,statusText:1223===d.status?"No Content":d.statusText,headers:s,config:e,request:d};r(t,p,a),d=null}},d.onerror=function(){p(c("Network Error",e,null,d)),d=null},d.ontimeout=function(){p(c("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",d)),d=null},n.isStandardBrowserEnv()){var v=s("7aac"),x=(e.withCredentials||i(e.url))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;x&&(f[e.xsrfHeaderName]=x)}if("setRequestHeader"in d&&n.forEach(f,function(e,t){"undefined"===typeof l&&"content-type"===t.toLowerCase()?delete f[t]:d.setRequestHeader(t,e)}),e.withCredentials&&(d.withCredentials=!0),e.responseType)try{d.responseType=e.responseType}catch(g){if("json"!==e.responseType)throw g}"function"===typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){d&&(d.abort(),p(e),d=null)}),void 0===l&&(l=null),d.send(l)})}},bc3a:function(e,t,s){e.exports=s("cee4")},c345:function(e,t,s){"use strict";var n=s("c532"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,s,a,o={};return e?(n.forEach(e.split("\n"),function(e){if(a=e.indexOf(":"),t=n.trim(e.substr(0,a)).toLowerCase(),s=n.trim(e.substr(a+1)),t){if(o[t]&&r.indexOf(t)>=0)return;o[t]="set-cookie"===t?(o[t]?o[t]:[]).concat([s]):o[t]?o[t]+", "+s:s}}),o):o}},c401:function(e,t,s){"use strict";var n=s("c532");e.exports=function(e,t,s){return n.forEach(s,function(s){e=s(e,t)}),e}},c532:function(e,t,s){"use strict";var n=s("1d2b"),r=s("044b"),a=Object.prototype.toString;function o(e){return"[object Array]"===a.call(e)}function i(e){return"[object ArrayBuffer]"===a.call(e)}function c(e){return"undefined"!==typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function p(e){return"string"===typeof e}function l(e){return"number"===typeof e}function f(e){return"undefined"===typeof e}function d(e){return null!==e&&"object"===typeof e}function m(e){return"[object Date]"===a.call(e)}function h(e){return"[object File]"===a.call(e)}function y(e){return"[object Blob]"===a.call(e)}function w(e){return"[object Function]"===a.call(e)}function v(e){return d(e)&&w(e.pipe)}function x(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function g(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function T(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function b(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var s=0,n=e.length;s1?"":"relative"},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[Array.isArray(e.data)||e.isObject(e.data)?[a("bracket-left",{attrs:{visible:e.visible,data:e.data,"show-length":e.showLength,"not-last-key":e.notLastKey},on:{"update:visible":function(t){e.visible=t}}},[e.currentDeep>1&&!Array.isArray(e.parentData)?a("span",[e._v(e._s(e.currentKey)+":")]):e._e()]),e._l(e.data,function(t,s){return a("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],key:s,staticClass:"sw-tree-content"},[a("json-tree",{attrs:{"parent-data":e.data,data:t,deep:e.deep,"show-length":e.showLength,path:e.path+(Array.isArray(e.data)?"["+s+"]":"."+s),"allow-interaction":e.allowInteraction,"current-key":s,"display-format":e.displayFormat,"current-deep":e.currentDeep+1},on:{click:e.handleItemClick}})],1)}),a("bracket-right",{attrs:{visible:e.visible,data:e.data,"not-last-key":e.notLastKey},on:{"update:visible":function(t){e.visible=t}}})]:a("content-block",{attrs:{parentDataType:e.getDataType(e.parentData),dataType:e.getDataType(e.data),text:e.data+"",notLastKey:e.notLastKey,displayFormat:e.displayFormat,currentKey:e.currentKey}})],2)},r=[],n=(a("6b54"),a("ac6a"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"sw-content-block"},["object"===e.parentDataType?a("div",{staticClass:"sw-content-key"},[e._v(e._s(e.currentKey)+":")]):e._e(),a("div",{class:"sw-content sw-datatype-"+("json"===e.displayFormat?e.dataType:e.text.substring(0,4))},[e._v(e._s(e.getText()))]),a("div",{staticStyle:{flex:"1","min-width":"15px"}}),a("div",{ref:"descrDiv",class:"sw-descr "+e.descrClass},[e._v("\n "+e._s(e.description)+" \n ")]),e.description?a("span",{staticClass:"sw-descr-expander",on:{click:function(t){return e.handleItemToggleDescr()}}},[e._v(" \n "+e._s("sw-descr-collapsed"===e.descrClass?"⤵":"⤴")+"\n ")]):e._e()])}),i=[],l=(a("28a5"),{props:{parentDataType:String,dataType:String,text:String,notLastKey:Boolean,currentKey:[Number,String],displayFormat:{type:String,default:"json"}},data(){return{description:this.getDescription(),descrClass:"sw-descr-collapsed",showDescrExpander:!0}},methods:{getText(){if("text"===this.displayFormat)return this.text.split("~|~")[0];let e=this.text;return"string"===this.dataType&&(e=`"${e}"`),this.notLastKey&&(e+=","),e},getDescription(){if("text"===this.displayFormat){let e=this.text.split("~|~");return e[1]?e[1]:""}return""},handleItemToggleDescr(){"sw-descr-collapsed"===this.descrClass?this.descrClass="sw-descr-expanded":this.descrClass="sw-descr-collapsed",this.$emit("toggleDescription")}}}),o=l,c=a("2877"),p=Object(c["a"])(o,n,i,!1,null,null,null),u=p.exports,m=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[e._t("default"),a("span",{directives:[{name:"show",rawName:"v-show",value:e.dataVisiable,expression:"dataVisiable"}],staticClass:"sw-tree-bracket-left",on:{click:function(t){return t.stopPropagation(),e.toggleBrackets(t)}}},[e._v("\n "+e._s(Array.isArray(e.data)?"[":"{")+"\n ")]),a("span",{directives:[{name:"show",rawName:"v-show",value:!e.dataVisiable,expression:"!dataVisiable"}],staticClass:"sw-tree-bracket-left",on:{click:function(t){return t.stopPropagation(),e.toggleBrackets(t)}}},[e._v("\n "+e._s(e.doubleBracketsGenerator(e.data))+"\n ")])],2)},d=[],h={props:{visible:{required:!0,type:Boolean},data:{required:!0},notLastKey:Boolean},computed:{dataVisiable:{get(){return this.visible},set(e){this.$emit("update:visible",e)}}},methods:{toggleBrackets(){this.dataVisiable=!this.dataVisiable},bracketsFormatter(e){return this.notLastKey?`${e},`:e}}},y={mixins:[h],props:{showLength:Boolean},methods:{doubleBracketsGenerator(e){const t=Array.isArray(e);let a=t?"[...]":"{...}";if(this.showLength){const s=t?`${e.length} items`:`${Object.keys(e).length} keys`;a+=` // ${s}`}return this.bracketsFormatter(a)}}},v=y,b=Object(c["a"])(v,m,d,!1,null,null,null),f=b.exports,w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.dataVisiable,expression:"dataVisiable"}]},[a("span",{staticClass:"sw-tree-bracket-right",on:{click:function(t){return t.stopPropagation(),e.toggleBrackets(t)}}},[e._v("\n "+e._s(e.bracketsFormatter(Array.isArray(e.data)?"]":"}"))+"\n ")])])},g=[],x={mixins:[h]},S=x,_=Object(c["a"])(S,w,g,!1,null,null,null),k=_.exports,C={name:"json-tree",components:{ContentBlock:u,BracketLeft:f,BracketRight:k},props:{data:{},deep:{type:Number,default:1/0},showLength:{type:Boolean,default:!1},path:{type:String,default:"root"},allowInteraction:{type:Boolean,default:!0},parentData:{},currentDeep:{type:Number,default:1},currentKey:[Number,String],displayFormat:{type:String,default:"json"}},data(){return{visible:this.currentDeep<=this.deep,treeContentBackground:"transparent",showDescr:!0}},computed:{lastKey(){if(Array.isArray(this.parentData))return this.parentData.length-1;if(this.isObject(this.parentData)){let e=Object.keys(this.parentData);return e[e.length-1]}},notLastKey(){return this.currentKey!==this.lastKey}},methods:{handleClick(e){this.allowInteraction&&this.$emit("click",this.path,this.data)},handleItemClick(e,t){this.$emit("click",e,t)},isObject(e){return"object"===this.getDataType(e)},getDataType(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}},watch:{deep(e){this.visible=this.currentDeep<=e}}},E=C,F=(a("f1ac"),Object(c["a"])(E,s,r,!1,null,null,null));t["a"]=F.exports},"07a6":function(e,t,a){},"0ccf":function(e,t,a){},"1bbf":function(e,t,a){"use strict";a.r(t);var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[e._m(0),e._l(e.responsesLocalCopy,function(t,s){return a("div",{key:s,staticClass:"sw-response-status"},[a("div",{staticClass:"sw-row"},[a("div",[a("span",{staticClass:"sw-section-heading2"},[e._v(" "+e._s(s)+" ")]),a("span",{staticClass:"sw-small-text"},[e._v(" : "+e._s(t.description)+" ")])]),a("div",{staticStyle:{flex:"1"}}),a("div",{staticStyle:{position:"relative",top:"25px","min-width":"160px","z-index":"1",display:"flex"}},[1==e.mimeRespCountForEachStatus[s]?a("span",{staticClass:"sw-section-heading",staticStyle:{"line-height":"26px"}},[e._v(" \n "+e._s(e.selectedMimeValueForEachStatus[s])+"\n ")]):e.mimeRespCountForEachStatus[s]>1?a("el-select",{attrs:{size:"medium","popper-class":"sw-small-height-options"},model:{value:e.selectedMimeValueForEachStatus[s],callback:function(t){e.$set(e.selectedMimeValueForEachStatus,s,t)},expression:"selectedMimeValueForEachStatus[statusRespCode]"}},e._l(e.mimeResponsesForEachStatus[s],function(e,t){return a("el-option",{key:t,attrs:{label:t,value:t}})}),1):e._e()],1)]),t.content?a("div",{staticClass:"sw-row"},[a("el-tabs",{staticStyle:{flex:"1",overflow:"hidden"},model:{value:e.activeTabForEachRespStatus[s],callback:function(t){e.$set(e.activeTabForEachRespStatus,s,t)},expression:"activeTabForEachRespStatus[statusRespCode]"}},[a("el-tab-pane",{staticClass:"sw-tab-pane",attrs:{label:"Example",name:"exampleTab"}},[e.selectedMimeValueForEachStatus[s]&&"json"===e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].examples[0].exampleType?a("json-tree",{attrs:{path:"/",data:e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].examples[0].exampleValue},on:{click:e.showPath}}):e.selectedMimeValueForEachStatus[s]?a("textarea",{directives:[{name:"model",rawName:"v-model",value:e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].examples[0].exampleValue,expression:"mimeResponsesForEachStatus[statusRespCode][selectedMimeValueForEachStatus[statusRespCode]].examples[0].exampleValue"}],staticClass:"sw-mono-font",staticStyle:{"min-height":"150px"},domProps:{value:e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].examples[0].exampleValue},on:{input:function(t){t.target.composing||e.$set(e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].examples[0],"exampleValue",t.target.value)}}}):e._e()],1),a("el-tab-pane",{staticClass:"sw-tab-pane",attrs:{label:"Model",name:"schemaTab"}},[e.selectedMimeValueForEachStatus[s]&&e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].schemaTree?a("json-tree",{attrs:{path:"/",data:e.mimeResponsesForEachStatus[s][e.selectedMimeValueForEachStatus[s]].schemaTree,"display-format":"text"}}):e._e()],1)],1)],1):e._e(),t.headers?a("div",[a("div",{staticClass:"sw-section-heading3 sw-gray-text"},[e._v(" Response Headers")]),a("parameter-inputs",{attrs:{parameters:e.headersForEachRespStatus[s],showInputs:!1}})],1):e._e()])})],2)},r=[function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"sw-section-heading1",staticStyle:{display:"flex","align-items":"center"}},[a("i",{staticClass:"el-icon-download",staticStyle:{"font-sixe":"16px"}}),a("div",{staticStyle:{"margin-left":"5px"}},[e._v("RESPONSE")])])}];function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e){for(var t=1;t[]},showInputs:{type:Boolean,default:!0}},data(){return{parametersLocal:this.parameters}},methods:{getTypeInfoHtml(e){return Object(n["d"])(e)}}},l=i,o=(a("5d4e"),a("2877")),c=Object(o["a"])(l,s,r,!1,null,"949a757c",null);t["a"]=c.exports},"5d4e":function(e,t,a){"use strict";var s=a("0ccf"),r=a.n(s);r.a},ae54:function(e,t,a){},f1ac:function(e,t,a){"use strict";var s=a("07a6"),r=a.n(s);r.a}}]);
2 | //# sourceMappingURL=chunk-da3973d8.709e0552.js.map
--------------------------------------------------------------------------------
/dist/oauth.html:
--------------------------------------------------------------------------------
1 |
52 |
53 | oauth.html
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mrindoc",
3 | "version": "0.1.0",
4 | "private": true,
5 | "author": "Mrinmoy",
6 | "license": "MIT",
7 | "description": "Open API viewer and console",
8 | "repository": "https://github.com/mrin9/OpenAPI-Viewer",
9 | "homepage": "https://github.com/mrin9/OpenAPI-Viewer#readme",
10 | "scripts": {
11 | "serve": "vue-cli-service serve ",
12 | "build": "vue-cli-service build --report --modern ",
13 | "deploy": "git subtree push --prefix dist origin gh-pages"
14 | },
15 | "dependencies": {
16 | "axios": "^0.18.0",
17 | "element-ui": "^2.4.11",
18 | "marked": "^0.6.0",
19 | "json-schema-ref-parser": "^6.0.3",
20 | "swagger2openapi": "^5.0.2",
21 | "vue": "^2.6.0",
22 | "vue-router": "^3.0.1",
23 | "vue-slideout-panel": "^3.0.0",
24 | "vuex": "^3.1.0",
25 | "vuex-persist": "^2.0.0"
26 | },
27 | "devDependencies": {
28 | "@vue/cli-plugin-babel": "^3.4.0",
29 | "@vue/cli-service": "^3.4.0",
30 | "babel-plugin-component": "^1.1.1",
31 | "node-sass": "^4.11.0",
32 | "sass-loader": "^7.1.0",
33 | "vue-template-compiler": "^2.6.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/public/favicon1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/public/favicon1.ico
--------------------------------------------------------------------------------
/public/favicon2.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/public/favicon2.ico
--------------------------------------------------------------------------------
/public/images/leaves_logo1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/public/images/leaves_logo2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | MrinDoc OpenAPI Spec Viewer
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/public/oauth.html:
--------------------------------------------------------------------------------
1 |
52 |
53 | oauth.html
--------------------------------------------------------------------------------
/screenshots/authentication1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/authentication1.png
--------------------------------------------------------------------------------
/screenshots/authentication2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/authentication2.png
--------------------------------------------------------------------------------
/screenshots/console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/console.png
--------------------------------------------------------------------------------
/screenshots/end-point-listing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/end-point-listing.png
--------------------------------------------------------------------------------
/screenshots/request-response.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/request-response.png
--------------------------------------------------------------------------------
/screenshots/response-schema.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/screenshots/response-schema.png
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/src/assets/styles/_element_vars.scss:
--------------------------------------------------------------------------------
1 |
2 | $--font-path: '~element-ui/lib/theme-chalk/fonts';
3 |
4 | /* Colors
5 | -------------------------- */
6 | $--color-primary:$sw-primary-color;
7 | $--color-success: $sw-green !default;
8 | $--color-warning: $sw-orange !default;
9 | $--color-danger: $sw-red !default;
10 | $--color-info: $sw-info !default;
11 |
12 |
13 | /* Border
14 | -------------------------- */
15 | $--border-radius-base: 2px !default;
16 | $--border-radius-small: 2px !default;
17 | $--border-color-base: #dcdfe6 !default;
18 |
19 | /* Button
20 | -------------------------- */
21 | $--button-font-size: 14px !default;
22 | $--button-font-weight: bold;
23 | $--button-default-border: #999;
24 | $--button-border-radius: $--border-radius-base !default;
25 | $--button-padding-vertical: 8px !default;
26 | $--button-padding-horizontal: 16px !default;
27 |
28 | $--button-medium-font-size: 12px !default;
29 | $--button-medium-border-radius: $--border-radius-base !default;
30 | $--button-medium-padding-vertical: 6px !default;
31 | $--button-medium-padding-horizontal: 16px !default;
32 |
33 | $--button-small-font-size: 11px !default;
34 | $--button-small-border-radius: $--border-radius-base !default;
35 | $--button-small-padding-vertical: 5px !default;
36 | $--button-small-padding-horizontal: 10px !default;
37 |
38 | $--button-mini-font-size: 10px !default;
39 | $--button-mini-border-radius: $--border-radius-base !default;
40 | $--button-mini-padding-vertical: 2px !default;
41 | $--button-mini-padding-horizontal: 10px !default;
42 |
43 | /* Input
44 | -------------------------- */
45 | $--input-font-size: 14px;
46 | $--input-width: 140px;
47 | $--input-height: 32px;
48 | $--input-max-width: 314px;
49 |
50 | $--input-medium-font-size: 12px;
51 | $--input-medium-height: 26px;
52 |
53 | $--input-small-font-size: 11px;
54 | $--input-small-height: 23px;
55 |
56 | $--input-mini-font-size: 10px;
57 | $--input-mini-height: 21px;
58 |
59 | /*Select
60 | ---------------------------*/
61 | $--select-dropdown-border:1px solid #777;
62 |
63 | /* Tab
64 | -------------------------- */
65 | $--tab-border-line: 1px solid #ccc;
66 |
67 |
68 | /* Pagination
69 | -------------------------- */
70 | $--pagination-fill: transparent !default;
71 | $--pagination-hover-color: transparent !default;
72 | $--pagination-button-disabled-fill:transparent !default;
73 |
74 | /* Checkbox
75 | -------------------------- */
76 | $--checkbox-input-height: 18px !default;
77 | $--checkbox-input-width: 18px !default;
78 | $--checkbox-input-border: 2px solid $--border-color-base !default;
79 |
80 | /* Table
81 | -------------------------- */
82 | $--table-header-background:#fafafa;
83 | $--table-header-color:#565656;
84 |
85 | /* Tooltip
86 | -------------------------- */
87 | $--tooltip-font-size: 11px !default;
88 | $--tooltip-padding: 6px !default;
89 | $--tooltip-arrow-size: 4px !default;
90 |
91 |
92 | /* Switch
93 | -------------------------- */
94 | $--switch-on-color: $sw-green !default;
95 |
96 | /* Message
97 | -------------------------- */
98 | $--message-min-width: 380px !default;
99 | $--message-background-color: $sw-info !default;
100 | $--message-padding: 10px 15px !default;
101 | $--message-close-size: 16px !default;
102 |
103 | $--message-success-color: #333 !default;
104 | $--message-info-color: #333 !default;
105 | $--message-warning-color: #fff !default;
106 | $--message-danger-color: #fff !default;
107 |
108 |
109 |
110 | @import "~element-ui/packages/theme-chalk/src/index";
111 |
112 |
113 | .el-button + .el-button {
114 | margin-left:5px;
115 | }
116 |
117 |
118 | .sw-mono-font{
119 | textarea{
120 | font-family: $sw-font-mono;
121 | font-size: 12px;
122 | white-space: nowrap; overflow: auto;
123 | }
124 | &.sw-4xx{
125 | textarea{
126 | color:$sw-red;
127 | }
128 | }
129 | }
130 |
131 | textarea.sw-mono-font{
132 | font-family: $sw-font-mono;
133 | font-size: 12px;
134 | white-space: nowrap; overflow: auto;
135 | resize: vertical;
136 | width:100%;
137 | &.sw-4xx{
138 | color:$sw-red;
139 | }
140 | }
141 |
142 |
143 |
144 |
145 | .sw-dark{
146 | .el-input__inner{
147 | padding:0 5px;
148 | border-color: darken($sw-primary-color,15%);
149 | background-color:#222;
150 | color:#fff;
151 | &:focus,
152 | &:active,
153 | &:hover,{
154 | border-color:$sw-primary-color;
155 | }
156 |
157 | &:disabled{
158 | border-color: darken($sw-primary-color,30%);
159 | background-color:rgba(125,125,125, 0.2);
160 | color:#666;
161 | &::placeholder {
162 | color:#666;
163 | }
164 | }
165 | }
166 | }
167 |
168 |
169 |
170 | /* Dropdown and Select
171 | -------------------- */
172 | .el-select-dropdown,
173 | .el-dropdown-menu{
174 | border: 1px solid #999;
175 | .popper__arrow{
176 | display:none;
177 | }
178 | &.el-popper[x-placement^="bottom"]{
179 | margin-top:2px;
180 | }
181 | &.el-popper[x-placement^="top"] {
182 | margin-bottom:2px;
183 | }
184 | }
185 |
186 | //Select and Dropdown Menu
187 | .sw-dark.el-dropdown-menu,
188 | .sw-dark.el-select-dropdown
189 | {
190 | background-color: $sw-dark-bg1;
191 | border: 1px solid $sw-primary-color;
192 |
193 | .el-select-dropdown__item,
194 | .el-dropdown-menu__item{
195 | color:$sw-light-text;
196 | background-color: $sw-dark-bg1;
197 | &:hover{
198 | color:$sw-primary-color;
199 | }
200 | }
201 |
202 | .el-dropdown-menu__item--divided{
203 | border-top: 1px solid darken($sw-primary-color,30%);
204 | &::before{
205 | background-color: transparent;
206 | }
207 | }
208 |
209 | .el-select-dropdown__item.is-disabled
210 | .el-dropdown-menu__item.is-disabled{
211 | color:darken($sw-light-text,40%);
212 | }
213 |
214 | .el-select-dropdown__item:hover,
215 | .el-dropdown-menu__item:hover{
216 | background-color: lighten($sw-dark-bg1,10%);
217 | }
218 | }
219 | .sw-double-height-options{
220 | .el-select-dropdown__item{
221 | height:60px;
222 | border-bottom: 1px solid #444;
223 | }
224 | }
225 | .sw-small-height-options{
226 | .el-select-dropdown__item{
227 | height:26px;
228 | line-height:26px;
229 | }
230 | }
231 |
232 |
233 | /* Radio
234 | -------------------- */
235 | .el-radio__label{
236 | padding-left:2px;
237 | }
238 | .el-radio--small.is-bordered {
239 | padding: 5px 10px;
240 | border-radius: 2px;
241 | height: 26px;
242 | }
243 |
244 | /* Switch
245 | -------------------- */
246 | .el-switch__label--right {
247 | margin-left:2px;
248 | }
249 | .el-switch__label--left {
250 | margin-right:2px;
251 | }
252 |
253 | .sw-dark {
254 | color:$sw-light-text;
255 | .el-switch__core {
256 | background-color:#222;
257 | border: 1px solid #888;
258 | }
259 | .el-switch__label{
260 | color:$sw-light-text;
261 | &.is-active{
262 | color:$sw-green;
263 | }
264 | }
265 | }
266 |
267 |
268 | /* Tabs
269 | -------------------- */
270 | .el-tabs__active-bar{
271 | height:3px;
272 | }
273 | .el-tabs__nav-wrap::after{
274 | background-color:#ccc;
275 | height:1px;
276 | }
277 | .el-tabs--left .el-tabs__active-bar.is-left,
278 | .el-tabs--left .el-tabs__active-bar.is-right,
279 | .el-tabs--right .el-tabs__active-bar.is-left,
280 | .el-tabs--right .el-tabs__active-bar.is-right{
281 | width:3px;
282 | }
283 | .el-tabs--left .el-tabs__nav-wrap.is-left::after,
284 | .el-tabs--left .el-tabs__nav-wrap.is-right::after,
285 | .el-tabs--right .el-tabs__nav-wrap.is-left::after,
286 | .el-tabs--right .el-tabs__nav-wrap.is-right::after{
287 | width:1px;
288 | }
289 | .el-tabs__item{
290 | height:32px;
291 | line-height:32px;
292 | }
293 |
294 | .sw-no-tab-header-margin{
295 | .el-tabs__header.is-top{
296 | margin: 0;
297 | }
298 | }
299 |
300 |
301 | /* Dialog
302 | -------------------------- */
303 | .sw-dialog{
304 | .el-dialog__header{
305 | background-color: $sw-dark-bg2;
306 | }
307 | .el-dialog__title{
308 | color:#fff;
309 | }
310 | }
311 |
312 |
313 | /* Message
314 | -------------------------- */
315 | .el-message{
316 | background-color: #fff;
317 | border-color:#333;
318 | box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
319 | .el-icon-info:before{
320 | font-size: 20px;
321 | }
322 |
323 | &.el-message--success{
324 | background-color: $sw-green;
325 | border-color:seagreen;
326 | .el-message__closeBtn{color:#333;}
327 | .el-icon-success:before{
328 | content: "\e639";
329 | color:seagreen;
330 | font-size: 20px;
331 | }
332 | }
333 | &.el-message--error{
334 | background-color: $sw-soft-red;
335 | border-color:$sw-red;
336 | .el-message__closeBtn{color:#fff;}
337 | .el-icon-error:before{
338 | content: "\e607";
339 | font-size: 20px;
340 | }
341 | }
342 |
343 | &.el-message--warning{
344 | background-color: $sw-orange;
345 | border-color:darken($sw-orange,10%);
346 | .el-message__closeBtn{color:#fff;}
347 | .el-icon-warning:before{
348 | content: "\e62e";
349 | font-size: 20px;
350 | }
351 | }
352 |
353 | }
354 |
355 |
356 | .el-tooltip__popper{
357 | border-radius: 2px;
358 | }
359 |
360 |
361 | .el-checkbox__inner::after{
362 | height: 8px;
363 | width: 4px;
364 | left: 4px;
365 | border-width: 0px 2px 2px 0px;
366 | }
367 |
368 |
369 | /* Table
370 | -------------------- */
371 |
372 | .el-table{
373 | font-size:12px;
374 | border:1px solid #ccc;
375 | &.sw-light-border{
376 | border-color:#eee;
377 | }
378 | td,th{
379 | padding:6px 0;
380 | }
381 | th.is-leaf{
382 | border-bottom:1px solid #ccc;
383 | }
384 | .cell{
385 | padding-left:5px;
386 | padding-right:5px;
387 | }
388 | }
389 |
390 | .el-table__header-wrapper{
391 | box-shadow: 0 1px 1px rgba(0,0,0,0.12);
392 | margin-bottom: 2px;
393 | }
394 |
395 | .sw-hide-table-headers{
396 | .el-table__header-wrapper{
397 | display:none;
398 | }
399 | }
400 |
401 | .el-table__body-wrapper{
402 | &::-webkit-scrollbar {width: 8px;}
403 | &::-webkit-scrollbar-track {background-color: transparent;}
404 | &::-webkit-scrollbar-thumb {
405 | background-color: orange;
406 | border-radius:3px;
407 | }
408 | }
409 |
--------------------------------------------------------------------------------
/src/assets/styles/_slideout.scss:
--------------------------------------------------------------------------------
1 | .blackout{z-index:1000 !important;}
2 | .dock{ z-index:1100 !important;}
3 |
--------------------------------------------------------------------------------
/src/assets/styles/_sw_form.scss:
--------------------------------------------------------------------------------
1 | @import "~@/assets/styles/_vars.scss";
2 |
3 | //Button
4 | .sw-btn{
5 | border-radius: $sw-border-radius;
6 | font-weight: 600;
7 | display: inline-block;
8 | padding: 6px 16px;
9 | font-size: 12px;
10 | outline: 0;
11 | line-height: 1;
12 | text-align: center;
13 | white-space: nowrap;
14 | border: 1px solid $sw-border-color;
15 | background-color:$sw-white;
16 | transition: background-color 0.2s;
17 | user-select: none;
18 | cursor: pointer;
19 | &.sw-large{
20 | padding:8px 14px;
21 | }
22 | &.sw-small{
23 | padding:5px 12px;
24 | }
25 | &.sw-circle{
26 | border-radius:50%;
27 | }
28 |
29 | &.sw-primary{
30 | background-color:$sw-primary-color;
31 | border-color:darken($sw-primary-color,2%);
32 | color:#fff;
33 | &:hover{
34 | background-color:darken( $sw-primary-color, 8% );
35 | }
36 | }
37 |
38 | &.sw-plain{
39 | background-color:#fff;
40 | border-color:#333;
41 | color:#333;
42 | &:hover{
43 | border-color:$sw-primary-color;
44 | }
45 | }
46 |
47 | }
48 |
49 | // Form Inputs
50 | textarea,
51 | input[type="text"]:not(.el-input__inner),
52 | input[type="password"]:not(.el-input__inner){
53 | border-radius:$sw-border-radius;
54 | border:1px solid #C5D9E8;
55 | transition: border .2s;
56 | outline: none;
57 | font-size:$--input-font-size;
58 | height:$--input-height;
59 | padding: 0 5px;
60 | box-sizing: border-box;
61 | &::placeholder { color: #ccc;}
62 | &:-ms-input-placeholder {color: #ccc;}
63 | &::-ms-input-placeholder {color: #ccc;}
64 |
65 | &.sw-medium{
66 | font-size:$--input-medium-font-size;
67 | height:$--input-medium-height;
68 | }
69 | &.sw-small{
70 | font-size:$--input-small-font-size;
71 | height:$--input-small-height;
72 | }
73 |
74 | &.sw-primary{
75 | border-color:$sw-primary-color;
76 | }
77 |
78 |
79 | &.sw-dark{
80 | border-color: darken($sw-primary-color,15%);
81 | background-color:#222;
82 | color:#fff;
83 | font-size:13px;
84 | &::placeholder { color: #555;}
85 | &:-ms-input-placeholder {color: #555;}
86 | &::-ms-input-placeholder {color: #555;}
87 | &:disabled{
88 | border-color:#444;
89 | background-color:#2A2A2A;
90 | }
91 | }
92 | &:focus,
93 | &:active{
94 | border-color:$sw-primary-color;
95 | }
96 | &:disabled{
97 | border-color:lifghten($sw-border-color,10%);
98 | background-color:rbga(0,0,0, 0.2);
99 | }
100 | }
101 |
102 | textarea{
103 | &::-webkit-scrollbar-track{
104 | background-color: transparent;
105 | }
106 |
107 | &::-webkit-scrollbar{
108 | width: 8px;
109 | height: 8px;
110 | background-color: transparent;
111 | }
112 |
113 | &::-webkit-scrollbar-thumb{
114 | background-color: rgba(50,50,50, .5);
115 | }
116 |
117 |
118 | }
119 |
120 |
121 | //Radio
122 | .sw-radio {
123 | display: none;
124 | & + label {
125 | -webkit-appearance: none;
126 | background-color:$sw-primary-color;
127 | border: 4px solid $sw-primary-color;
128 | border-radius: 10px;
129 | width: 100%;
130 | display: inline-block;
131 | position: relative;
132 | width: 10px;
133 | height: 10px;
134 | }
135 | }
136 |
137 | .regular-radio:checked + label {
138 | background: $sw-dark-bg1;
139 | border: 4px solid $sw-primary-color;
140 | }
141 |
--------------------------------------------------------------------------------
/src/assets/styles/_table.scss:
--------------------------------------------------------------------------------
1 | @import "~@/assets/styles/_vars.scss";
2 | table {
3 | border-spacing: 0;
4 | }
5 | td, th {
6 | display: table-cell;
7 | vertical-align: inherit;
8 | }
9 |
10 | .sw-table {
11 | border-collapse: separate;
12 | border: 1px solid #ccc;
13 | border-radius: $sw-border-radius;
14 | background-color: #fff;
15 | color: #565656;
16 | margin: 0;
17 | max-width: 100%;
18 | tbody tr:first-child td, // first row tds
19 | th {
20 | border-top: 0 none;
21 | }
22 | td, th {
23 | font-size: 12px;
24 | line-height: 16px;
25 | padding: 4px 5px 4px;
26 | text-align: left;
27 | vertical-align: top;
28 | }
29 | th {
30 | color: #565656;
31 | font-size: 12px;
32 | line-height:30px;
33 | font-weight: 600;
34 | letter-spacing: normal;
35 | background-color: #fafafa;
36 | vertical-align: bottom;
37 | border-bottom: 1px solid #ccc;
38 | }
39 |
40 | > tbody >tr > td,
41 | > tr > td{
42 | border-top: 1px solid #eee;
43 | text-overflow: ellipsis;
44 | overflow: hidden;
45 | }
46 | tr:hover{
47 | background-color: darken(#fff,3%);
48 | }
49 |
50 | }
--------------------------------------------------------------------------------
/src/assets/styles/_typography.scss:
--------------------------------------------------------------------------------
1 | @import "~@/assets/styles/_vars.scss";
2 |
3 | //Light
4 | @font-face {
5 | font-family: 'Metropolis';
6 | src: url($font_path + 'Metropolis-Light.woff2')format('woff2') ;
7 | font-weight: 200;
8 | font-style: normal;
9 | }
10 |
11 | //Regular
12 | @font-face {
13 | font-family: 'Metropolis';
14 | src: url($font_path + 'Metropolis-Regular.woff2')format('woff2') ;
15 | font-weight: 400;
16 | font-style: normal;
17 | }
18 |
19 | //Semibold
20 | @font-face {
21 | font-family: 'Metropolis';
22 | src: url($font_path + 'Metropolis-Medium.woff2')format('woff2') ;
23 | font-weight: 500;
24 | font-style: normal;
25 | }
26 |
27 | //Bold
28 | @font-face {
29 | font-family: 'Metropolis';
30 | src: url($font_path + 'Metropolis-SemiBold.woff2')format('woff2') ;
31 | font-weight: 600;
32 | font-style: normal;
33 | }
34 |
35 | //Monospaced font
36 | //Regular
37 | @font-face {
38 | font-family: 'roboto-mono';
39 | src: url($font_path + 'roboto-mono-regular.woff2')format('woff2') ;
40 | font-weight: 400;
41 | font-style: normal;
42 | }
43 |
44 | @font-face {
45 | font-family: 'roboto-mono';
46 | src: url($font_path + 'roboto-mono-bold.woff2')format('woff2') ;
47 | font-weight: 500;
48 | font-style: normal;
49 | }
50 |
51 |
52 | h1{ font-family:$sw-font-family; font-size:26px; font-weight:200; letter-spacing:normal; }
53 | h2{ font-family:$sw-font-family; font-size:24px; font-weight:200; letter-spacing:normal; }
54 | h3{ font-family:$sw-font-family; font-size:22px; font-weight:200; letter-spacing:normal; }
55 | h4{ font-family:$sw-font-family; font-size:18px; font-weight:200; letter-spacing:normal; }
56 | h5{ font-family:$sw-font-family; font-size:16px; font-weight:200; letter-spacing:normal; }
57 | h6{ font-family:$sw-font-family; font-size:14px; font-weight:200; letter-spacing:normal; }
58 |
59 | h1,h2,h3,h4,h5,h5{
60 | margin-block-end: 0.2em;
61 | }
62 | p{margin-block-start: 0.5em;}
63 | code,
64 | pre{
65 | font-family: $sw-font-mono;
66 | }
67 |
68 | .sw-bold-small-text{
69 | font-size:12px;
70 | margin-bottom: 4px;
71 | font-weight:bold;
72 | }
73 |
74 |
75 | .sw-markdown-block{
76 | p:only-child{
77 | color:#999;
78 | font-size:12px;
79 | line-height:normal;
80 | margin-top:0;
81 | }
82 | p{
83 | line-height: 16px;
84 | }
85 | code{
86 | background-color: rgba(0, 0, 0, 0.02);
87 | padding: 0px 6px;
88 | border: 1px solid #eee;
89 | border-radius: 3px;
90 | color: #666;
91 | font-size: 12px;
92 | }
93 | pre{
94 | code {
95 | border:none;
96 | background-color:transparent;
97 | color:#ccc;
98 |
99 | }
100 | white-space: pre-wrap;
101 | background-color: #263238;
102 | color: white;
103 | padding: 12px 14px 15px 14px;
104 | overflow-x: auto;
105 | line-height: normal;
106 | border-radius: 2px;
107 | border: 1px solid rgba(38, 50, 56, 0.1);
108 | }
109 | ul,ol{
110 | padding-inline-start:30px
111 | }
112 | li{
113 | line-height: 1.2em;
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/src/assets/styles/_vars.scss:
--------------------------------------------------------------------------------
1 | //Font
2 | $font_path : '~@/assets/styles/fonts/';
3 | $sw-font-family: 'Metropolis';
4 | $sw-font-mono : 'roboto-mono', 'Monaco', 'Menlo', 'Consolas';
5 |
6 | //App Dimentions
7 | $sw-min-app-width:768px;
8 | $sw-min-app-height:600px;
9 | $sw-side-nav-width:255px;
10 | $sw-header-height:100px;
11 | $sw-header-row1-height:70px;
12 |
13 | //Colors
14 | $sw-primary-color:#FF791A;
15 |
16 | $sw-dark-bg1:#333;
17 | $sw-dark-bg2:#515151;
18 | $sw-dark-bg3:#65656A;
19 |
20 | $sw-blue-text:#0079b8;
21 | $sw-dark-text:#565656;
22 | $sw-gray-text:#999;
23 | $sw-light-text:#C9C9C9;
24 | $sw-extra-light-text:#FAFAFA;
25 |
26 | $sw-light-bg1:#FAFAFA;
27 | $sw-light-bg2:whitesmoke;
28 | $sw-light-bg3:#F2F2F2;
29 | $sw-white:#fff;
30 |
31 | $sw-green:#99CC00;
32 | $sw-red:#CC0000;
33 | $sw-soft-red:#ED4337;
34 | $sw-orange:#FF9900;
35 | $sw-info:#47AFE8;
36 | $sw-unknown:#CCCCCC;
37 |
38 | $sw-icon-critical:$sw-red;
39 | $sw-icon-error:#FF0000;
40 | $sw-icon-warn:$sw-orange;
41 | $sw-icon-warn-minor:#FFCC00;
42 | $sw-icon-warn-low:#EFE47E;
43 | $sw-icon-good:$sw-green;
44 | $sw-icon-info:$sw-info;
45 | $sw-icon-unknown:$sw-unknown;
46 |
47 | //Borders
48 | $sw-border-color:#ccc;
49 | $sw-light-border-color:#eee;
50 | $sw-border-radius:2px;
51 |
--------------------------------------------------------------------------------
/src/assets/styles/fonts/Metropolis-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/Metropolis-Light.woff2
--------------------------------------------------------------------------------
/src/assets/styles/fonts/Metropolis-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/Metropolis-Medium.woff2
--------------------------------------------------------------------------------
/src/assets/styles/fonts/Metropolis-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/Metropolis-Regular.woff2
--------------------------------------------------------------------------------
/src/assets/styles/fonts/Metropolis-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/Metropolis-SemiBold.woff2
--------------------------------------------------------------------------------
/src/assets/styles/fonts/roboto-mono-bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/roboto-mono-bold.woff2
--------------------------------------------------------------------------------
/src/assets/styles/fonts/roboto-mono-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrin9/OpenAPI-Viewer/a898e33075e5c5b6a50ee806f0c1d4c4e4441ae1/src/assets/styles/fonts/roboto-mono-regular.woff2
--------------------------------------------------------------------------------
/src/assets/styles/index.scss:
--------------------------------------------------------------------------------
1 | @import "~@/assets/styles/_vars.scss";
2 | @import "~@/assets/styles/_typography.scss";
3 | @import "~@/assets/styles/_element_vars.scss"; /* This contains all customizations and then loading of elements theme css */
4 | @import "~@/assets/styles/_sw_form.scss";
5 | @import "~@/assets/styles/_table.scss";
6 | @import "~@/assets/styles/_slideout.scss";
7 | @import url("https://fonts.googleapis.com/css?family=Nunito:300,400,600,700");
8 |
9 |
10 | body, html{
11 | width:100%;
12 | height:100%;
13 | margin:0;
14 | padding:0;
15 | font-family: $sw-font-family, 'Nunito', sans-serif;
16 | font-weight:400;
17 | font-size: 14px;
18 | color:#333;
19 | letter-spacing:normal;
20 | &::-webkit-scrollbar {width: 8px; height:8px}
21 | &::-webkit-scrollbar-track {background-color: transparent;}
22 | &::-webkit-scrollbar-thumb {
23 | background-color: rgba(0,0,0,0.4);
24 | border-radius:3px;
25 | }
26 | }
27 |
28 | input, select, button {
29 | font-family: $sw-font-family, 'Nunito', sans-serif;
30 | font-weight:400;
31 | }
32 |
33 | a{
34 | color: darken($sw-info,5%);
35 | }
36 |
37 | .sw-row {
38 | display:flex;
39 | align-items:center;
40 | flex-direction: row;
41 | }
42 | .sw-col {
43 | display:flex;
44 | align-items:stretch;
45 | flex-direction: column;
46 | }
47 |
48 | .sw-section-title {
49 | font-size:20px;
50 | white-space:nowrap;
51 | overflow: hidden;
52 | text-overflow: ellipsis;
53 | }
54 |
55 |
56 | .sw-section-heading1 {
57 | font-size: 16px;
58 | font-weight:bold;
59 | margin: 20px 0 4px 0;
60 | }
61 |
62 | .sw-section-heading2 {
63 | font-size: 14px;
64 | font-weight:bold;
65 | margin: 16px 0 4px 0;
66 | }
67 |
68 | .sw-section-heading3 {
69 | font-size: 12px;
70 | font-weight:bold;
71 | margin: 12px 0 4px 0;
72 | }
73 |
74 | .sw-gray-text{
75 | vertical-align: middle;
76 | color: #999;
77 | }
78 |
79 | .sw-gray-small-text{
80 | font-size: 12px;
81 | line-height: 12px;
82 | vertical-align: middle;
83 | color: #999;
84 | }
85 |
86 | .sw-blue-small-text{
87 | font-size: 12px;
88 | line-height: 12px;
89 | vertical-align: middle;
90 | color: $sw-blue-text;;
91 | }
92 | .sw-blue-bold-small-text{
93 | font-size: 12px;
94 | font-weight:bold;
95 | line-height: 12px;
96 | vertical-align: middle;
97 | color: $sw-blue-text;;
98 | }
99 |
100 |
101 | .sw-border{
102 | border:1px solid $sw-border-color;
103 | border-radius: $sw-border-radius;
104 | }
105 | .sw-light-border{
106 | border:1px solid $sw-light-border-color;
107 | border-radius: $sw-border-radius;
108 | }
--------------------------------------------------------------------------------
/src/components/AppShell.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
Paste JSON String below
29 |
30 |
LOAD
31 |
32 |
33 |
34 |
35 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | {{parsedSpec.info.title}}
77 | {{parsedSpec.info.version}}
78 |
79 |
80 |
81 |
82 |
85 |
86 |
87 |
88 |
92 |
93 |
94 |
95 |
96 |
97 |
{{tag.name}}
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
353 |
354 |
355 |
445 |
--------------------------------------------------------------------------------
/src/components/EndPoint.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
14 |
{{fullPath.method}}
15 |
{{fullPath.path}}
16 |
Depricated
17 |
18 |
{{ fullPath.summary }}
19 |
20 |
21 |
22 |
23 |
24 |
{{fullPath.summary}}
25 |
26 |
27 |
28 |
29 |
30 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
89 |
90 |
91 |
333 |
--------------------------------------------------------------------------------
/src/components/Logo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/components/ParameterInputs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | * {{param.name}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | {{ param.schema.pattern? "Pattern: " + param.schema.pattern : "" }}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
79 |
80 |
103 |
104 |
--------------------------------------------------------------------------------
/src/components/RequestParameters.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
PATH PARAMETERS
12 |
13 |
14 |
15 |
16 |
17 |
QUERY PARAMETERS
18 |
19 |
20 |
21 |
22 |
23 |
FORM DATA PARAMETERS
24 |
25 |
26 |
27 |
28 |
29 |
BODY PARAMETERS
30 |
31 |
32 |
33 | {{requestBody.description }}
34 |
35 |
36 |
37 |
38 |
39 | {{ selectedMimeReqKey }}
40 |
41 |
42 |
47 |
52 |
53 |
54 |
55 |
56 |
57 |
72 |
73 |
74 |
75 |
76 |
77 |
HEADER PARAMETERS
78 |
79 |
80 |
81 |
82 |
83 |
COOKIE PARAMETERS
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
TRY
92 |
93 | {{responseStatusCode}} : {{responseStatusText}}
94 |
95 |
96 |
CLEAR
97 |
COPY
98 |
99 |
100 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
337 |
338 |
385 |
386 |
--------------------------------------------------------------------------------
/src/components/ResponseTypes.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
12 |
13 | {{statusRespCode}}
14 | : {{statusRespObj.description}}
15 |
16 |
17 |
18 |
19 |
20 | {{ selectedMimeValueForEachStatus[statusRespCode] }}
21 |
22 |
23 |
24 |
30 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
56 |
57 |
58 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
Response Headers
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
160 |
161 |
177 |
178 |
--------------------------------------------------------------------------------
/src/components/SecuritySchemes.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
AUTHENTICATION {{authStatusData}}
4 |
5 |
73 |
74 |
75 |
76 |
77 |
154 |
155 |
169 |
170 |
--------------------------------------------------------------------------------
/src/components/tab/TabPanel.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/components/tree/BracketLeft.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 | {{ Array.isArray(data) ? '[' : '{' }}
9 |
10 |
14 | {{ doubleBracketsGenerator(data) }}
15 |
16 |
17 |
18 |
19 |
20 |
45 |
--------------------------------------------------------------------------------
/src/components/tree/BracketMixin.js:
--------------------------------------------------------------------------------
1 | export default {
2 | props: {
3 | visible: {
4 | required: true,
5 | type: Boolean
6 | },
7 | data: {
8 | required: true
9 | },
10 | notLastKey: Boolean
11 | },
12 | computed: {
13 | dataVisiable: {
14 | get () {
15 | return this.visible
16 | },
17 | set (val) {
18 | this.$emit('update:visible', val)
19 | }
20 | }
21 | },
22 | methods: {
23 | //Toggle brackets to expand | close
24 | toggleBrackets () {
25 | this.dataVisiable = !this.dataVisiable
26 | },
27 | // if not the last item, automatically add a comma
28 | bracketsFormatter (brackets) {
29 | return this.notLastKey ? `${brackets},` : brackets
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/src/components/tree/BracketRight.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 | {{ bracketsFormatter(Array.isArray(data) ? ']' : '}') }}
7 |
8 |
9 |
10 |
11 |
12 |
19 |
--------------------------------------------------------------------------------
/src/components/tree/ContentBlock.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ currentKey }}:
4 |
{{ getText() }}
5 |
6 |
7 | {{description}}
8 |
9 |
10 | {{ descrClass==='sw-descr-collapsed'? '\u2935' : '\u2934' }}
11 |
12 |
13 |
14 |
15 |
63 |
--------------------------------------------------------------------------------
/src/components/tree/JsonTree.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 | {{ currentKey }}:
14 |
15 |
16 |
21 |
22 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
48 |
49 |
50 |
51 |
52 |
146 |
147 |
251 |
252 |
--------------------------------------------------------------------------------
/src/lang/SupportedLang.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {label:'English', code:'en-US', extendedSupport:false},
3 | {label:'Arabic (Persian)', code:'en-US', extendedSupport:true},
4 | {label:'Baltic', code:'en-US', extendedSupport:true},
5 | {label:'Chinese', code:'zh-CN', extendedSupport:false},
6 | {label:'Cyrillic (Russian)', code:'en-US', extendedSupport:true},
7 | {label:'Dutch', code:'en-US', extendedSupport:true},
8 | {label:'Finnish', code:'en-US', extendedSupport:true},
9 | {label:'French', code:'en-US', extendedSupport:false},
10 | {label:'German', code:'en-US', extendedSupport:false},
11 | {label:'Greek', code:'en-US', extendedSupport:true},
12 | {label:'Hebrew', code:'en-US', extendedSupport:true},
13 | {label:'Italian', code:'en-US', extendedSupport:true},
14 | {label:'Japanese', code:'en-US', extendedSupport:false},
15 | {label:'Korean', code:'en-US', extendedSupport:true},
16 | {label:'Portuguese', code:'en-US', extendedSupport:true},
17 | {label:'Spanish', code:'en-US', extendedSupport:false},
18 | {label:'Swedish', code:'en-US', extendedSupport:true},
19 | {label:'Thai', code:'en-US', extendedSupport:true},
20 | {label:'Turkish', code:'en-US', extendedSupport:true},
21 | {label:'Vietnamese', code:'en-US', extendedSupport:true}
22 | ]
23 |
--------------------------------------------------------------------------------
/src/lang/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | "m": {
3 | product_name: "API View",
4 | change_lang:'Change Language',
5 | login:'LOGIN',
6 | username:'User Name',
7 | password:'Password',
8 | domain:'Domain'
9 | }
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/src/lang/es.js:
--------------------------------------------------------------------------------
1 | export default {
2 | "m": {
3 | product_name: "電子メールセキュリティ",
4 | change_lang:'言語を変えてください',
5 | login:'ログイン',
6 | username:'ユーザー名',
7 | password:'パスワード',
8 | domain:'ドメイン'
9 | }
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/src/lang/hi.js:
--------------------------------------------------------------------------------
1 | export default {
2 | "m": {
3 | product_name: "मृन",
4 | change_lang:'भाषा बदलो',
5 | login:'लॉग इन करें',
6 | username:'उपयोगकर्ता नाम',
7 | password:'पारण शब्द',
8 | domain:'डोमेन'
9 |
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/lang/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueI18n from 'vue-i18n'
3 | import axios from 'axios'
4 |
5 | Vue.use(VueI18n)
6 |
7 | const i18n = new VueI18n({
8 | locale: '', // set locale
9 | fallbackLocale: 'en',
10 | })
11 |
12 | const loadedLanguages = [] // our default language that is prelaoded
13 |
14 | function setI18nLanguage (lang) {
15 | i18n.locale = lang
16 | axios.defaults.headers.common['Accept-Language'] = lang
17 | return lang
18 | }
19 |
20 | export function loadLang (lang) {
21 | if (i18n.locale !== lang) {
22 | if (!loadedLanguages.includes(lang)) {
23 | return import(/* webpackChunkName: "lang-[request]" */ `@/lang/${lang}`).then(msgs => {
24 | Vue.config.lang = lang;
25 | i18n.setLocaleMessage(lang, msgs.default)
26 | loadedLanguages.push(lang)
27 | return setI18nLanguage(lang)
28 | })
29 | }
30 | return Promise.resolve(setI18nLanguage(lang))
31 | }
32 | return Promise.resolve(lang)
33 | }
34 |
35 |
36 | export default i18n;
37 |
--------------------------------------------------------------------------------
/src/lang/zh.js:
--------------------------------------------------------------------------------
1 | export default {
2 | "m": {
3 | product_name: "姆琳",
4 | change_lang:'改变语言',
5 | login:'登录',
6 | username:'用户名',
7 | password:'密码',
8 | domain:'域'
9 | }
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/src/lib/authUtils.js:
--------------------------------------------------------------------------------
1 | /* For Delayed Event Handler Execution */
2 | function redirectToAuthorizationUrl (authorizationUrl, clientId, redirectUrl, responseType, scopes) {
3 | let randomStateId=Math.floor((1 + Math.random()) * 0x10000000000).toString(16);
4 | let authUrl = `${authorizationUrl}?response_type=${responseType}&client_id=${clientId}&redirect_uri=${redirectUrl}&state=${randomStateId}`;
5 | if (scopes){
6 | authUrl = authUrl + "&scope=" +scopes;
7 | }
8 | window.location.assign(authUrl);
9 | }
10 |
11 |
12 |
13 |
14 | export { redirectToAuthorizationUrl}
15 |
--------------------------------------------------------------------------------
/src/lib/parserUtils.js:
--------------------------------------------------------------------------------
1 | import $RefParser from 'json-schema-ref-parser';
2 | import converter from 'swagger2openapi';
3 |
4 | export default function ProcessSpec(specUrl){
5 | let p;
6 | let options = {patch:true,warnOnly:true}
7 | if (typeof specUrl==="string"){
8 | p = converter.convertUrl(specUrl,options);
9 | }
10 | else{
11 | p = converter.convertObj(specUrl,options);
12 | }
13 | return p
14 | .then(function(api3Spec) {
15 | console.info("%c Convertion to OpenAPI 3.0 - Success !!! ","color:cornflowerblue");
16 | return $RefParser.dereference(api3Spec.openapi);
17 | })
18 | .then(function(deReffedSpec) {
19 | console.info("%c OpenAPI 3.0 Dereferencing - Success !!! ","color:cornflowerblue");
20 | let methods=['get','put','post','delete','patch','options','head'];
21 | let tags=[];
22 | let totalPathCount=0;
23 | // For each path find the tag and push it into the corrosponding tag
24 | for (let path in deReffedSpec.paths) {
25 | let commonParams = deReffedSpec.paths[path].parameters;
26 | let commonPathProp = {
27 | "summary" : deReffedSpec.paths[path].summary,
28 | "description": deReffedSpec.paths[path].description,
29 | "servers" : deReffedSpec.paths[path].servers?deReffedSpec.paths[path].servers:[],
30 | "parameters" : deReffedSpec.paths[path].parameters?deReffedSpec.paths[path].parameters:[]
31 | };
32 | methods.forEach(function(methodName){
33 | let tagObj;
34 | let tagText;
35 | let tagDescr;
36 |
37 | if (deReffedSpec.paths[path][methodName]){
38 | let fullPath = deReffedSpec.paths[path][methodName];
39 | // If path.methods are tagged, else generate it from path
40 | if(fullPath.tags){
41 | tagText = fullPath.tags[0];
42 | if (deReffedSpec.tags){
43 | tagDescr = deReffedSpec.tags.find(function(v){
44 | return (v.name === tagText)
45 | });
46 | }
47 | }
48 | else {
49 | let firstWordEndIndex = path.indexOf("/",1);
50 | if (firstWordEndIndex === -1){
51 | firstWordEndIndex = (path.length-1);
52 | }
53 | else{
54 | firstWordEndIndex=firstWordEndIndex-1;
55 | }
56 | tagText = path.substr(1,firstWordEndIndex);
57 | }
58 | tagObj = tags.find(v => v.name == tagText);
59 |
60 | if (!tagObj){
61 | tagObj = {
62 | show : true,
63 | "name" : tagText,
64 | "description" : tagDescr?tagDescr.description:"",
65 | "paths" : []
66 | }
67 | tags.push(tagObj);
68 | }
69 |
70 | //Generate Path summary and Description if it is missing for a method
71 | let summary = fullPath.summary?fullPath.summary:"";
72 | let description = fullPath.description?fullPath.description:"";
73 | if (!summary && description){
74 | if (description.length > 100){
75 | let charIndex = -1;
76 | charIndex = description.indexOf("\n");
77 | if (charIndex === -1 || charIndex > 100){
78 | charIndex = description.indexOf(". ");
79 | }
80 | if (charIndex === -1 || charIndex > 100){
81 | charIndex = description.indexOf(".");
82 | }
83 | if (charIndex === -1 || charIndex > 100){
84 | summary = description;
85 | }
86 | else {
87 | summary = description.substr(0, charIndex);
88 | }
89 | }
90 | else{
91 | summary = description;
92 | }
93 | }
94 |
95 | // Merge Common Parameters with This methods parameters
96 | let finalParameters =[];
97 | if (commonParams){
98 | if (fullPath.parameters){
99 | finalParameters = commonParams.filter(commonParam => {
100 | if (! fullPath.parameters.some( param => (commonParam.name===param.name && commonParam.in===param.in) )) {
101 | return commonParam;
102 | }
103 | }).concat(fullPath.parameters)
104 | }
105 | else{
106 | finalParameters = commonParams.slice(0);
107 | }
108 | }
109 | else{
110 | finalParameters = fullPath.parameters? fullPath.parameters.slice(0):[];
111 | }
112 |
113 | //Update Responses
114 | tagObj.paths.push({
115 | "show" : true,
116 | "expanded" : false,
117 | "expandedAtLeastOnce":false,
118 | "summary" : summary,
119 | "method" : methodName,
120 | "description" : fullPath.description,
121 | "path" : path,
122 | "operationId" : fullPath.operationId,
123 | "requestBody" : fullPath.requestBody,
124 | "parameters" : finalParameters,
125 | "servers" : fullPath.servers ? commonPathProp.servers.concat(fullPath.servers):commonPathProp.servers,
126 | "responses" : fullPath.responses,
127 | "depricated" : fullPath.deprecated,
128 | "security" : fullPath.security,
129 | "commonSummary" : commonPathProp.summary,
130 | "commonDescription" : commonPathProp.description,
131 | });
132 | totalPathCount++;
133 | }
134 | }); // End of Methods
135 |
136 | }
137 |
138 | let securitySchemes={};
139 | let servers=[];
140 |
141 | securitySchemes = (deReffedSpec.components? deReffedSpec.components.securitySchemes:{});
142 | if (deReffedSpec.servers){
143 | deReffedSpec.servers.map(function(v){
144 | if (v.url && v.url.substr(0,1) === "/"){
145 | let paths = specUrl.split("/");
146 | v.url = paths[0]+"//"+paths[2]+v.url;
147 | }
148 | })
149 | }
150 | servers = deReffedSpec.servers;
151 | let parsedSpec = {
152 | "info" : deReffedSpec.info,
153 | "tags" : tags,
154 | "externalDocs": deReffedSpec.externalDocs,
155 | "securitySchemes": securitySchemes,
156 | "servers" : servers, // In swagger 2, its generated from schemes, host and basePath properties
157 | "basePath": deReffedSpec.basePath, // Only available in swagger V2
158 | "totalPathCount" : totalPathCount
159 | }
160 | return Promise.resolve(parsedSpec);
161 | })
162 | .catch(function(err) {
163 | console.error(err);
164 | });
165 |
166 | }
167 |
168 |
169 |
170 |
171 | export {convertSpec}
172 |
--------------------------------------------------------------------------------
/src/lib/restUtils.js:
--------------------------------------------------------------------------------
1 | import store from '@/store';
2 | import axios from 'axios';
3 |
4 |
5 | function callEndPoint (method, url, pathParams, queryParams, reqBodyMimeType, requestBody, headerParams, formParams, cookieParams ) {
6 | let endPoint= url;
7 | let qParams = {};
8 | let updatedQParams;
9 | let hParams = {};
10 |
11 |
12 |
13 | // Path Params
14 | if (pathParams){
15 | pathParams.map(function(v){
16 | endPoint = endPoint.replace("{"+v.name+"}", v.example);
17 | });
18 | }
19 | // Query Params
20 | if (queryParams){
21 | queryParams.map(function(v){
22 | if (v.example){
23 | qParams[v.name] = v.example;
24 | }
25 | });
26 | //updatedQParams = parseQueryStringArrayParams(qParams);
27 | //debugger;
28 | }
29 |
30 | // Header Params
31 | if (headerParams){
32 | headerParams.map(function(v){
33 | if (v.example){
34 | hParams[v.name] = v.example;
35 | }
36 | });
37 | }
38 |
39 | // Additional Header Param for apiKey/basic/bearer tokens
40 | if (store.state.reqTokenType==='bearer' ){
41 | hParams['Authorization'] = 'Bearer ' + store.state.reqToken;
42 | }
43 | if (store.state.reqTokenType==='basic' ){
44 | hParams['Authorization'] = 'Basic ' + store.state.reqToken; // reqToken will be Base64 encoded 'usr:pwd'
45 | }
46 | else if (store.state.reqTokenType==='apikey' && store.state.reqSendTokenIn==='header'){
47 | hParams[store.state.reqHeader] = store.state.reqToken;
48 | }
49 |
50 | // Request Body
51 | let reqBodyContent ="";
52 | if (Object.keys(requestBody).length === 0 || Object.keys(requestBody[reqBodyMimeType]).length===0){
53 | //hParams['Content-Type'] = 'application/json';
54 | reqBodyContent = "";
55 | }
56 | else{
57 | hParams['Content-Type'] = reqBodyMimeType; //TODO: check if its a valid mime type
58 | if (requestBody[reqBodyMimeType].examples[0]){
59 | if (reqBodyMimeType.toLowerCase().includes("json") ){
60 | try{
61 | reqBodyContent = JSON.parse(requestBody[reqBodyMimeType].examples[0]);
62 | }
63 | catch{
64 | reqBodyContent="";
65 | }
66 | }
67 | else{
68 | reqBodyContent = requestBody[reqBodyMimeType].examples[0];
69 | }
70 | }
71 | }
72 | //TODO: Deal with formParams and cookieParams later
73 |
74 |
75 | endPoint= store.state.selectedApiServer.replace(/^\/|\/$/g, '') +"/" + endPoint.replace(/^\/|\/$/g, '');
76 | return axios.request({
77 | 'method' : method,
78 | 'url' : endPoint,
79 | 'params' : qParams, // Query Params
80 | 'data' : reqBodyContent, // Body Params
81 | 'headers' : hParams, // Header Params
82 | 'paramsSerializer': qParams => serealizeQueryString(qParams)
83 | });
84 | //return endPoint;
85 | }
86 |
87 | function getOauthToken(tokenUrl, clientId, clientSecret, authCode, redirectUri){
88 | let finalTokenUrl = `${tokenUrl}?grant_type=authorization_code&client_id=${clientId}&client_secret=${clientSecret}&code=${authCode}&redirect_uri=${redirectUri}&code_verifier=abcd&scope=repository`;
89 |
90 | console.log("before making POST call")
91 | let postData = {
92 | "grant_type":"authorization_code",
93 | "client-id":clientId,
94 | "client_secret":clientSecret,
95 | "code":authCode,
96 | "redirect_uri":redirectUri
97 | }
98 |
99 |
100 | axios.request({
101 | method: 'post',
102 | url: finalTokenUrl,
103 | headers: {
104 | accept: 'application/json'
105 | }
106 | }).then((response) => {
107 | console.log("Success POST call auth-code")
108 | const accessToken = response.data.access_token
109 | });
110 |
111 | /*
112 | axios.request({
113 | "method": 'post',
114 | "url": tokenUrl,
115 | "data":postData,
116 | "headers": {
117 | "accept": 'application/json'
118 | }
119 | }).then((response) => {
120 | console.log("Success POST call auth-code")
121 | debugger;
122 | const accessToken = response.data.access_token
123 | });
124 | */
125 |
126 |
127 |
128 | }
129 |
130 | // To convert an Object to QueryString
131 | function serealizeQueryString(params) {
132 | const keys = Object.keys(params);
133 | let options = '';
134 |
135 | keys.forEach((key) => {
136 | const isParamTypeObject = typeof params[key] === 'object';
137 | const isParamTypeArray = isParamTypeObject && (params[key].length >= 0);
138 |
139 | if (!isParamTypeObject) {
140 | options += `${key}=${params[key]}&`;
141 | }
142 |
143 | if (isParamTypeObject && isParamTypeArray) {
144 | params[key].forEach((element) => {
145 | options += `${key}=${element}&`;
146 | });
147 | }
148 | });
149 | return options ? options.slice(0, -1) : options;
150 | };
151 |
152 | function parseQueryString(queryString, key){
153 | var vars = queryString.split('&');
154 | for (let i = 0; i < vars.length; i++) {
155 | let pair = vars[i].split('=');
156 | if (decodeURIComponent(pair[0]) == key) {
157 | return decodeURIComponent(pair[1]);
158 | }
159 | }
160 | }
161 |
162 | export { callEndPoint, getOauthToken, serealizeQueryString, parseQueryString }
163 |
--------------------------------------------------------------------------------
/src/lib/utils.js:
--------------------------------------------------------------------------------
1 | /* For Delayed Event Handler Execution */
2 | function debounce (fn, delay) {
3 | var timeoutID = null;
4 | return function () {
5 | clearTimeout(timeoutID)
6 | var args = arguments
7 | var that = this
8 | timeoutID = setTimeout(function () {
9 | fn.apply(that, args)
10 | }, delay)
11 | }
12 | }
13 |
14 | function copyToClipboard(elId) {
15 | /* Get the text field */
16 | var copyText = document.getElementById(elId);
17 |
18 | /* Select the text field */
19 | copyText.select();
20 |
21 | /* Copy the text inside the text field */
22 | document.execCommand("copy");
23 | return copyText.value;
24 | }
25 |
26 | /* Generates an HTML string containing type and constraint info */
27 | function getTypeInfo(schema, overrideAttributes=null, inSingleLine=true){
28 | let html ="";
29 | if (schema.type==="circular"){
30 | return "circular-ref";
31 | }
32 | if (schema.enum){
33 | let opt=""
34 | schema.enum.map(function(v){
35 | opt = opt + v + ", "
36 | });
37 | html = `enum:\u3014 ${opt.slice(0,-2)} \u3015`
38 | }
39 | else if (schema.type){
40 | html = html + schema.type ;
41 | }
42 |
43 | if (schema.type==="integer" || schema.type==="number"){
44 | if (schema.minimum !== undefined && schema.maximum!==undefined){
45 | html = `${html} (${schema.exclusiveMinimum?">":""}${schema.minimum} \u22ef ${schema.exclusiveMaximum?"<":""} ${schema.maximum})`
46 | //html = html+" ( " + (schema.exclusiveMinimum?"> ":"") + schema.minimum + " to " + (schema.exclusiveMaximum?"< ":"") + schema.maximum + " )";
47 | }
48 | else if (schema.minimum!==undefined && schema.maximum===undefined){
49 | html = `${html} (${schema.exclusiveMinimum?">":"\u2265"}${schema.minimum})`
50 | //html = html+" ( " + (schema.exclusiveMinimum?"> ":">=") + schema.minimum + " )";
51 | }
52 | else if (schema.minimum===undefined && schema.maximum!==undefined){
53 | html = `(${schema.exclusiveMaximum?"<":"\u2264"}${schema.maximum})`
54 | //html = html+" ( " + (schema.exclusiveMaximum?"< ":"<=") + schema.maximum + " )";
55 | }
56 | if (schema.multipleOf!==undefined){
57 | html = `(multiple of ${schema.multipleOf})`
58 | //html = html+" ( multiple of:" + schema.multipleOf+ " )";
59 | }
60 | }
61 |
62 | if (schema.type==="string"){
63 | if (schema.minLength !==undefined && schema.maxLength !==undefined ){
64 | html = `${html} (${schema.minLength} to ${schema.maxLength} chars)`;
65 | //html = html+" ( length: " + schema.minLength + " to " + schema.maxLength +" )";
66 | }
67 | else if (schema.minLength!==undefined && schema.maxLength===undefined ){
68 | html = `${html} (min:${schema.minLength})`;
69 | //html = html+" ( min-length: " + schema.minLength + " )";
70 | }
71 | else if (schema.minLength===undefined && schema.maxLength!==undefined ){
72 | html = `${html} (max:${schema.maxLength})`;
73 | //html = html+" ( max-length: " + schema.maxLength +" )";
74 | }
75 | }
76 |
77 | if (overrideAttributes){
78 | if (overrideAttributes.readOnly){
79 | html = `${html} \u24C7`;
80 | }
81 | if (overrideAttributes.writeOnly){
82 | html = `${html} \u24CC`;
83 | }
84 | if (overrideAttributes.deprecated){
85 | html = `${html} \u274c`;
86 | }
87 | }
88 | else{
89 | if (schema.readOnly){
90 | html = `${html} \u24C7`;
91 | }
92 | if (schema.writeOnly){
93 | html = `${html} \u24CC`;
94 | }
95 | if (schema.deprecated){
96 | html = `${html} \u274c`;
97 | }
98 | }
99 |
100 |
101 | let lineBreak = inSingleLine?"":" ";
102 | if (schema.format){
103 | html = html + ` ${lineBreak} (${schema.format})`;
104 | }
105 | if (schema.pattern && !schema.enum){
106 | html = html + ` ${lineBreak}(${schema.pattern})`;
107 | }
108 | return html;
109 | }
110 |
111 |
112 | /* For changing JSON-Schema to a Object Model that can be represnted in a tree-view */
113 | function schemaToModel (schema, obj) {
114 | if (schema==null){
115 | return;
116 | }
117 | if (schema.type==="object" || schema.properties){
118 | for( let key in schema.properties ){
119 | obj[key] = schemaToModel(schema.properties[key],{});
120 | }
121 | }
122 | else if (schema.type==="array" || schema.items ){
123 | //let temp = Object.assign({}, schema.items );
124 | obj = [schemaToModel(schema.items,{}) ]
125 | }
126 | else if (schema.allOf ){
127 | if (schema.allOf.length===1){
128 | if (!schema.allOf[0]){
129 | return `string~|~${schema.description?schema.description:''}`;
130 | }
131 | else{
132 | let overrideAttrib = {
133 | "readOnly":schema.readOnly,
134 | "writeOnly":schema.writeOnly,
135 | "depricated":schema.deprecated
136 | };
137 | return `${ getTypeInfo(schema.allOf[0],overrideAttrib) }~|~${schema.description?schema.description:''}`
138 | }
139 | }
140 |
141 | // If allOf is an array of multiple elements, then they are the keys of an object
142 | let objWithAllProps = {};
143 | schema.allOf.map(function(v){
144 | if (v && v.properties){
145 | let partialObj = schemaToModel(v,{});
146 | Object.assign(objWithAllProps, partialObj);
147 | }
148 | });
149 | obj = objWithAllProps;
150 | }
151 | else{
152 | return `${getTypeInfo(schema)}~|~${schema.description?schema.description:''}`;
153 | }
154 | return obj;
155 | }
156 |
157 |
158 |
159 |
160 | /* Create Example object */
161 | function generateExample(examples, example, schema, mimeType, outputType){
162 | let finalExamples = [];
163 | if (examples){
164 | for (let eg in examples){
165 | let egJson="";
166 | //TODO: in case the mimeType is XML then parse it as XML
167 | //egJson = JSON.parse(examples[eg].value);
168 | finalExamples.push({
169 | "exampleType" : "json",
170 | "exampleValue": outputType==="text"?JSON.stringify(examples[eg].value,undefined,2):examples[eg].value
171 | });
172 | }
173 | }
174 | else if (example){
175 | //TODO: in case the mimeType is XML then parse it as XML
176 | finalExamples.push({
177 | "exampleType" : "json",
178 | "exampleValue": outputType==="text"?JSON.stringify(example,undefined,2):example
179 | });
180 | }
181 |
182 | if (finalExamples.length==0 ){
183 | // If schema examples are not provided then generate one from Schema (only JSON fomat)
184 | if (schema){
185 | //TODO: in case the mimeType is XML then parse it as XML
186 | let egJson = schemaToObj(schema,{}, {includeReadOnly:true, includeWriteOnly:true, deprecated:true});
187 | finalExamples.push({
188 | "exampleType" : "json",
189 | "exampleValue": outputType==="text"?JSON.stringify(egJson,undefined,2):egJson
190 | });
191 | }
192 | else{
193 | // No Example or Schema provided
194 | finalExamples.push({
195 | "exampleType" : "text",
196 | "exampleValue": ""
197 | });
198 | }
199 | }
200 | return finalExamples;
201 | }
202 |
203 | /* For changing JSON-Schema to a Sample Object, as per the schema */
204 | function schemaToObj (schema, obj, config={}) {
205 | if (schema==null){
206 | return;
207 | }
208 | if (schema.type==="object" || schema.properties){
209 | for( let key in schema.properties ){
210 | if ( schema.properties[key].deprecated ) {
211 | continue;
212 | }
213 | if ( schema.properties[key].readOnly && !config.includeReadOnly ) {
214 | continue;
215 | }
216 | if ( schema.properties[key].writeOnly && !config.includeWriteOnly ) {
217 | continue;
218 | }
219 | //let temp = Object.assign({}, schema.properties[key] );
220 | obj[key] = schemaToObj(schema.properties[key],{}, config);
221 | }
222 | }
223 | else if (schema.type==="array" || schema.items ){
224 | //let temp = Object.assign({}, schema.items );
225 | obj = [schemaToObj(schema.items,{}, config) ]
226 | }
227 | else if (schema.allOf ){
228 |
229 | if (schema.allOf.length===1){
230 | if (!schema.allOf[0]){
231 | return "string";
232 | }
233 | else{
234 | return getSampleValueByType(schema.allOf[0]);
235 | }
236 | }
237 | let objWithAllProps = {};
238 | schema.allOf.map(function(v){
239 | if (v && v.type){
240 | let partialObj = schemaToObj(v,{}, config);
241 | Object.assign(objWithAllProps, partialObj);
242 | }
243 | });
244 | obj = objWithAllProps;
245 | }
246 | else{
247 | return getSampleValueByType(schema);
248 | }
249 | return obj;
250 | }
251 |
252 | function getSampleValueByType(schemaObj) {
253 | if (schemaObj.example) {
254 | return schemaObj.example;
255 | }
256 |
257 | if (Object.keys(schemaObj).length === 0) {
258 | return null;
259 | }
260 |
261 | const typeValue = schemaObj.format || schemaObj.type || (schemaObj.enum ? 'enum' : null);
262 | switch (typeValue) {
263 | case 'int32':
264 | case 'int64':
265 | case 'integer':
266 | return 0;
267 | case 'float':
268 | case 'double':
269 | case 'number':
270 | return 0.5;
271 | case 'string':
272 | return (schemaObj.enum ? schemaObj.enum[0] : (schemaObj.pattern ? schemaObj.pattern : "string"))
273 | case 'byte':
274 | return btoa('string');
275 | case 'binary':
276 | return 'binary';
277 | case 'boolean':
278 | return false;
279 | case 'date':
280 | return (new Date(0)).toISOString().split('T')[0];
281 | case 'date-time':
282 | return (new Date(0)).toISOString();
283 | case 'dateTime':
284 | return (new Date(0)).toISOString();
285 | case 'password':
286 | return 'password';
287 | case 'enum':
288 | return schemaObj.enum[0];
289 | case 'uri':
290 | return 'http://example.com';
291 | case 'uuid':
292 | return '3fa85f64-5717-4562-b3fc-2c963f66afa6';
293 | case 'email':
294 | return 'user@example.com';
295 | case 'hostname':
296 | return 'example.com';
297 | case 'ipv4':
298 | return '198.51.100.42';
299 | case 'ipv6':
300 | return '2001:0db8:5b96:0000:0000:426f:8e17:642a';
301 | case 'circular':
302 | return 'CIRCULAR REF';
303 | default:
304 | if (schemaObj.nullable) {
305 | return null;
306 | }
307 | else {
308 | console.warn('Unknown schema value', schemaObj);
309 | return '?';
310 | }
311 | }
312 | }
313 |
314 | function schemaToElTree(schema, obj, name) {
315 | if (schema.type==="object" || schema.properties){
316 | for( let key in schema.properties ){
317 | let temp = Object.assign({}, schema.properties[key] );
318 | if (schema.properties[key].type==="object" || schema.properties[key].properties){
319 | obj.push({
320 | "label": {label:key , type:schema.properties[key].type, descr:schema.properties[key].description},
321 | "children": schemaToElTree(temp, [], key)
322 | });
323 | }
324 | else if (schema.properties[key].type==="array" || schema.properties[key].items){
325 | let typeOfArr="";
326 | if (schema.properties[key].items.properties){
327 | typeOfArr = "array of objects";
328 | }
329 | else {
330 | typeOfArr = "array of " + schema.properties[key].items.type;
331 | }
332 | obj.push({
333 | "label" : {label:"[ "+key+" ]", type:typeOfArr, descr:schema.properties[key].description},
334 | "children": schemaToElTree(temp, [], key)
335 | });
336 | }
337 | else{
338 | let typeOfField="";
339 | if (schema.properties[key].enum){
340 | typeOfField = "Enum: " + schema.properties[key].enum.join(" | ");
341 | }
342 | else{
343 | typeOfField = schema.properties[key].type;
344 | }
345 | obj.push({
346 | "label": {label:key, type:typeOfField, descr:schema.properties[key].description},
347 | });
348 | }
349 | }
350 | }
351 | else if (schema.type==="array"){
352 | if (schema.items.type==="object" || schema.items.properties){
353 | let temp = Object.assign({}, schema.items);
354 | return schemaToElTree(temp, []);
355 | }
356 | else if (schema.items.type==="array"){
357 | obj.push({
358 | "label": {label:"[ "+schema.items.type+" ]", type:schema.items.type, descr:schema.items.description }
359 | });
360 | }
361 | else{
362 | return;
363 | /*
364 | obj.push({
365 | "label": {label:"["+schema.items.type+" ]", type:schema.items.type, descr:schema.items.description}
366 | });
367 | */
368 | }
369 | }
370 | else{
371 | obj.push({
372 | "label" : {label:name, type:schema.type, descr:schema.description}
373 | });
374 | }
375 | return obj;
376 | }
377 |
378 | function getBaseUrlFromUrl(url){
379 | let pathArray = url.split( '/' );
380 | return pathArray[0] + "//" + pathArray[2];
381 | }
382 |
383 | function removeCircularReferences(level=0) {
384 | const seen = new WeakSet();
385 | return (key, value) => {
386 | if (typeof value === "object" && value !== null) {
387 | if (seen.has(value)) {
388 | //let dupVal = Object.assign({}, value);
389 | //return;
390 | if (level > 0){
391 | return {};
392 | }
393 | else{
394 | let dupVal = JSON.parse(JSON.stringify(value, removeCircularReferences(level+1)));
395 | seen.add(dupVal);
396 | return dupVal;
397 | }
398 |
399 | }
400 | seen.add(value);
401 | }
402 | return value;
403 | };
404 | };
405 |
406 |
407 | export { debounce, schemaToModel, schemaToObj, schemaToElTree, generateExample, getTypeInfo, getBaseUrlFromUrl, removeCircularReferences }
408 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import router from './router'
3 | import store from './store'
4 |
5 |
6 | import App from '@/App.vue';
7 | import marked from 'marked';
8 | import elementLocale from 'element-ui/lib/locale'
9 | import elementLang from 'element-ui/lib/locale/lang/en'; //Its ok if this line shows error in VSCode
10 |
11 | //import ElementUI from 'element-ui';
12 | /*
13 | import Button from 'element-ui/lib/button'
14 | import Input from 'element-ui/lib/input'
15 | import Switch from 'element-ui/lib/switch'
16 | import Select from 'element-ui/lib/select'
17 | import Tabs from 'element-ui/lib/tabs'
18 | import TabPane from 'element-ui/lib/tab-pane'
19 | import Tree from 'element-ui/lib/tree'
20 | import Loading from 'element-ui/lib/loading'
21 | import Message from 'element-ui/lib/message'
22 | */
23 | //import i18n, {loadLang} from '@/lang/index';
24 |
25 | import {
26 | Switch,
27 | Select,
28 | Option,
29 | Tabs,
30 | TabPane,
31 | Loading,
32 | Message
33 | } from 'element-ui';
34 |
35 |
36 | Vue.config.productionTip = false
37 |
38 | elementLocale.use(elementLang);
39 | Vue.use(Switch);
40 | Vue.use(Select);
41 | Vue.use(Option);
42 | Vue.use(Tabs);
43 | Vue.use(TabPane);
44 | Vue.use(Loading.directive);
45 | Vue.prototype.$message = Message;
46 | Vue.prototype.$loading = Loading.service;
47 | Vue.prototype.$marked = marked;
48 |
49 | //Vue.use(ElementUI,{locale});
50 |
51 | const app = new Vue({
52 | router,
53 | store,
54 | render: createEle => createEle(App)
55 | }).$mount('#app');
--------------------------------------------------------------------------------
/src/router.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import AppShell from '@/components/AppShell.vue'
4 |
5 | Vue.use(Router)
6 |
7 | const router = new Router({
8 | //mode: 'history',
9 | routes: [
10 | {
11 | path: '/',
12 | redirect: function(to){
13 | return 'load';
14 | }
15 | },
16 | { path: '/load/:specUrl?' , name:'load', component: AppShell },
17 | { path: '/reload', name: 'reload', component: AppShell },
18 | ]
19 | });
20 |
21 | router.beforeEach((to, from, next) => {
22 | if (to.path.startsWith("/load")){
23 | if (!to.params.specUrl){
24 | let specUrl="";
25 | //specUrl="https://raw.githubusercontent.com/Rebilly/ReDoc/master/demo/big-openapi.json";
26 | specUrl="https://api.apis.guru/v2/specs/bitbucket.org/2.0/swagger.json";//All auth type
27 | //specUrl="http://developer.twinehealth.com/swagger.json";
28 | //specUrl= "https://petstore.swagger.io/v2/swagger.json";
29 | //specUrl= "http://10.21.83.83:8080/api/swagger.json";
30 | //specUrl= "https://raw.githubusercontent.com/APIs-guru/unofficial_openapi_specs/master/github.com/v3/swagger.yaml", //large spec
31 | //specUrl= "https://fakerestapi.azurewebsites.net/swagger/docs/v1";
32 | //specUrl= "https://api.apis.guru/v2/specs/twilio.com/2010-04-01/swagger.json"; //xml responses
33 | //specUrl="https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/uspto.yaml"; // OpenAPI 3 with examples
34 | //specUrl="https://api.apis.guru/v2/specs/stackexchange.com/2.0/swagger.json";
35 | //specUrl="https://api.apis.guru/v2/specs/cisco.com/0.0.3/swagger.json"; // Has oAuth2 instructions
36 | router.push(`/load/${encodeURIComponent(specUrl)}`)
37 | }
38 | }
39 | next();
40 |
41 | });
42 |
43 | export default router;
--------------------------------------------------------------------------------
/src/store.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import VuexPersistence from 'vuex-persist'
4 |
5 | Vue.use(Vuex)
6 |
7 | const persistMutations=['lang','specUrl','reqToken', 'reqTokenType','reqHeader','reqSendTokenIn','oAuthTokenUrl']; // only these mutations will be persisted
8 | const vuexLocal = new VuexPersistence({
9 | key:'mrindoc',
10 | storage: window.localStorage,
11 | filter: function(mutation){
12 | return persistMutations.indexOf(mutation.type)>=0 ? true:false;
13 | }
14 | })
15 |
16 |
17 |
18 |
19 | export default new Vuex.Store({
20 | state: {
21 | lang:'en',
22 | specUrl:"",
23 | isDevMode:false,
24 | selectedApiServer:"",
25 | reqHeader:"",
26 | reqToken:"",
27 | reqTokenType:"", // can be apikey, basic or bearer
28 | reqSendTokenIn:"", // can be header, querystring or cookies
29 | oAuthClientId:"",
30 | oAuthClientSecret:"",
31 | oAuthTokenUrl:"",
32 |
33 | },
34 |
35 | mutations: {
36 | lang(state, payload) { state.lang = payload; },
37 | specUrl(state, payload) { state.specUrl = payload; },
38 | isDevMode(state, payload){ state.isDevMode = payload; },
39 | reqToken(state, payload) { state.reqToken = payload; },
40 | reqTokenType(state, payload) { state.reqTokenType = payload; },
41 | reqHeader(state, payload) { state.reqHeader = payload; },
42 | reqSendTokenIn(state, payload) { state.reqSendTokenIn = payload; },
43 | oAuthClientId(state, payload) { state.oAuthClientId = payload; },
44 | oAuthClientSecret(state, payload) { state.oAuthClientSecret = payload; },
45 | oAuthTokenUrl(state, payload) { state.oAuthTokenUrl = payload; },
46 | selectedApiServer(state, payload) { state.selectedApiServer = payload; }
47 |
48 | },
49 | plugins: [new VuexPersistence().plugin]
50 |
51 | })
52 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | publicPath: process.env.NODE_ENV === 'production' ? '/OpenAPI-Viewer/' : '/',
3 | }
--------------------------------------------------------------------------------
/vue.config.js_bak:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 | module.exports = {
3 | lintOnSave: false,
4 | devServer: {
5 | port:8082
6 | },
7 | configureWebpack:{
8 | resolve: {
9 | alias: {
10 | //vue: 'vue/dist/vue.js'
11 | 'vue$': 'vue/dist/vue.esm.js'
12 | },
13 | extensions: ['*', '.js', '.vue', '.json']
14 | }
15 | },
16 |
17 | pages: {
18 | index: {
19 | // entry for the page
20 | entry: 'src/main.js',
21 | // the source template
22 | template: 'public/index.html',
23 | // output as dist/index.html
24 | filename: 'index.html',
25 | // when using title option,
26 | // template title tag needs to be <%= htmlWebpackPlugin.options.title %>
27 | title: 'Mrin - Order Processing System',
28 | // chunks to include on this page, by default includes
29 | // extracted common chunks and vendor chunks.
30 | chunks: ['chunk-vendors', 'chunk-common', 'index']
31 | }
32 | }
33 |
34 | }
--------------------------------------------------------------------------------