UNPKG

@n1k1t/mock-server

Version:

The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations

55 lines 2.71 kB
"use strict"; 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