@xapi-js/adaptor-nestjs
Version:
NestJS adaptor for X-API.
78 lines (77 loc) • 3.82 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let _nestjs_common = require("@nestjs/common");
let _xapi_js_core = require("@xapi-js/core");
let rxjs = require("rxjs");
//#region \0@oxc-project+runtime@0.139.0/helpers/esm/decorate.js
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
//#endregion
//#region src/xapi-request-interceptor.ts
var _XapiRequestInterceptor;
let XapiRequestInterceptor = _XapiRequestInterceptor = class XapiRequestInterceptor {
constructor(schemaOrOptions, options) {
this.logger = new _nestjs_common.Logger(_XapiRequestInterceptor.name);
if (schemaOrOptions && "kind" in schemaOrOptions) {
this.schema = schemaOrOptions;
this.options = options;
} else this.options = schemaOrOptions;
}
async intercept(context, next) {
const request = context.switchToHttp().getRequest();
this.logger.debug(`XapiRequestInterceptor Intercepting request: ${request.method} ${request.url}`);
const codec = this.options?.codec;
if ((0, _xapi_js_core.xapiContentTypeMatches)(request.headers["content-type"], codec) && request.body) {
const root = codec === void 0 ? (0, _xapi_js_core.parse)(request.body) : (0, _xapi_js_core.decodeXapiWire)((0, _xapi_js_core.xapiBodyToBytes)(request.body), codec);
request.body = this.schema ? (0, _xapi_js_core.decodeRoot)(this.schema, root) : root;
}
return next.handle();
}
};
XapiRequestInterceptor = _XapiRequestInterceptor = __decorate([(0, _nestjs_common.Injectable)()], XapiRequestInterceptor);
//#endregion
//#region src/xapi-response-interceptor.ts
var _XapiResponseInterceptor;
let XapiResponseInterceptor = _XapiResponseInterceptor = class XapiResponseInterceptor {
constructor(schemaOrOptions, options) {
this.logger = new _nestjs_common.Logger(_XapiResponseInterceptor.name);
if (schemaOrOptions && "kind" in schemaOrOptions) {
this.schema = schemaOrOptions;
this.options = options;
} else this.options = schemaOrOptions;
}
intercept(context, next) {
this.logger.debug(`XapiResponseInterceptor Intercepting response`);
const codec = this.options?.codec;
const http = typeof context.switchToHttp === "function" ? context.switchToHttp() : void 0;
const response = http && typeof http.getResponse === "function" ? http.getResponse() : void 0;
if (codec !== void 0 && typeof response?.setHeader === "function") response.setHeader("Content-Type", (0, _xapi_js_core.xapiContentType)(codec));
return next.handle().pipe((0, rxjs.map)((value) => {
const root = this.schema ? (0, _xapi_js_core.encodeRoot)(this.schema, value) : value;
if (!(0, _xapi_js_core.isXapiRoot)(root)) throw new Error("Handler did not return an XapiRoot instance");
try {
return codec === void 0 ? (0, _xapi_js_core.write)(root) : (0, _xapi_js_core.encodeXapiWire)(root, codec);
} catch (error) {
this.logger.error(`Failed to serialize XapiRoot with codec: ${error}`);
throw error;
}
}));
}
};
XapiResponseInterceptor = _XapiResponseInterceptor = __decorate([(0, _nestjs_common.Injectable)()], XapiResponseInterceptor);
//#endregion
Object.defineProperty(exports, "XapiRequestInterceptor", {
enumerable: true,
get: function() {
return XapiRequestInterceptor;
}
});
Object.defineProperty(exports, "XapiResponseInterceptor", {
enumerable: true,
get: function() {
return XapiResponseInterceptor;
}
});