@turbox3d/reactivity
Version:
Large-scale reactive state management library
89 lines (88 loc) • 4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.materialCallStack = exports.MaterialCallStack = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _config = require("../const/config");
var _event = require("./event");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var MaterialCallStack = exports.MaterialCallStack = /*#__PURE__*/function () {
function MaterialCallStack() {
(0, _classCallCheck2["default"])(this, MaterialCallStack);
this.stack = [];
this.pendingToPopStack = [];
this.stackId = 0;
}
return (0, _createClass2["default"])(MaterialCallStack, [{
key: "push",
value: function push(item) {
this.stackId += 1;
var record = _objectSpread(_objectSpread({}, item), {}, {
stackId: this.stackId
});
this.currentStack = record;
this.stack.push(record);
if (_config.ctx.devTool) {
_event.emitter.emit(_event.EEventName.materialCallStackChange, {
stack: (0, _toConsumableArray2["default"])(this.stack),
action: 'PUSH',
time: Date.now(),
currentStack: record
});
}
return this.stackId;
}
}, {
key: "pop",
value: function pop(stackId) {
var _a;
if (this.stack.length === 0) {
return;
}
if (this.stack[this.stack.length - 1].stackId !== stackId) {
this.pendingToPopStack.unshift(stackId);
} else {
this.currentStack = undefined;
var data = this.stack.pop();
if (_config.ctx.devTool) {
_event.emitter.emit(_event.EEventName.materialCallStackChange, {
stack: (0, _toConsumableArray2["default"])(this.stack),
action: 'POP',
time: Date.now(),
currentStack: data
});
}
}
var newPendingToPopStack = (0, _toConsumableArray2["default"])(this.pendingToPopStack);
for (var index = 0; index < this.pendingToPopStack.length; index += 1) {
var id = this.pendingToPopStack[index];
if (((_a = this.stack[this.stack.length - 1]) === null || _a === void 0 ? void 0 : _a.stackId) === id) {
var _data = this.stack.pop();
newPendingToPopStack.splice(index, 1);
this.currentStack = this.stack[this.stack.length - 1];
if (_config.ctx.devTool) {
_event.emitter.emit(_event.EEventName.materialCallStackChange, {
stack: (0, _toConsumableArray2["default"])(this.stack),
action: 'POP',
time: Date.now(),
currentStack: _data
});
}
} else {
break;
}
}
this.pendingToPopStack = newPendingToPopStack;
if (this.pendingToPopStack.length === 0) {
this.currentStack = undefined;
}
}
}]);
}();
var materialCallStack = exports.materialCallStack = new MaterialCallStack();