Defined in: packages/db/src/transactions.ts:116
• T extends object = Record<string, unknown>
new Transaction<T>(config): Transaction<T>
new Transaction<T>(config): Transaction<T>
Defined in: packages/db/src/transactions.ts:131
Transaction<T>
autoCommit: boolean;
autoCommit: boolean;
Defined in: packages/db/src/transactions.ts:122
createdAt: Date;
createdAt: Date;
Defined in: packages/db/src/transactions.ts:123
optional error: object;
optional error: object;
Defined in: packages/db/src/transactions.ts:126
error: Error;
error: Error;
message: string;
message: string;
id: string;
id: string;
Defined in: packages/db/src/transactions.ts:117
isPersisted: Deferred<Transaction<T>>;
isPersisted: Deferred<Transaction<T>>;
Defined in: packages/db/src/transactions.ts:121
metadata: Record<string, unknown>;
metadata: Record<string, unknown>;
Defined in: packages/db/src/transactions.ts:125
mutationFn: MutationFn<T>;
mutationFn: MutationFn<T>;
Defined in: packages/db/src/transactions.ts:119
mutations: PendingMutation<T, OperationType, Collection<T, any, any, any, any>>[];
mutations: PendingMutation<T, OperationType, Collection<T, any, any, any, any>>[];
Defined in: packages/db/src/transactions.ts:120
sequenceNumber: number;
sequenceNumber: number;
Defined in: packages/db/src/transactions.ts:124
state: TransactionState;
state: TransactionState;
Defined in: packages/db/src/transactions.ts:118
applyMutations(mutations): void
applyMutations(mutations): void
Defined in: packages/db/src/transactions.ts:212
PendingMutation<any, OperationType, Collection<any, any, any, any, any>>[]
void
commit(): Promise<Transaction<T>>
commit(): Promise<Transaction<T>>
Defined in: packages/db/src/transactions.ts:349
Commit the transaction and execute the mutation function
Promise<Transaction<T>>
Promise that resolves to this transaction when complete
// Manual commit (when autoCommit is false)
const tx = createTransaction({
autoCommit: false,
mutationFn: async ({ transaction }) => {
await api.saveChanges(transaction.mutations)
}
})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
})
await tx.commit() // Manually commit
// Manual commit (when autoCommit is false)
const tx = createTransaction({
autoCommit: false,
mutationFn: async ({ transaction }) => {
await api.saveChanges(transaction.mutations)
}
})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
})
await tx.commit() // Manually commit
// Handle commit errors
try {
const tx = createTransaction({
mutationFn: async () => { throw new Error("API failed") }
})
tx.mutate(() => {
collection.insert({ id: "1", text: "Item" })
})
await tx.commit()
} catch (error) {
console.log('Commit failed, transaction rolled back:', error)
}
// Handle commit errors
try {
const tx = createTransaction({
mutationFn: async () => { throw new Error("API failed") }
})
tx.mutate(() => {
collection.insert({ id: "1", text: "Item" })
})
await tx.commit()
} catch (error) {
console.log('Commit failed, transaction rolled back:', error)
}
// Check transaction state after commit
await tx.commit()
console.log(tx.state) // "completed" or "failed"
// Check transaction state after commit
await tx.commit()
console.log(tx.state) // "completed" or "failed"
compareCreatedAt(other): number
compareCreatedAt(other): number
Defined in: packages/db/src/transactions.ts:395
Compare two transactions by their createdAt time and sequence number in order to sort them in the order they were created.
Transaction<any>
The other transaction to compare to
number
-1 if this transaction was created before the other, 1 if it was created after, 0 if they were created at the same time
mutate(callback): Transaction<T>
mutate(callback): Transaction<T>
Defined in: packages/db/src/transactions.ts:193
Execute collection operations within this transaction
() => void
Function containing collection operations to group together
Transaction<T>
This transaction for chaining
// Group multiple operations
const tx = createTransaction({ mutationFn: async () => {
// Send to API
}})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
collection.update("2", draft => { draft.completed = true })
collection.delete("3")
})
await tx.isPersisted.promise
// Group multiple operations
const tx = createTransaction({ mutationFn: async () => {
// Send to API
}})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
collection.update("2", draft => { draft.completed = true })
collection.delete("3")
})
await tx.isPersisted.promise
// Handle mutate errors
try {
tx.mutate(() => {
collection.insert({ id: "invalid" }) // This might throw
})
} catch (error) {
console.log('Mutation failed:', error)
}
// Handle mutate errors
try {
tx.mutate(() => {
collection.insert({ id: "invalid" }) // This might throw
})
} catch (error) {
console.log('Mutation failed:', error)
}
// Manual commit control
const tx = createTransaction({ autoCommit: false, mutationFn: async () => {} })
tx.mutate(() => {
collection.insert({ id: "1", text: "Item" })
})
// Commit later when ready
await tx.commit()
// Manual commit control
const tx = createTransaction({ autoCommit: false, mutationFn: async () => {} })
tx.mutate(() => {
collection.insert({ id: "1", text: "Item" })
})
// Commit later when ready
await tx.commit()
rollback(config?): Transaction<T>
rollback(config?): Transaction<T>
Defined in: packages/db/src/transactions.ts:266
Rollback the transaction and any conflicting transactions
Configuration for rollback behavior
boolean
Transaction<T>
This transaction for chaining
// Manual rollback
const tx = createTransaction({ mutationFn: async () => {
// Send to API
}})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
})
// Rollback if needed
if (shouldCancel) {
tx.rollback()
}
// Manual rollback
const tx = createTransaction({ mutationFn: async () => {
// Send to API
}})
tx.mutate(() => {
collection.insert({ id: "1", text: "Buy milk" })
})
// Rollback if needed
if (shouldCancel) {
tx.rollback()
}
// Handle rollback cascade (automatic)
const tx1 = createTransaction({ mutationFn: async () => {} })
const tx2 = createTransaction({ mutationFn: async () => {} })
tx1.mutate(() => collection.update("1", draft => { draft.value = "A" }))
tx2.mutate(() => collection.update("1", draft => { draft.value = "B" })) // Same item
tx1.rollback() // This will also rollback tx2 due to conflict
// Handle rollback cascade (automatic)
const tx1 = createTransaction({ mutationFn: async () => {} })
const tx2 = createTransaction({ mutationFn: async () => {} })
tx1.mutate(() => collection.update("1", draft => { draft.value = "A" }))
tx2.mutate(() => collection.update("1", draft => { draft.value = "B" })) // Same item
tx1.rollback() // This will also rollback tx2 due to conflict
// Handle rollback in error scenarios
try {
await tx.isPersisted.promise
} catch (error) {
console.log('Transaction was rolled back:', error)
// Transaction automatically rolled back on mutation function failure
}
// Handle rollback in error scenarios
try {
await tx.isPersisted.promise
} catch (error) {
console.log('Transaction was rolled back:', error)
// Transaction automatically rolled back on mutation function failure
}
setState(newState): void
setState(newState): void
Defined in: packages/db/src/transactions.ts:146
void
touchCollection(): void
touchCollection(): void
Defined in: packages/db/src/transactions.ts:294
void
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.