Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export async function createPersistedTodoCollection(): Promise<PersistedTodosHan
dbName: `tanstack-db-demo`,
})

const persistence = createBrowserWASQLitePersistence<PersistedTodo, string>({
const persistence = createBrowserWASQLitePersistence({
database,
coordinator,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ function createPersistedCollection<T extends PersistableRow>(
id: string,
syncMode: `eager` | `on-demand`,
): PersistedCollectionHarness<T> {
const persistence = createBrowserWASQLitePersistence<T, string | number>({
const persistence = createBrowserWASQLitePersistence({
database,
})
let seedTxSequence = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,7 @@ type CollectionState = {
}

// Adapter with pullSince support
type AdapterWithPullSince = PersistenceAdapter<
Record<string, unknown>,
string | number
> & {
type AdapterWithPullSince = PersistenceAdapter & {
pullSince?: (
collectionId: string,
fromRowVersion: number,
Expand Down
26 changes: 6 additions & 20 deletions packages/browser-db-sqlite-persistence/src/browser-persistence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,24 +89,16 @@ function resolveAdapterBaseOptions(
* many collections on the same database. This is single-tab wiring using
* SingleProcessCoordinator semantics (no election required).
*/
export function createBrowserWASQLitePersistence<
T extends object,
TKey extends string | number = string | number,
>(
export function createBrowserWASQLitePersistence(
options: BrowserWASQLitePersistenceOptions,
): PersistedCollectionPersistence<T, TKey> {
): PersistedCollectionPersistence {
const { coordinator, schemaMismatchPolicy } = options
const driver = createInternalSQLiteDriver(options)
const adapterBaseOptions = resolveAdapterBaseOptions(options)
const resolvedCoordinator = coordinator ?? new SingleProcessCoordinator()
const adapterCache = new Map<
string,
ReturnType<
typeof createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>
>
ReturnType<typeof createSQLiteCorePersistenceAdapter>
>()

const getAdapterForCollection = (
Expand All @@ -126,10 +118,7 @@ export function createBrowserWASQLitePersistence<
return cachedAdapter
}

const adapter = createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>({
const adapter = createSQLiteCorePersistenceAdapter({
...adapterBaseOptions,
driver,
schemaMismatchPolicy: resolvedSchemaMismatchPolicy,
Expand All @@ -149,11 +138,8 @@ export function createBrowserWASQLitePersistence<
const createCollectionPersistence = (
mode: PersistedCollectionMode,
schemaVersion: number | undefined,
): PersistedCollectionPersistence<T, TKey> => ({
adapter: getAdapterForCollection(
mode,
schemaVersion,
) as unknown as PersistedCollectionPersistence<T, TKey>[`adapter`],
): PersistedCollectionPersistence => ({
adapter: getAdapterForCollection(mode, schemaVersion),
coordinator: resolvedCoordinator,
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,10 +171,7 @@ function cleanupGlobals(): void {
// Adapter stub
// ---------------------------------------------------------------------------

function createStubAdapter(): PersistenceAdapter<
Record<string, unknown>,
string | number
> & {
function createStubAdapter(): PersistenceAdapter & {
pullSince: (
collectionId: string,
fromRowVersion: number,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ runRuntimePersistenceContractSuite(
{
createDatabaseHarness: createRuntimeDatabaseHarness,
createAdapter: (driver) =>
createBrowserWASQLitePersistence<RuntimePersistenceContractTodo, string>({
createBrowserWASQLitePersistence({
database: (driver as BrowserWASQLiteDriver).getDatabase(),
}).adapter,
createPersistence: (driver, coordinator) =>
createBrowserWASQLitePersistence<RuntimePersistenceContractTodo, string>({
createBrowserWASQLitePersistence({
database: (driver as BrowserWASQLiteDriver).getDatabase(),
coordinator,
}),
Expand Down Expand Up @@ -98,10 +98,7 @@ describe(`browser wa-sqlite persistence helpers`, () => {
const firstDatabase = createWASQLiteTestDatabase({ filename: dbPath })

try {
const firstPersistence = createBrowserWASQLitePersistence<
RuntimePersistenceContractTodo,
string
>({
const firstPersistence = createBrowserWASQLitePersistence({
database: firstDatabase,
})

Expand Down Expand Up @@ -141,10 +138,7 @@ describe(`browser wa-sqlite persistence helpers`, () => {

const secondDatabase = createWASQLiteTestDatabase({ filename: dbPath })
try {
const secondPersistence = createBrowserWASQLitePersistence<
RuntimePersistenceContractTodo,
string
>({
const secondPersistence = createBrowserWASQLitePersistence({
database: secondDatabase,
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,7 @@ it(`works without browser election primitives`, async () => {
}
}

const persistence = createBrowserWASQLitePersistence<{
id: string
title: string
score: number
}>({
const persistence = createBrowserWASQLitePersistence({
database,
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import { createCapacitorPersistedCollectionHarnessConfig } from './shared/capaci
import { registerPersistedCollectionConformanceSuite } from './shared/register-persisted-collection-conformance-suite'
import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core'

type CapacitorPersistenceFactory = <T extends { id: string }>(
type CapacitorPersistenceFactory = (
database: ReturnType<typeof createCapacitorSQLiteTestDatabase>,
) => PersistedCollectionPersistence<T, string | number>
) => PersistedCollectionPersistence

export function runCapacitorPersistedCollectionConformanceSuite(
suiteName: string,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ type PersistedTransactionHandle = {
}
}

type PersistenceFactory<TDatabase> = <T extends PersistableRow>(
type PersistenceFactory<TDatabase> = (
database: TDatabase,
) => PersistedCollectionPersistence<T, string | number>
) => PersistedCollectionPersistence

type DatabaseLike = {
close: () => Promise<void>
Expand All @@ -41,7 +41,7 @@ function createPersistedCollection<T extends PersistableRow, TDatabase>(
syncMode: `eager` | `on-demand`,
createPersistence: PersistenceFactory<TDatabase>,
): PersistedCollectionHarness<T> {
const persistence = createPersistence<T>(database)
const persistence = createPersistence(database)
let seedTxSequence = 0

const seedPersisted = async (rows: Array<T>): Promise<void> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,24 +87,16 @@ function resolveAdapterBaseOptions(
}
}

export function createCapacitorSQLitePersistence<
T extends object,
TKey extends string | number = string | number,
>(
export function createCapacitorSQLitePersistence(
options: CapacitorSQLitePersistenceOptions,
): PersistedCollectionPersistence<T, TKey> {
): PersistedCollectionPersistence {
const { coordinator, schemaMismatchPolicy } = options
const driver = createInternalSQLiteDriver(options)
const adapterBaseOptions = resolveAdapterBaseOptions(options)
const resolvedCoordinator = coordinator ?? new SingleProcessCoordinator()
const adapterCache = new Map<
string,
ReturnType<
typeof createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>
>
ReturnType<typeof createSQLiteCorePersistenceAdapter>
>()

const getAdapterForCollection = (
Expand All @@ -124,10 +116,7 @@ export function createCapacitorSQLitePersistence<
return cachedAdapter
}

const adapter = createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>({
const adapter = createSQLiteCorePersistenceAdapter({
...adapterBaseOptions,
driver,
schemaMismatchPolicy: resolvedSchemaMismatchPolicy,
Expand All @@ -140,11 +129,8 @@ export function createCapacitorSQLitePersistence<
const createCollectionPersistence = (
mode: PersistedCollectionMode,
schemaVersion: number | undefined,
): PersistedCollectionPersistence<T, TKey> => ({
adapter: getAdapterForCollection(
mode,
schemaVersion,
) as unknown as PersistedCollectionPersistence<T, TKey>[`adapter`],
): PersistedCollectionPersistence => ({
adapter: getAdapterForCollection(mode, schemaVersion),
coordinator: resolvedCoordinator,
})

Expand Down
9 changes: 3 additions & 6 deletions packages/capacitor-db-sqlite-persistence/src/capacitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,8 @@ export type CapacitorSQLiteSchemaMismatchPolicy =
export type { CapacitorSQLiteDatabaseLike } from './capacitor-persistence'
export type { SQLiteDBConnection } from './capacitor-persistence'

export function createCapacitorSQLitePersistence<
T extends object,
TKey extends string | number = string | number,
>(
export function createCapacitorSQLitePersistence(
options: CapacitorSQLitePersistenceOptions,
): PersistedCollectionPersistence<T, TKey> {
return createPersistence<T, TKey>(options)
): PersistedCollectionPersistence {
return createPersistence(options)
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ it(`persists data across app restart (close and reopen)`, async () => {
const collectionId = `todos-restart`

const firstDatabase = createCapacitorSQLiteTestDatabase({ filename: dbPath })
const firstPersistence = createCapacitorSQLitePersistence<Todo, string>({
const firstPersistence = createCapacitorSQLitePersistence({
database: firstDatabase,
})
const firstAdapter = firstPersistence.adapter
Expand All @@ -66,7 +66,7 @@ it(`persists data across app restart (close and reopen)`, async () => {

const secondDatabase = createCapacitorSQLiteTestDatabase({ filename: dbPath })
activeCleanupFns.push(() => secondDatabase.close())
const secondPersistence = createCapacitorSQLitePersistence<Todo, string>({
const secondPersistence = createCapacitorSQLitePersistence({
database: secondDatabase,
})
const secondAdapter = secondPersistence.adapter
Expand All @@ -90,7 +90,7 @@ it(`keeps all committed rows under rapid mutation bursts`, async () => {
const database = createCapacitorSQLiteTestDatabase({ filename: dbPath })
activeCleanupFns.push(() => database.close())

const persistence = createCapacitorSQLitePersistence<Todo, string>({
const persistence = createCapacitorSQLitePersistence({
database,
})
const adapter = persistence.adapter
Expand Down Expand Up @@ -126,7 +126,7 @@ it(`shares persistence across multiple collections on one database`, async () =>
const database = createCapacitorSQLiteTestDatabase({ filename: dbPath })
activeCleanupFns.push(() => database.close())

const persistence = createCapacitorSQLitePersistence<Todo, string>({
const persistence = createCapacitorSQLitePersistence({
database,
})

Expand Down Expand Up @@ -179,7 +179,7 @@ it(`resumes persisted sync after simulated app lifecycle transitions`, async ()
const database = createCapacitorSQLiteTestDatabase({ filename: dbPath })
activeCleanupFns.push(() => database.close())

const persistence = createCapacitorSQLitePersistence<Todo, string>({
const persistence = createCapacitorSQLitePersistence({
database,
})
const collection = createCollection(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import type {
type RuntimePersistenceFactory = (options: {
database: CapacitorSQLiteDatabaseLike
coordinator?: PersistedCollectionCoordinator
}) => PersistedCollectionPersistence<RuntimePersistenceContractTodo, string>
}) => PersistedCollectionPersistence

function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness {
const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-persistence-`))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-c
import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver'
import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src'
import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db'
import type {
SQLiteCoreAdapterContractTodo,
SQLiteCoreAdapterHarnessFactory,
} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract'
import type { SQLiteCoreAdapterHarnessFactory } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract'

const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => {
const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-core-`))
Expand All @@ -18,10 +15,7 @@ const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => {
})
const driver = new CapacitorSQLiteDriver({ database })

const adapter = new SQLiteCorePersistenceAdapter<
SQLiteCoreAdapterContractTodo,
string
>({
const adapter = new SQLiteCorePersistenceAdapter({
driver,
...options,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,24 +89,16 @@ function resolveAdapterBaseOptions(
* Creates a shared Durable Object SQLite persistence instance that can be reused
* by many collections in a single Durable Object storage.
*/
export function createCloudflareDOSQLitePersistence<
T extends object,
TKey extends string | number = string | number,
>(
export function createCloudflareDOSQLitePersistence(
options: CloudflareDOSQLitePersistenceOptions,
): PersistedCollectionPersistence<T, TKey> {
): PersistedCollectionPersistence {
const { coordinator, schemaMismatchPolicy } = options
const driver = resolveSQLiteDriver(options)
const adapterBaseOptions = resolveAdapterBaseOptions(options)
const resolvedCoordinator = coordinator ?? new SingleProcessCoordinator()
const adapterCache = new Map<
string,
ReturnType<
typeof createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>
>
ReturnType<typeof createSQLiteCorePersistenceAdapter>
>()

const getAdapterForCollection = (
Expand All @@ -126,10 +118,7 @@ export function createCloudflareDOSQLitePersistence<
return cachedAdapter
}

const adapter = createSQLiteCorePersistenceAdapter<
Record<string, unknown>,
string | number
>({
const adapter = createSQLiteCorePersistenceAdapter({
...adapterBaseOptions,
driver,
schemaMismatchPolicy: resolvedSchemaMismatchPolicy,
Expand All @@ -142,11 +131,8 @@ export function createCloudflareDOSQLitePersistence<
const createCollectionPersistence = (
mode: PersistedCollectionMode,
schemaVersion: number | undefined,
): PersistedCollectionPersistence<T, TKey> => ({
adapter: getAdapterForCollection(
mode,
schemaVersion,
) as unknown as PersistedCollectionPersistence<T, TKey>[`adapter`],
): PersistedCollectionPersistence => ({
adapter: getAdapterForCollection(mode, schemaVersion),
coordinator: resolvedCoordinator,
})

Expand Down
Loading
Loading