UNPKG

type-r2

Version:

Serializable, validated, and observable data layer for modern JS applications

58 lines 1.79 kB
export function getOwnerEndpoint(self) { var collection = self.collection; if (collection) { return getOwnerEndpoint(collection); } if (self._owner) { var _endpoints = self._owner._endpoints; return _endpoints && _endpoints[self._ownerKey]; } } export function createIOPromise(initialize) { var resolve, reject, onAbort; function abort(fn) { onAbort = fn; } var promise = new Promise(function (a_resolve, a_reject) { reject = a_reject; resolve = a_resolve; initialize(resolve, reject, abort); }); promise.abort = function () { onAbort ? onAbort(resolve, reject) : reject(new Error("I/O Aborted")); }; return promise; } export function startIO(self, promise, options, thenDo) { abortIO(self); self._ioPromise = promise .then(function (resp) { self._ioPromise = null; var result = thenDo ? thenDo(resp) : resp; triggerAndBubble(self, 'sync', self, resp, options); return result; }) .catch(function (err) { self._ioPromise = null; triggerAndBubble(self, 'error', self, err, options); throw err; }); self._ioPromise.abort = promise.abort; return self._ioPromise; } export function abortIO(self) { if (self._ioPromise && self._ioPromise.abort) { self._ioPromise.abort(); self._ioPromise = null; } } export function triggerAndBubble(eventSource) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } eventSource.trigger.apply(eventSource, args); var collection = eventSource.collection; collection && collection.trigger.apply(collection, args); } //# sourceMappingURL=io-tools.js.map