sveltekit-sync
Version:
Local-first sync engine for SvelteKit
255 lines (254 loc) • 10.5 kB
TypeScript
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
import type { ServerAdapter, SyncOperation } from '../types.ts';
export interface DrizzleAdapterConfig {
db: PostgresJsDatabase;
schema: Record<string, any>;
getFilter?: (table: string, userId: string) => any;
transformOut?: (table: string, data: any) => any;
transformIn?: (table: string, data: any) => any;
}
export declare const syncMetadata: {
_version: import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).HasDefault<import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).NotNull<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgIntegerBuilderInitial<"_version">>>;
_updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).NotNull<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgTimestampBuilderInitial<"_updated_at">>>;
_clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgTextBuilderInitial<"_client_id", [string, ...string[]]>;
_isDeleted: import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).HasDefault<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgBooleanBuilderInitial<"_is_deleted">>;
};
export declare const syncLog: import("drizzle-orm/pg-core/table", { with: { "resolution-mode": "require" } }).PgTableWithColumns<{
name: "_sync_log";
schema: undefined;
columns: {
id: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "id";
tableName: "_sync_log";
dataType: "string";
columnType: "PgUUID";
data: string;
driverParam: string;
notNull: true;
hasDefault: true;
isPrimaryKey: true;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
tableName: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "table_name";
tableName: "_sync_log";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
recordId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "record_id";
tableName: "_sync_log";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
operation: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "operation";
tableName: "_sync_log";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
data: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "data";
tableName: "_sync_log";
dataType: "json";
columnType: "PgJsonb";
data: unknown;
driverParam: unknown;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
timestamp: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "timestamp";
tableName: "_sync_log";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: true;
hasDefault: true;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "client_id";
tableName: "_sync_log";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
userId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "user_id";
tableName: "_sync_log";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
};
dialect: "pg";
}>;
export declare const clientState: import("drizzle-orm/pg-core/table", { with: { "resolution-mode": "require" } }).PgTableWithColumns<{
name: "_sync_client_state";
schema: undefined;
columns: {
clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "client_id";
tableName: "_sync_client_state";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: true;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
userId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "user_id";
tableName: "_sync_client_state";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
lastSync: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "last_sync";
tableName: "_sync_client_state";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: true;
hasDefault: true;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
lastActive: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
name: "last_active";
tableName: "_sync_client_state";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: true;
hasDefault: true;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
};
dialect: "pg";
}>;
export declare class DrizzleAdapter implements ServerAdapter<PostgresJsDatabase> {
private config;
constructor(config: DrizzleAdapterConfig);
insert(table: string, data: any): Promise<any>;
update(table: string, id: string, data: any, expectedVersion: number): Promise<any>;
delete(table: string, id: string): Promise<void>;
findOne(table: string, id: string): Promise<any | null>;
find(table: string, filter?: any): Promise<any[]>;
getChangesSince(table: string, timestamp: number, userId?: string, excludeClientId?: string): Promise<SyncOperation[]>;
applyOperation(op: SyncOperation, userId?: string): Promise<void>;
checkConflict(table: string, id: string, expectedVersion: number): Promise<boolean>;
batchInsert(table: string, records: any[]): Promise<any[]>;
batchUpdate(table: string, updates: Array<{
id: string;
data: any;
}>): Promise<any[]>;
logSyncOperation(op: SyncOperation, userId: string): Promise<void>;
updateClientState(clientId: string, userId: string): Promise<void>;
getClientState(clientId: string): Promise<ClientState | null>;
transaction<T>(fn: (adapter: ServerAdapter) => Promise<T>): Promise<T>;
}