fix(app): failed to create store
This commit is contained in:
39
packages/app/src/context/global-sync/child-store.test.ts
Normal file
39
packages/app/src/context/global-sync/child-store.test.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { describe, expect, test } from "bun:test"
|
||||||
|
import { createRoot, getOwner } from "solid-js"
|
||||||
|
import { createStore } from "solid-js/store"
|
||||||
|
import type { State } from "./types"
|
||||||
|
import { createChildStoreManager } from "./child-store"
|
||||||
|
|
||||||
|
const child = () => createStore({} as State)
|
||||||
|
|
||||||
|
describe("createChildStoreManager", () => {
|
||||||
|
test("does not evict the active directory during mark", () => {
|
||||||
|
const owner = createRoot((dispose) => {
|
||||||
|
const current = getOwner()
|
||||||
|
dispose()
|
||||||
|
return current
|
||||||
|
})
|
||||||
|
if (!owner) throw new Error("owner required")
|
||||||
|
|
||||||
|
const manager = createChildStoreManager({
|
||||||
|
owner,
|
||||||
|
markStats() {},
|
||||||
|
incrementEvictions() {},
|
||||||
|
isBooting: () => false,
|
||||||
|
isLoadingSessions: () => false,
|
||||||
|
onBootstrap() {},
|
||||||
|
onDispose() {},
|
||||||
|
})
|
||||||
|
|
||||||
|
Array.from({ length: 30 }, (_, index) => `/pinned-${index}`).forEach((directory) => {
|
||||||
|
manager.children[directory] = child()
|
||||||
|
manager.pin(directory)
|
||||||
|
})
|
||||||
|
|
||||||
|
const directory = "/active"
|
||||||
|
manager.children[directory] = child()
|
||||||
|
manager.mark(directory)
|
||||||
|
|
||||||
|
expect(manager.children[directory]).toBeDefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -36,7 +36,7 @@ export function createChildStoreManager(input: {
|
|||||||
const mark = (directory: string) => {
|
const mark = (directory: string) => {
|
||||||
if (!directory) return
|
if (!directory) return
|
||||||
lifecycle.set(directory, { lastAccessAt: Date.now() })
|
lifecycle.set(directory, { lastAccessAt: Date.now() })
|
||||||
runEviction()
|
runEviction(directory)
|
||||||
}
|
}
|
||||||
|
|
||||||
const pin = (directory: string) => {
|
const pin = (directory: string) => {
|
||||||
@@ -106,7 +106,7 @@ export function createChildStoreManager(input: {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
function runEviction() {
|
function runEviction(skip?: string) {
|
||||||
const stores = Object.keys(children)
|
const stores = Object.keys(children)
|
||||||
if (stores.length === 0) return
|
if (stores.length === 0) return
|
||||||
const list = pickDirectoriesToEvict({
|
const list = pickDirectoriesToEvict({
|
||||||
@@ -116,7 +116,7 @@ export function createChildStoreManager(input: {
|
|||||||
max: MAX_DIR_STORES,
|
max: MAX_DIR_STORES,
|
||||||
ttl: DIR_IDLE_TTL_MS,
|
ttl: DIR_IDLE_TTL_MS,
|
||||||
now: Date.now(),
|
now: Date.now(),
|
||||||
})
|
}).filter((directory) => directory !== skip)
|
||||||
if (list.length === 0) return
|
if (list.length === 0) return
|
||||||
for (const directory of list) {
|
for (const directory of list) {
|
||||||
if (!disposeDirectory(directory)) continue
|
if (!disposeDirectory(directory)) continue
|
||||||
|
|||||||
Reference in New Issue
Block a user