UNPKG

marbles

Version:

Front-end framework for routing, http, and data handling

61 lines (50 loc) 1.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* @flow weak */ var Transaction = { transaction: function transaction(operationFn) { var tmp = Object.create(this); var eventQueue = []; tmp.trigger = function () { eventQueue.push(arguments); }; var shouldAbort = false; tmp.abortTransaction = function () { shouldAbort = true; }; tmp.finalizeTransaction = (function () { if (shouldAbort) { return; } delete tmp.trigger; delete tmp.abortTransaction; delete tmp.finalizeTransaction; for (var k in tmp) { if (tmp.hasOwnProperty(k)) { this[k] = tmp[k]; } } var args; for (var i = 0, len = eventQueue.length; i < len; i++) { args = eventQueue.shift(); this.trigger.apply(this, args); } }).bind(this); if (arguments.length > 0) { operationFn.call(tmp, tmp); tmp.finalizeTransaction(); } else { return tmp; } }, abortTransaction: function abortTransaction() { throw new Error("Must be inside a transaction to abort one."); }, finalizeTransaction: function finalizeTransaction() { throw new Error("Must be inside a transaction to finalize one."); } }; exports["default"] = Transaction; module.exports = exports["default"];