@aitianyu.cn/tianyu-store
Version:
tianyu storage for nodejs.
82 lines • 3.12 kB
JavaScript
;
/** @format */
Object.defineProperty(exports, "__esModule", { value: true });
exports.InstanceParentHolder = void 0;
const InstanceIdImpl_1 = require("../impl/InstanceIdImpl");
const Message_1 = require("../../infra/Message");
class InstanceParentHolder {
removed;
constructor() {
this.removed = {
root: "",
parent: "",
instances: [],
};
}
createInstance(instanceId, instanceMap) {
const parent = instanceId.parent;
const instanceIdString = instanceId.toString();
if (InstanceIdImpl_1.InstanceIdImpl.isAncestor(parent)) {
// parent is ancestor, raw instance should be root node
instanceMap.parentMap[instanceIdString] = null;
}
else {
// should check parent
const parentInstanceString = parent.toString();
const childrenList = instanceMap.childrenMap[parentInstanceString];
if (!childrenList) {
throw new Error(Message_1.MessageBundle.getText("CREATE_INSTANCE_PARENT_NOT_INIT", instanceIdString));
}
childrenList.push(instanceIdString);
// set parent relations
instanceMap.parentMap[instanceIdString] = parentInstanceString;
}
// always set child list
instanceMap.childrenMap[instanceIdString] = [];
}
applyChanges(instanceMap) {
for (const item of this.removed.instances) {
instanceMap.childrenMap[item] !== undefined && delete instanceMap.childrenMap[item];
instanceMap.parentMap[item] !== undefined && delete instanceMap.parentMap[item];
}
const rootChildren = instanceMap.childrenMap[this.removed.root];
if (rootChildren) {
rootChildren.splice(rootChildren.indexOf(this.removed.parent), 1);
}
this.removed = {
root: "",
parent: "",
instances: [],
};
}
discardChanges() {
this.removed = {
root: "",
parent: "",
instances: [],
};
}
removeInstance(instanceId, instanceMap) {
const parentInstanceIdString = instanceMap.parentMap[instanceId] || "";
const removedChildren = [instanceId, ...this.removeChild(instanceId, instanceMap)];
this.removed = {
root: parentInstanceIdString,
parent: instanceId,
instances: removedChildren,
};
return removedChildren;
}
removeChild(instanceId, instanceMap) {
const instances = [];
const childrens = instanceMap.childrenMap[instanceId] || [];
for (const child of childrens) {
// remove all children
const removedChildren = this.removeChild(child, instanceMap);
instances.push(child);
instances.push(...removedChildren);
}
return instances;
}
}
exports.InstanceParentHolder = InstanceParentHolder;
//# sourceMappingURL=InstanceParentHolder.js.map