Skip to content

Commit cf195cc

Browse files
peachbitsswansontec
authored andcommitted
Fix @typescript-eslint/no-dynamic-delete
1 parent eb50a17 commit cf195cc

File tree

10 files changed

+64
-52
lines changed

10 files changed

+64
-52
lines changed

eslint.config.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,6 @@ export default [
541541
rules: {
542542
'@typescript-eslint/ban-ts-comment': 'warn',
543543
'@typescript-eslint/explicit-function-return-type': 'warn',
544-
'@typescript-eslint/no-dynamic-delete': 'warn',
545544
'@typescript-eslint/strict-boolean-expressions': 'warn',
546545
'@typescript-eslint/use-unknown-in-catch-callback-variable': 'warn'
547546
}

src/app.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ const asServerDetails = asObject({
102102
const ENABLE_PERF_LOGGING = false
103103
const PERF_LOGGING_ONLY = false
104104

105-
const perfTimers: NumberMap = {}
105+
const perfTimers = new Map<string, number>()
106106
const perfCounters: NumberMap = {}
107107
const perfTotals: NumberMap = {}
108108

@@ -166,9 +166,9 @@ if (ENABLE_PERF_LOGGING) {
166166
perfTotals[label] = 0
167167
perfCounters[label] = 0
168168
}
169-
if (typeof perfTimers[label] === 'undefined') {
169+
if (typeof perfTimers.get(label) === 'undefined') {
170170
// @ts-expect-error
171-
perfTimers[label] = global.nativePerformanceNow()
171+
perfTimers.set(label, global.nativePerformanceNow())
172172
} else {
173173
clog(`${d}: PTIMER Error: PTimer already started: ${label}`)
174174
}
@@ -177,15 +177,16 @@ if (ENABLE_PERF_LOGGING) {
177177
// @ts-expect-error
178178
global.pend = function (label: string) {
179179
const d = makeDate()
180-
if (typeof perfTimers[label] === 'number') {
180+
const timer = perfTimers.get(label)
181+
if (typeof timer === 'number') {
181182
// @ts-expect-error
182-
const elapsed = global.nativePerformanceNow() - perfTimers[label]
183+
const elapsed = global.nativePerformanceNow() - timer
183184
perfTotals[label] += elapsed
184185
perfCounters[label]++
185186
clog(
186187
`${d}: PTIMER ${label}:${elapsed}ms total:${perfTotals[label]}ms count:${perfCounters[label]}`
187188
)
188-
delete perfTimers[label]
189+
perfTimers.delete(label)
189190
} else {
190191
clog(`${d}: PTIMER Error: PTimer not started: ${label}`)
191192
}

src/components/FioAddress/ConnectWallets.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,20 +134,20 @@ export const ConnectWallets = (props: FioConnectWalletsProps) => {
134134
): void => {
135135
if (value) {
136136
if (disconnectWalletsMap[item.key] != null) {
137-
delete disconnectWalletsMap[item.key]
137+
const { [item.key]: _, ...rest } = disconnectWalletsMap
138+
setDisconnectWalletsMap(rest)
138139
} else {
139-
connectWalletsMap[item.key] = item
140+
setConnectWalletsMap({ ...connectWalletsMap, [item.key]: item })
140141
}
141142
} else {
142143
if (connectWalletsMap[item.key] != null) {
143-
delete connectWalletsMap[item.key]
144+
const { [item.key]: _, ...rest } = connectWalletsMap
145+
setConnectWalletsMap(rest)
144146
} else {
145-
disconnectWalletsMap[item.key] = item
147+
setDisconnectWalletsMap({ ...disconnectWalletsMap, [item.key]: item })
146148
}
147149
}
148150

149-
setConnectWalletsMap({ ...connectWalletsMap })
150-
setDisconnectWalletsMap({ ...disconnectWalletsMap })
151151
flashListToggle = !flashListToggle
152152
}
153153

src/components/services/AccountCallbackManager.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export function AccountCallbackManager(props: Props) {
103103
wallet.on('newTransactions', transactions => {
104104
for (const tx of transactions) {
105105
const txid = tx.txid.toLowerCase()
106-
const cacheEntries = stakeMetadataCache[txid]
106+
const cacheEntries = stakeMetadataCache.get(txid)
107107
// Assign cached stake metadata
108108
if (cacheEntries != null) {
109109
cacheEntries.forEach(cacheEntry => {
@@ -114,7 +114,7 @@ export function AccountCallbackManager(props: Props) {
114114
})
115115
})
116116

117-
delete stakeMetadataCache[txid]
117+
stakeMetadataCache.delete(txid)
118118
}
119119
}
120120

src/controllers/edgeProvider/client/pendingList.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function makePendingList(): PendingList {
4444
}
4545

4646
// Slower object-based version:
47-
const map: Record<string, PendingCall> = {}
47+
let map: Record<string, PendingCall> = {}
4848
return {
4949
add(call) {
5050
const id = ++lastId
@@ -54,7 +54,8 @@ export function makePendingList(): PendingList {
5454
grab(id) {
5555
const call = map[String(id)]
5656
if (call == null) return dummyCall
57-
delete map[String(id)]
57+
const { [String(id)]: _, ...rest } = map
58+
map = rest
5859
return call
5960
}
6061
}

src/hooks/useFilter.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,29 @@ export function useFilter<T>(
88
): [T[], (filter: string) => void] {
99
const [filteredData, setFilteredData] = React.useState(allData)
1010
const [filteredDataCache, setFilteredDataCache] = React.useState<
11-
Record<string, T[]>
12-
>({ '': allData })
11+
Map<string, T[]>
12+
>(new Map([['', allData]]))
1313
const [fifoCache, setFifoCache] = React.useState([''])
1414

1515
const setFilter = (filter: string) => {
1616
// If already existing in cache just return the existing sort
17-
if (filteredDataCache[filter] != null) {
18-
setFilteredData(filteredDataCache[filter])
17+
const filteredDataCacheForFilter = filteredDataCache.get(filter)
18+
if (filteredDataCacheForFilter != null) {
19+
setFilteredData(filteredDataCacheForFilter)
1920
} else {
2021
// Create the new filtered Array
2122
const newFilteredData = allData.filter((item, index) =>
2223
filterData(filter, item, index)
2324
)
2425
// Updated the cache
25-
filteredDataCache[filter] = newFilteredData
26+
filteredDataCache.set(filter, newFilteredData)
2627
fifoCache.unshift(filter)
2728
// Check if over maximum cache size
2829
if (fifoCache.length >= CACHE_MAX_SIZE) {
2930
const cacheKey = fifoCache.pop()
30-
// @ts-expect-error
31-
delete filteredDataCache[cacheKey]
31+
if (cacheKey != null) {
32+
filteredDataCache.delete(cacheKey)
33+
}
3234
}
3335
// Update state
3436
setFifoCache(fifoCache)

src/plugins/gui/amountQuotePlugin.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ export const createPriorityArray = (
799799
const priorityArray: PriorityArray = []
800800
if (providerPriorityMap != null) {
801801
// Create a copy of the providerPriorityMap to avoid modifying the original
802-
const priorityMapCopy = { ...providerPriorityMap }
802+
const priorityMapCopy = new Map(Object.entries(providerPriorityMap))
803803

804804
// Create a separate object for preferred providers
805805
const preferredProviders: Record<string, boolean> = {}
@@ -812,7 +812,7 @@ export const createPriorityArray = (
812812
preferredProviders[provider] = true
813813
// Remove from the regular priority map if it exists there, so they
814814
// are omitted from normal ordering logic
815-
delete priorityMapCopy[provider]
815+
priorityMapCopy.delete(provider)
816816
}
817817
}
818818
}
@@ -824,8 +824,11 @@ export const createPriorityArray = (
824824

825825
// Process the remaining providers by priority
826826
const tempPriorityList: Array<{ pluginId: string; priority: number }> = []
827-
for (const pluginId in priorityMapCopy) {
828-
tempPriorityList.push({ pluginId, priority: priorityMapCopy[pluginId] })
827+
for (const pluginId of priorityMapCopy.keys()) {
828+
tempPriorityList.push({
829+
pluginId,
830+
priority: priorityMapCopy.get(pluginId) ?? 0
831+
})
829832
}
830833
tempPriorityList.sort((a, b) => b.priority - a.priority)
831834
let currentPriority = Infinity

src/plugins/stake-plugins/metadataCache.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ export interface MetadataCacheEntry {
77
metadata: EdgeMetadata
88
}
99

10-
export type MetadataCache = Record<string, MetadataCacheEntry[]>
11-
12-
export const stakeMetadataCache: MetadataCache = {}
10+
export const stakeMetadataCache = new Map<string, MetadataCacheEntry[]>()
1311

1412
export const cacheTxMetadata = (
1513
txid: string,
@@ -18,6 +16,10 @@ export const cacheTxMetadata = (
1816
) => {
1917
// Add metadata cache entry:
2018
const key = txid.toLowerCase()
21-
stakeMetadataCache[key] = stakeMetadataCache[key] ?? []
22-
stakeMetadataCache[key].push({ currencyCode, metadata })
19+
const cacheEntries = stakeMetadataCache.get(key)
20+
if (cacheEntries == null) {
21+
stakeMetadataCache.set(key, [{ currencyCode, metadata }])
22+
} else {
23+
cacheEntries.push({ currencyCode, metadata })
24+
}
2325
}

src/util/FioAddressUtils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ export const updatePubAddressesForFioAddress = async (
419419
error?: Error | FioError | null
420420
}> => {
421421
if (!fioWallet) throw new Error(lstrings.fio_connect_wallets_err)
422-
const connectedWalletsFromDisklet = await getConnectedWalletsForFioAddress(
422+
let connectedWalletsFromDisklet = await getConnectedWalletsForFioAddress(
423423
fioWallet,
424424
fioAddress
425425
)
@@ -447,7 +447,8 @@ export const updatePubAddressesForFioAddress = async (
447447
if (pubAddressFromStore !== publicAddress) {
448448
publicAddress = pubAddressFromStore
449449
}
450-
delete connectedWalletsFromDisklet[fullCurrencyCode]
450+
const { [fullCurrencyCode]: _, ...rest } = connectedWalletsFromDisklet
451+
connectedWalletsFromDisklet = rest
451452
}
452453
iteration.ccWalletArray.push({
453454
fullCurrencyCode,

src/util/exchangeRates.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ export type RatesParams = ReturnType<typeof asRatesParams>
4545
type RateMap = Record<string, number | null>
4646

4747
const rateMap: RateMap = {}
48-
const resolverMap: Record<
48+
const resolverMap = new Map<
4949
string,
5050
{
5151
resolvers: Function[]
5252
rateQueueEntry: RatesParams
5353
}
54-
> = {}
54+
>()
5555
let inQuery = false
5656

5757
let numDoQuery = 0
@@ -62,7 +62,7 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
6262
const groupedParams = new Map<string, RatesParams>()
6363

6464
// Fill the query up to RATES_SERVER_MAX_QUERY_SIZE entries
65-
const values = Object.values(resolverMap)
65+
const values = resolverMap.values()
6666
for (const value of values) {
6767
const map = groupedParams.get(value.rateQueueEntry.targetFiat)
6868
if (map == null) {
@@ -92,9 +92,10 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
9292
const cleanedRates = asRatesParams(json)
9393

9494
// Since the requests are USD only, we'll match up the original requests to what we've received
95-
for (const [key, { rateQueueEntry, resolvers }] of Object.entries(
96-
resolverMap
97-
)) {
95+
for (const [
96+
key,
97+
{ rateQueueEntry, resolvers }
98+
] of resolverMap.entries()) {
9899
// Match crypto/fiat requests
99100
if (rateQueueEntry.crypto.length === 1) {
100101
const cryptoToMatch = rateQueueEntry.crypto[0]
@@ -119,13 +120,13 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
119120
if (crypto?.rate != null && fiat?.rate != null) {
120121
const rate = crypto.rate / fiat.rate
121122
rateMap[key] = rate
122-
if (resolverMap[key] == null) {
123+
if (resolverMap.get(key) == null) {
123124
clog(`${n} oops`)
124125
continue
125126
}
126127

127128
clog(`${n} deleting ${key}`)
128-
delete resolverMap[key]
129+
resolverMap.delete(key)
129130
if (resolvers.length) {
130131
resolvers.forEach((r, i) => {
131132
r(rate)
@@ -155,13 +156,13 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
155156
if (fromFiat?.rate != null && toFiat?.rate != null) {
156157
const rate = fromFiat.rate / toFiat.rate
157158
rateMap[key] = rate
158-
if (resolverMap[key] == null) {
159+
if (resolverMap.get(key) == null) {
159160
clog(`${n} oops`)
160161
continue
161162
}
162163

163164
clog(`${n} deleting ${key}`)
164-
delete resolverMap[key]
165+
resolverMap.delete(key)
165166
if (resolvers.length) {
166167
resolvers.forEach((r, i) => {
167168
r(rate)
@@ -179,16 +180,17 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
179180
console.warn(`Error querying rates server ${e.message}`)
180181
}
181182
// Resolve all the promises with value 0
182-
Object.entries(resolverMap).forEach(entry => {
183+
const resolversMapEntries = [...resolverMap.entries()]
184+
resolversMapEntries.forEach(entry => {
183185
const [pairDate, value] = entry
184186
clog(`${n} throw deleting ${pairDate}`)
185-
delete resolverMap[pairDate]
187+
resolverMap.delete(pairDate)
186188
value.resolvers.forEach(resolve => resolve(0))
187189
})
188190
}
189191
}
190192

191-
if (Object.keys(resolverMap).length > 0) {
193+
if (resolverMap.size > 0) {
192194
clog(`${n} Calling doQuery again`)
193195
await doQuery(doFetch)
194196
} else {
@@ -204,16 +206,17 @@ const addToQueue = (
204206
maxQuerySize: number,
205207
doFetch?: EdgeFetchFunction
206208
) => {
207-
if (resolverMap[rateKey] == null) {
209+
const rateKeyResolver = resolverMap.get(rateKey)
210+
if (rateKeyResolver == null) {
208211
// Create a new entry in the map for this pair/date
209212
clog(`adding ${rateKey}`)
210-
resolverMap[rateKey] = {
213+
resolverMap.set(rateKey, {
211214
resolvers: [resolve],
212215
rateQueueEntry: entry
213-
}
216+
})
214217
} else {
215218
// Add a resolver to existing pair/date entry
216-
resolverMap[rateKey].resolvers.push(resolve)
219+
rateKeyResolver.resolvers.push(resolve)
217220
return
218221
}
219222
if (!inQuery) {

0 commit comments

Comments
 (0)