import { Effect } from 'effect'; import type { DecodedEntity, DecodedSingleEntity } from '../../core/index.js'; import type { AnyEntityESchema, AnyUnkeyedESchema } from '../../eschema/index.js'; import { type PaceStrategyFactory } from '../collection/pacing/index.js'; import type { DeletePayload, StdCollectionOptions, UpdatePayload } from '../domain/collection-item/index.js'; import type { SyncReporter } from '../domain/sync-event/index.js'; import { type OfflineActionConfig } from '../outbox/outbox/index.js'; import type { StdSyncPlatform } from '../platform/contract/index.js'; import type { Collection } from '@tanstack/react-db'; import type { CollectionItem } from '../domain/collection-item/index.js'; import { type EffectRuntime } from '../platform/effect-runner/index.js'; import { bidirectional, newToOld, oldToNew, type CadenceConfig, type PartitionEntry, type PartitionMap, type SingleItemSourceConfig, type SingleItemStrategy } from '../strategy/strategy/index.js'; import { type FlowPlacement } from '../flow/sync-flow/index.js'; export declare const syncStrategy: { oldToNew: typeof oldToNew; newToOld: typeof newToOld; bidirectional: typeof bidirectional; }; export declare const paceStrategy: { coalesce: (options?: import("../collection/pacing/coalesce-strategy.js").CoalesceStrategyOptions) => PaceStrategyFactory; debounce: (options: import("@tanstack/react-db").DebounceStrategyOptions) => PaceStrategyFactory; throttle: (options: import("@tanstack/react-db").ThrottleStrategyOptions) => PaceStrategyFactory; queue: (options?: import("@tanstack/react-db").QueueStrategyOptions) => PaceStrategyFactory; }; type SyncShape = { total: PartitionEntry; partitions?: PartitionMap; } | { total?: PartitionEntry; partitions: PartitionMap; }; export type SyncConfig = { schema: S; sync?: SyncShape; options?: StdCollectionOptions; onInsert?: (items: ReadonlyArray) => Effect.Effect>, unknown, R>; onUpdate?: (payload: UpdatePayload) => Effect.Effect, unknown, R>; onDelete?: (payload: DeletePayload) => Effect.Effect, unknown, R>; pacing?: PaceStrategyFactory; outbox?: boolean; }; type SingleItemSyncBase = { schema: S; options?: StdCollectionOptions; onUpdate?: (payload: { updates: Partial; }) => Effect.Effect, unknown, R>; pacing?: PaceStrategyFactory; outbox?: boolean; }; export type SingleItemSyncConfig = SingleItemSyncBase & ({ source: SingleItemSourceConfig['source']; strategy?: never; } | { source?: never; strategy: SingleItemStrategy; }); export type StdSyncDefaults = { name: string; version?: string | number; options?: StdCollectionOptions; platform?: StdSyncPlatform; cadence?: CadenceConfig; runtime?: EffectRuntime; onEvent?: SyncReporter; flow?: FlowPlacement; outbox?: boolean; }; declare const makeStdSync: (defaults: StdSyncDefaults) => { flow: { id: string; participant: (name: string) => import("../flow/sync-flow/sync-flow.js").FlowLane; }; sync: (config: SyncConfig) => { id?: string; schema: import("../domain/collection-item/collection-item.js").CollectionItemSchema; getKey: (item: CollectionItem) => string; gcTime?: number; startSync?: boolean; autoIndex?: `off` | `eager`; defaultIndexType?: import("@tanstack/react-db").IndexConstructor; compare?: (x: CollectionItem, y: CollectionItem) => number; syncMode?: import("@tanstack/react-db").SyncMode; onInsert?: import("@tanstack/react-db").InsertMutationFn, string, import("../collection/keyed-collection/keyed-collection.js").KeyedCollectionUtils, any>; onUpdate?: import("@tanstack/react-db").UpdateMutationFn, string, import("../collection/keyed-collection/keyed-collection.js").KeyedCollectionUtils, any>; onDelete?: import("@tanstack/react-db").DeleteMutationFn, string, import("../collection/keyed-collection/keyed-collection.js").KeyedCollectionUtils, any>; defaultStringCollation?: import("@tanstack/react-db").StringCollationConfig; utils: import("../collection/keyed-collection/keyed-collection.js").KeyedCollectionUtils; sync: import("@tanstack/react-db").SyncConfig, string>; }; singleItemSync: (config: SingleItemSyncConfig) => import("../collection/single-item-collection/single-item-collection.js").SingleItemResult; collection: (config: SyncConfig) => Collection extends object ? CollectionItem : Record, string, import("../collection/keyed-collection/keyed-collection.js").KeyedCollectionUtils, import("../domain/collection-item/collection-item.js").CollectionItemSchema, CollectionItem extends object ? CollectionItem : Record> & import("@tanstack/react-db").NonSingleResult; singleItemCollection: (config: SingleItemSyncConfig) => Collection extends object ? CollectionItem : Record, string, import("@tanstack/react-db").UtilsRecord, import("../domain/collection-item/collection-item.js").CollectionItemSchema, CollectionItem extends object ? CollectionItem : Record> & import("@tanstack/react-db").SingleResult; createOfflineAction:

(action: OfflineActionConfig) => (payload: P) => import("../outbox/offline-action/offline-action.js").OfflineActionTransaction; reset: () => Promise; outbox: { entity: import("../../db/db.js").KeyedEntity<"sync-store", import("../../eschema/index.js").EntityESchema<"SyncStoredOutboxEntry", "key", "v1", { sync: import("effect/Schema").String; name: import("effect/Schema").String; queue: import("effect/Schema").String; status: import("effect/Schema").Literals; enqueuedAt: import("effect/Schema").String; body: import("effect/Schema").Codec; } & Record<"key", import("effect/Schema").Codec>>, readonly ["sync"], Record<"primary", import("../../db/db.js").AccessPatternDefinition> & Record<"byQueue", import("../../db/db.js").AccessPatternDefinition<"LSI1", "lsi", readonly ["sync"], readonly ["queue"]>>>; transaction: (id: string) => import("@tanstack/react-db").Transaction> | null; discard: (id: string) => Promise; }; registry: () => { process: (message: unknown) => void; }; dispose: () => Promise; }; type CreateStdSync = { (defaults: StdSyncDefaults & { runtime: EffectRuntime; }): ReturnType>; (defaults: StdSyncDefaults & { runtime?: never; }): ReturnType>; }; export declare const createStdSync: CreateStdSync; export type { EffectRuntime } from '../platform/effect-runner/index.js'; export type { FlowLane, FlowPlacement } from '../flow/sync-flow/index.js'; export type { PeerChannel, PeerChannelFactory, } from '../domain/peer-channel/index.js'; export type { LeadershipState, SyncEvent } from '../domain/sync-event/index.js'; export type { SyncReporter } from '../domain/sync-event/index.js'; export type { Connectivity } from '../domain/connectivity/index.js'; export { OutboxUnreachable } from '../outbox/outbox/index.js'; export type { PartitionedStrategy, SingleItemStrategy, StrategyContext, } from '../strategy/strategy/index.js'; export { syncStore } from '../domain/stored-entity/index.js'; export type { SyncStoreLayer } from '../platform/sync-store/index.js'; export type { LeadershipLayer } from '../platform/leadership/index.js'; export type { StdSyncPlatform } from '../platform/contract/index.js'; /** Public read surface returned by a keyed std-sync collection. */ export type SyncedCollection = Collection, string>; //# sourceMappingURL=std-sync.d.ts.map