molstar
Version:
A comprehensive macromolecular library.
221 lines (220 loc) • 9.54 kB
JavaScript
"use strict";
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.logP = exports.abortingObserver = exports.ms = exports.testTree = exports.abortAfter = exports.test1 = void 0;
var tslib_1 = require("tslib");
var mol_task_1 = require("../mol-task");
var now_1 = require("../mol-util/now");
function test1() {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var t, r;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
t = mol_task_1.Task.create('test', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, 1];
}); }); });
return [4 /*yield*/, t.run()];
case 1:
r = _a.sent();
console.log(r);
return [2 /*return*/];
}
});
});
}
exports.test1 = test1;
function messageTree(root, prefix) {
if (prefix === void 0) { prefix = ''; }
var p = root.progress;
if (!root.children.length) {
if (p.isIndeterminate)
return "".concat(prefix).concat(p.taskName, ": ").concat(p.message);
return "".concat(prefix).concat(p.taskName, ": [").concat(p.current, "/").concat(p.max, "] ").concat(p.message);
}
var newPrefix = prefix + ' |_ ';
var subTree = root.children.map(function (c) { return messageTree(c, newPrefix); });
if (p.isIndeterminate)
return "".concat(prefix).concat(p.taskName, ": ").concat(p.message, "\n").concat(subTree.join('\n'));
return "".concat(prefix).concat(p.taskName, ": [").concat(p.current, "/").concat(p.max, "] ").concat(p.message, "\n").concat(subTree.join('\n'));
}
function createTask(delayMs, r) {
var _this = this;
return mol_task_1.Task.create('delayed value ' + r, function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
ctx.update("Processing delayed ".concat(r, " after ").concat(delayMs, "ms"), true);
return [4 /*yield*/, mol_task_1.Scheduler.delay(delayMs)];
case 1:
_a.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 3];
return [4 /*yield*/, ctx.update({ message: "hello from delayed ".concat(r, " ").concat(delayMs) })];
case 2:
_a.sent();
_a.label = 3;
case 3: return [2 /*return*/, r];
}
});
}); }, function () { return console.log('On abort called ' + r); });
}
function abortAfter(delay) {
var _this = this;
return mol_task_1.Task.create('abort after ' + delay, function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, mol_task_1.Scheduler.delay(delay)];
case 1:
_a.sent();
throw mol_task_1.Task.Aborted('test');
}
});
}); });
}
exports.abortAfter = abortAfter;
function testTree() {
var _this = this;
return mol_task_1.Task.create('test o', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var c1, c2, c3, r, _a, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0: return [4 /*yield*/, mol_task_1.Scheduler.delay(250)];
case 1:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 3];
return [4 /*yield*/, ctx.update({ message: 'hi! 1' })];
case 2:
_c.sent();
_c.label = 3;
case 3: return [4 /*yield*/, mol_task_1.Scheduler.delay(125)];
case 4:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 6];
return [4 /*yield*/, ctx.update({ message: 'hi! 2' })];
case 5:
_c.sent();
_c.label = 6;
case 6: return [4 /*yield*/, mol_task_1.Scheduler.delay(250)];
case 7:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 9];
return [4 /*yield*/, ctx.update('hi! 3')];
case 8:
_c.sent();
_c.label = 9;
case 9:
c1 = createTask(250, 1).runAsChild(ctx);
c2 = createTask(500, 2).runAsChild(ctx);
c3 = createTask(750, 3).runAsChild(ctx);
return [4 /*yield*/, c1];
case 10:
_a = (_c.sent());
return [4 /*yield*/, c2];
case 11:
_b = _a + (_c.sent());
return [4 /*yield*/, c3];
case 12:
r = _b + (_c.sent());
if (!ctx.shouldUpdate) return [3 /*break*/, 14];
return [4 /*yield*/, ctx.update({ message: 'Almost done...' })];
case 13:
_c.sent();
_c.label = 14;
case 14: return [2 /*return*/, r + 1];
}
});
}); }, function () { return console.log('On abort O'); });
}
exports.testTree = testTree;
function processChunk(n, state) {
var toProcess = Math.min(state.current + n, state.total);
var start = state.current;
for (var i = start; i < toProcess; i++) {
for (var j = 0; j < 1000000; j++) {
state.i += (i * j + 1 + state.i) % 1023;
state.i = state.i % 1000;
}
}
state.current = toProcess;
return toProcess - start;
}
exports.ms = (0, mol_task_1.MultistepTask)('ms-task', ['step 1', 'step 2', 'step 3'], function (p, step, ctx) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var child;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, step(0)];
case 1:
_a.sent();
child = mol_task_1.Task.create('chunked', function (ctx) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var s;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, mol_task_1.chunkedSubtask)(ctx, 25, { i: 0, current: 0, total: 125 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })];
case 1:
s = _a.sent();
return [2 /*return*/, s.i];
}
});
}); });
return [4 /*yield*/, child.runAsChild(ctx)];
case 2:
_a.sent();
return [4 /*yield*/, mol_task_1.Scheduler.delay(250)];
case 3:
_a.sent();
return [4 /*yield*/, step(1)];
case 4:
_a.sent();
return [4 /*yield*/, (0, mol_task_1.chunkedSubtask)(ctx, 25, { i: 0, current: 0, total: 80 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })];
case 5:
_a.sent();
return [4 /*yield*/, mol_task_1.Scheduler.delay(250)];
case 6:
_a.sent();
return [4 /*yield*/, step(2)];
case 7:
_a.sent();
return [4 /*yield*/, mol_task_1.Scheduler.delay(250)];
case 8:
_a.sent();
return [2 /*return*/, p.i + 3];
}
});
}); });
function abortingObserver(p) {
console.log(messageTree(p.root));
if ((0, now_1.now)() - p.root.progress.startedTime > 1000) {
p.requestAbort('test');
}
}
exports.abortingObserver = abortingObserver;
function logP(p) { console.log(messageTree(p.root)); }
exports.logP = logP;
function test() {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var m, e_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, testTree().run(abortingObserver, 50)];
case 1:
m = _a.sent();
console.log(m);
return [3 /*break*/, 3];
case 2:
e_1 = _a.sent();
console.error(e_1);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
}
test();
// testObs();