{"version":3,"file":"tauri-persistence.cjs","sources":["../../src/tauri-persistence.ts"],"sourcesContent":["import {\n  DEFAULT_APPLIED_TX_PRUNE_MAX_AGE_SECONDS,\n  DEFAULT_APPLIED_TX_PRUNE_MAX_ROWS,\n  SingleProcessCoordinator,\n  createSQLiteCorePersistenceAdapter,\n} from '@tanstack/db-sqlite-persistence-core'\nimport { TauriSQLiteDriver } from './tauri-sql-driver'\nimport type {\n  PersistedCollectionCoordinator,\n  PersistedCollectionMode,\n  PersistedCollectionPersistence,\n  SQLiteCoreAdapterOptions,\n  SQLiteDriver,\n} from '@tanstack/db-sqlite-persistence-core'\nimport type { TauriSQLiteDatabaseLike } from './tauri-sql-driver'\n\nexport type { TauriSQLiteDatabaseLike } from './tauri-sql-driver'\n\ntype TauriSQLiteCoreSchemaMismatchPolicy =\n  | `sync-present-reset`\n  | `sync-absent-error`\n  | `reset`\n\nexport type TauriSQLiteSchemaMismatchPolicy =\n  | TauriSQLiteCoreSchemaMismatchPolicy\n  | `throw`\n\ntype TauriSQLitePersistenceBaseOptions = Omit<\n  SQLiteCoreAdapterOptions,\n  `driver` | `schemaVersion` | `schemaMismatchPolicy`\n> & {\n  database: TauriSQLiteDatabaseLike\n  coordinator?: PersistedCollectionCoordinator\n  schemaMismatchPolicy?: TauriSQLiteSchemaMismatchPolicy\n}\n\nexport type TauriSQLitePersistenceOptions = TauriSQLitePersistenceBaseOptions\n\nconst tauriDriverCache = new WeakMap<\n  TauriSQLiteDatabaseLike,\n  TauriSQLiteDriver\n>()\n\nfunction normalizeSchemaMismatchPolicy(\n  policy: TauriSQLiteSchemaMismatchPolicy,\n): TauriSQLiteCoreSchemaMismatchPolicy {\n  if (policy === `throw`) {\n    return `sync-absent-error`\n  }\n\n  return policy\n}\n\nfunction resolveSchemaMismatchPolicy(\n  explicitPolicy: TauriSQLiteSchemaMismatchPolicy | undefined,\n  mode: PersistedCollectionMode,\n): TauriSQLiteCoreSchemaMismatchPolicy {\n  if (explicitPolicy) {\n    return normalizeSchemaMismatchPolicy(explicitPolicy)\n  }\n\n  return mode === `sync-present` ? `sync-present-reset` : `sync-absent-error`\n}\n\nfunction createAdapterCacheKey(\n  schemaMismatchPolicy: TauriSQLiteCoreSchemaMismatchPolicy,\n  schemaVersion: number | undefined,\n): string {\n  const schemaVersionKey =\n    schemaVersion === undefined ? `schema:default` : `schema:${schemaVersion}`\n  return `${schemaMismatchPolicy}|${schemaVersionKey}`\n}\n\nfunction createInternalSQLiteDriver(\n  options: TauriSQLitePersistenceOptions,\n): SQLiteDriver {\n  const cachedDriver = tauriDriverCache.get(options.database)\n  if (cachedDriver) {\n    return cachedDriver\n  }\n\n  const driver = new TauriSQLiteDriver({\n    database: options.database,\n  })\n  tauriDriverCache.set(options.database, driver)\n  return driver\n}\n\nfunction resolveAdapterBaseOptions(\n  options: TauriSQLitePersistenceOptions,\n): Omit<\n  SQLiteCoreAdapterOptions,\n  `driver` | `schemaVersion` | `schemaMismatchPolicy`\n> {\n  return {\n    appliedTxPruneMaxRows:\n      options.appliedTxPruneMaxRows ?? DEFAULT_APPLIED_TX_PRUNE_MAX_ROWS,\n    appliedTxPruneMaxAgeSeconds:\n      options.appliedTxPruneMaxAgeSeconds ??\n      DEFAULT_APPLIED_TX_PRUNE_MAX_AGE_SECONDS,\n    pullSinceReloadThreshold: options.pullSinceReloadThreshold,\n  }\n}\n\nexport function createTauriSQLitePersistence(\n  options: TauriSQLitePersistenceOptions,\n): PersistedCollectionPersistence {\n  const { coordinator, schemaMismatchPolicy } = options\n  const driver = createInternalSQLiteDriver(options)\n  const adapterBaseOptions = resolveAdapterBaseOptions(options)\n  const resolvedCoordinator = coordinator ?? new SingleProcessCoordinator()\n  const adapterCache = new Map<\n    string,\n    ReturnType<typeof createSQLiteCorePersistenceAdapter>\n  >()\n\n  const getAdapterForCollection = (\n    mode: PersistedCollectionMode,\n    schemaVersion: number | undefined,\n  ) => {\n    const resolvedSchemaMismatchPolicy = resolveSchemaMismatchPolicy(\n      schemaMismatchPolicy,\n      mode,\n    )\n    const cacheKey = createAdapterCacheKey(\n      resolvedSchemaMismatchPolicy,\n      schemaVersion,\n    )\n    const cachedAdapter = adapterCache.get(cacheKey)\n    if (cachedAdapter) {\n      return cachedAdapter\n    }\n\n    const adapter = createSQLiteCorePersistenceAdapter({\n      ...adapterBaseOptions,\n      driver,\n      schemaMismatchPolicy: resolvedSchemaMismatchPolicy,\n      ...(schemaVersion === undefined ? {} : { schemaVersion }),\n    })\n    adapterCache.set(cacheKey, adapter)\n    return adapter\n  }\n\n  const createCollectionPersistence = (\n    mode: PersistedCollectionMode,\n    schemaVersion: number | undefined,\n  ): PersistedCollectionPersistence => ({\n    adapter: getAdapterForCollection(mode, schemaVersion),\n    coordinator: resolvedCoordinator,\n  })\n\n  const defaultPersistence = createCollectionPersistence(\n    `sync-absent`,\n    undefined,\n  )\n\n  return {\n    ...defaultPersistence,\n    resolvePersistenceForCollection: ({ mode, schemaVersion }) =>\n      createCollectionPersistence(mode, schemaVersion),\n    resolvePersistenceForMode: (mode) =>\n      createCollectionPersistence(mode, undefined),\n  }\n}\n"],"names":["TauriSQLiteDriver","DEFAULT_APPLIED_TX_PRUNE_MAX_ROWS","DEFAULT_APPLIED_TX_PRUNE_MAX_AGE_SECONDS","SingleProcessCoordinator","createSQLiteCorePersistenceAdapter"],"mappings":";;;;AAsCA,MAAM,uCAAuB,QAAA;AAK7B,SAAS,8BACP,QACqC;AACrC,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,4BACP,gBACA,MACqC;AACrC,MAAI,gBAAgB;AAClB,WAAO,8BAA8B,cAAc;AAAA,EACrD;AAEA,SAAO,SAAS,iBAAiB,uBAAuB;AAC1D;AAEA,SAAS,sBACP,sBACA,eACQ;AACR,QAAM,mBACJ,kBAAkB,SAAY,mBAAmB,UAAU,aAAa;AAC1E,SAAO,GAAG,oBAAoB,IAAI,gBAAgB;AACpD;AAEA,SAAS,2BACP,SACc;AACd,QAAM,eAAe,iBAAiB,IAAI,QAAQ,QAAQ;AAC1D,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IAAIA,iCAAkB;AAAA,IACnC,UAAU,QAAQ;AAAA,EAAA,CACnB;AACD,mBAAiB,IAAI,QAAQ,UAAU,MAAM;AAC7C,SAAO;AACT;AAEA,SAAS,0BACP,SAIA;AACA,SAAO;AAAA,IACL,uBACE,QAAQ,yBAAyBC,wBAAAA;AAAAA,IACnC,6BACE,QAAQ,+BACRC,wBAAAA;AAAAA,IACF,0BAA0B,QAAQ;AAAA,EAAA;AAEtC;AAEO,SAAS,6BACd,SACgC;AAChC,QAAM,EAAE,aAAa,qBAAA,IAAyB;AAC9C,QAAM,SAAS,2BAA2B,OAAO;AACjD,QAAM,qBAAqB,0BAA0B,OAAO;AAC5D,QAAM,sBAAsB,eAAe,IAAIC,iDAAA;AAC/C,QAAM,mCAAmB,IAAA;AAKzB,QAAM,0BAA0B,CAC9B,MACA,kBACG;AACH,UAAM,+BAA+B;AAAA,MACnC;AAAA,MACA;AAAA,IAAA;AAEF,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,IAAA;AAEF,UAAM,gBAAgB,aAAa,IAAI,QAAQ;AAC/C,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,UAAUC,wBAAAA,mCAAmC;AAAA,MACjD,GAAG;AAAA,MACH;AAAA,MACA,sBAAsB;AAAA,MACtB,GAAI,kBAAkB,SAAY,CAAA,IAAK,EAAE,cAAA;AAAA,IAAc,CACxD;AACD,iBAAa,IAAI,UAAU,OAAO;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,8BAA8B,CAClC,MACA,mBACoC;AAAA,IACpC,SAAS,wBAAwB,MAAM,aAAa;AAAA,IACpD,aAAa;AAAA,EAAA;AAGf,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,EAAA;AAGF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iCAAiC,CAAC,EAAE,MAAM,oBACxC,4BAA4B,MAAM,aAAa;AAAA,IACjD,2BAA2B,CAAC,SAC1B,4BAA4B,MAAM,MAAS;AAAA,EAAA;AAEjD;;"}