205 lines
14 KiB
JavaScript
205 lines
14 KiB
JavaScript
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.stringify = exports.parse = exports.decode = exports.encode = void 0;
|
||
|
const iconv_lite_1 = __importDefault(require("iconv-lite"));
|
||
|
function isUTF8(charset) {
|
||
|
if (!charset) {
|
||
|
return true;
|
||
|
}
|
||
|
charset = charset.toLowerCase();
|
||
|
return charset === 'utf8' || charset === 'utf-8';
|
||
|
}
|
||
|
function encode(str, charset) {
|
||
|
if (!charset || isUTF8(charset)) {
|
||
|
return encodeURIComponent(str);
|
||
|
}
|
||
|
const buf = iconv_lite_1.default.encode(str, charset);
|
||
|
let encodeStr = '';
|
||
|
let ch = '';
|
||
|
for (let i = 0; i < buf.length; i++) {
|
||
|
ch = buf[i].toString(16);
|
||
|
if (ch.length === 1) {
|
||
|
ch = '0' + ch;
|
||
|
}
|
||
|
encodeStr += '%' + ch;
|
||
|
}
|
||
|
encodeStr = encodeStr.toUpperCase();
|
||
|
return encodeStr;
|
||
|
}
|
||
|
exports.encode = encode;
|
||
|
exports.default = encode;
|
||
|
function decode(str, charset) {
|
||
|
if (!charset || isUTF8(charset)) {
|
||
|
return decodeURIComponent(str);
|
||
|
}
|
||
|
const bytes = [];
|
||
|
for (let i = 0; i < str.length;) {
|
||
|
if (str[i] === '%') {
|
||
|
i++;
|
||
|
bytes.push(parseInt(str.substring(i, i + 2), 16));
|
||
|
i += 2;
|
||
|
}
|
||
|
else {
|
||
|
bytes.push(str.charCodeAt(i));
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
const buf = Buffer.from(bytes);
|
||
|
return iconv_lite_1.default.decode(buf, charset);
|
||
|
}
|
||
|
exports.decode = decode;
|
||
|
function parse(qs, sepOrOptions, eq, options) {
|
||
|
let sep;
|
||
|
if (typeof sepOrOptions === 'object') {
|
||
|
// parse(qs, options)
|
||
|
options = sepOrOptions;
|
||
|
}
|
||
|
else {
|
||
|
// parse(qs, sep, eq, options)
|
||
|
sep = sepOrOptions;
|
||
|
}
|
||
|
sep = sep || '&';
|
||
|
eq = eq || '=';
|
||
|
const obj = {};
|
||
|
if (typeof qs !== 'string' || qs.length === 0) {
|
||
|
return obj;
|
||
|
}
|
||
|
const regexp = /\+/g;
|
||
|
const splits = qs.split(sep);
|
||
|
let maxKeys = 1000;
|
||
|
let charset = '';
|
||
|
if (options) {
|
||
|
if (typeof options.maxKeys === 'number') {
|
||
|
maxKeys = options.maxKeys;
|
||
|
}
|
||
|
if (typeof options.charset === 'string') {
|
||
|
charset = options.charset;
|
||
|
}
|
||
|
}
|
||
|
let len = splits.length;
|
||
|
// maxKeys <= 0 means that we should not limit keys count
|
||
|
if (maxKeys > 0 && len > maxKeys) {
|
||
|
len = maxKeys;
|
||
|
}
|
||
|
for (let i = 0; i < len; ++i) {
|
||
|
const x = splits[i].replace(regexp, '%20');
|
||
|
const idx = x.indexOf(eq);
|
||
|
let keyString;
|
||
|
let valueString;
|
||
|
let k;
|
||
|
let v;
|
||
|
if (idx >= 0) {
|
||
|
keyString = x.substring(0, idx);
|
||
|
valueString = x.substring(idx + 1);
|
||
|
}
|
||
|
else {
|
||
|
keyString = x;
|
||
|
valueString = '';
|
||
|
}
|
||
|
if (keyString && keyString.includes('%')) {
|
||
|
try {
|
||
|
k = decode(keyString, charset);
|
||
|
}
|
||
|
catch (e) {
|
||
|
k = keyString;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
k = keyString;
|
||
|
}
|
||
|
if (valueString && valueString.includes('%')) {
|
||
|
try {
|
||
|
v = decode(valueString, charset);
|
||
|
}
|
||
|
catch (e) {
|
||
|
v = valueString;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
v = valueString;
|
||
|
}
|
||
|
if (!has(obj, k)) {
|
||
|
obj[k] = v;
|
||
|
}
|
||
|
else if (Array.isArray(obj[k])) {
|
||
|
obj[k].push(v);
|
||
|
}
|
||
|
else {
|
||
|
obj[k] = [obj[k], v];
|
||
|
}
|
||
|
}
|
||
|
return obj;
|
||
|
}
|
||
|
exports.parse = parse;
|
||
|
function has(obj, prop) {
|
||
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
||
|
}
|
||
|
function isASCII(str) {
|
||
|
// eslint-disable-next-line no-control-regex
|
||
|
return /^[\x00-\x7F]*$/.test(str);
|
||
|
}
|
||
|
function encodeComponent(item, charset) {
|
||
|
item = String(item);
|
||
|
if (isASCII(item)) {
|
||
|
item = encodeURIComponent(item);
|
||
|
}
|
||
|
else {
|
||
|
item = encode(item, charset);
|
||
|
}
|
||
|
return item;
|
||
|
}
|
||
|
function stringifyArray(values, prefix, options) {
|
||
|
const items = [];
|
||
|
for (const [index, value] of values.entries()) {
|
||
|
items.push(stringify(value, `${prefix}[${index}]`, options));
|
||
|
}
|
||
|
return items.join('&');
|
||
|
}
|
||
|
function stringifyObject(obj, prefix, options) {
|
||
|
const items = [];
|
||
|
const charset = options.charset;
|
||
|
for (const key in obj) {
|
||
|
if (key === '') {
|
||
|
continue;
|
||
|
}
|
||
|
const value = obj[key];
|
||
|
if (value === null || value === undefined) {
|
||
|
items.push(encode(key, charset) + '=');
|
||
|
}
|
||
|
else {
|
||
|
const keyPrefix = prefix ? prefix + '[' + encodeComponent(key, charset) + ']' : encodeComponent(key, charset);
|
||
|
items.push(stringify(value, keyPrefix, options));
|
||
|
}
|
||
|
}
|
||
|
return items.join('&');
|
||
|
}
|
||
|
function stringify(obj, prefixOrOptions, options) {
|
||
|
let prefix;
|
||
|
if (typeof prefixOrOptions !== 'string') {
|
||
|
options = prefixOrOptions || {};
|
||
|
}
|
||
|
else {
|
||
|
prefix = prefixOrOptions;
|
||
|
}
|
||
|
options = options ?? {};
|
||
|
if (Array.isArray(obj)) {
|
||
|
if (!prefix) {
|
||
|
throw new TypeError('stringify expects an object');
|
||
|
}
|
||
|
return stringifyArray(obj, prefix, options);
|
||
|
}
|
||
|
const objValue = String(obj);
|
||
|
if (obj && typeof obj === 'object' && objValue === '[object Object]') {
|
||
|
return stringifyObject(obj, prefix ?? '', options);
|
||
|
}
|
||
|
if (!prefix) {
|
||
|
throw new TypeError('stringify expects an object');
|
||
|
}
|
||
|
const charset = options?.charset ?? 'utf-8';
|
||
|
return `${prefix}=${encodeComponent(objValue, charset)}`;
|
||
|
}
|
||
|
exports.stringify = stringify;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQStCO0FBUy9CLFNBQVMsTUFBTSxDQUFDLE9BQWdCO0lBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBZ0IsTUFBTSxDQUFDLEdBQVcsRUFBRSxPQUF1QjtJQUN6RCxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMvQixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsTUFBTSxHQUFHLEdBQUcsb0JBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25CLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFDRCxTQUFTLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUN2QjtJQUNELFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQWpCRCx3QkFpQkM7QUFFRCxrQkFBZSxNQUFNLENBQUM7QUFFdEIsU0FBZ0IsTUFBTSxDQUFDLEdBQVcsRUFBRSxPQUF1QjtJQUN6RCxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMvQixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHO1FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUNsQixDQUFDLEVBQUUsQ0FBQztZQUNKLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsSUFBSSxDQUFDLENBQUM7U0FDUjthQUFNO1lBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxFQUFFLENBQUM7U0FDTDtLQUNGO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLG9CQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBbEJELHdCQWtCQztBQUlELFNBQWdCLEtBQUssQ0FBQyxFQUFVLEVBQUUsWUFBK0IsRUFBRSxFQUFXLEVBQUUsT0FBaUI7SUFDL0YsSUFBSSxHQUF1QixDQUFDO0lBQzVCLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1FBQ3BDLHFCQUFxQjtRQUNyQixPQUFPLEdBQUcsWUFBWSxDQUFDO0tBQ3hCO1NBQU07UUFDTCw4QkFBOEI7UUFDOUIsR0FBRyxHQUFHLFlBQVksQ0FBQztLQUNwQjtJQUVELEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2pCLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ2YsTUFBTSxHQUFHLEdBQXdCLEVBQUUsQ0FBQztJQUVwQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM3QyxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFN0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMzQjtRQUNELElBQUksT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMzQjtLQUNGO0lBRUQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4Qix5REFBeUQ7SUFDekQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUU7UUFDaEMsR0FBRyxHQUFHLE9BQU8sQ0FBQztLQUNmO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUM1QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxDQUFTLENBQUM7UUFDZCxJQUFJLENBQVMsQ0FBQztRQUVkLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNaLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNMLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDZCxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQ
|