UNPKG

@akala/core

Version:
89 lines 2.88 kB
import { convertToMiddleware } from '../middlewares/shared.js'; import { MiddlewareComposite } from '../middlewares/composite-sync.js'; import { MiddlewareRoute } from './route.js'; import { each } from '../each.js'; /** * Use routes. * @param {Routes<T, TReturnType>} routes - The routes. * @param {MiddlewareComposite<T> & { route: RouteBuilder<T> }} [parent] - The parent middleware composite. * @returns {MiddlewareComposite<T>} The middleware composite. */ export function useRoutes(routes, parent) { if (!parent) parent = Object.assign(new MiddlewareComposite('byroutes'), { route(...args) { return new MiddlewareRoute(...args); } }); each(routes, (route, match) => { if (typeof match == 'number') return; const routed = new MiddlewareRoute(match); if (typeof (route) == 'object') { useRoutes(route, routed); } else routed.useMiddleware(convertToMiddleware(route)); parent.useMiddleware(routed); }); return parent; } /** * Router class. * @template T * @extends {MiddlewareComposite<T>} * @implements {Middleware<T>} */ export class Router extends MiddlewareComposite { /** * Creates an instance of Router. * @param {RouterOptions} [options] - The router options. */ constructor(options) { super(options && options.name); } /** * Creates a new route. * @param {...RouteBuilderArguments} args - The route builder arguments. * @returns {MiddlewareRoute<T>} The middleware route. */ route(...args) { return new MiddlewareRoute(...args); } /** * Uses routes. * @param {Routes<T, unknown>} routes - The routes. * @returns {this} The router instance. */ useRoutes(routes) { useRoutes(routes, this); return this; } useMiddleware(route, ...middlewares) { if (typeof route === 'string' || Array.isArray(route)) { const routed = new MiddlewareRoute(route); routed.useMiddleware(...middlewares); super.useMiddleware(routed); } else super.useMiddleware(route, ...middlewares); return this; } use(route, ...middlewares) { if (typeof route === 'string' || Array.isArray(route)) { const routed = new MiddlewareRoute(route); routed.use(...middlewares); super.useMiddleware(routed); return this; } else return super.use(route, ...middlewares); } } // // create Router#VERB functions // methods.concat('all').forEach(function (method) // { // Router.prototype[method] = function (path) // { // var route = this.route(path) // route[method].apply(route, slice.call(arguments, 1)) // return this // } // }) //# sourceMappingURL=router.js.map