Skip to content

IndexedDbTable.ts

Typed object-store descriptors for the browser IndexedDB integration.

An IndexedDbTable is the schema-backed description of one IndexedDB object store. It carries the store name, row schema, key path, index key paths, auto-increment mode, and transaction durability used by database versions, migrations, and typed queries. The make constructor also derives the read, array, and auto-increment write schemas used by the query builder.

See

  • make for constructing table descriptors.

Since v4.0.0



Creates a typed IndexedDB table definition from its name, schema, optional key path, indexes, auto-increment flag, and durability.

When to use

Use to define a typed object-store descriptor for inclusion in an IndexedDbVersion and for migration or query APIs.

Details

autoIncrement defaults to false and durability defaults to "relaxed". Tables without a key path get a read schema that includes an out-of-line key, while auto-increment tables use a write schema where the generated key may be omitted.

Gotchas

Tables without a key path cannot define a key field in their row schema. Key paths and index paths must point to encoded fields whose values are valid IndexedDB keys, and declared indexes still need to be created during database migrations.

See

  • IndexedDbVersion.make for grouping table definitions into a schema version

Signature

declare const make: <
const Name extends string,
TableSchema extends AnySchemaStruct,
const Indexes extends Record<string, IndexedDbQueryBuilder.KeyPath<TableSchema>>,
const KeyPath extends
| (AutoIncrement extends true
? IndexedDbQueryBuilder.KeyPathNumber<NoInfer<TableSchema>>
: IndexedDbQueryBuilder.KeyPath<NoInfer<TableSchema>>)
| undefined = undefined,
const AutoIncrement extends boolean = false
>(options: {
readonly name: Name
readonly schema: [KeyPath] extends [undefined]
? "key" extends keyof TableSchema["fields"]
? "Cannot have a 'key' field when keyPath is undefined"
: TableSchema
: TableSchema
readonly keyPath?: KeyPath
readonly indexes?: Indexes | undefined
readonly autoIncrement?: IsValidAutoIncrementKeyPath<TableSchema, KeyPath> extends true
? AutoIncrement | undefined
: never
readonly durability?: IDBTransactionDurability | undefined
}) => IndexedDbTable<Name, TableSchema, Indexes, Extract<KeyPath, Readonly<IDBValidKey | undefined>>, AutoIncrement>

Source

Since v4.0.0

Typed IndexedDB table definition containing its name, schema, key path, indexes, auto-increment setting, and transaction durability.

Signature

export interface IndexedDbTable<
out Name extends string,
out TableSchema extends AnySchemaStruct,
out Indexes extends Record<string, IndexedDbQueryBuilder.KeyPath<TableSchema>>,
out KeyPath extends Readonly<IDBValidKey | undefined>,
out AutoIncrement extends boolean
> extends Pipeable {
new (_: never): {}
readonly [TypeId]: typeof TypeId
readonly tableName: Name
readonly tableSchema: TableSchema
readonly readSchema: Schema.Top
readonly autoincrementSchema: Schema.Top
readonly arraySchema: Schema.Top
readonly keyPath: KeyPath
readonly indexes: Indexes
readonly autoIncrement: AutoIncrement
readonly durability: IDBTransactionDurability
}

Source

Since v4.0.0

Type-erased shape of an IndexedDbTable used when table type parameters are not needed.

Signature

export interface Any {
readonly [TypeId]: typeof TypeId
readonly keyPath: any
readonly tableName: string
readonly tableSchema: Schema.Top
readonly readSchema: Schema.Top
readonly autoincrementSchema: Schema.Top
readonly arraySchema: Schema.Top
readonly autoIncrement: boolean
readonly indexes: any
}

Source

Since v4.0.0

Schema constraint for table schemas that expose struct fields.

Signature

type AnySchemaStruct = Schema.Top & {
readonly fields: Schema.Struct.Fields
}

Source

Since v4.0.0

Type-erased IndexedDbTable retaining the table interface properties with broad type parameters.

Signature

type AnyWithProps = IndexedDbTable<string, AnySchemaStruct, any, any, boolean>

Source

Since v4.0.0

Extracts the auto-increment flag type from an IndexedDbTable.

Signature

type AutoIncrement<Table> = Table["autoIncrement"]

Source

Since v4.0.0

Extracts the decoding or encoding service requirements needed by an IndexedDbTable schema.

Signature

type Context<Table> = Table["tableSchema"]["DecodingServices"] | Table["tableSchema"]["EncodingServices"]

Source

Since v4.0.0

Extracts the encoded row type from an IndexedDbTable schema.

Signature

type Encoded<Table> = Table["tableSchema"]["Encoded"]

Source

Since v4.0.0

Extracts the index definition map from an IndexedDbTable.

Signature

type Indexes<Table> = Table["indexes"]

Source

Since v4.0.0

Extracts the key-path type from an IndexedDbTable.

Signature

type KeyPath<Table> = Table["keyPath"]

Source

Since v4.0.0

Extracts the table name type from an IndexedDbTable.

Signature

type TableName<Table> = Table["tableName"]

Source

Since v4.0.0

Extracts the schema type from an IndexedDbTable.

Signature

type TableSchema<Table> = Table["tableSchema"]

Source

Since v4.0.0

Selects the table with the given name from a union of IndexedDbTable types.

Signature

type WithName<Table, TableName> = Extract<Table, { readonly tableName: TableName }>

Source

Since v4.0.0