angular-swagger-ui
Version:
AngularJS implementation of OpenAPI (aka Swagger) UI
7 lines • 3.58 kB
JavaScript
/*
* Orange angular-swagger-ui - v0.6.5
*
* (C) 2015 Orange, all right reserved
* MIT Licensed
*/
;angular.module("swaggerUi").service("openApi3Converter",["$q","swaggerModules","swaggerModel",function(a,b,c){function d(a,b){b.openApiSpec.swagger="2.0",e(b.openApiSpec),f(b.openApiSpec),k(b.openApiSpec),a.resolve(!0)}function e(a){var b,c=a.servers&&a.servers[0];c&&(b=angular.element('<a href="'+c.url+'"></a>')[0],a.schemes=[b.protocol.replace(":","")],a.host=b.host,a.basePath=b.pathname),delete a.servers,delete a.openapi}function f(a){var b,d,e,f;for(b in a.paths){d=a.paths[b]=c.resolveReference(a,a.paths[b]);for(e in d)l.indexOf(e)>=0&&(f=d[e]=c.resolveReference(a,d[e]),g(a,f),j(a,f))}}function g(a,b){var d,e;b.parameters=b.parameters||[],b.requestBody&&(e=c.resolveReference(a,b.requestBody),e.name="body",d=e.content,d&&(delete e.content,d["application/x-www-form-urlencoded"]?(e["in"]="formData",e.schema=d["application/x-www-form-urlencoded"].schema,e.schema=c.resolveReference(a,e.schema),"object"===e.schema.type&&e.schema.properties?angular.forEach(e.schema.properties,function(a,c){e=a,e.name=c,e["in"]="formData",b.parameters.push(e)}):b.parameters.push(e)):d["multipart/form-data"]?(e["in"]="formData",e.schema=d["multipart/form-data"].schema,b.parameters.push(e)):d["application/octet-stream"]?(e["in"]="formData",e.type="file",e.name=e.name||"file",delete e.schema,b.parameters.push(e)):d["application/json"]?(e["in"]="body",e.schema=d["application/json"].schema,b.parameters.push(e)):console.warn("AngularSwaggerUI: unsupported request body media type, unable to convert from openapi 3.0.x",b.operationId,d)),delete b.requestBody),angular.forEach(b.parameters,function(d,e){d=b.parameters[e]=c.resolveReference(a,d),h(d),"body"!==d["in"]&&(i(d),delete d.schema)})}function h(a){angular.forEach(m,function(b){a.schema&&a.schema[b]&&(a[b]=a.schema[b],delete a.schema[b])})}function i(a){angular.forEach(n,function(b){a.schema&&a.schema[b]&&(a[b]=a.schema[b],delete a.schema[b])})}function j(a,b){var d,e,f,g,i;for(d in b.responses)e=!1,f="application/json",g=b.responses[d]=c.resolveReference(a,b.responses[d]),g.content&&(g.content[f]&&(e=g.content[f]),e||(f=Object.keys(g.content)[0],e=g.content[f])),e&&(g.schema=e.schema,i=c.resolveReference(a,g.schema),"array"===i.type&&(g.schema=i),e.example&&(g.examples={},g.examples[f]=e.example),h(g)),delete g.content}function k(a){a.components&&a.components.securitySchemes?(a.securityDefinitions=a.components&&a.components.securitySchemes,angular.forEach(a.securityDefinitions,function(a){if("http"===a.type&&"basic"===a.scheme)a.type="basic";else if("oauth2"===a.type){var b=Object.keys(a.flows)[0],c=a.flows[b];"clientCredentials"===b?a.flow="application":"authorizationCode"===b?a.flow="accessCode":a.flow=b,a.authorizationUrl=c.authorizationUrl,a.tokenUrl=c.tokenUrl,a.scopes=c.scopes,delete a.flows}}),delete a.components.securitySchemes):a.securityDefinitions=[]}var l=["get","put","post","delete","options","head","patch","trace"],m=["format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","minLength","maxLength","multipleOf","minItems","maxItems","uniqueItems","minProperties","maxProperties","additionalProperties","pattern","enum","default"],n=["type","items"];this.execute=function(b){var c=a.defer(),e=b.openApiSpec&&b.openApiSpec.openapi||"-1";return e.indexOf("3.0.")>-1&&("json"===b.parser||"auto"===b.parser&&"application/json"===b.contentType)?d(c,b):c.resolve(!1),c.promise}}]).run(["swaggerModules","openApi3Converter",function(a,b){a.add(a.BEFORE_PARSE,b,10)}]);