!function(e,t){var n=t();"function"==typeof define&&define.amd?define([],n.Routing):"object"==typeof module&&module.exports?module.exports=n.Routing:(e.Routing=n.Routing,e.fos={Router:n.Router})}(this,function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]&&arguments[2],r=this.getRoute(e),i=n||{},s=t({},i),u="",f=!0,a="",c="undefined"==typeof this.getPort()||null===this.getPort()?"":this.getPort();if(r.tokens.forEach(function(t){if("text"===t[0])return u=t[1]+u,void(f=!1);{if("variable"!==t[0])throw new Error('The token type "'+t[0]+'" is not supported.');var n=r.defaults&&t[3]in r.defaults;if(!1===f||!n||t[3]in i&&i[t[3]]!=r.defaults[t[3]]){var o=void 0;if(t[3]in i)o=i[t[3]],delete s[t[3]];else{if(!n){if(f)return;throw new Error('The route "'+e+'" requires the parameter "'+t[3]+'".')}o=r.defaults[t[3]]}var a=!0===o||!1===o||""===o;if(!a||!f){var c=encodeURIComponent(o).replace(/%2F/g,"/");"null"===c&&null===o&&(c=""),u=t[1]+c+u}f=!1}else n&&t[3]in s&&delete s[t[3]]}}),""===u&&(u="/"),r.hosttokens.forEach(function(e){var t=void 0;return"text"===e[0]?void(a=e[1]+a):void("variable"===e[0]&&(e[3]in i?(t=i[e[3]],delete s[e[3]]):r.defaults&&e[3]in r.defaults&&(t=r.defaults[e[3]]),a=e[1]+t+a))}),u=this.context_.base_url+u,r.requirements&&"_scheme"in r.requirements&&this.getScheme()!=r.requirements._scheme?u=r.requirements._scheme+"://"+(a||this.getHost())+u:"undefined"!=typeof r.schemes&&"undefined"!=typeof r.schemes[0]&&this.getScheme()!==r.schemes[0]?u=r.schemes[0]+"://"+(a||this.getHost())+u:a&&this.getHost()!==a+(""===c?"":":"+c)?u=this.getScheme()+"://"+a+(""===c?"":":"+c)+u:o===!0&&(u=this.getScheme()+"://"+this.getHost()+u),Object.keys(s).length>0){var h=void 0,l=[],y=function(e,t){t="function"==typeof t?t():t,t=null===t?"":t,l.push(encodeURIComponent(e)+"="+encodeURIComponent(t))};for(h in s)this.buildQueryParams(h,s[h],y);u=u+"?"+l.join("&").replace(/%20/g,"+")}return u}}],[{key:"getInstance",value:function(){return i}},{key:"setData",value:function(e){var t=r.getInstance();t.setRoutingData(e)}}]),r}();r.Route,r.Context;var i=new r;return{Router:r,Routing:i}});