Skip to content

Commit feeb6c5

Browse files
committed
refactor: extract flagged load facade
1 parent 401f21c commit feeb6c5

3 files changed

Lines changed: 71 additions & 5 deletions

File tree

lib/storage.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
clearFlaggedAccountsEntry,
3636
saveFlaggedAccountsEntry,
3737
} from "./storage/flagged-entry.js";
38+
import { loadFlaggedAccountsEntry } from "./storage/flagged-load-entry.js";
3839
import { normalizeFlaggedStorage } from "./storage/flagged-storage.js";
3940
import {
4041
clearFlaggedAccountsOnDisk,
@@ -1869,17 +1870,17 @@ export async function clearAccounts(): Promise<void> {
18691870
}
18701871

18711872
export async function loadFlaggedAccounts(): Promise<FlaggedAccountStorageV1> {
1872-
const path = getFlaggedAccountsPath();
1873-
return loadFlaggedAccountsState({
1874-
path,
1875-
legacyPath: getLegacyFlaggedAccountsPath(),
1876-
resetMarkerPath: getIntentionalResetMarkerPath(path),
1873+
return loadFlaggedAccountsEntry({
1874+
getFlaggedAccountsPath,
1875+
getLegacyFlaggedAccountsPath,
1876+
getIntentionalResetMarkerPath,
18771877
normalizeFlaggedStorage: (data) =>
18781878
normalizeFlaggedStorage(data, {
18791879
isRecord,
18801880
now: () => Date.now(),
18811881
}),
18821882
saveFlaggedAccounts,
1883+
loadFlaggedAccountsState,
18831884
logError: (message, details) => {
18841885
log.error(message, details);
18851886
},

lib/storage/flagged-load-entry.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import type { FlaggedAccountStorageV1 } from "../storage.js";
2+
3+
export async function loadFlaggedAccountsEntry(params: {
4+
getFlaggedAccountsPath: () => string;
5+
getLegacyFlaggedAccountsPath: () => string;
6+
getIntentionalResetMarkerPath: (path: string) => string;
7+
normalizeFlaggedStorage: (data: unknown) => FlaggedAccountStorageV1;
8+
saveFlaggedAccounts: (storage: FlaggedAccountStorageV1) => Promise<void>;
9+
loadFlaggedAccountsState: (args: {
10+
path: string;
11+
legacyPath: string;
12+
resetMarkerPath: string;
13+
normalizeFlaggedStorage: (data: unknown) => FlaggedAccountStorageV1;
14+
saveFlaggedAccounts: (storage: FlaggedAccountStorageV1) => Promise<void>;
15+
logError: (message: string, details: Record<string, unknown>) => void;
16+
logInfo: (message: string, details: Record<string, unknown>) => void;
17+
}) => Promise<FlaggedAccountStorageV1>;
18+
logError: (message: string, details: Record<string, unknown>) => void;
19+
logInfo: (message: string, details: Record<string, unknown>) => void;
20+
}): Promise<FlaggedAccountStorageV1> {
21+
const path = params.getFlaggedAccountsPath();
22+
return params.loadFlaggedAccountsState({
23+
path,
24+
legacyPath: params.getLegacyFlaggedAccountsPath(),
25+
resetMarkerPath: params.getIntentionalResetMarkerPath(path),
26+
normalizeFlaggedStorage: params.normalizeFlaggedStorage,
27+
saveFlaggedAccounts: params.saveFlaggedAccounts,
28+
logError: params.logError,
29+
logInfo: params.logInfo,
30+
});
31+
}

test/flagged-load-entry.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { describe, expect, it, vi } from "vitest";
2+
import { loadFlaggedAccountsEntry } from "../lib/storage/flagged-load-entry.js";
3+
4+
describe("flagged load entry", () => {
5+
it("passes paths and deps through to flagged load state helper", async () => {
6+
const loadFlaggedAccountsState = vi.fn(async () => ({
7+
version: 1,
8+
accounts: [],
9+
}));
10+
const saveFlaggedAccounts = vi.fn(async () => undefined);
11+
12+
const result = await loadFlaggedAccountsEntry({
13+
getFlaggedAccountsPath: () => "/tmp/flagged.json",
14+
getLegacyFlaggedAccountsPath: () => "/tmp/legacy-flagged.json",
15+
getIntentionalResetMarkerPath: (path) => `${path}.reset-intent`,
16+
normalizeFlaggedStorage: vi.fn((data) => data as never),
17+
saveFlaggedAccounts,
18+
loadFlaggedAccountsState,
19+
logError: vi.fn(),
20+
logInfo: vi.fn(),
21+
});
22+
23+
expect(loadFlaggedAccountsState).toHaveBeenCalledWith({
24+
path: "/tmp/flagged.json",
25+
legacyPath: "/tmp/legacy-flagged.json",
26+
resetMarkerPath: "/tmp/flagged.json.reset-intent",
27+
normalizeFlaggedStorage: expect.any(Function),
28+
saveFlaggedAccounts,
29+
logError: expect.any(Function),
30+
logInfo: expect.any(Function),
31+
});
32+
expect(result).toEqual({ version: 1, accounts: [] });
33+
});
34+
});

0 commit comments

Comments
 (0)