UNPKG

workflow-4-node

Version:

Workflow 4 Node is a .NET Workflow Foundation like framework for Node.js. The goal is to reach feature equivalence and beyond.

251 lines (227 loc) 9.64 kB
"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function SimpleProxy(backend) { assert(_.isObject(backend)); var self = this; Object.defineProperty(this, "_backend", { enumerable: false, value: backend }); Object.defineProperty(this, "_backendKeys", { enumerable: false, writable: false, value: [] }); Object.defineProperty(this, "$keys", { enumerable: false, get: function get() { return backend.getKeys(self); } }); this.update(SimpleProxy.updateMode.init); } SimpleProxy.updateMode = { twoWay: 0, oneWay: 1, init: 2 }; Object.defineProperties(SimpleProxy.prototype, { _skipKeys: { enumerable: false, writable: false, value: new Set(["getKeys", "getValue", "setValue"]) }, update: { enumerable: false, writable: false, value: function value(mode) { var _this = this; var self = this; if (mode === SimpleProxy.updateMode.init) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop = function _loop() { var newKey = _step.value; if (_.isUndefined(_this[newKey])) { // This makes the list as unique _this._backendKeys.push(newKey); Object.defineProperty(self, newKey, { enumerable: true, configurable: true, get: function get() { return self._backend.getValue(self, newKey); }, set: function set(value) { self._backend.setValue(self, newKey, value); } }); } }; for (var _iterator = this._backend.getKeys(this)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { _loop(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } else if (mode === SimpleProxy.updateMode.oneWay) { var currBackendKeys = new Set(this._backend.getKeys(this)); var _loop2 = function _loop2(key) { if (!currBackendKeys.has(key)) { // new key on proxy, and not defined on backend: _this._backend.setValue(self, key, _this[key]); Object.defineProperty(self, key, { enumerable: true, configurable: true, get: function get() { return self._backend.getValue(self, key); }, set: function set(value) { self._backend.setValue(self, key, value); } }); _this._backendKeys.push(key); } else { currBackendKeys.delete(key); } }; for (var key in this) { _loop2(key); } var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = currBackendKeys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var oldKey = _step2.value; delete this[oldKey]; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } else { var prevBackendKeys = new Set(this._backendKeys); var currBackendKeys = new Set(this._backend.getKeys(this)); var backedKeys = new Set(); var _loop3 = function _loop3(key) { if (!prevBackendKeys.has(key) && !currBackendKeys.has(key)) { // new key on proxy, and not defined on backend: _this._backend.setValue(self, key, _this[key]); Object.defineProperty(self, key, { enumerable: true, configurable: true, get: function get() { return self._backend.getValue(self, key); }, set: function set(value) { self._backend.setValue(self, key, value); } }); backedKeys.add(key); } }; for (var key in this) { _loop3(key); } this._backendKeys.length = 0; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { var _loop4 = function _loop4() { var newKey = _step3.value; if (!_this._skipKeys.has(newKey)) { _this._backendKeys.push(newKey); if (!prevBackendKeys.has(newKey) && !backedKeys.has(newKey)) { Object.defineProperty(self, newKey, { enumerable: true, configurable: true, get: function get() { return self._backend.getValue(self, newKey); }, set: function set(value) { self._backend.setValue(self, newKey, value); } }); } else { prevBackendKeys.delete(newKey); } } }; for (var _iterator3 = currBackendKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { _loop4(); } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = prevBackendKeys[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var oldKey = _step4.value; delete this[oldKey]; } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } } } }, delete: { enumerable: false, writable: false, value: function value(key) { delete this[key]; this._backend.delete(this, key); } } }); module.exports = SimpleProxy; //# sourceMappingURL=simpleProxy.js.map