From c878d97c93a75fa63886cf088d90e3ae6a5e8591 Mon Sep 17 00:00:00 2001 From: Bogdan Crisan Date: Fri, 15 Nov 2024 22:44:10 +0100 Subject: [PATCH 1/7] Add localStorage caching of events --- .../wallet-context/AptosContextProvider.tsx | 2 +- .../src/lib/store/event/event-store.ts | 60 ++++++++++++++++++- .../frontend/src/lib/store/event/types.ts | 2 +- src/typescript/frontend/src/utils/index.ts | 10 +++- 4 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/typescript/frontend/src/context/wallet-context/AptosContextProvider.tsx b/src/typescript/frontend/src/context/wallet-context/AptosContextProvider.tsx index bb6dd068f..a5c1cea63 100644 --- a/src/typescript/frontend/src/context/wallet-context/AptosContextProvider.tsx +++ b/src/typescript/frontend/src/context/wallet-context/AptosContextProvider.tsx @@ -242,7 +242,7 @@ export function AptosContextProvider({ children }: PropsWithChildren) { ...models.liquidityEvents, ...models.marketLatestStateEvents, ]; - flattenedEvents.forEach(pushEventFromClient); + flattenedEvents.forEach((e) => pushEventFromClient(e, true)); parseChangesAndSetBalances(response); } diff --git a/src/typescript/frontend/src/lib/store/event/event-store.ts b/src/typescript/frontend/src/lib/store/event/event-store.ts index cf0e62a29..b558704aa 100644 --- a/src/typescript/frontend/src/lib/store/event/event-store.ts +++ b/src/typescript/frontend/src/lib/store/event/event-store.ts @@ -23,9 +23,35 @@ import { initialStatePatch } from "./local-storage"; import { periodEnumToRawDuration } from "@sdk/const"; import { createWebSocketClientStore, type WebSocketClientStore } from "../websocket/store"; import { DEBUG_ASSERT, extractFilter } from "@sdk/utils"; +import { parseJSON, stringifyJSON } from "utils"; + +export const TIMEOUT = 1000 * 60; + +type EventLocalStorageKey = "swap" | "chat" | "periodic" | "market" | "liquidity"; + +const updateLocalStorage = (key: EventLocalStorageKey, event: AnyEventModel) => { + const str = localStorage.getItem(key) ?? "[]"; + const data: AnyEventModel[] = parseJSON(str); + data.unshift(event); + localStorage.setItem(key, stringifyJSON(data)); +}; + +const cleanReadLocalStorage = (key: EventLocalStorageKey) => { + const str = localStorage.getItem(key) ?? "[]"; + const data: AnyEventModel[] = parseJSON(str); + const relevants = data.filter( + (e) => e.transaction.timestamp > new Date(new Date().getTime() - TIMEOUT) + ); + localStorage.setItem(key, stringifyJSON(relevants)); + return relevants; +}; + +const clearLocalStorage = (key: EventLocalStorageKey) => { + localStorage.setItem(key, "[]"); +}; export const createEventStore = () => { - return createStore()( + const store = createStore()( immer((set, get) => ({ ...initialStatePatch(), getMarket: (emojis) => get().markets.get(emojis.join("")), @@ -77,7 +103,7 @@ export const createEventStore = () => { }); }); }, - pushEventFromClient: (event: AnyEventModel) => { + pushEventFromClient: (event: AnyEventModel, localize = false) => { if (get().guids.has(event.guid)) return; set((state) => { state.guids.add(event.guid); @@ -91,17 +117,32 @@ export const createEventStore = () => { if (isSwapEventModel(event)) { market.swapEvents.unshift(event); handleLatestBarForSwapEvent(market, event); + if (localize) { + updateLocalStorage("swap", event); + } } else if (isChatEventModel(event)) { market.chatEvents.unshift(event); + if (localize) { + updateLocalStorage("chat", event); + } } else if (isLiquidityEventModel(event)) { market.liquidityEvents.unshift(event); + if (localize) { + updateLocalStorage("liquidity", event); + } } else if (isMarketLatestStateEventModel(event)) { market.stateEvents.unshift(event); state.stateFirehose.unshift(event); + if (localize) { + updateLocalStorage("market", event); + } } else if (isPeriodicStateEventModel(event)) { const period = periodEnumToRawDuration(event.periodicMetadata.period); market[period].candlesticks.unshift(event); handleLatestBarForPeriodicStateEvent(market, event); + if (localize) { + updateLocalStorage("periodic", event); + } } } }); @@ -146,4 +187,19 @@ export const createEventStore = () => { ...createWebSocketClientStore(set, get), })) ); + + const eventTypes: EventLocalStorageKey[] = ["swap", "chat", "liquidity", "market", "periodic"]; + const state = store.getState(); + for (const eventType of eventTypes) { + try { + const events = cleanReadLocalStorage(eventType); + for (const event of events) { + state.pushEventFromClient(event); + } + } catch (e) { + console.error(e); + clearLocalStorage(eventType); + } + } + return store; }; diff --git a/src/typescript/frontend/src/lib/store/event/types.ts b/src/typescript/frontend/src/lib/store/event/types.ts index 4dacc886f..050360d74 100644 --- a/src/typescript/frontend/src/lib/store/event/types.ts +++ b/src/typescript/frontend/src/lib/store/event/types.ts @@ -68,7 +68,7 @@ export type EventActions = { getRegisteredMarkets: () => Readonly; loadMarketStateFromServer: (states: Array) => void; loadEventsFromServer: (events: Array) => void; - pushEventFromClient: (event: AnyEventModel) => void; + pushEventFromClient: (event: AnyEventModel, localize?: boolean) => void; setLatestBars: ({ marketMetadata, latestBars }: SetLatestBarsArgs) => void; subscribeToPeriod: ({ marketEmojis, period, cb }: PeriodSubscription) => void; unsubscribeFromPeriod: ({ marketEmojis, period }: Omit) => void; diff --git a/src/typescript/frontend/src/utils/index.ts b/src/typescript/frontend/src/utils/index.ts index b91da81a1..4eb2eb686 100644 --- a/src/typescript/frontend/src/utils/index.ts +++ b/src/typescript/frontend/src/utils/index.ts @@ -13,13 +13,21 @@ export { isDisallowedEventKey } from "./check-is-disallowed-event-key"; export { getEmptyListTr } from "./get-empty-list-tr"; export const stringifyJSON = (data: object) => - JSON.stringify(data, (_, value) => (typeof value === "bigint" ? value.toString() + "n" : value)); + JSON.stringify(data, (_, value) => { + if (typeof value === "bigint") return value.toString() + "n"; + return value; + }); export const parseJSON = (json: string): T => JSON.parse(json, (_, value) => { if (typeof value === "string" && /^\d+n$/.test(value)) { return BigInt(value.substring(0, value.length - 1)); } + // This matches the below pattern: 1234-12-31T23:59:59.666Z + const dateRegex = /^\d{4}-\d{2}-\d2T\d{2}:\d{2}:\d{2}.\d*Z$/; + if (typeof value === "string" && dateRegex.test(value)) { + return new Date(value); + } return value as T; }); From 5f66257819b96fe508fc8ed7d6908408b1a0c435 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:25:29 -0800 Subject: [PATCH 2/7] [ECO-2416] Clean up `ECO-2404` (#357) --- .../src/lib/store/event/event-store.ts | 41 +--- .../src/lib/store/event/local-storage.ts | 194 +++--------------- .../frontend/src/lib/store/event/utils.ts | 12 +- src/typescript/frontend/tsconfig.json | 49 ++--- .../src/lib/store/event => }/types.ts | 4 +- 5 files changed, 64 insertions(+), 236 deletions(-) rename src/typescript/{frontend/src/lib/store/event => }/types.ts (94%) diff --git a/src/typescript/frontend/src/lib/store/event/event-store.ts b/src/typescript/frontend/src/lib/store/event/event-store.ts index b558704aa..d6c843b32 100644 --- a/src/typescript/frontend/src/lib/store/event/event-store.ts +++ b/src/typescript/frontend/src/lib/store/event/event-store.ts @@ -11,49 +11,29 @@ import { } from "@sdk/indexer-v2/types"; import { createStore } from "zustand/vanilla"; import { immer } from "zustand/middleware/immer"; -import { type SetLatestBarsArgs, type EventStore } from "./types"; +import { type SetLatestBarsArgs, type EventStore } from "../../../../../types"; import { ensureMarketInStore, handleLatestBarForPeriodicStateEvent, handleLatestBarForSwapEvent, pushPeriodicStateEvents, toMappedMarketEvents, + initialState, } from "./utils"; -import { initialStatePatch } from "./local-storage"; import { periodEnumToRawDuration } from "@sdk/const"; import { createWebSocketClientStore, type WebSocketClientStore } from "../websocket/store"; import { DEBUG_ASSERT, extractFilter } from "@sdk/utils"; -import { parseJSON, stringifyJSON } from "utils"; - -export const TIMEOUT = 1000 * 60; - -type EventLocalStorageKey = "swap" | "chat" | "periodic" | "market" | "liquidity"; - -const updateLocalStorage = (key: EventLocalStorageKey, event: AnyEventModel) => { - const str = localStorage.getItem(key) ?? "[]"; - const data: AnyEventModel[] = parseJSON(str); - data.unshift(event); - localStorage.setItem(key, stringifyJSON(data)); -}; - -const cleanReadLocalStorage = (key: EventLocalStorageKey) => { - const str = localStorage.getItem(key) ?? "[]"; - const data: AnyEventModel[] = parseJSON(str); - const relevants = data.filter( - (e) => e.transaction.timestamp > new Date(new Date().getTime() - TIMEOUT) - ); - localStorage.setItem(key, stringifyJSON(relevants)); - return relevants; -}; - -const clearLocalStorage = (key: EventLocalStorageKey) => { - localStorage.setItem(key, "[]"); -}; +import { + updateLocalStorage, + cleanReadLocalStorage, + clearLocalStorage, + LOCAL_STORAGE_EVENT_TYPES, +} from "./local-storage"; export const createEventStore = () => { const store = createStore()( immer((set, get) => ({ - ...initialStatePatch(), + ...initialState(), getMarket: (emojis) => get().markets.get(emojis.join("")), getRegisteredMarkets: () => { return get().markets; @@ -188,9 +168,8 @@ export const createEventStore = () => { })) ); - const eventTypes: EventLocalStorageKey[] = ["swap", "chat", "liquidity", "market", "periodic"]; const state = store.getState(); - for (const eventType of eventTypes) { + for (const eventType of LOCAL_STORAGE_EVENT_TYPES) { try { const events = cleanReadLocalStorage(eventType); for (const event of events) { diff --git a/src/typescript/frontend/src/lib/store/event/local-storage.ts b/src/typescript/frontend/src/lib/store/event/local-storage.ts index ac15f4a0f..560e1b854 100644 --- a/src/typescript/frontend/src/lib/store/event/local-storage.ts +++ b/src/typescript/frontend/src/lib/store/event/local-storage.ts @@ -1,177 +1,39 @@ -import { - type DatabaseModels, - type AnyEventModel, - type MarketLatestStateEventModel, - type MarketRegistrationEventModel, - type GlobalStateEventModel, -} from "@sdk/indexer-v2/types"; -import { type TableName } from "@sdk/indexer-v2/types/json-types"; -import { LOCALSTORAGE_EXPIRY_TIME_MS } from "const"; +import { type AnyEventModel } from "@sdk/indexer-v2/types"; import { parseJSON, stringifyJSON } from "utils"; -import { type MarketEventStore, type EventState, type SymbolString } from "./types"; -import { createInitialMarketState } from "./utils"; -import { type DeepWritable } from "@sdk/utils/utility-types"; -const shouldKeepItem = (event: T) => { - const eventTime = Number(event.transaction.timestamp); - const now = new Date().getTime(); - return eventTime > now - LOCALSTORAGE_EXPIRY_TIME_MS; -}; +export const LOCAL_STORAGE_EXPIRATION_TIME = 1000 * 60; // 10 minutes. -export const addToLocalStorage = (event: T) => { - const { eventName } = event; - const events = localStorage.getItem(eventName) ?? "[]"; - const filtered: T[] = parseJSON(events).filter(shouldKeepItem); - const guids = new Set(filtered.map((e) => e.guid)); - if (!guids.has(event.guid)) { - filtered.push(event); - } - localStorage.setItem(eventName, stringifyJSON(filtered)); -}; +export const LOCAL_STORAGE_EVENT_TYPES = [ + "swap", + "chat", + "liquidity", + "market", + "periodic", +] as const; +type EventLocalStorageKey = (typeof LOCAL_STORAGE_EVENT_TYPES)[number]; -type EventArraysByModelType = { - Swap: Array; - Chat: Array; - MarketRegistration: Array; - PeriodicState: Array; - State: Array; - GlobalState: Array; - Liquidity: Array; +const shouldKeep = (e: AnyEventModel) => { + const now = new Date().getTime(); + // The time at which all events that occurred prior to are considered stale. + const staleTimeBoundary = new Date(now - LOCAL_STORAGE_EXPIRATION_TIME); + return e.transaction.timestamp > staleTimeBoundary; }; -const emptyEventArraysByModelType: () => EventArraysByModelType = () => ({ - Swap: [] as EventArraysByModelType["Swap"], - Chat: [] as EventArraysByModelType["Chat"], - MarketRegistration: [] as EventArraysByModelType["MarketRegistration"], - PeriodicState: [] as EventArraysByModelType["PeriodicState"], - State: [] as EventArraysByModelType["State"], - GlobalState: [] as EventArraysByModelType["GlobalState"], - Liquidity: [] as EventArraysByModelType["Liquidity"], -}); - -type MarketEventTypes = - | DatabaseModels["swap_events"] - | DatabaseModels["chat_events"] - | MarketLatestStateEventModel - | DatabaseModels["liquidity_events"] - | DatabaseModels["periodic_state_events"]; - -export const initialStatePatch = (): EventState => { - return { - guids: new Set(), - stateFirehose: [], - marketRegistrations: [], - markets: new Map(), - globalStateEvents: [], - }; +export const updateLocalStorage = (key: EventLocalStorageKey, event: AnyEventModel) => { + const str = localStorage.getItem(key) ?? "[]"; + const data: AnyEventModel[] = parseJSON(str); + data.unshift(event); + localStorage.setItem(key, stringifyJSON(data)); }; -export const initialStateFromLocalStorage = (): EventState => { - // Purge stale events then load up the remaining ones. - const events = getEventsFromLocalStorage(); - - // Sort each event that has a market by its market. - const markets: Map> = new Map(); - const guids: Set = new Set(); - - const addGuidAndGetMarket = (event: MarketEventTypes) => { - // Before ensuring the market is initialized, add the incoming event to the set of guids. - guids.add(event.guid); - - const { market } = event; - const symbol = market.symbolData.symbol; - if (!markets.has(symbol)) { - markets.set(symbol, createInitialMarketState(market)); - } - return markets.get(symbol)!; - }; - - const marketRegistrations: MarketRegistrationEventModel[] = []; - const globalStateEvents: GlobalStateEventModel[] = []; - - events.Chat.forEach((e) => { - addGuidAndGetMarket(e).chatEvents.push(e); - }); - events.Liquidity.forEach((e) => { - addGuidAndGetMarket(e).liquidityEvents.push(e); - }); - events.State.forEach((e) => { - addGuidAndGetMarket(e).stateEvents.push(e); - }); - events.Swap.forEach((e) => { - addGuidAndGetMarket(e).swapEvents.push(e); - }); - events.PeriodicState.forEach((e) => { - addGuidAndGetMarket(e)[e.periodicMetadata.period].candlesticks.push(e); - }); - events.MarketRegistration.forEach((e) => { - marketRegistrations.push(e); - guids.add(e.guid); - }); - events.GlobalState.forEach((e) => { - globalStateEvents.push(e); - guids.add(e.guid); - }); - - const stateFirehose: MarketLatestStateEventModel[] = []; - - for (const { stateEvents } of markets.values()) { - stateFirehose.push(...(stateEvents as Array)); - } - - // Sort the state firehose by bump time, then market ID, then market nonce. - stateFirehose.sort(({ market: a }, { market: b }) => { - if (a.time === b.time) { - if (a.marketID === b.marketID) { - if (a.marketNonce === b.marketNonce) return 0; - if (a.marketNonce < b.marketNonce) return 1; - return -1; - } else if (a.marketID < b.marketID) { - return 1; - } - return -1; - } else if (a.time < b.time) { - return -1; - } - return 1; - }); - - return { - guids, - stateFirehose, - marketRegistrations, - markets: markets as unknown as Map, - globalStateEvents, - }; +export const cleanReadLocalStorage = (key: EventLocalStorageKey) => { + const str = localStorage.getItem(key) ?? "[]"; + const data: AnyEventModel[] = parseJSON(str); + const relevants = data.filter(shouldKeep); + localStorage.setItem(key, stringifyJSON(relevants)); + return relevants; }; -/** - * Purges old local storage events and returns any that remain. - */ -export const getEventsFromLocalStorage = () => { - const res = emptyEventArraysByModelType(); - const guids = new Set(); - - // Filter the events in local storage, then return them. - Object.entries(res).forEach((entry) => { - const eventName = entry[0] as keyof EventArraysByModelType; - const existing = localStorage.getItem(eventName) ?? "[]"; - const filtered = - parseJSON(existing).filter(shouldKeepItem); - const reduced = filtered.reduce( - (acc, curr) => { - if (!guids.has(curr.guid)) { - acc.push(curr); - guids.add(curr.guid); - } - return acc; - }, - [] as typeof filtered - ); - const events = entry[1] as typeof filtered; - events.push(...reduced); - localStorage.setItem(eventName, stringifyJSON(filtered)); - }); - - return res; +export const clearLocalStorage = (key: EventLocalStorageKey) => { + localStorage.setItem(key, "[]"); }; diff --git a/src/typescript/frontend/src/lib/store/event/utils.ts b/src/typescript/frontend/src/lib/store/event/utils.ts index 262dab87f..d2e3d1feb 100644 --- a/src/typescript/frontend/src/lib/store/event/utils.ts +++ b/src/typescript/frontend/src/lib/store/event/utils.ts @@ -1,7 +1,7 @@ import { Period, PERIODS, periodEnumToRawDuration } from "@sdk/const"; import { type SubscribeBarsCallback } from "@static/charting_library/datafeed-api"; import { type WritableDraft } from "immer"; -import { type EventState, type CandlestickData, type MarketEventStore } from "./types"; +import { type EventState, type CandlestickData, type MarketEventStore } from "../../../../../types"; import { type MarketMetadataModel, type PeriodicStateEventModel, @@ -162,3 +162,13 @@ export const toMappedMarketEvents = (events: Arr events.forEach((event) => map.get(event.market.symbolData.symbol)!.push(event)); return map; }; + +export const initialState = (): EventState => { + return { + guids: new Set(), + stateFirehose: [], + marketRegistrations: [], + markets: new Map(), + globalStateEvents: [], + }; +}; diff --git a/src/typescript/frontend/tsconfig.json b/src/typescript/frontend/tsconfig.json index 8b30e81e8..a4a9ee4ba 100644 --- a/src/typescript/frontend/tsconfig.json +++ b/src/typescript/frontend/tsconfig.json @@ -10,11 +10,7 @@ "incremental": true, "isolatedModules": true, "jsx": "preserve", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "module": "esnext", "moduleDetection": "force", "moduleResolution": "bundler", @@ -22,33 +18,15 @@ "noFallthroughCasesInSwitch": true, "noImplicitAny": false, "paths": { - "@/broker/*": [ - "../../sdk/src/broker-v2/*" - ], - "@/queries/*": [ - "../../sdk/src/indexer-v2/queries/app/*" - ], - "@/store/*": [ - "lib/store/*" - ], - "@containers": [ - "components/layout/components/index.ts" - ], - "@hooks/*": [ - "hooks/*" - ], - "@icons/*": [ - "components/svg/icons/*" - ], - "@sdk-types": [ - "../../sdk/src/types/index.ts" - ], - "@sdk/*": [ - "../../sdk/src/*" - ], - "@static/*": [ - "../public/static/*" - ] + "@/broker/*": ["../../sdk/src/broker-v2/*"], + "@/queries/*": ["../../sdk/src/indexer-v2/queries/app/*"], + "@/store/*": ["lib/store/*"], + "@containers": ["components/layout/components/index.ts"], + "@hooks/*": ["hooks/*"], + "@icons/*": ["components/svg/icons/*"], + "@sdk-types": ["../../sdk/src/types/index.ts"], + "@sdk/*": ["../../sdk/src/*"], + "@static/*": ["../public/static/*"] }, "plugins": [ { @@ -61,14 +39,13 @@ "strictNullChecks": true, "target": "esnext" }, - "exclude": [ - "node_modules" - ], + "exclude": ["node_modules"], "include": [ "next-env.d.ts", "./src/**/*.ts", "./src/**/*.tsx", ".next/types/**/*.ts", - "./dist/types/**/*.ts" + "./dist/types/**/*.ts", + "../types.ts" ] } diff --git a/src/typescript/frontend/src/lib/store/event/types.ts b/src/typescript/types.ts similarity index 94% rename from src/typescript/frontend/src/lib/store/event/types.ts rename to src/typescript/types.ts index 050360d74..e3efd7eb3 100644 --- a/src/typescript/frontend/src/lib/store/event/types.ts +++ b/src/typescript/types.ts @@ -6,9 +6,9 @@ import { type DatabaseModels, } from "@sdk/indexer-v2/types"; import { type SubscribeBarsCallback } from "@static/charting_library/datafeed-api"; -import { type LatestBar } from "./candlestick-bars"; +import { type LatestBar } from "./frontend/src/lib/store/event/candlestick-bars"; import { type WritableDraft } from "immer"; -import { type ClientState, type ClientActions } from "../websocket/store"; +import { type ClientState, type ClientActions } from "./frontend/src/lib/store/websocket/store"; // Aliased to avoid repeating the type names over and over. type Swap = DatabaseModels["swap_events"]; From 92fd21fa11d82bb6dd2420cec6610502721adafe Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:29:29 -0800 Subject: [PATCH 3/7] Change variable name --- .../frontend/src/lib/store/event/event-store.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/typescript/frontend/src/lib/store/event/event-store.ts b/src/typescript/frontend/src/lib/store/event/event-store.ts index d6c843b32..55ddb51f7 100644 --- a/src/typescript/frontend/src/lib/store/event/event-store.ts +++ b/src/typescript/frontend/src/lib/store/event/event-store.ts @@ -83,7 +83,7 @@ export const createEventStore = () => { }); }); }, - pushEventFromClient: (event: AnyEventModel, localize = false) => { + pushEventFromClient: (event: AnyEventModel, pushToLocalStorage = false) => { if (get().guids.has(event.guid)) return; set((state) => { state.guids.add(event.guid); @@ -97,30 +97,30 @@ export const createEventStore = () => { if (isSwapEventModel(event)) { market.swapEvents.unshift(event); handleLatestBarForSwapEvent(market, event); - if (localize) { + if (pushToLocalStorage) { updateLocalStorage("swap", event); } } else if (isChatEventModel(event)) { market.chatEvents.unshift(event); - if (localize) { + if (pushToLocalStorage) { updateLocalStorage("chat", event); } } else if (isLiquidityEventModel(event)) { market.liquidityEvents.unshift(event); - if (localize) { + if (pushToLocalStorage) { updateLocalStorage("liquidity", event); } } else if (isMarketLatestStateEventModel(event)) { market.stateEvents.unshift(event); state.stateFirehose.unshift(event); - if (localize) { + if (pushToLocalStorage) { updateLocalStorage("market", event); } } else if (isPeriodicStateEventModel(event)) { const period = periodEnumToRawDuration(event.periodicMetadata.period); market[period].candlesticks.unshift(event); handleLatestBarForPeriodicStateEvent(market, event); - if (localize) { + if (pushToLocalStorage) { updateLocalStorage("periodic", event); } } From ee1386d6b8a205dc55dc717be6afddca8adb4335 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:40:16 -0800 Subject: [PATCH 4/7] Format --- src/typescript/frontend/tsconfig.json | 46 ++++++++++++++++++++------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/typescript/frontend/tsconfig.json b/src/typescript/frontend/tsconfig.json index a4a9ee4ba..c1a076714 100644 --- a/src/typescript/frontend/tsconfig.json +++ b/src/typescript/frontend/tsconfig.json @@ -10,7 +10,11 @@ "incremental": true, "isolatedModules": true, "jsx": "preserve", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "module": "esnext", "moduleDetection": "force", "moduleResolution": "bundler", @@ -18,15 +22,33 @@ "noFallthroughCasesInSwitch": true, "noImplicitAny": false, "paths": { - "@/broker/*": ["../../sdk/src/broker-v2/*"], - "@/queries/*": ["../../sdk/src/indexer-v2/queries/app/*"], - "@/store/*": ["lib/store/*"], - "@containers": ["components/layout/components/index.ts"], - "@hooks/*": ["hooks/*"], - "@icons/*": ["components/svg/icons/*"], - "@sdk-types": ["../../sdk/src/types/index.ts"], - "@sdk/*": ["../../sdk/src/*"], - "@static/*": ["../public/static/*"] + "@/broker/*": [ + "../../sdk/src/broker-v2/*" + ], + "@/queries/*": [ + "../../sdk/src/indexer-v2/queries/app/*" + ], + "@/store/*": [ + "lib/store/*" + ], + "@containers": [ + "components/layout/components/index.ts" + ], + "@hooks/*": [ + "hooks/*" + ], + "@icons/*": [ + "components/svg/icons/*" + ], + "@sdk-types": [ + "../../sdk/src/types/index.ts" + ], + "@sdk/*": [ + "../../sdk/src/*" + ], + "@static/*": [ + "../public/static/*" + ] }, "plugins": [ { @@ -39,7 +61,9 @@ "strictNullChecks": true, "target": "esnext" }, - "exclude": ["node_modules"], + "exclude": [ + "node_modules" + ], "include": [ "next-env.d.ts", "./src/**/*.ts", From 51df45ed08c02653d9e1bdf3f9b8d1c4a7b8cdab Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:46:26 -0800 Subject: [PATCH 5/7] Undo `types.ts` move --- src/typescript/frontend/src/lib/store/event/event-store.ts | 2 +- src/typescript/{ => frontend/src/lib/store/event}/types.ts | 4 ++-- src/typescript/frontend/src/lib/store/event/utils.ts | 2 +- src/typescript/frontend/tsconfig.json | 1 - 4 files changed, 4 insertions(+), 5 deletions(-) rename src/typescript/{ => frontend/src/lib/store/event}/types.ts (94%) diff --git a/src/typescript/frontend/src/lib/store/event/event-store.ts b/src/typescript/frontend/src/lib/store/event/event-store.ts index 55ddb51f7..6a7a81024 100644 --- a/src/typescript/frontend/src/lib/store/event/event-store.ts +++ b/src/typescript/frontend/src/lib/store/event/event-store.ts @@ -11,7 +11,7 @@ import { } from "@sdk/indexer-v2/types"; import { createStore } from "zustand/vanilla"; import { immer } from "zustand/middleware/immer"; -import { type SetLatestBarsArgs, type EventStore } from "../../../../../types"; +import { type SetLatestBarsArgs, type EventStore } from "./types"; import { ensureMarketInStore, handleLatestBarForPeriodicStateEvent, diff --git a/src/typescript/types.ts b/src/typescript/frontend/src/lib/store/event/types.ts similarity index 94% rename from src/typescript/types.ts rename to src/typescript/frontend/src/lib/store/event/types.ts index e3efd7eb3..050360d74 100644 --- a/src/typescript/types.ts +++ b/src/typescript/frontend/src/lib/store/event/types.ts @@ -6,9 +6,9 @@ import { type DatabaseModels, } from "@sdk/indexer-v2/types"; import { type SubscribeBarsCallback } from "@static/charting_library/datafeed-api"; -import { type LatestBar } from "./frontend/src/lib/store/event/candlestick-bars"; +import { type LatestBar } from "./candlestick-bars"; import { type WritableDraft } from "immer"; -import { type ClientState, type ClientActions } from "./frontend/src/lib/store/websocket/store"; +import { type ClientState, type ClientActions } from "../websocket/store"; // Aliased to avoid repeating the type names over and over. type Swap = DatabaseModels["swap_events"]; diff --git a/src/typescript/frontend/src/lib/store/event/utils.ts b/src/typescript/frontend/src/lib/store/event/utils.ts index d2e3d1feb..88d8f719e 100644 --- a/src/typescript/frontend/src/lib/store/event/utils.ts +++ b/src/typescript/frontend/src/lib/store/event/utils.ts @@ -1,7 +1,7 @@ import { Period, PERIODS, periodEnumToRawDuration } from "@sdk/const"; import { type SubscribeBarsCallback } from "@static/charting_library/datafeed-api"; import { type WritableDraft } from "immer"; -import { type EventState, type CandlestickData, type MarketEventStore } from "../../../../../types"; +import { type EventState, type CandlestickData, type MarketEventStore } from "./types"; import { type MarketMetadataModel, type PeriodicStateEventModel, diff --git a/src/typescript/frontend/tsconfig.json b/src/typescript/frontend/tsconfig.json index c1a076714..2b26bf1a1 100644 --- a/src/typescript/frontend/tsconfig.json +++ b/src/typescript/frontend/tsconfig.json @@ -70,6 +70,5 @@ "./src/**/*.tsx", ".next/types/**/*.ts", "./dist/types/**/*.ts", - "../types.ts" ] } From b2c67e877d3b4783b557a1b39f44fc75e6186d01 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:09:02 -0800 Subject: [PATCH 6/7] Update var name --- .../frontend/src/lib/store/event/local-storage.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/typescript/frontend/src/lib/store/event/local-storage.ts b/src/typescript/frontend/src/lib/store/event/local-storage.ts index 560e1b854..93903a767 100644 --- a/src/typescript/frontend/src/lib/store/event/local-storage.ts +++ b/src/typescript/frontend/src/lib/store/event/local-storage.ts @@ -29,9 +29,9 @@ export const updateLocalStorage = (key: EventLocalStorageKey, event: AnyEventMod export const cleanReadLocalStorage = (key: EventLocalStorageKey) => { const str = localStorage.getItem(key) ?? "[]"; const data: AnyEventModel[] = parseJSON(str); - const relevants = data.filter(shouldKeep); - localStorage.setItem(key, stringifyJSON(relevants)); - return relevants; + const relevantItems = data.filter(shouldKeep); + localStorage.setItem(key, stringifyJSON(relevantItems)); + return relevantItems; }; export const clearLocalStorage = (key: EventLocalStorageKey) => { From f4aa99b3018c46d7d0358941d6c5b5a84914b67a Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:10:26 -0800 Subject: [PATCH 7/7] Undo all changes to tsconfig.json --- src/typescript/frontend/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/tsconfig.json b/src/typescript/frontend/tsconfig.json index 2b26bf1a1..8b30e81e8 100644 --- a/src/typescript/frontend/tsconfig.json +++ b/src/typescript/frontend/tsconfig.json @@ -69,6 +69,6 @@ "./src/**/*.ts", "./src/**/*.tsx", ".next/types/**/*.ts", - "./dist/types/**/*.ts", + "./dist/types/**/*.ts" ] }