@velora-dex/widget 0.10.1 → 0.10.2-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/widget/NetworkIcon/NetworkIconSquare.js +23 -23
- package/dist/core/Updaters.d.ts.map +1 -1
- package/dist/core/Updaters.js +11 -11
- package/dist/core/Updaters.js.map +1 -1
- package/dist/core/across/isCrosschainPossible.js +4 -4
- package/dist/core/inputs/state/selectedTokenActionsAtom.js +32 -32
- package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
- package/dist/core/inputs/state/setTokenByAddressAtom.js +69 -67
- package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
- package/dist/core/limit/state/selectedTokenActionsAtom.js +29 -29
- package/dist/core/limit/state/selectedTokenAtom.js +5 -5
- package/dist/core/state/configAtom.js +2 -2
- package/dist/core/state/configAtom.js.map +1 -1
- package/dist/core/state/tokenListsAtom.d.ts +2 -0
- package/dist/core/state/tokenListsAtom.d.ts.map +1 -0
- package/dist/core/state/tokenListsAtom.js +9 -0
- package/dist/core/state/tokenListsAtom.js.map +1 -0
- package/dist/core/twap/state/selectedTokenActionsAtom.js +29 -29
- package/dist/hooks/tokens/data/useCombineTokensWithFetched.js +4 -4
- package/dist/hooks/useSDK.d.ts +3 -1
- package/dist/hooks/useSDK.d.ts.map +1 -1
- package/dist/hooks/useSDK.js.map +1 -1
- package/dist/lib/constants/urls.d.ts +1 -0
- package/dist/lib/constants/urls.d.ts.map +1 -1
- package/dist/lib/constants/urls.js +1 -1
- package/dist/lib/constants/urls.js.map +1 -1
- package/dist/lib/utils/index.js +15 -23
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/tokens/lists/constants.d.ts +0 -8
- package/dist/tokens/lists/constants.d.ts.map +1 -1
- package/dist/tokens/lists/constants.js +3 -10
- package/dist/tokens/lists/constants.js.map +1 -1
- package/dist/tokens/lists/download.d.ts +1 -1
- package/dist/tokens/lists/download.d.ts.map +1 -1
- package/dist/tokens/lists/download.js +5 -13
- package/dist/tokens/lists/download.js.map +1 -1
- package/dist/tokens/lists/state/effects.d.ts.map +1 -1
- package/dist/tokens/lists/state/effects.js +22 -21
- package/dist/tokens/lists/state/effects.js.map +1 -1
- package/dist/tokens/lists/state/tokenListsStateAtom.d.ts +1 -1
- package/dist/tokens/lists/state/tokenListsStateAtom.d.ts.map +1 -1
- package/dist/tokens/lists/state/tokenListsStateAtom.js +17 -21
- package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
- package/dist/tokens/lists/utils.d.ts +1 -2
- package/dist/tokens/lists/utils.d.ts.map +1 -1
- package/dist/tokens/lists/utils.js +5 -6
- package/dist/tokens/lists/utils.js.map +1 -1
- package/dist/tokens/queries.d.ts.map +1 -1
- package/dist/tokens/queries.js +30 -32
- package/dist/tokens/queries.js.map +1 -1
- package/dist/tokens/stabeCoins/hooks.d.ts +2 -4
- package/dist/tokens/stabeCoins/hooks.d.ts.map +1 -1
- package/dist/tokens/stabeCoins/hooks.js +14 -16
- package/dist/tokens/stabeCoins/hooks.js.map +1 -1
- package/dist/tokens/state/addImportedTokenAtom.d.ts +0 -1
- package/dist/tokens/state/addImportedTokenAtom.d.ts.map +1 -1
- package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
- package/dist/tokens/state/allTokensByChainAtom.d.ts.map +1 -1
- package/dist/tokens/state/allTokensByChainAtom.js +20 -30
- package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
- package/dist/tokens/state/apiTokensAtom.d.ts +24 -0
- package/dist/tokens/state/apiTokensAtom.d.ts.map +1 -0
- package/dist/tokens/state/apiTokensAtom.js +53 -0
- package/dist/tokens/state/apiTokensAtom.js.map +1 -0
- package/dist/tokens/state/fromListsAtom.js +1 -1
- package/dist/tokens/state/fromListsAtom.js.map +1 -1
- package/dist/tokens/types.d.ts +0 -1
- package/dist/tokens/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/tokens/lists/lists.js +0 -6
- package/dist/tokens/lists/lists.js.map +0 -1
- package/dist/tokens/lists/lists.json.d.ts +0 -362
- package/dist/tokens/stabeCoins/index.d.ts +0 -2
- package/dist/tokens/stabeCoins/index.d.ts.map +0 -1
- package/dist/tokens/stabeCoins/index.js +0 -6
- package/dist/tokens/stabeCoins/index.js.map +0 -1
- package/dist/tokens/utils/sets.d.ts +0 -4
- package/dist/tokens/utils/sets.d.ts.map +0 -1
- package/dist/tokens/utils/sets.js +0 -16
- package/dist/tokens/utils/sets.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../../src/lib/constants/urls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../../src/lib/constants/urls.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,2BAA2B,CAAC;AAIrD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAIvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","names":["jotaiStore","devURLsAtom","PROD_API_URL","PROD_PROXY_API_URL","PROD_EXPLORER_URL","getApiURL","apiURL","get","getApiProxyURL","apiProxyURL","getExplorerURL","explorerURL"],"sources":["../../../src/lib/constants/urls.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { devURLsAtom } from \"@/core/state/configAtom\";\n\
|
|
1
|
+
{"version":3,"file":"urls.js","names":["jotaiStore","devURLsAtom","PROD_API_URL","PROD_PROXY_API_URL","PROD_EXPLORER_URL","getApiURL","apiURL","get","getApiProxyURL","apiProxyURL","getExplorerURL","explorerURL"],"sources":["../../../src/lib/constants/urls.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { devURLsAtom } from \"@/core/state/configAtom\";\n\nexport const PROD_API_URL = \"https://api.velora.xyz\";\nconst PROD_PROXY_API_URL = \"https://proxy.paraswap.io\";\nconst PROD_EXPLORER_URL = \"https://explorer.velora.xyz\";\n\nexport function getApiURL(): string {\n const { apiURL } = jotaiStore.get(devURLsAtom);\n if (apiURL) return apiURL;\n\n return PROD_API_URL;\n}\n\nexport function getApiProxyURL(): string {\n const { apiProxyURL } = jotaiStore.get(devURLsAtom);\n if (apiProxyURL) return apiProxyURL;\n\n return PROD_PROXY_API_URL;\n}\n\nexport function getExplorerURL(): string {\n const { explorerURL } = jotaiStore.get(devURLsAtom);\n if (explorerURL) return explorerURL;\n return PROD_EXPLORER_URL;\n}\n"],"mappings":";;;AAGA,IAAaE,IAAe,0BACtBC,IAAqB,6BACrBC,IAAoB;AAE1B,SAAgBC,IAAoB;CAClC,IAAM,EAAEC,cAAWN,EAAWO,IAAIN,EAAY;CAG9C,OAFIK,KAEGJ;;AAGT,SAAgBM,IAAyB;CACvC,IAAM,EAAEC,mBAAgBT,EAAWO,IAAIN,EAAY;CAGnD,OAFIQ,KAEGN;;AAGT,SAAgBO,IAAyB;CACvC,IAAM,EAAEC,mBAAgBX,EAAWO,IAAIN,EAAY;CAEnD,OADIU,KACGP"}
|
package/dist/lib/utils/index.js
CHANGED
|
@@ -20,60 +20,52 @@ function a(...e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
let n = /* @__PURE__ */ new Set();
|
|
26
|
-
return e.filter((e) => {
|
|
27
|
-
let r = t(e);
|
|
28
|
-
return r.some((e) => n.has(e)) ? !1 : (r.forEach((e) => n.add(e)), !0);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
var s = (e) => !!e;
|
|
32
|
-
function c(e) {
|
|
23
|
+
var o = (e) => !!e;
|
|
24
|
+
function s(e) {
|
|
33
25
|
return e[1] !== null && e[1] !== void 0;
|
|
34
26
|
}
|
|
35
|
-
function
|
|
36
|
-
n(
|
|
27
|
+
function c(e, t) {
|
|
28
|
+
n(o(e[t]), `${String(t)} is required`);
|
|
37
29
|
}
|
|
38
|
-
function
|
|
30
|
+
function l(e) {
|
|
39
31
|
return e.length === 42;
|
|
40
32
|
}
|
|
41
|
-
var
|
|
33
|
+
var u = ({ address: e }) => l(e), d = (e, t) => e.toLowerCase().includes(t.toLowerCase()), f = (e, t, n = 0) => {
|
|
42
34
|
let r = RegExp(`(.{${t}}).{3,}(.{${n}})`);
|
|
43
35
|
return e.replace(r, "$1...$2");
|
|
44
36
|
};
|
|
45
|
-
function
|
|
46
|
-
return
|
|
37
|
+
function p(e, t = 6, n = 4) {
|
|
38
|
+
return f(e, t, n);
|
|
47
39
|
}
|
|
48
|
-
function
|
|
40
|
+
function m(e) {
|
|
49
41
|
return e.replace(/_/g, " ");
|
|
50
42
|
}
|
|
51
|
-
function
|
|
43
|
+
function h(e) {
|
|
52
44
|
try {
|
|
53
45
|
return new URL(e), !0;
|
|
54
46
|
} catch {
|
|
55
47
|
return !1;
|
|
56
48
|
}
|
|
57
49
|
}
|
|
58
|
-
function
|
|
50
|
+
function g(e, t) {
|
|
59
51
|
if (e.length !== t.length) return !1;
|
|
60
52
|
let n = new Set(e);
|
|
61
53
|
for (let e of t) if (!n.has(e)) return !1;
|
|
62
54
|
return !0;
|
|
63
55
|
}
|
|
64
|
-
function
|
|
56
|
+
function _(e) {
|
|
65
57
|
return (t, n) => e.every((e) => t[e] === n[e]);
|
|
66
58
|
}
|
|
67
|
-
function
|
|
59
|
+
function v(e, t) {
|
|
68
60
|
if (e === t) return !0;
|
|
69
61
|
if (typeof e != "object" || typeof t != "object" || !e || !t) return !1;
|
|
70
62
|
let n = Object.keys(e), r = Object.keys(t);
|
|
71
63
|
return n.length === r.length ? n.every((n) => Object.prototype.hasOwnProperty.call(t, n) && e[n] === t[n]) : !1;
|
|
72
64
|
}
|
|
73
|
-
function
|
|
65
|
+
function y(e, t, n) {
|
|
74
66
|
return Math.min(Math.max(e, t), n);
|
|
75
67
|
}
|
|
76
68
|
//#endregion
|
|
77
|
-
export {
|
|
69
|
+
export { c as assertProp, r as cn, a as concatClassNamesMaps, _ as constructPropertiesEqual, u as filterInvalidTokenAddress, i as gatherObjectsByProp, y as getNumberWithinRange, s as isNonNullableEntry, o as isTruthy, h as isValidUrl, m as replaceUnderscoresWithSpaces, v as shallowEqual, p as shortenAddress, d as stringIncludes, g as unorderedShallowEqual };
|
|
78
70
|
|
|
79
71
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Token","clsx","ClassValue","twMerge","assert","Prettify","cn","inputs","gatherObjectsByProp","elements","T","pickProp","elem","Record","transform","accumElem","U","reduce","accum","element","key","transformedElement","RemoveNullableElements","Head","Tail","MergeRecordsWithStrings","R1","R2","K","ConcatString","_ConcatString","Parts","Delim","RecordOfStrings","_MergeNStrings","Tuple","Result","MergeNStrings","MergeWithoutNullable","concatClassNamesMaps","maps","length","gathered","map","value","undefined","filterUnique","constructUniqueKeys","hasSeen","Set","filter","keys","some","has","forEach","add","isTruthy","x","isNonNullableEntry","entry","ReturnIfTruthy","assertProp","obj","prop","P","String","hasCorrectAddressLength","maybeAddress","filterInvalidTokenAddress","address","Pick","stringIncludes","a","b","toLowerCase","includes","shortenText","str","start","end","regexp","RegExp","replace","shortenAddress","slashIndex","rightCutLength","replaceUnderscoresWithSpaces","isValidUrl","url","URL","unorderedShallowEqual","setA","item","constructPropertiesEqual","properties","Partial","every","shallowEqual","aKeys","Object","bKeys","prototype","hasOwnProperty","call","getNumberWithinRange","num","min","max","Math"],"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { assert, type Prettify } from \"ts-essentials\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// reduce element[] to Object{key: prop, val?: element}\n// for example\n// gatherObjectsByProp(Token[], token => token.address) => Record<address, Token|undefined>\nexport function gatherObjectsByProp<T>(\n elements: T[],\n pickProp: (elem: T) => string\n): Record<string, T>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform: (elem: T, accumElem?: U) => U\n): Record<string, U>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform?: (elem: T, accumElem?: U) => U\n): Record<string, T> | Record<string, U> {\n return elements.reduce<Record<string, T> | Record<string, U>>(\n (accum, element) => {\n const key = pickProp(element);\n\n const accumElem: T | U | undefined = accum[key];\n const transformedElement = transform\n ? // if transform is available, can only be U | undefined\n transform(element, accumElem as U | undefined)\n : element;\n\n accum[key] = transformedElement;\n\n return accum;\n },\n {}\n );\n}\n\ntype RemoveNullableElements<T extends readonly unknown[]> = T extends readonly [\n infer Head,\n ...infer Tail,\n]\n ? Head extends undefined | null\n ? RemoveNullableElements<Tail>\n : [Head, ...RemoveNullableElements<Tail>]\n : [];\n\ntype MergeRecordsWithStrings<\n R1 extends Record<string, string>,\n R2 extends Record<string, string>,\n> = {\n [K in keyof R1 | keyof R2]: K extends keyof R1\n ? K extends keyof R2\n ? ConcatString<\" \", [R1[K], R2[K]]>\n : R1[K]\n : K extends keyof R2\n ? R2[K]\n : never;\n};\n\ntype _ConcatString<\n Delim extends string,\n Parts extends readonly string[],\n> = Parts extends readonly []\n ? \"\"\n : Parts extends readonly [\n infer Head extends string,\n ...infer Tail extends readonly string[],\n ]\n ? Tail extends readonly []\n ? Head\n : `${Head}${Delim}${_ConcatString<Delim, Tail>}`\n : never;\n\nexport type ConcatString<\n Delim extends string = \"\",\n Parts extends readonly string[] = [],\n> = _ConcatString<Delim, Parts>;\n\ntype RecordOfStrings = Record<string, string>;\n\ntype _MergeNStrings<\n Tuple extends readonly RecordOfStrings[],\n Result extends RecordOfStrings,\n> = Tuple extends readonly [\n infer Head extends RecordOfStrings,\n ...infer Tail extends readonly RecordOfStrings[],\n]\n ? _MergeNStrings<Tail, MergeRecordsWithStrings<Result, Head>>\n : Result;\ntype MergeNStrings<Tuple extends readonly RecordOfStrings[]> = _MergeNStrings<\n Tuple,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}\n>;\n\ntype MergeWithoutNullable<\n Tuple extends readonly (RecordOfStrings | undefined | null)[],\n> = MergeNStrings<RemoveNullableElements<Tuple>>;\n\nexport function concatClassNamesMaps<\n T extends readonly (RecordOfStrings | undefined | null)[],\n>(...maps: T): Prettify<MergeWithoutNullable<T>> {\n if (maps.length <= 1)\n return (maps[0] || {}) as Prettify<MergeWithoutNullable<T>>;\n\n const gathered: Record<string, string> = {};\n\n for (const map of maps) {\n if (!map) continue;\n\n for (const key in map) {\n const value = map[key];\n if (value !== undefined) {\n gathered[key] = cn(gathered[key], value);\n }\n }\n }\n\n return gathered as Prettify<MergeWithoutNullable<T>>;\n}\n\nexport function filterUnique<T, U>(\n elements: T[],\n // supports multikey filtering, if only one key required return [U]\n constructUniqueKeys: (element: T) => U[]\n): T[] {\n if (elements.length <= 1) return elements;\n const hasSeen = new Set<U>();\n\n return elements.filter((element) => {\n const keys = constructUniqueKeys(element);\n if (keys.some((key) => hasSeen.has(key))) return false;\n\n keys.forEach((key) => hasSeen.add(key));\n return true;\n });\n}\n\nexport const isTruthy = <T>(\n x: T | false | 0 | 0n | \"\" | null | undefined\n): x is T => !!x;\n\nexport function isNonNullableEntry<T>(\n entry: [key: string, value: T | null | undefined]\n): entry is [string, T] {\n return entry[1] !== null && entry[1] !== undefined;\n}\n\ntype ReturnIfTruthy<T> = typeof isTruthy<T>;\n\nexport function assertProp<\n T extends Record<string, unknown>,\n K extends keyof T,\n>(obj: T, prop: K): asserts obj is T & { [P in K]-?: ReturnIfTruthy<T[P]> } {\n assert(isTruthy(obj[prop]), `${String(prop)} is required`);\n}\n\nexport function hasCorrectAddressLength(maybeAddress: string): boolean {\n return maybeAddress.length === 42;\n}\n\nexport const filterInvalidTokenAddress = ({\n address,\n}: Pick<Token, \"address\">) => hasCorrectAddressLength(address);\n\nexport const stringIncludes = (a: string, b: string): boolean => {\n return a.toLowerCase().includes(b.toLowerCase());\n};\n\n/**\n * Shorten any string with more than 6 characters (included) by inserting ellipsis placeholder in between\n *\n * @param {string} str the string to shorten\n * @param {number} start how much to leave off the start\n * @param {number} [end=0] how much to leave off the end\n * @returns {string} shortened text\n */\nexport const shortenText = (\n str: string,\n start: number,\n end: number = 0\n): string => {\n const regexp = new RegExp(`(.{${start}}).{3,}(.{${end}})`);\n return str.replace(regexp, \"$1...$2\");\n};\n\nexport function shortenAddress(\n address: string,\n slashIndex = 6,\n rightCutLength = 4\n): string {\n // An ethereum address has 42 characters\n return shortenText(address, slashIndex, rightCutLength);\n}\n\nexport function replaceUnderscoresWithSpaces(str: string): string {\n return str.replace(/_/g, \" \");\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function unorderedShallowEqual<T>(a: T[], b: T[]): boolean {\n if (a.length !== b.length) return false;\n const setA = new Set(a);\n for (const item of b) {\n if (!setA.has(item)) return false;\n }\n return true;\n}\n\nexport function constructPropertiesEqual<K extends string>(\n properties: readonly K[]\n): (a: Partial<Record<K, unknown>>, b: Partial<Record<K, unknown>>) => boolean {\n return (a, b) => {\n return properties.every((key) => a[key] === b[key]);\n };\n}\n\nexport function shallowEqual<T>(a: T, b: T): boolean {\n // both the same value, check would pass for primitive values\n if (a === b) {\n return true;\n }\n\n // not an object, and checks for primitive have already been made\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) {\n return false;\n }\n // both objects, check if they have the same keys\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n // different number of keys\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(\n (key) =>\n // b[key] exists, and not a[key] === undefined && b[key] doesn't exist\n Object.prototype.hasOwnProperty.call(b, key) &&\n a[key as keyof typeof a] === b[key as keyof typeof b]\n );\n}\n\nexport function getNumberWithinRange(\n num: number,\n min: number,\n max: number\n): number {\n return Math.min(Math.max(num, min), max);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Token","clsx","ClassValue","twMerge","assert","Prettify","cn","inputs","gatherObjectsByProp","elements","T","pickProp","elem","Record","transform","accumElem","U","reduce","accum","element","key","transformedElement","RemoveNullableElements","Head","Tail","MergeRecordsWithStrings","R1","R2","K","ConcatString","_ConcatString","Parts","Delim","RecordOfStrings","_MergeNStrings","Tuple","Result","MergeNStrings","MergeWithoutNullable","concatClassNamesMaps","maps","length","gathered","map","value","undefined","filterUnique","constructUniqueKeys","hasSeen","Set","filter","keys","some","has","forEach","add","isTruthy","x","isNonNullableEntry","entry","ReturnIfTruthy","assertProp","obj","prop","P","String","hasCorrectAddressLength","maybeAddress","filterInvalidTokenAddress","address","Pick","stringIncludes","a","b","toLowerCase","includes","shortenText","str","start","end","regexp","RegExp","replace","shortenAddress","slashIndex","rightCutLength","replaceUnderscoresWithSpaces","isValidUrl","url","URL","unorderedShallowEqual","setA","item","constructPropertiesEqual","properties","Partial","every","shallowEqual","aKeys","Object","bKeys","prototype","hasOwnProperty","call","getNumberWithinRange","num","min","max","Math"],"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { assert, type Prettify } from \"ts-essentials\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// reduce element[] to Object{key: prop, val?: element}\n// for example\n// gatherObjectsByProp(Token[], token => token.address) => Record<address, Token|undefined>\nexport function gatherObjectsByProp<T>(\n elements: T[],\n pickProp: (elem: T) => string\n): Record<string, T>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform: (elem: T, accumElem?: U) => U\n): Record<string, U>;\nexport function gatherObjectsByProp<T, U>(\n elements: T[],\n pickProp: (elem: T) => string,\n transform?: (elem: T, accumElem?: U) => U\n): Record<string, T> | Record<string, U> {\n return elements.reduce<Record<string, T> | Record<string, U>>(\n (accum, element) => {\n const key = pickProp(element);\n\n const accumElem: T | U | undefined = accum[key];\n const transformedElement = transform\n ? // if transform is available, can only be U | undefined\n transform(element, accumElem as U | undefined)\n : element;\n\n accum[key] = transformedElement;\n\n return accum;\n },\n {}\n );\n}\n\ntype RemoveNullableElements<T extends readonly unknown[]> = T extends readonly [\n infer Head,\n ...infer Tail,\n]\n ? Head extends undefined | null\n ? RemoveNullableElements<Tail>\n : [Head, ...RemoveNullableElements<Tail>]\n : [];\n\ntype MergeRecordsWithStrings<\n R1 extends Record<string, string>,\n R2 extends Record<string, string>,\n> = {\n [K in keyof R1 | keyof R2]: K extends keyof R1\n ? K extends keyof R2\n ? ConcatString<\" \", [R1[K], R2[K]]>\n : R1[K]\n : K extends keyof R2\n ? R2[K]\n : never;\n};\n\ntype _ConcatString<\n Delim extends string,\n Parts extends readonly string[],\n> = Parts extends readonly []\n ? \"\"\n : Parts extends readonly [\n infer Head extends string,\n ...infer Tail extends readonly string[],\n ]\n ? Tail extends readonly []\n ? Head\n : `${Head}${Delim}${_ConcatString<Delim, Tail>}`\n : never;\n\nexport type ConcatString<\n Delim extends string = \"\",\n Parts extends readonly string[] = [],\n> = _ConcatString<Delim, Parts>;\n\ntype RecordOfStrings = Record<string, string>;\n\ntype _MergeNStrings<\n Tuple extends readonly RecordOfStrings[],\n Result extends RecordOfStrings,\n> = Tuple extends readonly [\n infer Head extends RecordOfStrings,\n ...infer Tail extends readonly RecordOfStrings[],\n]\n ? _MergeNStrings<Tail, MergeRecordsWithStrings<Result, Head>>\n : Result;\ntype MergeNStrings<Tuple extends readonly RecordOfStrings[]> = _MergeNStrings<\n Tuple,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}\n>;\n\ntype MergeWithoutNullable<\n Tuple extends readonly (RecordOfStrings | undefined | null)[],\n> = MergeNStrings<RemoveNullableElements<Tuple>>;\n\nexport function concatClassNamesMaps<\n T extends readonly (RecordOfStrings | undefined | null)[],\n>(...maps: T): Prettify<MergeWithoutNullable<T>> {\n if (maps.length <= 1)\n return (maps[0] || {}) as Prettify<MergeWithoutNullable<T>>;\n\n const gathered: Record<string, string> = {};\n\n for (const map of maps) {\n if (!map) continue;\n\n for (const key in map) {\n const value = map[key];\n if (value !== undefined) {\n gathered[key] = cn(gathered[key], value);\n }\n }\n }\n\n return gathered as Prettify<MergeWithoutNullable<T>>;\n}\n\nexport function filterUnique<T, U>(\n elements: T[],\n // supports multikey filtering, if only one key required return [U]\n constructUniqueKeys: (element: T) => U[]\n): T[] {\n if (elements.length <= 1) return elements;\n const hasSeen = new Set<U>();\n\n return elements.filter((element) => {\n const keys = constructUniqueKeys(element);\n if (keys.some((key) => hasSeen.has(key))) return false;\n\n keys.forEach((key) => hasSeen.add(key));\n return true;\n });\n}\n\nexport const isTruthy = <T>(\n x: T | false | 0 | 0n | \"\" | null | undefined\n): x is T => !!x;\n\nexport function isNonNullableEntry<T>(\n entry: [key: string, value: T | null | undefined]\n): entry is [string, T] {\n return entry[1] !== null && entry[1] !== undefined;\n}\n\ntype ReturnIfTruthy<T> = typeof isTruthy<T>;\n\nexport function assertProp<\n T extends Record<string, unknown>,\n K extends keyof T,\n>(obj: T, prop: K): asserts obj is T & { [P in K]-?: ReturnIfTruthy<T[P]> } {\n assert(isTruthy(obj[prop]), `${String(prop)} is required`);\n}\n\nexport function hasCorrectAddressLength(maybeAddress: string): boolean {\n return maybeAddress.length === 42;\n}\n\nexport const filterInvalidTokenAddress = ({\n address,\n}: Pick<Token, \"address\">) => hasCorrectAddressLength(address);\n\nexport const stringIncludes = (a: string, b: string): boolean => {\n return a.toLowerCase().includes(b.toLowerCase());\n};\n\n/**\n * Shorten any string with more than 6 characters (included) by inserting ellipsis placeholder in between\n *\n * @param {string} str the string to shorten\n * @param {number} start how much to leave off the start\n * @param {number} [end=0] how much to leave off the end\n * @returns {string} shortened text\n */\nexport const shortenText = (\n str: string,\n start: number,\n end: number = 0\n): string => {\n const regexp = new RegExp(`(.{${start}}).{3,}(.{${end}})`);\n return str.replace(regexp, \"$1...$2\");\n};\n\nexport function shortenAddress(\n address: string,\n slashIndex = 6,\n rightCutLength = 4\n): string {\n // An ethereum address has 42 characters\n return shortenText(address, slashIndex, rightCutLength);\n}\n\nexport function replaceUnderscoresWithSpaces(str: string): string {\n return str.replace(/_/g, \" \");\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function unorderedShallowEqual<T>(a: T[], b: T[]): boolean {\n if (a.length !== b.length) return false;\n const setA = new Set(a);\n for (const item of b) {\n if (!setA.has(item)) return false;\n }\n return true;\n}\n\nexport function constructPropertiesEqual<K extends string>(\n properties: readonly K[]\n): (a: Partial<Record<K, unknown>>, b: Partial<Record<K, unknown>>) => boolean {\n return (a, b) => {\n return properties.every((key) => a[key] === b[key]);\n };\n}\n\nexport function shallowEqual<T>(a: T, b: T): boolean {\n // both the same value, check would pass for primitive values\n if (a === b) {\n return true;\n }\n\n // not an object, and checks for primitive have already been made\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) {\n return false;\n }\n // both objects, check if they have the same keys\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n // different number of keys\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(\n (key) =>\n // b[key] exists, and not a[key] === undefined && b[key] doesn't exist\n Object.prototype.hasOwnProperty.call(b, key) &&\n a[key as keyof typeof a] === b[key as keyof typeof b]\n );\n}\n\nexport function getNumberWithinRange(\n num: number,\n min: number,\n max: number\n): number {\n return Math.min(Math.max(num, min), max);\n}\n"],"mappings":";;;;AAKA,SAAgBM,EAAG,GAAGC,GAAsB;CAC1C,OAAOJ,EAAQF,EAAKM,EAAO,CAAC;;AAe9B,SAAgBC,EACdC,GACAE,GACAG,GACuC;CACvC,OAAOL,EAASQ,QACbC,GAAOC,MAAY;EAClB,IAAMC,IAAMT,EAASQ,EAAQ,EAEvBJ,IAA+BG,EAAME;EAQ3C,OAFAF,EAAME,KALqBN,IAEvBA,EAAUK,GAASJ,EAA2B,GAC9CI,GAIGD;IAET,EACF,CAAC;;AAiEH,SAAgBqB,EAEd,GAAGC,GAA4C;CAC/C,IAAIA,EAAKC,UAAU,GACjB,OAAQD,EAAK,MAAM,EAAE;CAEvB,IAAME,IAAmC,EAAE;CAE3C,KAAK,IAAMC,KAAOH,GACXG,OAEL,KAAK,IAAMvB,KAAOuB,GAAK;EACrB,IAAMC,IAAQD,EAAIvB;EAClB,AAAIwB,MAAUC,KAAAA,MACZH,EAAStB,KAAOd,EAAGoC,EAAStB,IAAMwB,EAAM;;CAK9C,OAAOF;;AAoBT,IAAac,KACXC,MACW,CAAC,CAACA;AAEf,SAAgBC,EACdC,GACsB;CACtB,OAAOA,EAAM,OAAO,QAAQA,EAAM,OAAOd,KAAAA;;AAK3C,SAAgBgB,EAGdC,GAAQC,GAAkE;CAC1E3D,EAAOoD,EAASM,EAAIC,GAAM,EAAE,GAAGE,OAAOF,EAAK,CAAA,cAAe;;AAG5D,SAAgBG,EAAwBC,GAA+B;CACrE,OAAOA,EAAa1B,WAAW;;AAGjC,IAAa2B,KAA6B,EACxCC,iBAC4BH,EAAwBG,EAAQ,EAEjDE,KAAkBC,GAAWC,MACjCD,EAAEE,aAAa,CAACC,SAASF,EAAEC,aAAa,CAAC,EAWrCE,KACXC,GACAC,GACAC,IAAc,MACH;CACX,IAAMC,IAAaC,OAAO,MAAMH,EAAK,YAAaC,EAAG,IAAK;CAC1D,OAAOF,EAAIK,QAAQF,GAAQ,UAAU;;AAGvC,SAAgBG,EACdd,GACAe,IAAa,GACbC,IAAiB,GACT;CAER,OAAOT,EAAYP,GAASe,GAAYC,EAAe;;AAGzD,SAAgBC,EAA6BT,GAAqB;CAChE,OAAOA,EAAIK,QAAQ,MAAM,IAAI;;AAG/B,SAAgBK,EAAWC,GAAsB;CAC/C,IAAI;EAEF,OADA,IAAIC,IAAID,EAAI,EACL;SACD;EACN,OAAO;;;AAIX,SAAgBE,EAAyBlB,GAAQC,GAAiB;CAChE,IAAID,EAAE/B,WAAWgC,EAAEhC,QAAQ,OAAO;CAClC,IAAMkD,IAAO,IAAI1C,IAAIuB,EAAE;CACvB,KAAK,IAAMoB,KAAQnB,GACjB,IAAI,CAACkB,EAAKtC,IAAIuC,EAAK,EAAE,OAAO;CAE9B,OAAO;;AAGT,SAAgBC,EACdC,GAC6E;CAC7E,QAAQtB,GAAGC,MACFqB,EAAWE,OAAO5E,MAAQoD,EAAEpD,OAASqD,EAAErD,GAAK;;AAIvD,SAAgB6E,EAAgBzB,GAAMC,GAAe;CAEnD,IAAID,MAAMC,GACR,OAAO;CAIT,IAAI,OAAOD,KAAM,YAAY,OAAOC,KAAM,YAAY,CAACD,KAAK,CAACC,GAC3D,OAAO;CAGT,IAAMyB,IAAQC,OAAOhD,KAAKqB,EAAE,EACtB4B,IAAQD,OAAOhD,KAAKsB,EAAE;CAK5B,OAHIyB,EAAMzD,WAAW2D,EAAM3D,SAGpByD,EAAMF,OACV5E,MAEC+E,OAAOE,UAAUC,eAAeC,KAAK9B,GAAGrD,EAAI,IAC5CoD,EAAEpD,OAA2BqD,EAAErD,GAClC,GAPQ;;AAUX,SAAgBoF,EACdC,GACAC,GACAC,GACQ;CACR,OAAOC,KAAKF,IAAIE,KAAKD,IAAIF,GAAKC,EAAI,EAAEC,EAAI"}
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
import { TokenListDownloadData } from './types';
|
|
2
1
|
export declare const defaultTokenLists: string[];
|
|
3
|
-
export declare const url2TokenList: Record<string, TokenListDownloadData>;
|
|
4
|
-
export declare const urlChain2TokenList: Record<string, TokenListDownloadData>;
|
|
5
|
-
export declare const chainId2TokenListURLs: Record<string, {
|
|
6
|
-
all: string[];
|
|
7
|
-
enabled: string[];
|
|
8
|
-
}>;
|
|
9
|
-
export declare const FALLBACK_CDN_URL = "https://cdn.velora.xyz/web/token-lists";
|
|
10
2
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA0B,CAAC"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import r from "./lists.js";
|
|
1
|
+
import { API_TOKENS_LIST_URL as e } from "../state/apiTokensAtom.js";
|
|
3
2
|
//#region src/tokens/lists/constants.ts
|
|
4
|
-
var
|
|
5
|
-
let n = t || {
|
|
6
|
-
all: [],
|
|
7
|
-
enabled: []
|
|
8
|
-
};
|
|
9
|
-
return e.chainId === "multi" ? n : (n.all.push(e.url), e.onByDefault && n.enabled.push(e.url), n);
|
|
10
|
-
}), l = "https://cdn.velora.xyz/web/token-lists";
|
|
3
|
+
var t = [e];
|
|
11
4
|
//#endregion
|
|
12
|
-
export {
|
|
5
|
+
export { t as defaultTokenLists };
|
|
13
6
|
|
|
14
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["
|
|
1
|
+
{"version":3,"file":"constants.js","names":["API_TOKENS_LIST_URL","defaultTokenLists"],"sources":["../../../src/tokens/lists/constants.ts"],"sourcesContent":["// Default tokens now come from the Velora API (getAllTokens), which the API serves\n// at this endpoint. Exposed publicly via `defaults.tokenLists`.\n\nimport { API_TOKENS_LIST_URL } from \"../state/apiTokensAtom\";\n\n// User-provided token lists (WidgetProps.tokenLists) still download and construct as before.\nexport const defaultTokenLists: string[] = [API_TOKENS_LIST_URL];\n"],"mappings":";;AAMA,IAAaC,IAA8B,CAACD,EAAoB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TokenList } from '@uniswap/token-lists';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const downloadTokenListData: (listURL: string, signal?: AbortSignal) => Promise<TokenList>;
|
|
3
3
|
//# sourceMappingURL=download.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/download.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/download.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,EACf,SAAS,WAAW,KACnB,OAAO,CAAC,SAAS,CAWnB,CAAC"}
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import n from "axios";
|
|
1
|
+
import e from "axios";
|
|
3
2
|
//#region src/tokens/lists/download.ts
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return e.version.major === null && (e.version.major = 0), e.version.minor === null && (e.version.minor = 0), e.version.patch === null && (e.version.patch = 0), e;
|
|
8
|
-
} catch (a) {
|
|
9
|
-
let { filename: o } = t[r] || {};
|
|
10
|
-
if (!o) throw a;
|
|
11
|
-
let s = `${e}/${o}.json`, { data: c } = await n.get(s, { signal: i });
|
|
12
|
-
return c;
|
|
13
|
-
}
|
|
3
|
+
var t = async (t, n) => {
|
|
4
|
+
let { data: r } = await e.get(t, { signal: n });
|
|
5
|
+
return r.version.major === null && (r.version.major = 0), r.version.minor === null && (r.version.minor = 0), r.version.patch === null && (r.version.patch = 0), r;
|
|
14
6
|
};
|
|
15
7
|
//#endregion
|
|
16
|
-
export {
|
|
8
|
+
export { t as downloadTokenListData };
|
|
17
9
|
|
|
18
10
|
//# sourceMappingURL=download.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","names":["axios","TokenList","
|
|
1
|
+
{"version":3,"file":"download.js","names":["axios","TokenList","downloadTokenListData","listURL","signal","AbortSignal","Promise","data","get","version","major","minor","patch"],"sources":["../../../src/tokens/lists/download.ts"],"sourcesContent":["import axios from \"axios\";\nimport type { TokenList } from \"@uniswap/token-lists\";\n\nexport const downloadTokenListData = async (\n listURL: string,\n signal?: AbortSignal\n): Promise<TokenList> => {\n const { data } = await axios.get<TokenList>(listURL, {\n signal,\n });\n // @ts-expect-error malformed tokenList.version\n if (data.version.major === null) data.version.major = 0; // https://tokens.coingecko.com/xdai/all.json has `null`\n // @ts-expect-error malformed tokenList.version\n if (data.version.minor === null) data.version.minor = 0;\n // @ts-expect-error malformed tokenList.version\n if (data.version.patch === null) data.version.patch = 0;\n return data;\n};\n"],"mappings":";;AAGA,IAAaE,IAAwB,OACnCC,GACAC,MACuB;CACvB,IAAM,EAAEG,YAAS,MAAMP,EAAMQ,IAAeL,GAAS,EACnDC,WACD,CAAC;CAOF,OALIG,EAAKE,QAAQC,UAAU,SAAMH,EAAKE,QAAQC,QAAQ,IAElDH,EAAKE,QAAQE,UAAU,SAAMJ,EAAKE,QAAQE,QAAQ,IAElDJ,EAAKE,QAAQG,UAAU,SAAML,EAAKE,QAAQG,QAAQ,IAC/CL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/effects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/effects.ts"],"names":[],"mappings":"AAkCA,wBAAgB,kBAAkB,SAEjC;AAYD,eAAO,MAAM,wBAAwB,eAEpC,CAAC"}
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
import { jotaiStore as e, useAtomValue as t } from "../../../core/store.js";
|
|
2
2
|
import { queryClient as n } from "../../../lib/queryClient.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { apiTokensQueryAtom as r } from "../../state/apiTokensAtom.js";
|
|
4
|
+
import { constructedTokensByURLAtom as i, tokenListUrlsAtom as a } from "./tokenListsStateAtom.js";
|
|
5
|
+
import { produceSingleQueryOptionMin as o } from "../../queries.js";
|
|
6
|
+
import { addTokenListsAtom as s } from "./tokenListsActionsAtom.js";
|
|
7
|
+
import { atom as c } from "jotai";
|
|
8
|
+
import { atomEffect as l } from "jotai-effect";
|
|
8
9
|
//#region src/tokens/lists/state/effects.ts
|
|
9
|
-
var
|
|
10
|
-
async function
|
|
11
|
-
if (
|
|
12
|
-
let r =
|
|
13
|
-
|
|
10
|
+
var u = /* @__PURE__ */ new Set();
|
|
11
|
+
async function d(t) {
|
|
12
|
+
if (u.has(t)) return;
|
|
13
|
+
let r = o(t), i = await n.ensureQueryData(r);
|
|
14
|
+
u.add(t), i?.available && e.set(s, [i]);
|
|
14
15
|
}
|
|
15
|
-
var
|
|
16
|
-
e(
|
|
16
|
+
var f = l((e) => {
|
|
17
|
+
e(a).forEach(d);
|
|
17
18
|
});
|
|
18
|
-
function
|
|
19
|
-
t(
|
|
19
|
+
function p() {
|
|
20
|
+
t(f);
|
|
20
21
|
}
|
|
21
|
-
var
|
|
22
|
-
let t = e(
|
|
23
|
-
if (t.length === 0) return
|
|
24
|
-
let
|
|
25
|
-
return t.every((e) =>
|
|
26
|
-
}),
|
|
22
|
+
var m = c((e) => {
|
|
23
|
+
let t = e(a), { isSuccess: n } = e(r);
|
|
24
|
+
if (t.length === 0) return n;
|
|
25
|
+
let o = e(i);
|
|
26
|
+
return t.every((e) => o[e] !== void 0);
|
|
27
|
+
}), h = () => t(m);
|
|
27
28
|
//#endregion
|
|
28
|
-
export {
|
|
29
|
+
export { p as useActivateEffects, h as useAllTokensListsFetched };
|
|
29
30
|
|
|
30
31
|
//# sourceMappingURL=effects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effects.js","names":["jotaiStore","queryClient","produceSingleQueryOptionMin","atomEffect","addTokenListsAtom","constructedTokensByURLAtom","tokenListUrlsAtom","useAtomValue","atom","addedUrlsSet","Set","addTokenList","url","has","queryOptions","tokenList","ensureQueryData","add","available","set","addTokenListEffect","get","forEach","useActivateEffects","allTokensListsFetchedSuccesfully","tokenListUrls","length","constructedTokensByURL","every","undefined","useAllTokensListsFetched"],"sources":["../../../../src/tokens/lists/state/effects.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { queryClient } from \"@/lib/queryClient\";\nimport { produceSingleQueryOptionMin } from \"@/tokens/queries\";\nimport { atomEffect } from \"jotai-effect\";\nimport { addTokenListsAtom } from \"./tokenListsActionsAtom\";\nimport {\n constructedTokensByURLAtom,\n tokenListUrlsAtom,\n} from \"./tokenListsStateAtom\";\nimport { useAtomValue } from \"@/core/store\";\nimport { atom } from \"jotai\";\n\nconst addedUrlsSet = new Set<string>();\n\nasync function addTokenList(url: string) {\n // list already in store\n if (addedUrlsSet.has(url)) return;\n\n // fetch token list or get from cache\n const queryOptions = produceSingleQueryOptionMin(url);\n const tokenList = await queryClient.ensureQueryData(queryOptions);\n\n // add url to set\n addedUrlsSet.add(url);\n\n // add to state once per fetched list\n if (tokenList?.available) jotaiStore.set(addTokenListsAtom, [tokenList]);\n}\n\nconst addTokenListEffect = atomEffect((get) => {\n get(tokenListUrlsAtom).forEach(addTokenList);\n});\n\nexport function useActivateEffects() {\n useAtomValue(addTokenListEffect);\n}\n\nconst allTokensListsFetchedSuccesfully = atom<boolean>((get) => {\n const tokenListUrls = get(tokenListUrlsAtom);\n if (tokenListUrls.length === 0) return
|
|
1
|
+
{"version":3,"file":"effects.js","names":["jotaiStore","queryClient","produceSingleQueryOptionMin","atomEffect","addTokenListsAtom","constructedTokensByURLAtom","tokenListUrlsAtom","useAtomValue","atom","apiTokensQueryAtom","addedUrlsSet","Set","addTokenList","url","has","queryOptions","tokenList","ensureQueryData","add","available","set","addTokenListEffect","get","forEach","useActivateEffects","allTokensListsFetchedSuccesfully","tokenListUrls","isSuccess","length","constructedTokensByURL","every","undefined","useAllTokensListsFetched"],"sources":["../../../../src/tokens/lists/state/effects.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { queryClient } from \"@/lib/queryClient\";\nimport { produceSingleQueryOptionMin } from \"@/tokens/queries\";\nimport { atomEffect } from \"jotai-effect\";\nimport { addTokenListsAtom } from \"./tokenListsActionsAtom\";\nimport {\n constructedTokensByURLAtom,\n tokenListUrlsAtom,\n} from \"./tokenListsStateAtom\";\nimport { useAtomValue } from \"@/core/store\";\nimport { atom } from \"jotai\";\nimport { apiTokensQueryAtom } from \"@/tokens/state/apiTokensAtom\";\n\nconst addedUrlsSet = new Set<string>();\n\nasync function addTokenList(url: string) {\n // list already in store\n if (addedUrlsSet.has(url)) return;\n\n // fetch token list or get from cache\n const queryOptions = produceSingleQueryOptionMin(url);\n const tokenList = await queryClient.ensureQueryData(queryOptions);\n\n // add url to set\n addedUrlsSet.add(url);\n\n // add to state once per fetched list\n if (tokenList?.available) jotaiStore.set(addTokenListsAtom, [tokenList]);\n}\n\nconst addTokenListEffect = atomEffect((get) => {\n get(tokenListUrlsAtom).forEach(addTokenList);\n});\n\nexport function useActivateEffects() {\n useAtomValue(addTokenListEffect);\n}\n\nconst allTokensListsFetchedSuccesfully = atom<boolean>((get) => {\n const tokenListUrls = get(tokenListUrlsAtom);\n const { isSuccess } = get(apiTokensQueryAtom);\n if (tokenListUrls.length === 0) return isSuccess;\n const constructedTokensByURL = get(constructedTokensByURLAtom);\n return tokenListUrls.every(\n (url) => constructedTokensByURL[url] !== undefined\n );\n});\n\nexport const useAllTokensListsFetched = () => {\n return useAtomValue(allTokensListsFetchedSuccesfully);\n};\n"],"mappings":";;;;;;;;;AAaA,IAAMU,oBAAe,IAAIC,KAAa;AAEtC,eAAeC,EAAaC,GAAa;CAEvC,IAAIH,EAAaI,IAAID,EAAI,EAAE;CAG3B,IAAME,IAAeb,EAA4BW,EAAI,EAC/CG,IAAY,MAAMf,EAAYgB,gBAAgBF,EAAa;CAMjE,AAHAL,EAAaQ,IAAIL,EAAI,EAGjBG,GAAWG,aAAWnB,EAAWoB,IAAIhB,GAAmB,CAACY,EAAU,CAAC;;AAG1E,IAAMK,IAAqBlB,GAAYmB,MAAQ;CAC7CA,EAAIhB,EAAkB,CAACiB,QAAQX,EAAa;EAC5C;AAEF,SAAOY,IAAA;CACLjB,EAAac,EAAmB;;AAGlC,IAAMI,IAAmCjB,GAAec,MAAQ;CAC9D,IAAMI,IAAgBJ,EAAIhB,EAAkB,EACtC,EAAEqB,iBAAcL,EAAIb,EAAmB;CAC7C,IAAIiB,EAAcE,WAAW,GAAG,OAAOD;CACvC,IAAME,IAAyBP,EAAIjB,EAA2B;CAC9D,OAAOqB,EAAcI,OAClBjB,MAAQgB,EAAuBhB,OAASkB,KAAAA,EAC1C;EACD,EAEWC,UACJzB,EAAakB,EAAiC"}
|
|
@@ -4,7 +4,7 @@ export declare const tokenListUrlsAtom: import('jotai').Atom<string[]>;
|
|
|
4
4
|
Enabled and default token list URLs by chain ID,
|
|
5
5
|
taking into account any configured lists in the widget config.
|
|
6
6
|
**/
|
|
7
|
-
export declare const
|
|
7
|
+
export declare const enabledTokenURLSAtom: import('jotai').Atom<{
|
|
8
8
|
1: {
|
|
9
9
|
all: string[];
|
|
10
10
|
enabled: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenListsStateAtom.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenListsStateAtom.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAWrD,eAAO,MAAM,iBAAiB,gCAK5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB/B,CAAC;AAEH;;IAEI;AACJ,eAAO,MAAM,6BAA6B;;CAAkC,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,0BAA0B,6CASrC,CAAC"}
|
|
@@ -1,34 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { emptyArray as e } from "../../../lib/constants/index.js";
|
|
2
|
+
import { isValidUrl as t } from "../../../lib/utils/index.js";
|
|
3
3
|
import { isSupportedChainId as n } from "../../../lib/web3/wagmi/utils.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { allEnabledChainsAtom as r } from "../../../core/state/enabledChainsAtom.js";
|
|
5
|
+
import { gatherEmptyTokenUrlsMappingByChainId as i } from "../utils.js";
|
|
6
|
+
import { enabledTokenListsAtom as a } from "../../../core/state/tokenListsAtom.js";
|
|
7
|
+
import { atom as o } from "jotai";
|
|
7
8
|
//#region src/tokens/lists/state/tokenListsStateAtom.ts
|
|
8
|
-
var
|
|
9
|
-
let n = t(
|
|
10
|
-
return
|
|
11
|
-
}),
|
|
12
|
-
let
|
|
13
|
-
return
|
|
14
|
-
}), u = a((r) => {
|
|
15
|
-
let i = r(t), a = r(o);
|
|
16
|
-
if (i.length === 0) return a;
|
|
17
|
-
let s = { ...a };
|
|
18
|
-
return i.forEach((t) => {
|
|
9
|
+
var s = (e) => Array.from(new Set(e)).filter(t), c = o((t) => {
|
|
10
|
+
let n = t(a);
|
|
11
|
+
return n.length === 0 ? e : s(n);
|
|
12
|
+
}), l = o((e) => {
|
|
13
|
+
let o = e(a), s = i(e(r));
|
|
14
|
+
return o.length === 0 || o.forEach((e) => {
|
|
19
15
|
Object.keys(s).forEach((r) => {
|
|
20
16
|
let i = Number(r);
|
|
21
|
-
n(i) && e
|
|
17
|
+
n(i) && t(e) && (s[i].all.includes(e) || s[i].all.push(e), s[i].enabled.includes(e) || s[i].enabled.push(e));
|
|
22
18
|
});
|
|
23
19
|
}), s;
|
|
24
|
-
}),
|
|
25
|
-
let t = e(
|
|
26
|
-
return e(
|
|
20
|
+
}), u = o({}), d = o((e) => {
|
|
21
|
+
let t = e(u);
|
|
22
|
+
return e(c).reduce((e, n) => {
|
|
27
23
|
let r = t[n];
|
|
28
24
|
return r && (e[n] = r), e;
|
|
29
25
|
}, {});
|
|
30
26
|
});
|
|
31
27
|
//#endregion
|
|
32
|
-
export {
|
|
28
|
+
export { u as allConstructedTokensByURLAtom, d as constructedTokensByURLAtom, l as enabledTokenURLSAtom, c as tokenListUrlsAtom };
|
|
33
29
|
|
|
34
30
|
//# sourceMappingURL=tokenListsStateAtom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenListsStateAtom.js","names":["ConstructedListsByURL","atom","
|
|
1
|
+
{"version":3,"file":"tokenListsStateAtom.js","names":["ConstructedListsByURL","atom","isValidUrl","isSupportedChainId","allEnabledChainsAtom","gatherEmptyTokenUrlsMappingByChainId","emptyArray","enabledTokenListsAtom","getUniqueValidUrls","urls","Array","from","Set","filter","tokenListUrlsAtom","get","enabledLists","length","enabledTokenURLSAtom","allEnabledChains","result","forEach","url","Object","keys","_chainId","chainId","Number","all","includes","push","enabled","allConstructedTokensByURLAtom","constructedTokensByURLAtom","constructedLists","tokenListUrls","reduce","acc","tokens"],"sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"sourcesContent":["import type { ConstructedListsByURL } from \"./types\";\nimport { atom } from \"jotai\";\nimport { isValidUrl } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { allEnabledChainsAtom } from \"@/core/state/enabledChainsAtom\";\nimport { gatherEmptyTokenUrlsMappingByChainId } from \"../utils\";\nimport { emptyArray } from \"@/lib/constants\";\nimport { enabledTokenListsAtom } from \"@/core/state/tokenListsAtom\";\n\nconst getUniqueValidUrls = (urls: string[]) =>\n Array.from(new Set(urls)).filter(isValidUrl);\nexport const tokenListUrlsAtom = atom<string[]>((get) => {\n const enabledLists = get(enabledTokenListsAtom);\n if (enabledLists.length === 0) return emptyArray;\n\n return getUniqueValidUrls(enabledLists);\n});\n\n/** \n Enabled and default token list URLs by chain ID,\n taking into account any configured lists in the widget config. \n**/\nexport const enabledTokenURLSAtom = atom((get) => {\n const enabledLists = get(enabledTokenListsAtom);\n\n const allEnabledChains = get(allEnabledChainsAtom);\n const result = gatherEmptyTokenUrlsMappingByChainId(allEnabledChains);\n\n if (enabledLists.length === 0) return result;\n\n enabledLists.forEach((url) => {\n Object.keys(result).forEach((_chainId) => {\n const chainId = Number(_chainId);\n if (!isSupportedChainId(chainId)) return; // Object.keys destroys types\n if (!isValidUrl(url)) return; // skip if provided URL is not valid\n\n // put URL from config into both enabled and all lists\n if (!result[chainId].all.includes(url)) result[chainId].all.push(url);\n if (!result[chainId].enabled.includes(url))\n result[chainId].enabled.push(url);\n });\n });\n\n return result;\n});\n\n/**\n All constructed tokens from all fetched lists during the widget lifecycle.\n **/\nexport const allConstructedTokensByURLAtom = atom<ConstructedListsByURL>({});\n\n/**\n Constructed tokens from currently enabled lists only (from config or defaults).\n**/\nexport const constructedTokensByURLAtom = atom<ConstructedListsByURL>((get) => {\n const constructedLists = get(allConstructedTokensByURLAtom);\n const tokenListUrls = get(tokenListUrlsAtom);\n\n return tokenListUrls.reduce<ConstructedListsByURL>((acc, url) => {\n const tokens = constructedLists[url];\n if (tokens) acc[url] = tokens;\n return acc;\n }, {});\n});\n"],"mappings":";;;;;;;;AASA,IAAMQ,KAAsBC,MAC1BC,MAAMC,KAAK,IAAIC,IAAIH,EAAK,CAAC,CAACI,OAAOX,EAAW,EACjCY,IAAoBb,GAAgBc,MAAQ;CACvD,IAAMC,IAAeD,EAAIR,EAAsB;CAG/C,OAFIS,EAAaC,WAAW,IAAUX,IAE/BE,EAAmBQ,EAAa;EACvC,EAMWE,IAAuBjB,GAAMc,MAAQ;CAChD,IAAMC,IAAeD,EAAIR,EAAsB,EAGzCa,IAASf,EADUU,EAAIX,EACuBe,CAAiB;CAiBrE,OAfIH,EAAaC,WAAW,KAE5BD,EAAaK,SAASC,MAAQ;EAC5BC,OAAOC,KAAKJ,EAAO,CAACC,SAASI,MAAa;GACxC,IAAMC,IAAUC,OAAOF,EAAS;GAC3BtB,EAAmBuB,EAAQ,IAC3BxB,EAAWoB,EAAI,KAGfF,EAAOM,GAASE,IAAIC,SAASP,EAAI,IAAEF,EAAOM,GAASE,IAAIE,KAAKR,EAAI,EAChEF,EAAOM,GAASK,QAAQF,SAASP,EAAI,IACxCF,EAAOM,GAASK,QAAQD,KAAKR,EAAI;IACnC;GACF,EAboCF;EAgBtC,EAKWY,IAAgC/B,EAA4B,EAAE,CAAC,EAK/DgC,IAA6BhC,GAA6Bc,MAAQ;CAC7E,IAAMmB,IAAmBnB,EAAIiB,EAA8B;CAG3D,OAFsBjB,EAAID,EAEnBqB,CAAcC,QAA+BC,GAAKf,MAAQ;EAC/D,IAAMgB,IAASJ,EAAiBZ;EAEhC,OADIgB,MAAQD,EAAIf,KAAOgB,IAChBD;IACN,EAAE,CAAC;EACN"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { TokenListUnavailable } from '../types';
|
|
2
|
-
export declare const getTokenListPlaceholderName: (listUrl: string, chainId: number) => string | undefined;
|
|
3
2
|
export declare const constructPlaceholderData: (listURL: string) => TokenListUnavailable;
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const gatherEmptyTokenUrlsMappingByChainId: <ChainID extends number>(chainIds: ChainID[]) => { [K in ChainID]: {
|
|
5
4
|
all: string[];
|
|
6
5
|
enabled: string[];
|
|
7
6
|
}; };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,KACd,oBAMF,CAAC;AAEF,eAAO,MAAM,oCAAoC,GAAI,OAAO,SAAS,MAAM,EACzE,UAAU,OAAO,EAAE,KAClB,GAAG,CAAC,IAAI,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAMxD,CAAC"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { gatherObjectsByProp as e } from "../../lib/utils/index.js";
|
|
2
|
-
import { chainId2TokenListURLs as t, urlChain2TokenList as n } from "./constants.js";
|
|
3
2
|
//#region src/tokens/lists/utils.ts
|
|
4
|
-
var
|
|
3
|
+
var t = (e) => ({
|
|
5
4
|
url: e,
|
|
6
5
|
available: !1,
|
|
7
|
-
name:
|
|
8
|
-
}),
|
|
6
|
+
name: void 0
|
|
7
|
+
}), n = (t) => e(t, (e) => String(e), () => ({
|
|
9
8
|
enabled: [],
|
|
10
9
|
all: []
|
|
11
|
-
});
|
|
10
|
+
}));
|
|
12
11
|
//#endregion
|
|
13
|
-
export {
|
|
12
|
+
export { t as constructPlaceholderData, n as gatherEmptyTokenUrlsMappingByChainId };
|
|
14
13
|
|
|
15
14
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["gatherObjectsByProp","TokenListUnavailable","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["gatherObjectsByProp","TokenListUnavailable","constructPlaceholderData","listURL","url","available","name","undefined","gatherEmptyTokenUrlsMappingByChainId","chainIds","ChainID","all","enabled","chainId","String"],"sources":["../../../src/tokens/lists/utils.ts"],"sourcesContent":["import { gatherObjectsByProp } from \"@/lib/utils\";\nimport type { TokenListUnavailable } from \"../types\";\n\nexport const constructPlaceholderData = (\n listURL: string\n): TokenListUnavailable => {\n return {\n url: listURL,\n available: false,\n name: undefined,\n };\n};\n\nexport const gatherEmptyTokenUrlsMappingByChainId = <ChainID extends number>(\n chainIds: ChainID[]\n): { [K in ChainID]: { all: string[]; enabled: string[] } } => {\n return gatherObjectsByProp(\n chainIds,\n (chainId) => String(chainId),\n () => ({ enabled: [], all: [] })\n );\n};\n"],"mappings":";;AAGA,IAAaE,KACXC,OAEO;CACLC,KAAKD;CACLE,WAAW;CACXC,MAAMC,KAAAA;CACP,GAGUC,KACXC,MAEOT,EACLS,IACCI,MAAYC,OAAOD,EAAQ,SACrB;CAAED,SAAS,EAAE;CAAED,KAAK,EAAA;CAAI,EAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tokens/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tokens/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC3C,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CACzD,CAAC;AAiBF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACpE,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,6GAaR;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC1E,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CA6BlD;AAGD,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACvE,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAOlD;AAED,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC3E,UAAU,MAAM,EAAE,EAClB,MAAM,CAAC,KACN,mBAAmB,CAAC,CAAC,CAAC,EAkBxB,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC5D,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,GACN,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAOvB;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAIvD"}
|