| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import type { Accessor } from "solid-js"
- export function ensureSessionKey(key: string, touch: (key: string) => void, seed: (key: string) => void) {
- touch(key)
- seed(key)
- return key
- }
- export function createSessionKeyReader(sessionKey: string | Accessor<string>, ensure: (key: string) => void) {
- const key = typeof sessionKey === "function" ? sessionKey : () => sessionKey
- return () => {
- const value = key()
- ensure(value)
- return value
- }
- }
- export function pruneSessionKeys(input: {
- keep?: string
- max: number
- used: Map<string, number>
- view: string[]
- tabs: string[]
- }) {
- if (!input.keep) return []
- const keys = new Set<string>([...input.view, ...input.tabs])
- if (keys.size <= input.max) return []
- const score = (key: string) => {
- if (key === input.keep) return Number.MAX_SAFE_INTEGER
- return input.used.get(key) ?? 0
- }
- return Array.from(keys)
- .sort((a, b) => score(b) - score(a))
- .slice(input.max)
- }
|