UNPKG

mosx

Version:

Multiview observable state management engine

120 lines 10.3 kB
"use strict"; 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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