UNPKG

rjweb-server

Version:

Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS

51 lines (50 loc) 1.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.trimString = void 0; const ValueCollection_1 = __importDefault(require("../classes/ValueCollection")); const utils_1 = require("@rjweb/utils"); const trimString = (str) => { let start = 0, end = str.length - 1; while (start < end && str[start] === ' ') { start++; } while (end > start && str[end] === ' ') { end--; } return str.substring(start, end + 1); }; exports.trimString = trimString; /** * Efficiently parse Key-Value Strings into ValueCollections * @since 7.0.0 */ function parseKV(type, keyValue, equal = '=', splitter = '&', decode = decodeURIComponent) { const values = type === 'ValueCollection' ? new ValueCollection_1.default() : {}; if (!keyValue) return (0, utils_1.as)(values); let progress = 0; while (progress < keyValue.length) { let splitterPos = keyValue.indexOf(splitter, progress); if (splitterPos === -1) splitterPos = keyValue.length; let equalPos = keyValue.slice(progress, splitterPos).indexOf(equal); if (equalPos === -1) equalPos = splitterPos; let sliced = keyValue.slice(progress + equalPos + 1, splitterPos), decodedVal; try { decodedVal = decode(sliced); } catch { decodedVal = sliced; } if (type === 'ValueCollection') (0, utils_1.as)(values).set((0, exports.trimString)(keyValue.slice(progress, progress + equalPos)), decodedVal); else (0, utils_1.as)(values)[(0, exports.trimString)(keyValue.slice(progress, progress + equalPos))] = decodedVal; progress = splitterPos + 1; } return (0, utils_1.as)(values); } exports.default = parseKV;