aspida-mock
Version:
TypeScript friendly RESTful API mock for aspida
34 lines • 1.56 kB
JavaScript
import { copyData, createPathRegExp, createValues } from './utils';
const findHandler = (path, method, routes) => routes.find(route => createPathRegExp(route.path).test(path) &&
route.methods[method.toLowerCase()]);
export const hasMockHandler = (path, method, routes) => { var _a; return !!((_a = findHandler(path, method, routes)) === null || _a === void 0 ? void 0 : _a.methods[method.toLowerCase()]); };
export default async (config, routes, middleware) => {
const route = findHandler(config.path, config.method, routes);
const controller = route === null || route === void 0 ? void 0 : route.methods[config.method.toLowerCase()];
if (!route || !controller)
return;
let params = {
...config,
values: createValues(route.path, config.path),
};
if (middleware) {
for (let i = 0; i < middleware.length; i += 1) {
const { isNext, response, config } = await new Promise(resolve => {
middleware[i](params, res => {
resolve({ isNext: false, response: res });
}, req => {
resolve({ isNext: true, config: req });
});
});
if (isNext) {
params = config || params;
}
else {
return copyData((response instanceof Promise ? await response : response));
}
}
}
const res = controller(params);
return copyData((res instanceof Promise ? await res : res));
};
//# sourceMappingURL=callMockHandler.js.map