@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
55 lines • 2.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractHttpIncommingContext = exports.definePayloadType = void 0;
const body_parser_1 = __importDefault(require("body-parser"));
const lodash_1 = __importDefault(require("lodash"));
const http_1 = require("http");
const querystring_1 = require("querystring");
const url_1 = require("url");
const utils_1 = require("../../../utils");
const utils_2 = require("../../utils");
const parseQuerySearch = (queryString) => Object.entries((0, querystring_1.parse)(queryString)).reduce((acc, [key, value]) => {
const valueAsJson = lodash_1.default.flatten([value]).map(arrValue => {
const parsingArrayValueAsJsonResult = (0, utils_1.parseJsonSafe)(arrValue ?? '');
return parsingArrayValueAsJsonResult.status === 'OK' ? parsingArrayValueAsJsonResult.result : arrValue;
});
return lodash_1.default.set(acc, key, valueAsJson?.length === 1 ? valueAsJson[0] : valueAsJson);
}, {});
const definePayloadType = (headers) => {
const contentTypeKey = Object.keys(headers).find((key) => key.toLowerCase() === 'content-type');
const contextType = lodash_1.default.flatten([lodash_1.default.get(headers, contentTypeKey ?? '', '')]).join(',').toLowerCase();
if (contextType.includes('application/json')) {
return 'json';
}
if (contextType.includes('/xml')) {
return 'xml';
}
return null;
};
exports.definePayloadType = definePayloadType;
const extractHttpIncommingContext = async (request) => {
const { pathname, query: rawQuery } = (0, url_1.parse)(request.url ?? '');
const query = parseQuerySearch(rawQuery ?? '');
const raw = await new Promise((resolve, reject) => body_parser_1.default.raw({ limit: '10mb', type: '*/*' })(request, new http_1.ServerResponse(request), (error) => error
? reject(error)
: resolve(Buffer.isBuffer(lodash_1.default.get(request, 'body')) ? lodash_1.default.get(request, 'body') : null)));
const parsed = raw?.length
? (0, utils_2.parsePayload)(raw, (0, exports.definePayloadType)(request.headers) ?? 'plain')
: null;
return {
query,
type: parsed?.type ?? 'plain',
method: String(request.method ?? 'GET').toUpperCase(),
path: pathname ?? '/',
headers: (0, utils_1.formatHeaders)(request.headers),
data: parsed?.data ?? undefined,
raw: {
data: raw ?? undefined,
}
};
};
exports.extractHttpIncommingContext = extractHttpIncommingContext;
//# sourceMappingURL=utils.js.map