UNPKG

elysia

Version:

Ergonomic Framework for Human

170 lines (169 loc) 5.64 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var fast_querystring_exports = {}; __export(fast_querystring_exports, { parseQuery: () => parseQuery, parseQueryFromURL: () => parseQueryFromURL }); module.exports = __toCommonJS(fast_querystring_exports); var import_deuri = require("./deuri"); const plusRegex = /\+/g; function parseQueryFromURL(input) { const result = {}; if (typeof input !== "string") return result; let key = ""; let value = ""; let startingIndex = -1; let equalityIndex = -1; let flags = 0; const l = input.length; for (let i = 0; i < l; i++) { switch (input.charCodeAt(i)) { case 38: const hasBothKeyValuePair = equalityIndex > startingIndex; if (!hasBothKeyValuePair) equalityIndex = i; key = input.slice(startingIndex + 1, equalityIndex); if (hasBothKeyValuePair || key.length > 0) { if (flags & 1) key = key.replace(plusRegex, " "); if (flags & 2) key = (0, import_deuri.decode)(key) || key; if (!result[key]) { if (hasBothKeyValuePair) { value = input.slice(equalityIndex + 1, i); if (flags & 4) value = value.replace(plusRegex, " "); if (flags & 8) value = (0, import_deuri.decode)(value) || value; } result[key] = value; } } key = ""; value = ""; startingIndex = i; equalityIndex = i; flags = 0; break; case 61: if (equalityIndex <= startingIndex) equalityIndex = i; else flags |= 8; break; case 43: if (equalityIndex > startingIndex) flags |= 4; else flags |= 1; break; case 37: if (equalityIndex > startingIndex) flags |= 8; else flags |= 2; break; } } if (startingIndex < l) { const hasBothKeyValuePair = equalityIndex > startingIndex; key = input.slice( startingIndex + 1, hasBothKeyValuePair ? equalityIndex : l ); if (hasBothKeyValuePair || key.length > 0) { if (flags & 1) key = key.replace(plusRegex, " "); if (flags & 2) key = (0, import_deuri.decode)(key) || key; if (!result[key]) { if (hasBothKeyValuePair) { value = input.slice(equalityIndex + 1, l); if (flags & 4) value = value.replace(plusRegex, " "); if (flags & 8) value = (0, import_deuri.decode)(value) || value; } result[key] = value; } } } return result; } const parseQuery = (input) => { const result = {}; if (typeof input !== "string") return result; const inputLength = input.length; let key = ""; let value = ""; let startingIndex = -1; let equalityIndex = -1; let shouldDecodeKey = false; let shouldDecodeValue = false; let keyHasPlus = false; let valueHasPlus = false; let hasBothKeyValuePair = false; let c = 0; for (let i = 0; i < inputLength + 1; i++) { if (i !== inputLength) c = input.charCodeAt(i); else c = 38; switch (c) { case 38: { hasBothKeyValuePair = equalityIndex > startingIndex; if (!hasBothKeyValuePair) equalityIndex = i; key = input.slice(startingIndex + 1, equalityIndex); if (hasBothKeyValuePair || key.length > 0) { if (keyHasPlus) key = key.replace(plusRegex, " "); if (shouldDecodeKey) key = (0, import_deuri.decode)(key) || key; if (hasBothKeyValuePair) { value = input.slice(equalityIndex + 1, i); if (valueHasPlus) value = value.replace(plusRegex, " "); if (shouldDecodeValue) value = (0, import_deuri.decode)(value) || value; } const currentValue = result[key]; if (currentValue === void 0) result[key] = value; else { if (currentValue.pop) currentValue.push(value); else result[key] = [currentValue, value]; } } value = ""; startingIndex = i; equalityIndex = i; shouldDecodeKey = false; shouldDecodeValue = false; keyHasPlus = false; valueHasPlus = false; break; } // Check '=' case 61: if (equalityIndex <= startingIndex) equalityIndex = i; else shouldDecodeValue = true; break; // Check '+', and remember to replace it with empty space. case 43: if (equalityIndex > startingIndex) valueHasPlus = true; else keyHasPlus = true; break; // Check '%' character for encoding case 37: if (equalityIndex > startingIndex) shouldDecodeValue = true; else shouldDecodeKey = true; break; } } return result; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { parseQuery, parseQueryFromURL });