Path: blob/main/src/client/native/object.js
305 views
import EventEmitter from "events";1import HookEvent from "../hook.js";23/**4* @typedef {import('../index').default} UVClient5*/67class ObjectHook extends EventEmitter {8/**9*10* @param {UVClient} ctx11*/12constructor(ctx) {13super();14this.ctx = ctx;15this.window = ctx.window;16this.Object = this.window.Object;17this.getOwnPropertyDescriptors = this.Object.getOwnPropertyDescriptors;18this.getOwnPropertyDescriptor = this.Object.getOwnPropertyDescriptor;19this.getOwnPropertyNames = this.Object.getOwnPropertyNames;20}21overrideGetPropertyNames() {22this.ctx.override(23this.Object,24"getOwnPropertyNames",25(target, that, args) => {26if (!args.length) return target.apply(that, args);27let [object] = args;2829const event = new HookEvent(30{ names: target.call(that, object) },31target,32that33);34this.emit("getOwnPropertyNames", event);3536if (event.intercepted) return event.returnValue;37return event.data.names;38}39);40}41overrideGetOwnPropertyDescriptors() {42this.ctx.override(43this.Object,44"getOwnPropertyDescriptors",45(target, that, args) => {46if (!args.length) return target.apply(that, args);47let [object] = args;4849const event = new HookEvent(50{ descriptors: target.call(that, object) },51target,52that53);54this.emit("getOwnPropertyDescriptors", event);5556if (event.intercepted) return event.returnValue;57return event.data.descriptors;58}59);60}61}6263export default ObjectHook;646566