frontexpress/frontexpress.min.js
2017-01-15 12:00:51 +01:00

3 lines
8.2 KiB
JavaScript

var frontexpress=function(){"use strict";function t(t){var e=void 0,r=void 0,i=void 0,n=void 0;if(t&&t.length>0){if(1===t.length){var a=o(t,1);n=a[0]}else{var u=o(t,2);e=u[0],n=u[1]}n instanceof c?i=n:(n instanceof h||"function"==typeof n)&&(r=n)}return{baseUri:e,middleware:r,router:i,which:n}}var e=["GET","POST","PUT","DELETE"],r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},n=function(){function t(t,e){for(var r=0;r<e.length;r++){var i=e[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,r,i){return r&&t(e.prototype,r),i&&t(e,i),e}}(),o=function(){function t(t,e){var r=[],i=!0,n=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(i=(a=u.next()).done)&&(r.push(a.value),!e||r.length!==e);i=!0);}catch(t){n=!0,o=t}finally{try{!i&&u.return&&u.return()}finally{if(n)throw o}}return r}return function(e,r){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)},u=function(){function t(){i(this,t)}return n(t,[{key:"fetch",value:function(t,e,r){var i=t.method,n=t.uri,o=t.headers,a=t.data,u=function(r){e(t,{status:200,statusText:"OK",responseText:r})},s=function(e){var i=e.status,n=e.statusText,o=e.errorThrown;r(t,{status:i,statusText:n,errorThrown:o,errors:"HTTP "+i+" "+(n?n:"")})},h=new XMLHttpRequest;h.onreadystatechange=function(){4===h.readyState&&(200===h.status?u(h.responseText):s({status:h.status,statusText:h.statusText}))};try{h.open(i,n,!0),o&&Object.keys(o).forEach(function(t){h.setRequestHeader(t,o[t])}),a?h.send(a):h.send()}catch(t){s({errorThrown:t})}}}]),t}(),s=function(){function t(){i(this,t),this.settings={"http requester":new u,"http GET transformer":{uri:function(t){var e=t.uri,r=(t.headers,t.data);if(!r)return e;var i=e,n="",a=/^(.*)(#.*)$/.exec(e);if(a){var u=/^(.*)(#.*)$/.exec(e),s=o(u,3);i=s[1],n=s[2]}return i=Object.keys(r).reduce(function(t,e,i){return t+=""+(0===i&&t.indexOf("?")===-1?"?":"&")+e+"="+r[e]},i),i+n}}},this.rules={"http requester":function(t){if("function"!=typeof t.fetch)throw new TypeError("setting http requester has no fetch method")}}}return n(t,[{key:"set",value:function(t,e){var r=this.rules[t];r&&r(e),this.settings[t]=e}},{key:"get",value:function(t){return this.settings[t]}}]),t}(),h=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";i(this,t),this.name=e}return n(t,[{key:"next",value:function(){return!0}}]),t}(),d=function(){function t(e,r,n,o){i(this,t),this.router=e,this.uriPart=r,this.method=n,this.middleware=o,this.visited=!1}return n(t,[{key:"uri",get:function(){if(this.uriPart||this.method){if(this.uriPart instanceof RegExp)return this.uriPart;if(this.router.baseUri instanceof RegExp)return this.router.baseUri;if(this.router.baseUri){var t=this.router.baseUri.trim();return this.uriPart?(t+this.uriPart.trim()).replace(/\/{2,}/,"/"):t}return this.uriPart}}}]),t}(),f="method takes at least a middleware",c=function(){function o(t){i(this,o),this._baseUri=t,this._routes=[]}return n(o,[{key:"_add",value:function(t){return this._routes.push(t),this}},{key:"routes",value:function(t,e){return this._routes.filter(function(r){if(r.method&&r.method!==e)return!1;if(!r.uri||!t)return!0;var i=/^(.*)\?.*#.*|(.*)(?=\?|#)|(.*[^\?#])$/.exec(t),n=i[1]||i[2]||i[3];return r.uri instanceof RegExp?n.match(r.uri):r.uri===n})}},{key:"visited",value:function(){return this._routes.filter(function(t){return t.visited})}},{key:"use",value:function(t){if(!(t instanceof h)&&"function"!=typeof t)throw new TypeError(f);return this._add(new d(this,void 0,void 0,t)),this}},{key:"all",value:function(){for(var r=this,i=arguments.length,n=Array(i),o=0;o<i;o++)n[o]=arguments[o];var a=t(n),u=a.middleware;if(!u)throw new TypeError(f);return e.forEach(function(t){r[t.toLowerCase()].apply(r,n)}),this}},{key:"baseUri",set:function(t){if(t){if(!this._baseUri)return void(this._baseUri=t);if(r(this._baseUri)!==("undefined"==typeof t?"undefined":r(t)))throw new TypeError("router cannot mix regexp and uri")}},get:function(){return this._baseUri}}]),o}();e.forEach(function(e){var r=e.toLowerCase();c.prototype[r]=function(){for(var r=arguments.length,i=Array(r),n=0;n<r;n++)i[n]=arguments[n];var o=t(i),a=o.baseUri,u=o.middleware;if(!u)throw new TypeError(f);if(a&&this._baseUri&&this._baseUri instanceof RegExp)throw new TypeError("router cannot mix uri/regexp");return this._add(new d(this,a,e,u)),this}});var l=function(){function r(){i(this,r),this.routers=[],this.settings=new s}return n(r,[{key:"set",value:function(){for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];if(1===e.length)return this.settings.get([e]);var i=e[0],n=e[1];return this.settings.set(i,n),this}},{key:"listen",value:function(t){var e=this;window.onpopstate=function(t){if(t.state){var r=t.state,i=r.request,n=r.response,o=e._routes(i.uri,i.method);e._callMiddlewareMethod("entered",o,i),e._callMiddlewareMethod("updated",o,i,n)}};var r={method:"GET",uri:window.location.pathname+window.location.search},i={status:200,statusText:"OK"},n=this._routes(),o=function(){e._callMiddlewareMethod("updated",n,r,i),t&&t(r,i)};window.onbeforeunload=function(){e._callMiddlewareMethod("exited")},document.onreadystatechange=function(){switch(document.readyState){case"loading":e._callMiddlewareMethod("entered",n,r);break;case"interactive":o()}},["interactive","complete"].indexOf(document.readyState)!==-1&&o()}},{key:"route",value:function(t){var e=new c(t);return this.routers.push(e),e}},{key:"use",value:function(){for(var r=arguments.length,i=Array(r),n=0;n<r;n++)i[n]=arguments[n];var o=t(i),a=o.baseUri,u=o.router,s=o.middleware;if(u)u.baseUri=a;else{if(!s)throw new TypeError("method takes at least a middleware or a router");u=new c(a),e.forEach(function(t){u[t.toLowerCase()](s)})}return this.routers.push(u),this}},{key:"_routes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.pathname+window.location.search,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=[];return this.routers.forEach(function(i){r.push.apply(r,a(i.routes(t,e)))}),r}},{key:"_callMiddlewareMethod",value:function(t,e,r,i){return"exited"===t?void this.routers.forEach(function(t){t.visited().forEach(function(t){t.middleware.exited&&(t.middleware.exited(t.visited),t.visited=null)})}):void e.some(function(e){if("updated"===t&&(e.visited=r),e.middleware[t]){if(e.middleware[t](r,i),e.middleware.next&&!e.middleware.next())return!0}else if("entered"!==t){var n=!0,o=function(){n=!1};if(e.middleware(r,i,o),n)return!0}return!1})}},{key:"_fetch",value:function(t,e,r){var i=this,n=t.method,o=t.uri,a=t.headers,u=t.data,s=t.history,h=this.get("http "+n+" transformer");if(h){var d=h.uri,f=h.headers,c=h.data;o=d?d({uri:o,headers:a,data:u}):o,a=f?f({uri:o,headers:a,data:u}):a,u=c?c({uri:o,headers:a,data:u}):u}this._callMiddlewareMethod("exited");var l=this._routes(o,n);this._callMiddlewareMethod("entered",l,t),this.settings.get("http requester").fetch(t,function(t,r){s&&window.history.pushState({request:t,response:r},s.title,s.uri),i._callMiddlewareMethod("updated",l,t,r),e&&e(t,r)},function(t,e){i._callMiddlewareMethod("failed",l,t,e),r&&r(t,e)})}}]),r}();e.reduce(function(e,r){var i=r.toLowerCase();e[i]=function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];var o=t(r),a=o.baseUri,u=o.middleware,s=o.which;if("get"===i&&"string"==typeof s)return this.settings.get(s);if(!u)throw new TypeError("method takes a middleware "+("get"===i?"or a string":""));var h=new c;return h[i](a,u),this.routers.push(h),this};var n="http"+r.charAt(0).toUpperCase()+r.slice(1).toLowerCase();return e[n]=function(t,e,i){var n=t.uri,o=t.headers,a=t.data,u=t.history;return n||(n=t),this._fetch({uri:n,method:r,headers:o,data:a,history:u},e,i)},e},l.prototype);var v=function(){return new l};return v.Router=function(t){return new c(t)},v.Middleware=h,v}();
//# sourceMappingURL=frontexpress.min.js.map