UNPKG

@xapi-js/adaptor-express

Version:

Express.js adaptor for X-API.

31 lines (30 loc) 1.69 kB
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;