@tanstack/db
Version:
A reactive client store for building super fast apps on sync
53 lines (52 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const transactions = require("./transactions.cjs");
function createPacedMutations(config) {
const { onMutate, mutationFn, strategy, ...transactionConfig } = config;
let activeTransaction = null;
const commitCallback = () => {
if (!activeTransaction) {
throw new Error(
`Strategy callback called but no active transaction exists. This indicates a bug in the strategy implementation.`
);
}
if (activeTransaction.state !== `pending`) {
throw new Error(
`Strategy callback called but active transaction is in state "${activeTransaction.state}". Expected "pending".`
);
}
const txToCommit = activeTransaction;
activeTransaction = null;
txToCommit.commit().catch(() => {
});
return txToCommit;
};
function mutate(variables) {
if (!activeTransaction || activeTransaction.state !== `pending`) {
activeTransaction = transactions.createTransaction({
...transactionConfig,
mutationFn,
autoCommit: false
});
}
activeTransaction.mutate(() => {
onMutate(variables);
});
const txToReturn = activeTransaction;
if (strategy._type === `queue`) {
const capturedTx = activeTransaction;
activeTransaction = null;
strategy.execute(() => {
capturedTx.commit().catch(() => {
});
return capturedTx;
});
} else {
strategy.execute(commitCallback);
}
return txToReturn;
}
return mutate;
}
exports.createPacedMutations = createPacedMutations;
//# sourceMappingURL=paced-mutations.cjs.map