@@ -46,6 +46,13 @@ export type Indexes<
4646 [ k in keyof I ] : Index < TableDef , I [ k ] > ;
4747} ;
4848
49+ export type ReadonlyIndexes <
50+ TableDef extends UntypedTableDef ,
51+ I extends Record < string , UntypedIndex < keyof TableDef [ 'columns' ] & string > > ,
52+ > = {
53+ [ k in keyof I ] : ReadonlyIndex < TableDef , I [ k ] > ;
54+ } ;
55+
4956/**
5057 * A type representing a database index, which can be either unique or ranged.
5158 */
@@ -56,32 +63,51 @@ export type Index<
5663 ? UniqueIndex < TableDef , I >
5764 : RangedIndex < TableDef , I > ;
5865
66+ export type ReadonlyIndex <
67+ TableDef extends UntypedTableDef ,
68+ I extends UntypedIndex < keyof TableDef [ 'columns' ] & string > ,
69+ > = I [ 'unique' ] extends true
70+ ? ReadonlyUniqueIndex < TableDef , I >
71+ : ReadonlyRangedIndex < TableDef , I > ;
72+
73+ export interface ReadonlyUniqueIndex <
74+ TableDef extends UntypedTableDef ,
75+ I extends UntypedIndex < keyof TableDef [ 'columns' ] & string > ,
76+ > {
77+ find ( col_val : IndexVal < TableDef , I > ) : RowType < TableDef > | null ;
78+ }
79+
5980/**
6081 * A type representing a unique index on a database table.
6182 * Unique indexes enforce that the indexed columns contain unique values.
6283 */
63- export type UniqueIndex <
84+ export interface UniqueIndex <
6485 TableDef extends UntypedTableDef ,
6586 I extends UntypedIndex < keyof TableDef [ 'columns' ] & string > ,
66- > = {
67- find ( col_val : IndexVal < TableDef , I > ) : RowType < TableDef > | null ;
87+ > extends ReadonlyUniqueIndex < TableDef , I > {
6888 delete ( col_val : IndexVal < TableDef , I > ) : boolean ;
6989 update ( col_val : RowType < TableDef > ) : RowType < TableDef > ;
70- } ;
90+ }
91+
92+ export interface ReadonlyRangedIndex <
93+ TableDef extends UntypedTableDef ,
94+ I extends UntypedIndex < keyof TableDef [ 'columns' ] & string > ,
95+ > {
96+ filter (
97+ range : IndexScanRangeBounds < TableDef , I >
98+ ) : IterableIterator < RowType < TableDef > > ;
99+ }
71100
72101/**
73102 * A type representing a ranged index on a database table.
74103 * Ranged indexes allow for range queries on the indexed columns.
75104 */
76- export type RangedIndex <
105+ export interface RangedIndex <
77106 TableDef extends UntypedTableDef ,
78107 I extends UntypedIndex < keyof TableDef [ 'columns' ] & string > ,
79- > = {
80- filter (
81- range : IndexScanRangeBounds < TableDef , I >
82- ) : IterableIterator < RowType < TableDef > > ;
108+ > extends ReadonlyRangedIndex < TableDef , I > {
83109 delete ( range : IndexScanRangeBounds < TableDef , I > ) : number ;
84- } ;
110+ }
85111
86112/**
87113 * A helper type to extract the value type of an index based on the table definition and index definition.
0 commit comments