form-urlencoded
Advanced tools
Comparing version 4.0.1 to 4.1.0
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
value: true | ||
}); | ||
@@ -11,48 +11,59 @@ | ||
// Timestamp: 2017.07.04-19:19:11 (last modified) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com), Jumper423 (jump.e.r@yandex.ru) | ||
exports.default = function (data) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
var sorted = Boolean(opts.sorted), | ||
skipIndex = Boolean(opts.skipIndex), | ||
ignorenull = Boolean(opts.ignorenull), | ||
skipBracket = Boolean(opts.skipBracket), | ||
encode = function encode(value) { | ||
return String(value).replace(/(?:[\0-\x1F"-&\+-\}\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, encodeURIComponent).replace(/ /g, '+').replace(/[!'()~\*]/g, function (ch) { | ||
return '%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase(); | ||
}); | ||
}, | ||
keys = function keys(obj) { | ||
var keyarr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object.keys(obj); | ||
return sorted ? keyarr.sort() : keyarr; | ||
}, | ||
filterjoin = function filterjoin(arr) { | ||
return arr.filter(function (e) { | ||
return e; | ||
}).join('&'); | ||
}, | ||
objnest = function objnest(name, obj) { | ||
return filterjoin(keys(obj).map(function (key) { | ||
return nest(name + '[' + key + ']', obj[key]); | ||
})); | ||
}, | ||
arrnest = function arrnest(name, arr) { | ||
var brackets = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : skipBracket ? '' : '[]'; | ||
return arr.length ? filterjoin(arr.map(function (elem, index) { | ||
return skipIndex ? nest(name + brackets, elem) : nest(name + '[' + index + ']', elem); | ||
})) : encode(name + brackets); | ||
}, | ||
nest = function nest(name, value) { | ||
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : typeof value === 'undefined' ? 'undefined' : _typeof(value); | ||
var f = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; | ||
var sorted = Boolean(opts.sorted); | ||
var skipIndex = Boolean(opts.skipIndex); | ||
var ignorenull = Boolean(opts.ignorenull); | ||
var skipBracket = Boolean(opts.skipBracket); | ||
if (value === f) f = ignorenull ? f : encode(name) + '=' + f;else if (/string|number|boolean/.test(type)) f = encode(name) + '=' + encode(value);else if (Array.isArray(value)) f = arrnest(name, value);else if (type === 'object') f = objnest(name, value); | ||
var encode = function encode(value) { | ||
return String(value).replace(/(?:[\0-\x1F"-&\+-\}\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, encodeURIComponent).replace(/ /g, '+').replace(/[!'()~*]/g, function (ch) { | ||
return '%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase(); | ||
}); | ||
}; | ||
return f; | ||
}; | ||
var keys = function keys(obj) { | ||
var keyarr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object.keys(obj); | ||
return sorted ? keyarr.sort() : keyarr; | ||
}; | ||
return data && filterjoin(keys(data).map(function (key) { | ||
return nest(key, data[key]); | ||
var filterjoin = function filterjoin(arr) { | ||
return arr.filter(function (e) { | ||
return e; | ||
}).join('&'); | ||
}; | ||
var objnest = function objnest(name, obj) { | ||
return filterjoin(keys(obj).map(function (key) { | ||
return nest(name + '[' + key + ']', obj[key]); | ||
})); | ||
}; | ||
var arrnest = function arrnest(name, arr) { | ||
var brackets = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : skipBracket ? '' : '[]'; | ||
return arr.length ? filterjoin(arr.map(function (elem, index) { | ||
return skipIndex ? nest(name + brackets, elem) : nest(name + '[' + index + ']', elem); | ||
})) : encode(name + brackets); | ||
}; | ||
var setnest = function setnest(name, set) { | ||
return filterjoin(Array.from(set).map(function (elem) { | ||
return nest(name, elem); | ||
})); | ||
}; | ||
var nest = function nest(name, value) { | ||
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : typeof value === 'undefined' ? 'undefined' : _typeof(value); | ||
var f = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; | ||
if (value === f) f = ignorenull ? f : encode(name) + '=' + f;else if (/string|number|boolean/.test(type)) f = encode(name) + '=' + encode(value);else if (Array.isArray(value)) f = arrnest(name, value);else if (value instanceof Set) f = setnest(name, value);else if (type === 'object') f = objnest(name, value); | ||
return f; | ||
}; | ||
return data && filterjoin(keys(data).map(function (key) { | ||
return nest(key, data[key]); | ||
})); | ||
}; |
// Filename: formurlencoded.js | ||
// Timestamp: 2017.07.04-19:19:11 (last modified) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com), Jumper423 (jump.e.r@yandex.ru) | ||
export default (data, opts = {}) => { | ||
const sorted = Boolean(opts.sorted), | ||
skipIndex = Boolean(opts.skipIndex), | ||
ignorenull = Boolean(opts.ignorenull), | ||
skipBracket = Boolean(opts.skipBracket), | ||
const sorted = Boolean(opts.sorted); | ||
const skipIndex = Boolean(opts.skipIndex); | ||
const ignorenull = Boolean(opts.ignorenull); | ||
const skipBracket = Boolean(opts.skipBracket); | ||
encode = value => String(value) | ||
.replace(/[^ !'()~\*]/gu, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, ch => | ||
'%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase()), | ||
const encode = value => String(value) | ||
.replace(/[^ !'()~*]/gu, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~*]/g, ch => | ||
`%${ch.charCodeAt().toString(16).slice(-2).toUpperCase()}`); | ||
keys = (obj, keyarr = Object.keys(obj)) => | ||
sorted ? keyarr.sort() : keyarr, | ||
const keys = (obj, keyarr = Object.keys(obj)) => | ||
sorted ? keyarr.sort() : keyarr; | ||
filterjoin = arr => arr.filter(e => e).join('&'), | ||
const filterjoin = arr => arr.filter(e => e).join('&'); | ||
objnest = (name, obj) => | ||
filterjoin(keys(obj).map(key => | ||
nest(name + '[' + key + ']', obj[key]))), | ||
const objnest = (name, obj) => | ||
filterjoin(keys(obj).map(key => | ||
nest(`${name}[${key}]`, obj[key]))); | ||
arrnest = (name, arr, brackets = skipBracket ? '' : '[]') => arr.length | ||
? filterjoin(arr.map((elem, index) => skipIndex | ||
? nest(name + brackets, elem) | ||
: nest(name + '[' + index + ']', elem))) | ||
: encode(name + brackets), | ||
const arrnest = (name, arr, brackets = skipBracket ? '' : '[]') => arr.length | ||
? filterjoin(arr.map((elem, index) => skipIndex | ||
? nest(name + brackets, elem) | ||
: nest(name + '[' + index + ']', elem))) | ||
: encode(name + brackets); | ||
nest = (name, value, type = typeof value, f = null) => { | ||
if (value === f) | ||
f = ignorenull ? f : encode(name) + '=' + f; | ||
else if (/string|number|boolean/.test(type)) | ||
f = encode(name) + '=' + encode(value); | ||
else if (Array.isArray(value)) | ||
f = arrnest(name, value); | ||
else if (type === 'object') | ||
f = objnest(name, value); | ||
const setnest = (name, set) => filterjoin( | ||
Array.from(set).map(elem => nest(name, elem))); | ||
return f; | ||
}; | ||
const nest = (name, value, type = typeof value, f = null) => { | ||
if (value === f) | ||
f = ignorenull ? f : encode(name) + '=' + f; | ||
else if (/string|number|boolean/.test(type)) | ||
f = encode(name) + '=' + encode(value); | ||
else if (Array.isArray(value)) | ||
f = arrnest(name, value); | ||
else if (value instanceof Set) | ||
f = setnest(name, value); | ||
else if (type === 'object') | ||
f = objnest(name, value); | ||
return data && filterjoin(keys(data).map(key => nest(key, data[key]))); | ||
return f; | ||
}; | ||
return data && filterjoin(keys(data).map(key => nest(key, data[key]))); | ||
}; |
@@ -6,3 +6,3 @@ { | ||
"module": "form-urlencoded", | ||
"version": "4.0.1", | ||
"version": "4.1.0", | ||
"description": "Return an object as an 'x-www-form-urlencoded' string", | ||
@@ -49,9 +49,14 @@ "author": "Chris <chris@bumblehead.com>", | ||
"jasmine": "3.4.0", | ||
"jasmine-spec-reporter": "3.2.0" | ||
"jasmine-spec-reporter": "3.2.0", | ||
"eslint": "^6.6.0", | ||
"eslint-config-airbnb-base": "^14.0.0", | ||
"babel-eslint": "^10.0.3", | ||
"eslint-plugin-import": "^2.14.0" | ||
}, | ||
"scripts": { | ||
"test": "jasmine", | ||
"lint": "eslint form-urlencoded.js", | ||
"start": "./node_modules/babel-cli/bin/babel.js --plugins transform-es2015-unicode-regex --presets env -d dist/ form-urlencoded.js", | ||
"prepare": "npm start && npm test" | ||
"prepare": "npm start && npm run lint && npm test" | ||
} | ||
} |
@@ -18,3 +18,4 @@ form-urlencoded | ||
arr : [3, {prop : false}, 1, null, 6], | ||
obj : {prop1 : null, prop2 : ['elem']} | ||
obj : {prop1 : null, prop2 : ['elem']}, | ||
set : new Set([1, 'two']) | ||
}; | ||
@@ -25,3 +26,3 @@ | ||
// &arr%5B2%5D=1&arr%5B3%5D=null&arr%5B4%5D=6&obj%5Bprop | ||
// 1%5D=null&obj%5Bprop2%5D%5B0%5D=elem | ||
// 1%5D=null&obj%5Bprop2%5D%5B0%5D=elem&set=1&set=two | ||
@@ -35,2 +36,3 @@ console.log(formurlencoded(obj, { | ||
// %5B%5D=6&num=0&obj%5Bprop2%5D%5B%5D=elem&str=val | ||
// &set=1&set=two | ||
``` | ||
@@ -37,0 +39,0 @@ |
@@ -11,3 +11,2 @@ // Filename: form-urlencoded.spec.js | ||
describe("formurlencoded.encode", () => { | ||
var obj = { | ||
@@ -143,2 +142,9 @@ str: 'val', | ||
it("should return encoded set", () => | ||
expect( | ||
formurlencoded({ | ||
set: new Set([1, 'two']) | ||
}) | ||
).toBe('set=1&set=two')); | ||
it("should return encoded empty array", () => | ||
@@ -145,0 +151,0 @@ expect( |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
19538
10
380
59
9