'use strict';

const express = require('express');

function replaceLastBySafeHandler(handlers) {
    if (handlers.length === 0) {
        return [];
    }

    const lastHandler = handlers[handlers.length - 1];
    const ret = handlers.slice();
    ret[handlers.length - 1] = (req, res, next) => lastHandler(req, res, next).catch(error => next(error));
    return ret;
}

function create() {
    const router = new express.Router();

    router.allAsync = (path, ...handlers) => router.all(path, ...replaceLastBySafeHandler(handlers));
    router.getAsync = (path, ...handlers) => router.get(path, ...replaceLastBySafeHandler(handlers));
    router.postAsync = (path, ...handlers) => router.post(path, ...replaceLastBySafeHandler(handlers));
    router.putAsync = (path, ...handlers) => router.put(path, ...replaceLastBySafeHandler(handlers));
    router.deleteAsync = (path, ...handlers) => router.delete(path, ...replaceLastBySafeHandler(handlers));

    return router;
}

module.exports = {
    create
};


'use strict';

const express = require('express');

function replaceLastBySafeHandler(handlers) {
    if (handlers.length === 0) {
        return [];
    }

    const lastHandler = handlers[handlers.length - 1];
    const ret = handlers.slice();
    ret[handlers.length - 1] = (req, res, next) => lastHandler(req, res, next).catch(error => next(error));
    return ret;
}

function create() {
    const router = new express.Router();

    router.allAsync = (path, ...handlers) => router.all(path, ...replaceLastBySafeHandler(handlers));
    router.getAsync = (path, ...handlers) => router.get(path, ...replaceLastBySafeHandler(handlers));
    router.postAsync = (path, ...handlers) => router.post(path, ...replaceLastBySafeHandler(handlers));
    router.putAsync = (path, ...handlers) => router.put(path, ...replaceLastBySafeHandler(handlers));
    router.deleteAsync = (path, ...handlers) => router.delete(path, ...replaceLastBySafeHandler(handlers));

    return router;
}

module.exports = {
    create
};

