@tanstack/offline-transactions
Version:
Offline-first transaction capabilities for TanStack DB
32 lines (31 loc) • 1.01 kB
JavaScript
import { OnMutateMustBeSynchronousError } from "@tanstack/db";
import { OfflineTransaction } from "./OfflineTransaction.js";
function isPromiseLike(value) {
return !!value && (typeof value === `object` || typeof value === `function`) && typeof value.then === `function`;
}
function createOfflineAction(options, mutationFn, persistTransaction, executor) {
const { mutationFnName, onMutate } = options;
return (variables) => {
const offlineTransaction = new OfflineTransaction(
{
mutationFnName,
// The transaction commits after onMutate and reports a failure
// through `when('settled')`.
autoCommit: true
},
mutationFn,
persistTransaction,
executor
);
return offlineTransaction.mutate(() => {
const maybePromise = onMutate(variables);
if (isPromiseLike(maybePromise)) {
throw new OnMutateMustBeSynchronousError();
}
});
};
}
export {
createOfflineAction
};
//# sourceMappingURL=OfflineAction.js.map