UNPKG

@ark7/router

Version:
1 lines 2.4 kB
{"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,YAAY,CAAC;AAKrC;;;GAGG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,GACpD,MAAM,CAAC,WAAW,CA2DpB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAEhE","file":"utils.d.ts","sourcesContent":["import * as _ from 'underscore';\nimport * as Router from 'koa-router';\nimport debug from 'debug';\n\nconst d = debug('ark7:router:utils');\n\n/**\n * Compose `middleware` returning a fully valid middleware comprised of all\n * those which are passed.\n */\nexport function compose(\n middleware: Router.IMiddleware | Router.IMiddleware[],\n): Router.IMiddleware {\n if (_.isFunction(middleware)) {\n return middleware;\n }\n\n if (!Array.isArray(middleware)) {\n throw new TypeError('Middleware stack must be an array!');\n }\n\n for (const fn of middleware) {\n if (typeof fn !== 'function') {\n throw new TypeError('Middleware must be composed of functions!');\n }\n }\n\n /**\n * @param {Object} context\n * @return {Promise}\n * @api public\n */\n\n return function (context: any, next: Function) {\n // last called middleware #\n let index = -1;\n const rid = `${context.request.method} ${context.request.path} ${context.requestId}`;\n\n return dispatch.call(this, 0);\n\n function dispatch(i: number) {\n if (i <= index) {\n return Promise.reject(new Error('next() called multiple times'));\n }\n\n index = i;\n\n const fn = i === middleware.length ? next : (middleware as Function[])[i];\n\n if (!fn) return Promise.resolve();\n\n const start = _.now();\n const name = fn.name || '<anonymous>';\n\n try {\n if (name !== 'bound dispatch') {\n d('[%O] Begin of middleware %O', rid, name);\n }\n return Promise.resolve(\n fn.call(this, context, dispatch.bind(this, i + 1)),\n );\n } catch (err) {\n return Promise.reject(err);\n } finally {\n const end = _.now();\n if (name !== 'bound dispatch') {\n d('[%O] End of middleware %O, duration: %O', rid, name, end - start);\n }\n }\n }\n };\n}\n\nexport function isPromise<T>(promise: any): promise is Promise<T> {\n return promise && promise.then != null;\n}\n"],"sourceRoot":"/Users/yz/workspace/router/src"}