function useWHATWG(n, param, prop) { const obj = new URLSearchParams(param); obj.toString(); bench.start(); for (var i = 0; i < n; i += 1) { obj.toString(); } bench.end(n); }
test(function() { const testValue = '+15555555555'; const params = new URLSearchParams(); params.set('query', testValue); var newParams = new URLSearchParams(params.toString()); assert_equals(params.toString(), 'query=%2B15555555555'); assert_equals(params.get('query'), testValue); assert_equals(newParams.get('query'), testValue); }, 'Parse encoded +');
test(function() { var params; params = new URLSearchParams('a=b&c=d&&e&&'); assert_equals(params.toString(), 'a=b&c=d&e='); // params = new URLSearchParams('a = b &a=b&c=d%20'); // assert_equals(params.toString(), 'a+=+b+&a=b&c=d+'); // The lone '=' _does_ survive the roundtrip. params = new URLSearchParams('a=&a=b'); assert_equals(params.toString(), 'a=&a=b'); }, 'URLSearchParams.toString');
function getOAuthCallbackUrl(req) { const { utm_source, CollectiveId, access_token, redirect } = req.query; const { service } = req.params; const params = new URLSearchParams(omitBy({ access_token, redirect, CollectiveId, utm_source }, isNil)); return `${config.host.website}/api/connected-accounts/${service}/callback?${params.toString()}`; }
export async function fetchLedgerTransactions(args) { const ledgerQuery = { where: { ToAccountId: args.CollectiveId, }, limit: args.limit, offset: args.offset, includeHostedCollectivesTransactions: args.includeHostedCollectivesTransactions, }; ledgerQuery.where = JSON.stringify(ledgerQuery.where); const params = new URLSearchParams(ledgerQuery); return axios.get(`${ledger.transactionUrl}?${params.toString()}`); }
test(function() { var params = new URLSearchParams() assert_equals(params.toString(), "") }, "URLSearchParams constructor, no arguments")
{ const iterableError = common.expectsError({ code: 'ERR_ARG_NOT_ITERABLE', type: TypeError, message: 'Query pairs must be iterable' }); const tupleError = common.expectsError({ code: 'ERR_INVALID_TUPLE', type: TypeError, message: 'Each query pair must be an iterable [name, value] tuple' }, 6); let params; params = new URLSearchParams(undefined); assert.strictEqual(params.toString(), ''); params = new URLSearchParams(null); assert.strictEqual(params.toString(), ''); params = new URLSearchParams( makeIterableFunc([['key', 'val'], ['key2', 'val2']]) ); assert.strictEqual(params.toString(), 'key=val&key2=val2'); params = new URLSearchParams( makeIterableFunc([['key', 'val'], ['key2', 'val2']].map(makeIterableFunc)) ); assert.strictEqual(params.toString(), 'key=val&key2=val2'); assert.throws(() => new URLSearchParams([[1]]), tupleError); assert.throws(() => new URLSearchParams([[1, 2, 3]]), tupleError); assert.throws(() => new URLSearchParams({ [Symbol.iterator]: 42 }), iterableError); assert.throws(() => new URLSearchParams([{}]), tupleError);
assert.strictEqual(params + '', 'a=b%00c'); params.delete('a'); params.append('a\0b', 'c'); assert.strictEqual(params + '', 'a%00b=c'); // Serialize \uD83D\uDCA9 // Unicode Character 'PILE OF POO' (U+1F4A9) params = new URLSearchParams(); params.append('a', 'b\uD83D\uDCA9c'); assert.strictEqual(params + '', 'a=b%F0%9F%92%A9c'); params.delete('a'); params.append('a\uD83D\uDCA9b', 'c'); assert.strictEqual(params + '', 'a%F0%9F%92%A9b=c'); // URLSearchParams.toString // querystring parses `&&` as {'': ''} // params = new URLSearchParams('a=b&c=d&&e&&'); // assert.strictEqual(params.toString(), 'a=b&c=d&e='); // querystring does not currently handle spaces intelligently // params = new URLSearchParams('a = b &a=b&c=d%20'); // assert.strictEqual(params.toString(), 'a+=+b+&a=b&c=d+'); // The lone '=' _does_ survive the roundtrip. params = new URLSearchParams('a=&a=b'); assert.strictEqual(params.toString(), 'a=&a=b'); assert.throws(() => { params.toString.call(undefined); }, /^TypeError: Value of `this` is not a URLSearchParams$/);