form-urlencoded
Advanced tools
Comparing version 0.1.9 to 1.0.0
// Filename: formurlencoded.js | ||
// Timestamp: 2014.04.18-10:14:24 (last modified) | ||
// Author(s): Bumblehead (www.bumblehead.com), JBlashill (james@blashill.com) | ||
// | ||
// input: {one:1,two:2} return: '[one]=1&[two]=2' | ||
var formurlencoded = module.exports = { | ||
var formurlencoded = module.exports = function (data, options) { | ||
var opts = typeof options === 'object' ? options : {}, | ||
optignorenull = opts.ignorenull || false, | ||
optsorted = opts.sorted || false; | ||
// input: {one:1,two:2} return: '[one]=1&[two]-2' | ||
function getNestValsArrAsStr(arr) { | ||
return arr.filter(function (e) { | ||
return typeof e === 'string' && e.length; | ||
}).join('&'); | ||
} | ||
encode : function (data, options) { | ||
var opts = typeof options === 'object' ? options : {}, | ||
optignorenull = opts.ignorenull || false, | ||
optsorted = opts.sorted || false; | ||
function getNestValsArrAsStr(arr) { | ||
return arr.filter(function (e) { | ||
return typeof e === 'string' && e.length; | ||
}).join('&'); | ||
} | ||
function getKeys(obj) { | ||
var keys = Object.keys(obj); | ||
function getKeys(obj) { | ||
var keys = Object.keys(obj); | ||
return optsorted ? keys.sort() : keys; | ||
} | ||
return optsorted ? keys.sort() : keys; | ||
} | ||
function getObjNestVals (name, obj) { | ||
var objKeyStr = ':name[:prop]'; | ||
function getObjNestVals (name, obj) { | ||
var objKeyStr = ':name[:prop]'; | ||
return getNestValsArrAsStr(getKeys(obj).map(function (key) { | ||
return getNestVals( | ||
objKeyStr.replace(/:name/, name).replace(/:prop/, key), obj[key] | ||
); | ||
})); | ||
} | ||
return getNestValsArrAsStr(getKeys(obj).map(function (key) { | ||
return getNestVals( | ||
objKeyStr.replace(/:name/, name).replace(/:prop/, key), obj[key] | ||
); | ||
})); | ||
} | ||
function getArrNestVals (name, arr) { | ||
var arrKeyStr = ':name[]'; | ||
function getArrNestVals (name, arr) { | ||
var arrKeyStr = ':name[]'; | ||
return getNestValsArrAsStr(arr.map(function (elem) { | ||
return getNestVals( | ||
arrKeyStr.replace(/:name/, name), elem | ||
); | ||
})); | ||
} | ||
return getNestValsArrAsStr(arr.map(function (elem) { | ||
return getNestVals( | ||
arrKeyStr.replace(/:name/, name), elem | ||
); | ||
})); | ||
} | ||
function getNestVals (name, value) { | ||
var whitespaceRe = /%20/g, | ||
encode = encodeURIComponent, | ||
type = typeof value, | ||
f = null; | ||
function getNestVals (name, value) { | ||
var whitespaceRe = /%20/g, | ||
encode = encodeURIComponent, | ||
type = typeof value, | ||
f = null; | ||
if (Array.isArray(value)) { | ||
f = getArrNestVals(name, value); | ||
} else if (type === 'string') { | ||
f = encode(name) + '=' + formEncodeString(value); | ||
} else if (type === 'number') { | ||
f = encode(name) + '=' + encode(value).replace(whitespaceRe, '+'); | ||
} else if (type === 'boolean') { | ||
f = encode(name) + '=' + value; | ||
} else if (type === 'object') { | ||
if (value !== null) { | ||
f = getObjNestVals(name, value); | ||
} else if (!optignorenull) { | ||
f = encode(name) + '=null'; | ||
} | ||
if (Array.isArray(value)) { | ||
f = getArrNestVals(name, value); | ||
} else if (type === 'string') { | ||
f = encode(name) + '=' + formEncodeString(value); | ||
} else if (type === 'number') { | ||
f = encode(name) + '=' + encode(value).replace(whitespaceRe, '+'); | ||
} else if (type === 'boolean') { | ||
f = encode(name) + '=' + value; | ||
} else if (type === 'object') { | ||
if (value !== null) { | ||
f = getObjNestVals(name, value); | ||
} else if (!optignorenull) { | ||
f = encode(name) + '=null'; | ||
} | ||
return f; | ||
} | ||
// 5.1, http://www.w3.org/TR/html5/forms.html#url-encoded-form-data | ||
function manuallyEncodeChar (ch) { | ||
return '%' + ('0' + ch.charCodeAt(0).toString(16)).slice(-2).toUpperCase(); | ||
}; | ||
return f; | ||
} | ||
function formEncodeString (value) { | ||
return value | ||
.replace(/[^ !'()~\*]*/g, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, manuallyEncodeChar); | ||
}; | ||
// 5.1, http://www.w3.org/TR/html5/forms.html#url-encoded-form-data | ||
function manuallyEncodeChar (ch) { | ||
return '%' + ('0' + ch.charCodeAt(0).toString(16)).slice(-2).toUpperCase(); | ||
}; | ||
return getNestValsArrAsStr(getKeys(data).map(function (key) { | ||
return getNestVals(key, data[key]); | ||
})); | ||
} | ||
function formEncodeString (value) { | ||
return value | ||
.replace(/[^ !'()~\*]*/g, encodeURIComponent) | ||
.replace(/ /g, '+') | ||
.replace(/[!'()~\*]/g, manuallyEncodeChar); | ||
}; | ||
return getNestValsArrAsStr(getKeys(data).map(function (key) { | ||
return getNestVals(key, data[key]); | ||
})); | ||
}; | ||
{ | ||
"name": "form-urlencoded", | ||
"main": "form-urlencoded", | ||
"version": "0.1.09", | ||
"version": "1.0.0", | ||
"author": "Chris <chris@bumblehead.com>", | ||
"license" : "MIT", | ||
"contributors": [{ | ||
@@ -7,0 +8,0 @@ "name": "James", |
@@ -22,3 +22,3 @@ form-urlencoded | ||
console.log(formurlencoded.encode(obj)); | ||
console.log(formurlencoded(obj)); | ||
@@ -30,3 +30,3 @@ // propStr1=str1&propStr2=str2&propStr3=str2&propArr%5B%5D= | ||
console.log(formurlencoded.encode(obj, { | ||
console.log(formurlencoded(obj, { | ||
ignorenull : true, | ||
@@ -33,0 +33,0 @@ sorted : true |
@@ -15,3 +15,3 @@ var formurlencoded = require('../form-urlencoded'), | ||
}, | ||
result = formurlencoded.encode(begin).split('&'), | ||
result = formurlencoded(begin).split('&'), | ||
resultExpected = qs.stringify(begin).split('&'); | ||
@@ -28,3 +28,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = 'propStr1=str1&propStr2=str2&propArr1%5B%5D=arrStr1&propArr1%5B%5D=arrStr2'; | ||
@@ -44,3 +44,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = 'propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2'; | ||
@@ -68,3 +68,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = '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'; | ||
@@ -79,3 +79,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = 'propArr1%5B%5D=1&propArr1%5B%5D=2&propArr1%5B%5D=3'; | ||
@@ -90,3 +90,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = 'propArr1%5B%5D=true&propArr1%5B%5D=false&propArr1%5B%5D=true'; | ||
@@ -102,3 +102,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin), | ||
result = formurlencoded(begin), | ||
resultExpected = 'propNull1=null&propStr1=str1'; | ||
@@ -118,3 +118,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin, { sorted: true }), | ||
result = formurlencoded(begin, { sorted: true }), | ||
resultExpected = 'a=1&b%5By%5D=2&b%5Bz%5D=3&c=4'; | ||
@@ -134,3 +134,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin, { sorted: true }), | ||
result = formurlencoded(begin, { sorted: true }), | ||
resultExpected = 'test=%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%C2%80%C2%81%C2%82%C2%83%C2%84%C2%85%C2%86%C2%87%C2%88%C2%89%C2%8A%C2%8B%C2%8C%C2%8D%C2%8E%C2%8F%C2%90%C2%91%C2%92%C2%93%C2%94%C2%95%C2%96%C2%97%C2%98%C2%99%C2%9A%C2%9B%C2%9C%C2%9D%C2%9E%C2%9F%C2%A0%C2%A1%C2%A2%C2%A3%C2%A4%C2%A5%C2%A6%C2%A7%C2%A8%C2%A9%C2%AA%C2%AB%C2%AC%C2%AD%C2%AE%C2%AF%C2%B0%C2%B1%C2%B2%C2%B3%C2%B4%C2%B5%C2%B6%C2%B7%C2%B8%C2%B9%C2%BA%C2%BB%C2%BC%C2%BD%C2%BE%C2%BF%C3%80%C3%81%C3%82%C3%83%C3%84%C3%85%C3%86%C3%87%C3%88%C3%89%C3%8A%C3%8B%C3%8C%C3%8D%C3%8E%C3%8F%C3%90%C3%91%C3%92%C3%93%C3%94%C3%95%C3%96%C3%97%C3%98%C3%99%C3%9A%C3%9B%C3%9C%C3%9D%C3%9E%C3%9F%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5%C3%A6%C3%A7%C3%A8%C3%A9%C3%AA%C3%AB%C3%AC%C3%AD%C3%AE%C3%AF%C3%B0%C3%B1%C3%B2%C3%B3%C3%B4%C3%B5%C3%B6%C3%B7%C3%B8%C3%B9%C3%BA%C3%BB%C3%BC%C3%BD%C3%BE%C3%BF'; | ||
@@ -145,3 +145,3 @@ | ||
}, | ||
result = formurlencoded.encode(begin, { | ||
result = formurlencoded(begin, { | ||
ignorenull : true | ||
@@ -167,3 +167,3 @@ }), | ||
console.log(formurlencoded.encode(obj)); | ||
console.log(formurlencoded(obj)); | ||
@@ -175,3 +175,3 @@ // propStr1=str1&propStr2=str2&propStr3=str2&propArr%5B%5D= | ||
console.log(formurlencoded.encode(obj, { | ||
console.log(formurlencoded(obj, { | ||
ignorenull : true, | ||
@@ -178,0 +178,0 @@ sorted : true |
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
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1
0
13747
7
221