From 5cf868a904b98d8e837e0ea9bce17b3aaf4326a1 Mon Sep 17 00:00:00 2001 From: DarkWiiPlayer Date: Wed, 23 Jun 2021 16:04:33 +0200 Subject: [PATCH] Add listener.js --- listener.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 listener.js diff --git a/listener.js b/listener.js new file mode 100644 index 0000000..b451b01 --- /dev/null +++ b/listener.js @@ -0,0 +1,25 @@ +export const listener = (target={}) => { + let callbacks = new Map() + function listen(prop, callback) { + if ("object" == typeof prop && "forEach" in prop) + prop.forEach(prop => this.listen(prop, callback)) + else if (callback) + callbacks.set(prop, callback) + else + callbacks.delete(prop) + } + let proxy = new Proxy(target, { + set: (target, prop, value) => { + if (callbacks.has("*")) callbacks.get("*")(value, prop) + if (callbacks.has(prop)) callbacks.get(prop)(value, prop) + return Reflect.set(target, prop, value) + }, + get: (target, prop, value) => { + if (prop == "listen") + return listen + else + return Reflect.get(target, prop) + } + }) + return proxy +}