form-urlencoded
Advanced tools
Comparing version 1.5.1 to 2.0.0
// Filename: formurlencoded.js | ||
// Timestamp: 2016.03.07-12:29:28 (last modified) | ||
// Timestamp: 2017.07.04-14:35:29 (last modified) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com), Jumper423 (jump.e.r@yandex.ru) | ||
@@ -8,71 +8,60 @@ // | ||
module.exports = function (data, opts) { | ||
"use strict"; | ||
module.exports = (data, opts = {}) => { | ||
const sorted = Boolean(opts.sorted), | ||
skipIndex = Boolean(opts.skipIndex), | ||
ignorenull = Boolean(opts.ignorenull), | ||
// ES5 compatible version of `/[^ !'()~\*]/gu`, https://mothereff.in/regexpu | ||
var encodechar = new RegExp([ | ||
'(?:[\0-\x1F"-&\+-\}\x7F-\uD7FF\uE000-\uFFFF]|', | ||
'[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|', | ||
'(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])' | ||
].join(''), 'g'); | ||
// ES5 compatible version of `/[^ !'()~\*]/gu`, https://mothereff.in/regexpu | ||
encodechar = new RegExp([ | ||
'(?:[\0-\x1F"-&\+-\}\x7F-\uD7FF\uE000-\uFFFF]|', | ||
'[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|', | ||
'(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])' | ||
].join(''), 'g'), | ||
opts = typeof opts === 'object' ? opts : {}; | ||
encode = value => | ||
String(value) | ||
.replace(encodechar, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, ch => | ||
'%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase()), | ||
function encode(value) { | ||
return String(value) | ||
.replace(encodechar, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, function (ch) { | ||
return '%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase(); | ||
}); | ||
} | ||
keys = (obj, keyarr = Object.keys(obj)) => | ||
sorted ? keyarr.sort() : keyarr, | ||
function keys(obj) { | ||
var itemsKeys = Object.keys(obj); | ||
filterjoin = arr => | ||
arr.filter(e => e).join('&'), | ||
return opts.sorted ? itemsKeys.sort() : itemsKeys; | ||
} | ||
objnest = (name, obj) => | ||
filterjoin(keys(obj).map(key => | ||
nest(name + '[' + key + ']', obj[key]))), | ||
function filterjoin(arr) { | ||
return arr.filter(function (e) { | ||
return e; | ||
}).join('&'); | ||
} | ||
arrnest = (name, arr) => | ||
arr.length | ||
? filterjoin(arr.map((elem, index) => | ||
skipIndex | ||
? nest(name + '[]', elem) | ||
: nest(name + '[' + index + ']', elem) | ||
)) | ||
: encode(name + '[]'), | ||
function objnest(name, obj) { | ||
return filterjoin(keys(obj).map(function (key) { | ||
return nest(name + '[' + key + ']', obj[key]); | ||
})); | ||
} | ||
nest = (name, value) => { | ||
let type = typeof value, | ||
f = null; | ||
function arrnest(name, arr) { | ||
return arr.length ? filterjoin(arr.map(function (elem, index) { | ||
if (opts.skipIndex) { | ||
return nest(name + '[]', elem); | ||
} else { | ||
return nest(name + '[' + index + ']', elem); | ||
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); | ||
} | ||
})) : encode(name + '[]'); | ||
} | ||
function nest(name, value) { | ||
var type = typeof value, | ||
f = null; | ||
return f; | ||
}; | ||
if (value === f) { | ||
f = opts.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); | ||
} | ||
return f; | ||
} | ||
return data && filterjoin(keys(data).map(function (key) { | ||
return nest(key, data[key]); | ||
})); | ||
return data && filterjoin(keys(data).map(key => | ||
nest(key, data[key]) | ||
)); | ||
}; |
{ | ||
"name": "form-urlencoded", | ||
"main": "form-urlencoded", | ||
"version": "1.5.1", | ||
"version": "2.0.0", | ||
"description": "Return an object as an 'x-www-form-urlencoded' string", | ||
"author": "Chris <chris@bumblehead.com>", | ||
"license" : "MIT", | ||
"license": "MIT", | ||
"readmeFilename": "README.md", | ||
"contributors": [{ | ||
"name": "James", | ||
"email": "james@blashill.com" | ||
},{ | ||
"name": "Jumper423", | ||
"email": "jump.e.r@yandex.ru" | ||
}], | ||
"contributors": [ | ||
{ | ||
"name": "James", | ||
"email": "james@blashill.com" | ||
}, | ||
{ | ||
"name": "Jumper423", | ||
"email": "jump.e.r@yandex.ru" | ||
} | ||
], | ||
"repository": { | ||
@@ -33,8 +36,9 @@ "type": "git", | ||
], | ||
"devDependencies" : { | ||
"jasmine-node" : ">=1.3.0" | ||
"devDependencies": { | ||
"jasmine": "2.5.3", | ||
"jasmine-spec-reporter": "3.2.0" | ||
}, | ||
"scripts" : { | ||
"test" : "node node_modules/jasmine-node/bin/jasmine-node --verbose test/" | ||
"scripts": { | ||
"test": "node node_modules/jasmine/bin/jasmine.js --verbose" | ||
} | ||
} |
@@ -7,5 +7,4 @@ form-urlencoded | ||
Returns 'x-www-form-urlencoded' string data, an encoding often used when an [HTML form is submitted][1]. Form data is serialised in [this format][2] and sent to a server. | ||
Returns 'x-www-form-urlencoded' string data, an encoding often used when an [HTML form is submitted][1]. Form data is serialised in [this format][2] and sent to a server. _use form-urlencoded@1.2.1 for pre-ES2016 sources_ | ||
```javascript | ||
@@ -43,7 +42,7 @@ var formurlencoded = require('form-urlencoded'); | ||
![scrounge](https://github.com/iambumblehead/scroungejs/raw/master/img/hand.png)[![es5 classic][7]][7] | ||
![scrounge](https://github.com/iambumblehead/scroungejs/raw/master/img/hand.png) | ||
(The MIT License) | ||
Copyright (c) 2012-2016 [Bumblehead][0] <chris@bumblehead.com> | ||
Copyright (c) [Bumblehead][0] <chris@bumblehead.com> | ||
@@ -50,0 +49,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
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
14479
9
2
247
53
1