@xapi-js/adaptor-express
Version:
Express.js adaptor for X-API.
31 lines (30 loc) • 1.69 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let _xapi_js_core = require("@xapi-js/core");
//#region src/index.ts
function xapiExpress(operationOrHandler, operationHandlerOrOptions, adapterOptions) {
const operation = typeof operationOrHandler === "function" ? void 0 : operationOrHandler;
const handler = typeof operationOrHandler === "function" ? operationOrHandler : operationHandlerOrOptions;
const options = typeof operationOrHandler === "function" ? operationHandlerOrOptions : adapterOptions;
return createMiddleware(async (req, res, next) => {
const codec = operation?.codec ?? options?.codec;
const contentType = codec === void 0 ? "application/xml" : (0, _xapi_js_core.xapiContentType)(codec);
if (!(0, _xapi_js_core.xapiContentTypeMatches)(req.headers["content-type"], codec)) return next();
try {
const requestRoot = codec === void 0 ? (0, _xapi_js_core.parse)(req.body) : (0, _xapi_js_core.decodeXapiWire)((0, _xapi_js_core.xapiBodyToBytes)(req.body), codec);
const request = operation ? (0, _xapi_js_core.decodeRoot)(operation.request, requestRoot) : requestRoot;
const response = await handler(request);
const responseRoot = operation ? (0, _xapi_js_core.encodeRoot)(operation.response, response) : response;
const output = codec === void 0 ? (0, _xapi_js_core.write)(responseRoot) : (0, _xapi_js_core.encodeXapiWire)(responseRoot, codec);
res.setHeader("Content-Type", contentType);
res.write(output);
res.end();
} catch (error) {
next(error);
}
});
}
function createMiddleware(middleware) {
return async (req, res, next) => middleware(req, res, next);
}
//#endregion
exports.xapiExpress = xapiExpress;