Object observer
observe before get object's property
obj.sub.name;
observe before/after set object's property
obj.sub.name = "zale";
observe before/after apply object's method
obj.sub.change("lion");
observe before/after delete object's property
delete obj.sub.name;
Install
npm install @zalelion/ob
API
import { Observer } from "@zalelion/ob";
var obj = {};
const { proxy, emitter, use, isProxy } = new Observer(obj);
Middleware
Middle interface
interface MiddlewareConstructor {
new (ob: Observer<any>): Middleware;
}
interface Middleware {
get?: GetMiddle;
beforeSet?: BeforeSetMiddle;
afterSet?: AfterSetMiddle;
beforeApply?: BeforeApplyMiddle;
afterApply?: AfterApplyMiddle;
beforeDelete?: BeforeDeleteMiddele;
afterDelete?: AfterDeleteMiddle;
}
Custom JSON middleware
class JSONMiddle {
constructor(observer) {
this.observer = observer;
}
get({ root, parentPath, key }) {
if (value && !parentPath && key === "json") {
return JSON.parse(JSON.stringify(root));
}
return value;
}
}
Observe and use middleware
const { Observer, factory } = require("@zalelion/ob");
const obj = {
name: "Zale Lion",
change(name) {
this.name = name;
}
};
const { use, proxy: proxyObj } = new Observer(obj);
use(JSONMiddle);
use
console.log(proxyObj.json);
Third-party middleware
License
AGPL-3.0