@ablestack/rdo
Version:
A library to facilitate building and running graphs of Reactive Domain Objects - connecting JSON data sources to reactive client applications
48 lines • 2.26 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.NodeTracker = void 0;
const logger_1 = require("./logger");
const logger = logger_1.Logger.make('NodeTracker');
class NodeTracker {
constructor() {
this._sourceNodeInstancePathStack = new Array();
this._sourceNodeTypePathStack = new Array();
}
pushSourceNodeInstancePathOntoStack(key, sourceNodeKind) {
logger.trace(`Node traversal - pushing SourceNode onto sourceNodeInstancePathStack: ${this.getSourceNodeInstancePath()} + ${key} (parent:${sourceNodeKind})`);
this._sourceNodeInstancePathStack.push(key.toString());
// reset locally cached dependencies
this._sourceNodeInstancePath = undefined;
// push to typepath if objectProperty
if (sourceNodeKind === 'Object') {
this._sourceNodeTypePathStack.push(key.toString());
// reset locally cached dependencies
this._sourceNodeTypePath = undefined;
}
}
popSourceNodeInstancePathFromStack(sourceNodeKind) {
const key = this._sourceNodeInstancePathStack.pop();
logger.trace(`Node traversal - popping ${key} off sourceNodeInstancePathStack: ${this.getSourceNodeInstancePath()} (${sourceNodeKind})`);
// reset locally cached dependencies
this._sourceNodeInstancePath = undefined;
// pop from typepath if objectProperty
if (sourceNodeKind === 'Object') {
this._sourceNodeTypePathStack.pop();
// reset locally cached dependencies
this._sourceNodeTypePath = undefined;
}
}
getSourceNodeInstancePath() {
if (!this._sourceNodeInstancePath)
this._sourceNodeInstancePath = this._sourceNodeInstancePathStack.join(NodeTracker.nodePathSeperator);
return this._sourceNodeInstancePath || '';
}
getSourceNodePath() {
if (!this._sourceNodeTypePath)
this._sourceNodeTypePath = this._sourceNodeTypePathStack.join(NodeTracker.nodePathSeperator);
return this._sourceNodeTypePath || '';
}
}
exports.NodeTracker = NodeTracker;
NodeTracker.nodePathSeperator = '/';
//# sourceMappingURL=node-tracker.js.map
;