diff --git a/apps/wallet/src/utils/url.ts b/apps/wallet/src/utils/url.ts deleted file mode 100644 index 28bb876a..00000000 --- a/apps/wallet/src/utils/url.ts +++ /dev/null @@ -1,14 +0,0 @@ -export const objToQuery = (obj: T, delimiter: string = '&') => { - return Object.entries(obj) - .map(([key, value]) => `${key}=${encodeURIComponent(JSON.stringify(value))}`) - .join(delimiter) -} - -export const queryToObj = (query: string, delimiter: string = '&') => { - return Object.fromEntries( - query - .split(delimiter) - .map((str) => str.split('=')) - .map(([key, value]) => [key, JSON.parse(decodeURIComponent(value))]) - ) as T -} diff --git a/apps/wallet/src/utils/url/index.test.ts b/apps/wallet/src/utils/url/index.test.ts new file mode 100644 index 00000000..da27428b --- /dev/null +++ b/apps/wallet/src/utils/url/index.test.ts @@ -0,0 +1,24 @@ +import { expect, test } from 'vitest' +import { objToQuery, queryToObj } from '.' + +test('obj to query', () => { + const obj = { + a: 1, + c: '3', + e: ['5', '6'], + f: { g: 7, h: 8 }, + } + expect(objToQuery(obj)).toBe( + 'a=1&c=3&e=%5B%225%22%2C%226%22%5D&f=%7B%22g%22%3A7%2C%22h%22%3A8%7D' + ) +}) + +test('query to obj', () => { + const query = 'a=1&c=3&e=%5B%225%22%2C%226%22%5D&f=%7B%22g%22%3A7%2C%22h%22%3A8%7D' + expect(queryToObj(query)).toStrictEqual({ + a: '1', + c: '3', + e: ['5', '6'], + f: { g: 7, h: 8 }, + }) +}) diff --git a/apps/wallet/src/utils/url/index.ts b/apps/wallet/src/utils/url/index.ts new file mode 100644 index 00000000..b3eff690 --- /dev/null +++ b/apps/wallet/src/utils/url/index.ts @@ -0,0 +1,23 @@ +export const objToQuery = (obj: T, delimiter: string = '&') => { + return Object.entries(obj) + .map(([key, value]) => `${key}=${encodeURIComponent(typeof value === 'object' ? JSON.stringify(value) : String(value))}`) + .join(delimiter) +} + +export const queryToObj = (query: string, delimiter: string = '&') => { + return Object.fromEntries( + query + .split(delimiter) + .map((str) => str.split('=')) + .map(([key, value]) => { + let val = String(value) + try { + const parsed = JSON.parse(decodeURIComponent(value)) + if (typeof parsed === 'object') { + val = parsed + } + } catch (e) {} + return [key, val] + }) + ) as T +} diff --git a/apps/wallet/src/utils/vitest-example/sum.test.ts b/apps/wallet/src/utils/vitest-example/sum.test.ts deleted file mode 100644 index bcae9458..00000000 --- a/apps/wallet/src/utils/vitest-example/sum.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { expect, test } from 'vitest' -import { sum } from './sum.js' - -test('adds 1 + 2 to equal 3', () => { - expect(sum(1, 2)).toBe(3) -}) diff --git a/apps/wallet/src/utils/vitest-example/sum.ts b/apps/wallet/src/utils/vitest-example/sum.ts deleted file mode 100644 index d889366d..00000000 --- a/apps/wallet/src/utils/vitest-example/sum.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const sum = (a: number, b: number) => { - return a + b -}