feignjs
Version:
feign for js
1 lines • 5.83 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.feign=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var Args=window.Args;var _=window._;var uriTemplate=window.UriTemplate;var feign;(function(feign){feign.cbProxyFactory=function(baseUrl,requestObj){return function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();requestObj.executeRequest(baseUrl,args).then(function(result){callback(null,result)},function(error){callback(error,null)})}};feign.promiseProxyFactory=function(baseUrl,requestObj){return function(){var args=Array.prototype.slice.call(arguments);return requestObj.executeRequest(baseUrl,args)}}})(feign||(feign={}));var feign;(function(feign){var JsonEncoder=function(){function JsonEncoder(){}JsonEncoder.prototype.encode=function(body){if(body===null||body===undefined)return body;return JSON.stringify(body)};return JsonEncoder}();feign.JsonEncoder=JsonEncoder;var JsonDecoder=function(){function JsonDecoder(){}JsonDecoder.prototype.decode=function(body){if(!body||!(typeof body==="string"))return body;try{return JSON.parse(body)}catch(e){throw new Error("Failed to decode json: "+e)}};return JsonDecoder}();feign.JsonDecoder=JsonDecoder})(feign||(feign={}));var feign;(function(feign){function builder(){var args=Args([{promise:Args.BOOL|Args.Optional,_default:true}],arguments);var builder=new FeignBuilder;builder.proxyFactory(args.promise?feign.promiseProxyFactory:feign.cbProxyFactory);return builder}feign.builder=builder;var FeignBuilder=function(){function FeignBuilder(){this.requestInterceptors=[]}FeignBuilder.prototype.client=function(feignClient){this.feignClient=feignClient;return this};FeignBuilder.prototype.proxyFactory=function(proxyFactory){this.proxyMethodFactory=proxyFactory;return this};FeignBuilder.prototype.requestInterceptor=function(requestInterceptor){this.requestInterceptors.push(requestInterceptor);return this};FeignBuilder.prototype.encoder=function(encoder){this.bodyEncoder=encoder;return this};FeignBuilder.prototype.decoder=function(decoder){this.bodyDecoder=decoder;return this};FeignBuilder.prototype.target=function(apiDescription,baseUrl){var api=this.createApi(apiDescription,baseUrl);return api};FeignBuilder.prototype.createApi=function(apiDescription,baseUrl){var api={};for(var key in apiDescription){var options=this.getOptionsFromDescription(apiDescription,key);var requestObj=new feign.Wrapper(options,this.feignClient,this.requestInterceptors,this.bodyEncoder,this.bodyDecoder);api[key]=this.proxyMethodFactory(baseUrl,requestObj)}return api};FeignBuilder.prototype.getOptionsFromDescription=function(apiDescription,key){var options=apiDescription[key];if(typeof options=="string"||options instanceof String){var methodDefRegex=/(\S+)\s+(\S+)/;var matches=options.match(methodDefRegex);if(matches==null){throw new Error("Failed to parse method definition for: "+options)}options={method:matches[1],uri:matches[2]}}else{var parsedOptions=Args([{method:Args.STRING|Args.Optional,_default:"GET"},{uri:Args.STRING|Args.Required}],[options]);options=_.clone(apiDescription[key]);options.method=parsedOptions.method;options.uri=parsedOptions.uri}return options};return FeignBuilder}()})(feign||(feign={}));var feign;(function(feign){function createDynamicArgsDef(varNames){var resultDef=[];for(var i=0;i<varNames.length;++i){var def={};def[varNames[i]]=Args.ANY|Args.Required;resultDef.push(def)}return resultDef}var Wrapper=function(){function Wrapper(options,client,interceptors,encoder,decoder){this.options=options;this.client=client;this.interceptors=interceptors;this.encoder=encoder;this.decoder=decoder;this.options.uri=uriTemplate(this.options.uri)}Wrapper.prototype.getProcessedUrl=function(request,pathParameters){var template=request.options.uri;var newOptions=_.omit(request.options,"uri");if(template.varNames.length>0){if(pathParameters.length==2&&_.isPlainObject(pathParameters[0])){request.parameters=pathParameters.pop()}else{if(pathParameters.length>template.varNames.length){request.parameters=pathParameters.pop()}}var defs=createDynamicArgsDef(template.varNames);var params=Args(defs,pathParameters);var newUri=template.fill(params);newOptions.uri=newUri}else{newOptions.uri=template.fill();if(pathParameters.length>0){request.parameters=pathParameters[0]}}request.options=newOptions};Wrapper.prototype.executeRequest=function(baseUrl,callArguments){var request={baseUrl:baseUrl,options:this.options,parameters:null};this.getProcessedUrl(request,callArguments);this.processInterceptors(request);if(this.encoder&&request.options.method!=="GET"){request.parameters=this.encoder.encode(request.parameters)}var _this=this;return this.client.request(request).then(function(response){if(_this.decoder){return _this.decoder.decode(response.body)}return response.body})};Wrapper.prototype.processInterceptors=function(request){for(var i=0;i<this.interceptors.length;++i){this.interceptors[i].apply(request)}};return Wrapper}();feign.Wrapper=Wrapper})(feign||(feign={}));module.exports={builder:feign.builder,JsonEncoder:feign.JsonEncoder,JsonDecoder:feign.JsonDecoder}},{}]},{},[1])(1)});