mosx
Version:
Multiview observable state management engine
120 lines • 10.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mosx = void 0;
const mobx_1 = require("mobx");
const internal_1 = require("./internal");
const snapshot_1 = require("./snapshot");
const admin_1 = require("./admin");
const mosx = Symbol("mosx");
class Mosx {
constructor(owner, tags = []) {
Mosx.inject(this, owner, tags);
}
static [Symbol.hasInstance](instance) {
return instance && instance[mosx] && instance[mosx] instanceof admin_1.MosxAdmin;
}
static inject(target, owner, tags = []) {
if ((target instanceof Mosx)) {
Mosx.setParent(owner);
Mosx.addTag(target, tags);
return target;
}
if (owner && !(owner instanceof Mosx)) {
throw Error("Owner must be Mosx object!");
}
// create mosxTreeNode for object
const tree = new admin_1.MosxAdmin(target, owner && owner[mosx]);
Object.defineProperty(target, mosx, { enumerable: false, writable: false, value: tree });
// make all mx computed observable
const classParams = Mosx.meta(target);
classParams.props.filter(({ getter }) => getter).forEach(({ key }) => {
const propDispose = (0, mobx_1.computed)(() => target[key]).observe((change) => {
if (tree.tracker) {
tree.tracker.computedChange(target, Object.assign(Object.assign({}, change), { name: key, object: target }));
}
});
tree.disposers.push(propDispose);
});
Mosx.addTag(target, tags);
return target;
}
static new(Class, parent, tags = []) {
return (...args) => {
const obj = new Class(...args);
parent && Mosx.setParent(obj, parent);
Mosx.addTag(obj, tags);
return obj;
};
}
static isParent(target, parent) {
if (target instanceof Mosx && parent instanceof Mosx) {
const targetParent = target[mosx].parent;
return targetParent === parent[mosx] || (targetParent && Mosx.isParent(targetParent.target, parent)) || false;
}
else {
return false;
}
}
static getParent(target) {
const parent = target instanceof Mosx && target[mosx].parent;
return parent && parent.target || null;
}
static setParent(target, owner) {
if (target instanceof Mosx) {
target[mosx].setParent(owner && owner[mosx]);
}
else {
Mosx.inject(target, owner);
}
}
static getSnapshot(target, tags, spy = false) {
tags = Array.isArray(tags) ? tags : tags && [tags] || undefined;
return (0, snapshot_1.snapshot)(target, { tags, spy });
}
static createTracker(target, params) {
if (!(target instanceof Mosx)) {
throw Error("Tracker can be created only for Mosx object!");
}
if (Mosx.getParent(target)) {
throw Error("Tracker can be created only for root object!");
}
const tracker = target[mosx].tracker || new internal_1.MosxTracker(target, params);
target[mosx].tracker = tracker;
return tracker;
}
static getTracker(target) {
return target instanceof Mosx ? target[mosx].tracker : null;
}
static getTags(target) {
return target instanceof Mosx ? target[mosx].tags : null;
}
static addTag(target, tags) {
if (target instanceof Mosx) {
target[mosx].addTag(tags);
}
else {
Mosx.inject(target, undefined, tags);
}
}
static deleteTag(target, id) {
if (!(target instanceof Mosx)) {
throw Error("Tags can be deleted only from Mosx object!");
}
target[mosx].deleteTag(id);
}
static meta(target) {
return target.constructor.$mx;
}
static destroy(target) {
if (!(target instanceof Mosx)) {
throw Error("TargetTags can be deleted only from Mosx object!");
}
const { parent } = target[mosx];
if (parent) {
parent.children.delete(target);
target[mosx].disposers.forEach((dispose) => dispose());
}
}
}
exports.Mosx = Mosx;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9zeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb3N4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQix5Q0FBMEU7QUFFMUUseUNBQXFDO0FBQ3JDLG1DQUFtQztBQUVuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFlM0IsTUFBc0IsSUFBSTtJQUl4QixZQUFZLEtBQVksRUFBRSxPQUEwQixFQUFFO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRU0sTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQWE7UUFDOUMsT0FBTyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxpQkFBUyxDQUFBO0lBQzFFLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQVcsRUFBRSxLQUFXLEVBQUUsT0FBMEIsRUFBRTtRQUN6RSxJQUFJLENBQUMsTUFBTSxZQUFZLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekIsT0FBTyxNQUFNLENBQUE7U0FDZDtRQUVELElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDckMsTUFBTSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtTQUMxQztRQUVELGlDQUFpQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN4RCxNQUFNLENBQUMsY0FBYyxD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