mosx
Version:
Multiview observable state management engine
90 lines • 7.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SchemaSerializer = void 0;
const mobx_1 = require("mobx");
const internal_1 = require("../internal");
const patchpack_1 = require("patchpack");
const _1 = require(".");
class SchemaSerializer extends _1.Serializer {
constructor(tracker) {
super(tracker);
tracker.privateMapValuePatch = true;
}
onCreate() {
this.deleted = -1;
this.patchPack = new patchpack_1.PatchPack();
const { _types } = this.patchPack.schema;
// add mosx types to schema map
internal_1.mx.$context.types.forEach((type) => {
const meta = internal_1.mx.$context.meta.get(type.name);
if (!meta) {
return;
}
// this.patchPack.schema.addType(type.name, type.$mx.props.map((prop: any) => prop.key), type)
const index = _types.length;
_types.push({ name: type.name, props: type.$mx.props.map((prop) => prop.key), index, ref: type });
});
}
onCreateNode(entry, target) {
const schema = this.patchPack.schema;
const parentId = entry.parent ? entry.parent.id : -1;
const parent = schema.getNode(parentId);
// if (parent && parent.type === MAP_NODE) {
// parent.keys!.push(entry.path)
// }
const index = parent ? schema.getChildIndex(parent, entry.path) : -1;
if (target instanceof mobx_1.ObservableMap) {
// add map node to schema
schema.createNode(entry.id, parent, -2, entry.path, index);
// patch = schema.nodesAddMap(entry.id, parentId, entry.path, [...target.keys()])
}
else if (target instanceof mobx_1.ObservableSet) {
// TODO add ObservableSet
}
else if (Array.isArray(target)) {
// add array node to schema
schema.createNode(entry.id, parent, -1, entry.path, index);
}
else if (target instanceof internal_1.Mosx) {
// add mosx node to schema
const type = schema.typeByName(entry.meta.type);
schema.createNode(entry.id, parent, type, entry.path, index);
}
}
onDeleteNode(entry) {
if (this.deleted === -1) {
this.deleted = entry.id;
const node = this.patchPack.schema.getNode(this.deleted);
this.patchPack.schema.deleteNode(node);
}
}
afterChange(change) {
if (this.deleted >= 0) {
this.deleted = -1;
this.patchPack.schema.clearDeleted();
}
}
beforeChange(change, parent) {
if ((0, mobx_1.isObservableMap)(change.object) && change.type === "add") {
const node = this.patchPack.schema.getNode(parent.id);
if (!node) {
return;
}
node.keys.push(change.name);
}
}
encodeSnapshot(value) {
return this.patchPack.encodeState(value, true, false);
}
decodeSnapshot(buffer) {
return this.patchPack.decodeState(buffer);
}
encodePatch(patch, entry) {
return this.patchPack.encodePatch(patch, false);
}
decodePatch(buffer) {
return this.patchPack.decodePatch(buffer);
}
}
exports.SchemaSerializer = SchemaSerializer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXIvc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFvRTtBQUVwRSwwQ0FBNkY7QUFDN0YseUNBQXFDO0FBQ3JDLHdCQUE4QjtBQUU5QixNQUFhLGdCQUFpQixTQUFRLGFBQVU7SUFJOUMsWUFBYSxPQUFvQjtRQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFZCxPQUFPLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO0lBQ3JDLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUVqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFBO1FBRWhDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQWEsQ0FBQTtRQUUvQywrQkFBK0I7UUFDL0IsYUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsYUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUFFLE9BQU07YUFBRTtZQUNyQiw4RkFBOEY7WUFDOUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFB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