import type { Effect, Stream } from 'effect';
import type { AnyEntityESchema, AnyUnkeyedESchema } from '../../../eschema/index.js';
import type { ChangeNotice, DecodedEntity, DecodedSingleEntity } from '../../../core/index.js';
import type { SnapshotIncompatible } from '../../../snapshot/index.js';
import type { DatabaseError } from '../error/index.js';
import type { EncodedItem, StdTableService } from '../contract/index.js';
import { type GlobalSecondaryIndex, type GlobalSecondaryIndexMap, type LocalSecondaryIndex, type LocalSecondaryIndexMap, type PrimaryIndex, type TableDefinition as DefinitionTableDefinition } from '../definition/index.js';
import type { AnyTransactOp, KeyedBuilderStart, SingleBuilder, TableEffect, TransactOp } from '../entity/index.js';
export interface ScanOptions {
readonly parallelism?: number;
}
export interface DriftResult {
readonly drifted: boolean;
readonly currentForm: EncodedItem;
}
type TableStream = Stream.Stream>;
export interface StdTable {
readonly logicalName: Name;
readonly primary: Primary;
readonly localSecondaryIndexes: Lsis;
readonly globalSecondaryIndexes: Gsis;
readonly registeredEntities: DefinitionTableDefinition['registeredEntities'];
snapshot(): ReturnType['snapshot']>;
entity(schema: S): KeyedBuilderStart;
singleEntity(schema: S): SingleBuilder;
transact[]>(ops: Ops): TableEffect<{
readonly [K in keyof Ops]: Ops[K] extends {
readonly operationKind: 'checkOp';
} ? null : Ops[K] extends TransactOp ? DecodedEntity | DecodedSingleEntity : never;
}, Name>;
dangerouslyRemoveAllItems(confirmation: 'I KNOW WHAT I AM DOING'): TableEffect<{
readonly itemsDeleted: number;
}, Name>;
subscribe(): Stream.Stream;
scan(options?: ScanOptions): TableStream;
drift(item: EncodedItem): TableEffect;
reindex(currentForm: EncodedItem): TableEffect;
verifySnapshot(): Effect.Effect>;
}
export interface TableBuilder {
readonly logicalName: Name;
primary(pk: Pk, sk: Sk): TopologyBuilder, {}, {}>;
}
export interface TopologyBuilder {
lsi(name: Slot, sk: Sk): TopologyBuilder>, Gsis>;
gsi(name: Slot, pk: Pk, sk: Sk): TopologyBuilder>>;
build(): StdTable;
}
export declare const StdTable: {
make(name: Name): TableBuilder;
};
export {};
//# sourceMappingURL=table.d.ts.map