form-urlencoded
Advanced tools
Comparing version 1.4.1 to 1.5.0
// Filename: formurlencoded.js | ||
// Timestamp: 2016.03.07-12:29:28 (last modified) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com), Jumper423 (jump.e.r@yandex.ru) | ||
// | ||
@@ -8,63 +8,67 @@ // http://www.w3.org/TR/html5/forms.html#url-encoded-form-data | ||
var formurlencoded = module.exports = function (data, opts) { | ||
// 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'); | ||
module.exports = function (data, opts) { | ||
"use strict"; | ||
opts = typeof opts === 'object' ? opts : {}; | ||
function encode (value) { | ||
return String(value) | ||
.replace(encodechar, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, function (ch) { | ||
return '%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase(); | ||
}); | ||
} | ||
// 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'); | ||
function keys (obj) { | ||
var keys = Object.keys(obj); | ||
opts = typeof opts === 'object' ? opts : {}; | ||
return opts.sorted ? keys.sort() : keys; | ||
} | ||
function encode(value) { | ||
return String(value) | ||
.replace(encodechar, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, function (ch) { | ||
return '%' + ch.charCodeAt().toString(16).slice(-2).toUpperCase(); | ||
}); | ||
} | ||
function filterjoin (arr) { | ||
return arr.filter(function (e) { return e; }).join('&'); | ||
} | ||
function keys(obj) { | ||
var itemsKeys = Object.keys(obj); | ||
function objnest (name, obj) { | ||
return filterjoin(keys(obj).map(function (key) { | ||
return nest(name + '[' + key + ']', obj[key]); | ||
})); | ||
} | ||
return opts.sorted ? itemsKeys.sort() : itemsKeys; | ||
} | ||
function arrnest (name, arr) { | ||
return arr.length ? filterjoin(arr.map(function (elem) { | ||
return nest(name + '[]', elem); | ||
})) : encode(name + '[]'); | ||
} | ||
function filterjoin(arr) { | ||
return arr.filter(function (e) { | ||
return e; | ||
}).join('&'); | ||
} | ||
function nest (name, value) { | ||
var type = typeof value, | ||
f = null; | ||
function objnest(name, obj) { | ||
return filterjoin(keys(obj).map(function (key) { | ||
return nest(name + '[' + key + ']', obj[key]); | ||
})); | ||
} | ||
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); | ||
function arrnest(name, arr) { | ||
return arr.length ? filterjoin(arr.map(function (elem, index) { | ||
return nest(name + '[' + index + ']', elem); | ||
})) : encode(name + '[]'); | ||
} | ||
return f; | ||
} | ||
function nest(name, value) { | ||
var type = typeof value, | ||
f = null; | ||
return data && filterjoin(keys(data).map(function (key) { | ||
return nest(key, data[key]); | ||
})); | ||
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]); | ||
})); | ||
}; |
(The MIT License) | ||
Copyright (c) 2012 Bumblehead <chris@bumblehead.com> | ||
Copyright (c) 2012-2017 Bumblehead <chris@bumblehead.com> | ||
@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of |
{ | ||
"name": "form-urlencoded", | ||
"main": "form-urlencoded", | ||
"version": "1.4.1", | ||
"version": "1.5.0", | ||
"description": "Return an object as an 'x-www-form-urlencoded' string", | ||
@@ -12,2 +12,5 @@ "author": "Chris <chris@bumblehead.com>", | ||
"email": "james@blashill.com" | ||
},{ | ||
"name": "Jumper423", | ||
"email": "jump.e.r@yandex.ru" | ||
}], | ||
@@ -14,0 +17,0 @@ "repository": { |
form-urlencoded | ||
=============== | ||
**(c)[Bumblehead][0],[JBlashill][6] 2012,2013,2014,2015,2016** | ||
**(c)[Bumblehead][0],[JBlashill][6] 2012-2017** | ||
[![npm version](https://badge.fury.io/js/form-urlencoded.svg)](https://badge.fury.io/js/form-urlencoded) | ||
[![npm version](https://badge.fury.io/js/form-urlencoded.svg)](https://badge.fury.io/js/form-urlencoded) [![Build Status](https://travis-ci.org/iambumblehead/form-urlencoded.svg?branch=master)](https://travis-ci.org/iambumblehead/form-urlencoded) | ||
@@ -7,0 +7,0 @@ 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. |
@@ -28,3 +28,3 @@ // Filename: form-urlencoded.spec.js | ||
}) | ||
).toBe( 'propStr1=str1&propStr2=str2&propArr1%5B%5D=arrStr1&propArr1%5B%5D=arrStr2' ); | ||
).toBe( 'propStr1=str1&propStr2=str2&propArr1%5B0%5D=arrStr1&propArr1%5B1%5D=arrStr2' ); | ||
}); | ||
@@ -61,3 +61,3 @@ | ||
} | ||
}) ).toBe( 'propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2&propObj1%5BobjPropObj1%5D%5BpropObj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B%5D%5BpropArr1Obj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B%5D%5BpropArr1Obj2Str1%5D=obj2Str1' ); | ||
}) ).toBe( 'propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2&propObj1%5BobjPropObj1%5D%5BpropObj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B0%5D%5BpropArr1Obj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B1%5D%5BpropArr1Obj2Str1%5D=obj2Str1' ); | ||
}); | ||
@@ -68,3 +68,3 @@ | ||
formurlencoded({ propArr1 : [1, 2, 3] }) | ||
).toBe( 'propArr1%5B%5D=1&propArr1%5B%5D=2&propArr1%5B%5D=3' ); | ||
).toBe( 'propArr1%5B0%5D=1&propArr1%5B1%5D=2&propArr1%5B2%5D=3' ); | ||
}); | ||
@@ -75,3 +75,3 @@ | ||
formurlencoded({propArr1 : [true, false, true]}) | ||
).toBe( 'propArr1%5B%5D=true&propArr1%5B%5D=false&propArr1%5B%5D=true' ); | ||
).toBe( 'propArr1%5B0%5D=true&propArr1%5B1%5D=false&propArr1%5B2%5D=true' ); | ||
}); | ||
@@ -122,3 +122,3 @@ | ||
formurlencoded({propArr1 : [null, null, 1]}, {ignorenull : true}) | ||
).toBe( 'propArr1%5B%5D=1' ); | ||
).toBe( 'propArr1%5B2%5D=1' ); | ||
}); | ||
@@ -125,0 +125,0 @@ |
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
12966
210