MCPcopy Create free account
hub / github.com/tinyplex/tinybase / createJsonPersister

Function createJsonPersister

src/persisters/common/database/json.ts:18–99  ·  view source on GitHub ↗
(
  store: PersistedStore<Persist>,
  executeCommand: DatabaseExecuteCommand,
  addPersisterListener: (
    listener: PersisterListener<Persist>,
  ) => ListeningHandle | Promise<ListeningHandle>,
  delPersisterListener: (
    listeningHandle: ListeningHandle,
  ) => void | Promise<void>,
  onIgnoredError: ((error: any) => void) | undefined,
  extraDestroy: () => void,
  persist: Persist,
  [storeTableName, storeIdColumnName, storeColumnName]: DefaultedJsonConfig,
  managedTableNames: string[],
  querySchema: QuerySchema,
  thing: any,
  getThing: string,
  columnType: string,
  upsert?: Upsert,
)

Source from the content-addressed store, hash-verified

16import type {DefaultedJsonConfig} from './config.ts';
17
18export const createJsonPersister = <
19 ListeningHandle,
20 Persist extends Persists = Persists.StoreOnly,
21>(
22 store: PersistedStore<Persist>,
23 executeCommand: DatabaseExecuteCommand,
24 addPersisterListener: (
25 listener: PersisterListener<Persist>,
26 ) => ListeningHandle | Promise<ListeningHandle>,
27 delPersisterListener: (
28 listeningHandle: ListeningHandle,
29 ) => void | Promise<void>,
30 onIgnoredError: ((error: any) => void) | undefined,
31 extraDestroy: () => void,
32 persist: Persist,
33 [storeTableName, storeIdColumnName, storeColumnName]: DefaultedJsonConfig,
34 managedTableNames: string[],
35 querySchema: QuerySchema,
36 thing: any,
37 getThing: string,
38 columnType: string,
39 upsert?: Upsert,
40): Persister<Persist> => {
41 const [refreshSchema, loadTable, saveTable, transaction] =
42 getCommandFunctions(
43 executeCommand,
44 managedTableNames,
45 querySchema,
46 onIgnoredError,
47 columnType,
48 upsert,
49 );
50
51 const getPersisted = (): Promise<PersistedContent<Persist>> =>
52 transaction(async () => {
53 await refreshSchema();
54 return jsonParseWithUndefined(
55 ((await loadTable(storeTableName, storeIdColumnName))[SINGLE_ROW_ID]?.[
56 storeColumnName
57 ] as string) ?? 'null',
58 );
59 });
60
61 const setPersisted = (
62 getContent: () => PersistedContent<Persist>,
63 ): Promise<void> =>
64 transaction(async () => {
65 await refreshSchema();
66 await saveTable(
67 storeTableName,
68 storeIdColumnName,
69 {
70 [SINGLE_ROW_ID]: {
71 [storeColumnName]: jsonStringWithUndefined(getContent() ?? null),
72 },
73 },
74 true,
75 true,

Callers

nothing calls this directly

Calls 2

getCommandFunctionsFunction · 0.90
createCustomPersisterFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…