Defined in: packages/electric-db-collection/src/electric.ts:80
Configuration interface for Electric collection options
T extends Row<unknown> = Row<unknown>
The type of items in the collection
TSchema extends StandardSchemaV1 = never
The schema type for validation
optional onDelete: (params) => Promise<MatchingStrategy>;
optional onDelete: (params) => Promise<MatchingStrategy>;
Defined in: packages/electric-db-collection/src/electric.ts:185
Optional asynchronous handler function called before a delete operation
DeleteMutationFnParams<T>
Object containing transaction and collection information
Promise<MatchingStrategy>
Promise resolving to { txid } or void
// Basic Electric delete handler with txid (recommended)
onDelete: async ({ transaction }) => {
const mutation = transaction.mutations[0]
const result = await api.todos.delete({
id: mutation.original.id
})
return { txid: result.txid }
}
// Basic Electric delete handler with txid (recommended)
onDelete: async ({ transaction }) => {
const mutation = transaction.mutations[0]
const result = await api.todos.delete({
id: mutation.original.id
})
return { txid: result.txid }
}
// Use awaitMatch utility for custom matching
onDelete: async ({ transaction, collection }) => {
const mutation = transaction.mutations[0]
await api.todos.delete({ id: mutation.original.id })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'delete' &&
message.value.id === mutation.original.id
)
}
// Use awaitMatch utility for custom matching
onDelete: async ({ transaction, collection }) => {
const mutation = transaction.mutations[0]
await api.todos.delete({ id: mutation.original.id })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'delete' &&
message.value.id === mutation.original.id
)
}
optional onInsert: (params) => Promise<MatchingStrategy>;
optional onInsert: (params) => Promise<MatchingStrategy>;
Defined in: packages/electric-db-collection/src/electric.ts:128
Optional asynchronous handler function called before an insert operation
InsertMutationFnParams<T>
Object containing transaction and collection information
Promise<MatchingStrategy>
Promise resolving to { txid } or void
// Basic Electric insert handler with txid (recommended)
onInsert: async ({ transaction }) => {
const newItem = transaction.mutations[0].modified
const result = await api.todos.create({
data: newItem
})
return { txid: result.txid }
}
// Basic Electric insert handler with txid (recommended)
onInsert: async ({ transaction }) => {
const newItem = transaction.mutations[0].modified
const result = await api.todos.create({
data: newItem
})
return { txid: result.txid }
}
// Insert handler with multiple items - return array of txids
onInsert: async ({ transaction }) => {
const items = transaction.mutations.map(m => m.modified)
const results = await Promise.all(
items.map(item => api.todos.create({ data: item }))
)
return { txid: results.map(r => r.txid) }
}
// Insert handler with multiple items - return array of txids
onInsert: async ({ transaction }) => {
const items = transaction.mutations.map(m => m.modified)
const results = await Promise.all(
items.map(item => api.todos.create({ data: item }))
)
return { txid: results.map(r => r.txid) }
}
// Use awaitMatch utility for custom matching
onInsert: async ({ transaction, collection }) => {
const newItem = transaction.mutations[0].modified
await api.todos.create({ data: newItem })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'insert' &&
message.value.name === newItem.name
)
}
// Use awaitMatch utility for custom matching
onInsert: async ({ transaction, collection }) => {
const newItem = transaction.mutations[0].modified
await api.todos.create({ data: newItem })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'insert' &&
message.value.name === newItem.name
)
}
optional onUpdate: (params) => Promise<MatchingStrategy>;
optional onUpdate: (params) => Promise<MatchingStrategy>;
Defined in: packages/electric-db-collection/src/electric.ts:157
Optional asynchronous handler function called before an update operation
UpdateMutationFnParams<T>
Object containing transaction and collection information
Promise<MatchingStrategy>
Promise resolving to { txid } or void
// Basic Electric update handler with txid (recommended)
onUpdate: async ({ transaction }) => {
const { original, changes } = transaction.mutations[0]
const result = await api.todos.update({
where: { id: original.id },
data: changes
})
return { txid: result.txid }
}
// Basic Electric update handler with txid (recommended)
onUpdate: async ({ transaction }) => {
const { original, changes } = transaction.mutations[0]
const result = await api.todos.update({
where: { id: original.id },
data: changes
})
return { txid: result.txid }
}
// Use awaitMatch utility for custom matching
onUpdate: async ({ transaction, collection }) => {
const { original, changes } = transaction.mutations[0]
await api.todos.update({ where: { id: original.id }, data: changes })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'update' &&
message.value.id === original.id
)
}
// Use awaitMatch utility for custom matching
onUpdate: async ({ transaction, collection }) => {
const { original, changes } = transaction.mutations[0]
await api.todos.update({ where: { id: original.id }, data: changes })
await collection.utils.awaitMatch(
(message) => isChangeMessage(message) &&
message.headers.operation === 'update' &&
message.value.id === original.id
)
}
shapeOptions: ShapeStreamOptions<GetExtensions<T>>;
shapeOptions: ShapeStreamOptions<GetExtensions<T>>;
Defined in: packages/electric-db-collection/src/electric.ts:90
Configuration options for the ElectricSQL ShapeStream
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.
