UNPKG

atombeak

Version:

Create asynchronous atomic functions!

46 lines (45 loc) 1.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Log_1 = require("./Log"); exports.ITER = 'ITER'; function iter(next) { return { type: exports.ITER, next: next }; } exports.iter = iter; exports.DONE = 'DONE'; function done(value) { return { type: exports.DONE, value: value }; } exports.done = done; function run(operation, outer, onComplete) { var log = Log_1.Log.create(outer); var executed = operation.execute(log); var rec = function (executed) { if (executed.type === exports.ITER) { executed.next().then(function (_a) { var operation = _a[0], log = _a[1]; rec(operation.execute(log)); }); } else if (executed.type === exports.DONE) { onComplete(executed.value); } else { var exhaustive = executed; throw new Error(exhaustive); } }; rec(executed); } function runAsPromise(operation, outer) { return new Promise(function (resolve) { run(operation, outer, resolve); }); } exports.runAsPromise = runAsPromise;