test(function() { var params = new URLSearchParams(); params.append('=', 'a'); assert_equals(params + '', '%3D=a'); params.append('b', '='); assert_equals(params + '', '%3D=a&b=%3D'); }, 'Serialize =');
test(function() { var params = new URLSearchParams(); params.append('', 'b'); assert_equals(params + '', '=b'); params.append('', 'b'); assert_equals(params + '', '=b&=b'); }, 'Serialize empty name');
test(function() { var params = new URLSearchParams(); params.append('&', 'a'); assert_equals(params + '', '%26=a'); params.append('b', '&'); assert_equals(params + '', '%26=a&b=%26'); }, 'Serialize &');
test(function() { var params = new URLSearchParams(); params.append(null, null); assert_equals(params + '', 'null=null'); params.append(null, null); assert_equals(params + '', 'null=null&null=null'); }, 'Append null');
test(function() { var params = new URLSearchParams(); params.append('', ''); assert_equals(params + '', '='); params.append('', ''); assert_equals(params + '', '=&='); }, 'Append empty strings');
test(function() { var params = new URLSearchParams(); params.append('', ''); assert_equals(params + '', '='); params.append('', ''); assert_equals(params + '', '=&='); }, 'Serialize empty name and value');
test(function() { var params = new URLSearchParams(); params.append('a', 'b\uD83D\uDCA9c'); assert_equals(params + '', 'a=b%F0%9F%92%A9c'); params.delete('a'); params.append('a\uD83D\uDCA9b', 'c'); assert_equals(params + '', 'a%F0%9F%92%A9b=c'); }, 'Serialize \uD83D\uDCA9'); // Unicode Character 'PILE OF POO' (U+1F4A9)
function has(n, param) { const params = new URLSearchParams(str); bench.start(); for (var i = 0; i < n; i += 1) params.has(param); bench.end(n); }
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()}`; }
test(function() { var params = new URLSearchParams(); params.append('a', '*-._'); assert_equals(params + '', 'a=*-._'); params.delete('a'); params.append('*-._', 'c'); assert_equals(params + '', '*-._=c'); }, 'Serialize *-._');
test(function() { var params = new URLSearchParams(); params.append('a', 'b%c'); assert_equals(params + '', 'a=b%25c'); params.delete('a'); params.append('a%b', 'c'); assert_equals(params + '', 'a%25b=c'); }, 'Serialize %');
test(function() { var params = new URLSearchParams(); params.append('a', 'b\0c'); assert_equals(params + '', 'a=b%00c'); params.delete('a'); params.append('a\0b', 'c'); assert_equals(params + '', 'a%00b=c'); }, 'Serialize \\0');
test(() => { params = new URLSearchParams() params[Symbol.iterator] = function *() { yield ["a", "b"] } let params2 = new URLSearchParams(params) assert_equals(params2.get("a"), "b") }, "Custom [Symbol.iterator]")
test(() => { const params = new URLSearchParams(val.input); let i = 0; params.sort(); for (const param of params) { assert_array_equals(param, val.output[i]); i++; } }, 'Parse and sort: ' + val.input);
test(() => { let params = new URLSearchParams(val.input), i = 0 params.sort() for(let param of params) { assert_array_equals(param, val.output[i]) i++ } }, "Parse and sort: " + val.input)
test(function() { var params = new URLSearchParams(); params.append('a', 'b'); assert_equals(params + '', 'a=b'); params.append('a', 'b'); assert_equals(params + '', 'a=b&a=b'); params.append('a', 'c'); assert_equals(params + '', 'a=b&a=b&a=c'); }, 'Append same name');
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() { var params = new URLSearchParams([]); assert_true(params != null, 'constructor returned non-null value.'); params = new URLSearchParams([['a', 'b'], ['c', 'd']]); assert_equals(params.get("a"), "b"); assert_equals(params.get("c"), "d"); assert_throws(new TypeError(), function() { new URLSearchParams([[1]]); }); assert_throws(new TypeError(), function() { new URLSearchParams([[1,2,3]]); }); }, "Constructor with sequence of sequences of strings");
test(function() { var params = new URLSearchParams('a=b&c=d'); params.set('a', 'B'); assert_equals(params + '', 'a=B&c=d'); params = new URLSearchParams('a=b&c=d&a=e'); params.set('a', 'B'); assert_equals(params + '', 'a=B&c=d') params.set('e', 'f'); assert_equals(params + '', 'a=B&c=d&e=f') }, 'Set basics');
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');
test(function() { var params = new URLSearchParams('a=1&b=2&c=3'); var keys = []; var values = []; params.forEach(function(value, key) { keys.push(key); values.push(value); }); assert_array_equals(keys, ['a', 'b', 'c']); assert_array_equals(values, ['1', '2', '3']); }, "ForEach Check");
test(function() { var params = new URLSearchParams(); params.append('first', 1); assert_true(params.has('first'), 'Search params object has name "first"'); assert_equals(params.get('first'), '1', 'Search params object has name "first" with value "1"'); params.delete('first'); assert_false(params.has('first'), 'Search params object has no "first" name'); params.append('first', 1); params.append('first', 10); params.delete('first'); assert_false(params.has('first'), 'Search params object has no "first" name'); }, 'Deleting appended multiple');
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('a=b&c=d&&'); params.append('first', 1); params.append('first', 2); assert_true(params.has('a'), 'Search params object has name "a"'); assert_true(params.has('c'), 'Search params object has name "c"'); assert_true(params.has('first'), 'Search params object has name "first"'); assert_false(params.has('d'), 'Search params object has no name "d"'); params.delete('first'); assert_false(params.has('first'), 'Search params object has no name "first"'); }, 'has() following delete()');
test(function() { var params = new URLSearchParams('a=1&a=2&a=3'); assert_true(params.has('a'), 'Search params object has name "a"'); assert_equals(params.get('a'), '1', 'Search params object has name "a" with value "1"'); params.set('first', 4); assert_true(params.has('a'), 'Search params object has name "a"'); assert_equals(params.get('a'), '1', 'Search params object has name "a" with value "1"'); params.set('a', 4); assert_true(params.has('a'), 'Search params object has name "a"'); assert_equals(params.get('a'), '4', 'Search params object has name "a" with value "4"'); }, 'URLSearchParams.set');
function forEach(n) { const params = new URLSearchParams(str); const noDead = []; const cb = (val, key) => { noDead[0] = key; noDead[1] = val; }; bench.start(); for (var i = 0; i < n; i += 1) params.forEach(cb); bench.end(n); assert.strictEqual(noDead[0], 'three'); assert.strictEqual(noDead[1], '3rd'); }
test(function() { var seed = new URLSearchParams('a=b&c=d'); var params = new URLSearchParams(seed); assert_true(params != null, 'constructor returned non-null value.'); assert_equals(params.get('a'), 'b'); assert_equals(params.get('c'), 'd'); assert_false(params.has('d')); // The name-value pairs are copied when created; later updates // should not be observable. seed.append('e', 'f'); assert_false(params.has('e')); params.append('g', 'h'); assert_false(seed.has('g')); }, 'URLSearchParams constructor, object.');
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 = new URLSearchParams('a=b&c=d'); assert_array_equals(params.getAll('a'), ['b']); assert_array_equals(params.getAll('c'), ['d']); assert_array_equals(params.getAll('e'), []); params = new URLSearchParams('a=b&c=d&a=e'); assert_array_equals(params.getAll('a'), ['b', 'e']); params = new URLSearchParams('=b&c=d'); assert_array_equals(params.getAll(''), ['b']); params = new URLSearchParams('a=&c=d&a=e'); assert_array_equals(params.getAll('a'), ['', 'e']); }, 'getAll() basics');
module.exports = async (req, res) => { try { const url = parse(req.url) res.statusCode = 200 res.setHeader('Access-Control-Allow-Origin', '*') res.setHeader('Access-Control-Allow-Methods', 'GET') switch (url.pathname) { case '/': { res.setHeader('Content-Type', 'application/json') res.end('{"status": "ok"}') break } case '/p': { const params = new URLSearchParams(url.query) const u = await crawl({id: params.get('id')}) res.setHeader('Content-Type', 'text/plain') res.end(u) break } case '/b': { const params = new URLSearchParams(url.query) const u = await crawl({id: params.get('id')}) const image = await encode(u, { string: true }) const ext = u.split('.').pop() res.setHeader('Content-Type', 'text/plain') res.end(`data:image/${ext};base64,${image}`) break } } } catch (err) { res.statusCode = 500 res.setHeader('Content-Type', 'application/json') res.end('{"status": "Error"}') console.log(500, err) } }