form-urlencoded
Advanced tools
Comparing version 4.1.3 to 4.1.4
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports["default"] = void 0; | ||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | ||
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } | ||
exports.default = function (data) { | ||
var _default = function _default(data) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
@@ -18,6 +19,5 @@ var sorted = opts.sorted, | ||
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 "%".concat(ch.charCodeAt().toString(16).slice(-2).toUpperCase()); | ||
}); | ||
@@ -39,3 +39,3 @@ }; | ||
return filterjoin(keys(obj).map(function (key) { | ||
return useDot ? nest(name + '.' + key, obj[key]) : nest(name + '[' + key + ']', obj[key]); | ||
return useDot ? nest("".concat(name, ".").concat(key), obj[key]) : nest("".concat(name, "[").concat(key, "]"), obj[key]); | ||
})); | ||
@@ -58,7 +58,5 @@ }; | ||
var nest = function nest(name, value) { | ||
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : typeof value === 'undefined' ? 'undefined' : _typeof(value); | ||
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _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; | ||
@@ -70,2 +68,4 @@ }; | ||
})); | ||
}; | ||
}; | ||
exports["default"] = _default; |
@@ -6,3 +6,3 @@ { | ||
"module": "form-urlencoded", | ||
"version": "4.1.3", | ||
"version": "4.1.4", | ||
"description": "Return an object as an 'x-www-form-urlencoded' string", | ||
@@ -39,24 +39,19 @@ "author": "Chris <chris@bumblehead.com>", | ||
], | ||
"babel": { | ||
"plugins": [ | ||
"babel-plugin-transform-es2015-unicode-regex" | ||
] | ||
}, | ||
"devDependencies": { | ||
"babel-cli": "^6.26.0", | ||
"babel-plugin-transform-es2015-unicode-regex": "6.24.1", | ||
"babel-preset-env": "^1.7.0", | ||
"jasmine": "3.4.0", | ||
"jasmine-spec-reporter": "3.2.0", | ||
"@babel/cli": "^7.10.1", | ||
"@babel/core": "^7.10.1", | ||
"@babel/plugin-transform-unicode-regex": "^7.10.1", | ||
"@babel/preset-env": "^7.10.1", | ||
"babel-eslint": "^10.0.3", | ||
"eslint": "^6.6.0", | ||
"eslint-config-airbnb-base": "^14.0.0", | ||
"babel-eslint": "^10.0.3", | ||
"eslint-plugin-import": "^2.14.0" | ||
"eslint-plugin-import": "^2.14.0", | ||
"ava": "^3.8.2" | ||
}, | ||
"scripts": { | ||
"test": "jasmine", | ||
"test": "ava", | ||
"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", | ||
"start": "./node_modules/.bin/babel form-urlencoded.js --out-dir dist/ --presets=@babel/env --plugins=@babel/plugin-transform-unicode-regex", | ||
"prepare": "npm start && npm run lint && npm test" | ||
} | ||
} |
@@ -1,19 +0,15 @@ | ||
// Filename: form-urlencoded.spec.js | ||
// Timestamp: 2017.07.05-02:33:29 (last modified) | ||
// Author(s): bumblehead <chris@bumblehead.com> | ||
const test = require('ava'); | ||
const formurlencoded = require('..').default; | ||
var formurlencoded = require('../').default; | ||
// tests assume behaviour not given in ecmascript specification, | ||
// object properties accessed in 'order' | ||
describe("formurlencoded.encode", () => { | ||
var obj = { | ||
str: 'val', | ||
num: 0, | ||
arr: [3, { prop: false }, 1, null, 6], | ||
obj: { prop1: null, prop2: ['elem'] } | ||
}; | ||
const obj = { | ||
str : 'val', | ||
num : 0, | ||
arr : [ 3, { prop : false }, 1, null, 6 ], | ||
obj : { prop1 : null, prop2 : [ 'elem' ] } | ||
}; | ||
console.log(` | ||
console.log(` | ||
var formurlencoded = require('form-urlencoded'); | ||
@@ -37,198 +33,189 @@ var obj = { | ||
${formurlencoded(obj, { | ||
ignorenull: true, | ||
useDot: true, | ||
skipIndex: true, | ||
skipBracket: true | ||
}).match(/(.{1,53})/g).map(n => '// ' + n).join('\n')}`); | ||
ignorenull : true, | ||
skipIndex : true, | ||
sorted : true | ||
}).match(/(.{1,53})/g).map(n => '// ' + n).join('\n')}`); | ||
it("should return encoded data", () => | ||
expect( | ||
formurlencoded({ | ||
propStr1: 'str1', | ||
propStr2: 'str2' | ||
}), { sorted: true } | ||
).toBe('propStr1=str1&propStr2=str2')); | ||
test('return encoded data', t => t.is( | ||
formurlencoded({ | ||
propStr1 : 'str1', | ||
propStr2 : 'str2' | ||
}, { sorted : true }), | ||
'propStr1=str1&propStr2=str2' | ||
)); | ||
it("should return encoded data, with array properties", () => | ||
expect( | ||
formurlencoded({ | ||
propStr1: 'str1', | ||
propStr2: 'str2', | ||
propArr1: ['arrStr1', 'arrStr2'] | ||
}) | ||
).toBe('propStr1=str1&propStr2=str2&propArr1%5B0%5D=arrStr1&propArr1%5B1%5D=arrStr2')); | ||
test('return encoded data, with array properties', t => t.is( | ||
formurlencoded({ | ||
propStr1 : 'str1', | ||
propStr2 : 'str2', | ||
propArr1 : [ 'arrStr1', 'arrStr2' ] | ||
}), | ||
'propStr1=str1&propStr2=str2&propArr1%5B0%5D=arrStr1&propArr1%5B1%5D=arrStr2' | ||
)); | ||
it("should return encoded data, with object properties", () => | ||
expect( | ||
formurlencoded({ | ||
propStr1: 'str1', | ||
propStr2: 'str2', | ||
propObj1: { | ||
objPropStr1: 'objStr1', | ||
objPropStr2: 'objStr2' | ||
} | ||
}) | ||
).toBe('propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2')); | ||
test('return encoded data, with object properties', t => t.is( | ||
formurlencoded({ | ||
propStr1 : 'str1', | ||
propStr2 : 'str2', | ||
propObj1 : { | ||
objPropStr1 : 'objStr1', | ||
objPropStr2 : 'objStr2' | ||
} | ||
}), | ||
// eslint-disable-next-line max-len | ||
'propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2' | ||
)); | ||
it("should return encoded data, with mixed object and array properties", () => | ||
expect(formurlencoded({ | ||
propStr1: 'str1', | ||
propStr2: 'str2', | ||
propObj1: { | ||
objPropStr1: 'objStr1', | ||
objPropStr2: 'objStr2', | ||
objPropObj1: { | ||
propObj1Str1: 'obj1Str1' | ||
}, | ||
objPropArr1: [{ | ||
propArr1Obj1Str1: 'obj1Str1' | ||
}, { | ||
propArr1Obj2Str1: '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')); | ||
test('return encoded data, with mixed object array properties', t => t.is( | ||
formurlencoded({ | ||
propStr1 : 'str1', | ||
propStr2 : 'str2', | ||
propObj1 : { | ||
objPropStr1 : 'objStr1', | ||
objPropStr2 : 'objStr2', | ||
objPropObj1 : { | ||
propObj1Str1 : 'obj1Str1' | ||
}, | ||
objPropArr1 : [{ | ||
propArr1Obj1Str1 : 'obj1Str1' | ||
}, { | ||
propArr1Obj2Str1 : 'obj2Str1' | ||
}] | ||
} | ||
// eslint-disable-next-line max-len | ||
}), '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')); | ||
it("should return encoded data, with numbers", () => | ||
expect( | ||
formurlencoded({ propArr1: [1, 2, 3] }) | ||
).toBe('propArr1%5B0%5D=1&propArr1%5B1%5D=2&propArr1%5B2%5D=3')); | ||
test('return encoded data, with numbers', t => t.is( | ||
formurlencoded({ propArr1 : [1, 2, 3] }), | ||
'propArr1%5B0%5D=1&propArr1%5B1%5D=2&propArr1%5B2%5D=3')); | ||
it("should return encoded data, with booleans", () => | ||
expect( | ||
formurlencoded({ propArr1: [true, false, true] }) | ||
).toBe('propArr1%5B0%5D=true&propArr1%5B1%5D=false&propArr1%5B2%5D=true')); | ||
test('return encoded data, with booleans', t => t.is( | ||
formurlencoded({ propArr1 : [true, false, true] }), | ||
'propArr1%5B0%5D=true&propArr1%5B1%5D=false&propArr1%5B2%5D=true')); | ||
it("should return encoded data, with null", () => | ||
expect( | ||
formurlencoded({ | ||
propNull1: null, | ||
propStr1: 'str1' | ||
}) | ||
).toBe('propNull1=null&propStr1=str1')); | ||
test('return encoded data, with null', t => t.is( | ||
formurlencoded({ | ||
propNull1 : null, | ||
propStr1 : 'str1' | ||
}), 'propNull1=null&propStr1=str1')); | ||
it("should return encoded data, with properties sorted", () => | ||
expect( | ||
formurlencoded({ c: 4, b: { z: 3, y: 2 }, a: 1 }, { sorted: true }) | ||
).toBe('a=1&b%5By%5D=2&b%5Bz%5D=3&c=4')); | ||
test('return encoded data, with properties sorted', t => t.is( | ||
formurlencoded({ c : 4, b : { z : 3, y : 2 }, a : 1 }, { sorted : true }), | ||
'a=1&b%5By%5D=2&b%5Bz%5D=3&c=4')); | ||
it("should not break when null argument is given", () => { | ||
expect( | ||
formurlencoded(null, { sorted: true }) | ||
).toBe(null); | ||
test('not break when null argument is given', t => { | ||
t.is( | ||
formurlencoded(null, { sorted : true }), null); | ||
expect( | ||
formurlencoded(undefined, { sorted: true }) | ||
).toBe(undefined); | ||
}); | ||
t.is( | ||
formurlencoded(undefined, { sorted : true }), undefined); | ||
}); | ||
it("should properly encode all ascii characters", () => { | ||
var testCharEncodingString = ""; | ||
for (var i = 0; i < 256; i++) { | ||
testCharEncodingString += String.fromCharCode(i); | ||
} | ||
test('properly encode all ascii characters', t => { | ||
let testCharEncodingString = ''; | ||
for (let i = 0; i < 256; i++) { | ||
testCharEncodingString += String.fromCharCode(i); | ||
} | ||
expect( | ||
formurlencoded({ | ||
test: testCharEncodingString | ||
}) | ||
).toBe( | ||
'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' | ||
); | ||
}); | ||
t.is( | ||
formurlencoded({ | ||
test : testCharEncodingString | ||
}), | ||
// eslint-disable-next-line max-len | ||
'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' | ||
); | ||
}); | ||
it("should return encoded data, without null", () => | ||
expect( | ||
formurlencoded({ propArr1: [null, null, 1] }, { ignorenull: true }) | ||
).toBe('propArr1%5B2%5D=1')); | ||
test('return encoded data, without null', t => t.is( | ||
formurlencoded({ | ||
propArr1 : [ null, null, 1 ] | ||
}, { ignorenull : true }), | ||
'propArr1%5B2%5D=1' | ||
)); | ||
it("should return encoded set", () => | ||
expect( | ||
formurlencoded({ | ||
set: new Set([1, 'two']) | ||
}) | ||
).toBe('set=1&set=two')); | ||
test('return encoded set', t => t.is( | ||
formurlencoded({ | ||
set : new Set([ 1, 'two' ]) | ||
}), | ||
'set=1&set=two' | ||
)); | ||
it("should return encoded empty array", () => | ||
expect( | ||
formurlencoded({ | ||
emptyArr: [] | ||
}) | ||
).toBe('emptyArr%5B%5D')); | ||
test('return encoded empty array', t => t.is( | ||
formurlencoded({ | ||
emptyArr : [] | ||
}), 'emptyArr%5B%5D' | ||
)); | ||
it("should return encoded empty array inside an object", () => | ||
expect( | ||
formurlencoded({ | ||
parent: { | ||
foo: 'bar', | ||
emptyArr: [] | ||
} | ||
}) | ||
).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D')); | ||
test('return encoded empty array inside an object', t => t.is( | ||
formurlencoded({ | ||
parent : { | ||
foo : 'bar', | ||
emptyArr : [] | ||
} | ||
}), | ||
'parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D' | ||
)); | ||
it("should return encoded array inside an object with index", () => | ||
expect( | ||
formurlencoded({ | ||
parent: { | ||
foo: 'bar', | ||
emptyArr: ['first', 'second'] | ||
} | ||
}) | ||
).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B0%5D=first&parent%5BemptyArr%5D%5B1%5D=second')); | ||
test('return encoded array inside an object with index', t => t.is( | ||
formurlencoded({ | ||
parent : { | ||
foo : 'bar', | ||
emptyArr : ['first', 'second'] | ||
} | ||
// eslint-disable-next-line max-len | ||
}), 'parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B0%5D=first&parent%5BemptyArr%5D%5B1%5D=second' | ||
)); | ||
it("should return encoded array inside an object without index", () => | ||
expect( | ||
formurlencoded({ | ||
parent: { | ||
foo: 'bar', | ||
emptyArr: ['first', 'second'] | ||
} | ||
}, { skipIndex: true }) | ||
).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D=first&parent%5BemptyArr%5D%5B%5D=second')); | ||
test('return encoded array inside an object without index', t => t.is( | ||
formurlencoded({ | ||
parent : { | ||
foo : 'bar', | ||
emptyArr : [ 'first', 'second' ] | ||
} | ||
}, { skipIndex : true }), | ||
// eslint-disable-next-line max-len | ||
'parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D=first&parent%5BemptyArr%5D%5B%5D=second' | ||
)); | ||
it("should return array with index", () => | ||
expect( | ||
formurlencoded({ | ||
key: ['val1'] | ||
}) | ||
).toBe('key%5B0%5D=val1')); | ||
test('return array with index', t => t.is( | ||
formurlencoded({ | ||
key : [ 'val1' ] | ||
}), | ||
'key%5B0%5D=val1' | ||
)); | ||
it("should return array without index", () => | ||
expect( | ||
formurlencoded({ | ||
key: ['val1'] | ||
}, { skipIndex: true }) | ||
).toBe('key%5B%5D=val1')); | ||
test('return array without index', t => t.is( | ||
formurlencoded({ | ||
key : [ 'val1' ] | ||
}, { skipIndex : true }), | ||
'key%5B%5D=val1' | ||
)); | ||
it("should return array name without brackets (when skipBracket is true)", () => | ||
expect( | ||
formurlencoded({ | ||
key: ['val1'] | ||
}, { skipIndex: true, skipBracket: true }) | ||
).toBe('key=val1')); | ||
test('return array name without brackets (when skipBracket is true)', t => t.is( | ||
formurlencoded({ | ||
key : [ 'val1' ] | ||
}, { skipIndex : true, skipBracket : true }), | ||
'key=val1' | ||
)); | ||
it("should return nested object with '.' as seperator", () => | ||
expect( | ||
formurlencoded({ | ||
key: [ | ||
{ | ||
'val1' : 1, | ||
'val2' : 2 | ||
}, | ||
{ | ||
'val3' : 3, | ||
'val4' : 4 | ||
} | ||
] | ||
}, { useDot: true }) | ||
).toBe('key%5B0%5D.val1=1&key%5B0%5D.val2=2&key%5B1%5D.val3=3&key%5B1%5D.val4=4')); | ||
test('return nested object with "." as seperator', t => t.is( | ||
formurlencoded({ | ||
key : [ { | ||
val1 : 1, | ||
val2 : 2 | ||
}, { | ||
val3 : 3, | ||
val4 : 4 | ||
} ] | ||
}, { useDot : true }), | ||
'key%5B0%5D.val1=1&key%5B0%5D.val2=2&key%5B1%5D.val3=3&key%5B1%5D.val4=4' | ||
)); | ||
it("should return encoded urls with unicode characters", () => | ||
expect( | ||
formurlencoded({ | ||
parent: { | ||
foo: '😀' | ||
} | ||
}) | ||
).toBe('parent%5Bfoo%5D=%F0%9F%98%80')); | ||
}); | ||
test('return encoded urls with unicode characters', t => t.is( | ||
formurlencoded({ | ||
parent : { | ||
foo : '😀' | ||
} | ||
}), | ||
'parent%5Bfoo%5D=%F0%9F%98%80' | ||
)); |
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
18603
8
360