UNPKG

surrogate

Version:

Object method hooks made easy

55 lines (48 loc) 2.1 kB
var $69e6bb98e7bc51ac$exports = require("./surrogate.5de640eb.js"); function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } $parcel$export(module.exports, "MethodIdentifier", () => $dc3c4ef945810111$export$1f0bc0d8e047b444); class $dc3c4ef945810111$export$1f0bc0d8e047b444 { constructor(instance){ this.instance = instance; } doesNotIncludeEvent(event, methods) { return !this.doesIncludeEvent(event) || !this.matchEvent(event, methods); } doesIncludeEvent(event) { return this.instanceMethodNames().includes(event); } matchEvent(event, methods) { return methods.filter((v)=>v).map((method)=>new RegExp(method)).some((regex)=>regex.test(event)); } getApplicableMethods(event, methods) { const methodTest = new RegExp(event); return methods.includes(event) ? [ event ] : methods.filter((method)=>methodTest.test(method)); } instanceMethodNames() { const prototype = Reflect.getPrototypeOf(this.instance) || {}; const properties = this.getPropertyNames(); return properties.filter((prop)=>prop !== 'constructor').filter((name)=>this.isNotProperty(name)).filter((name)=>this.isNotAccessor(name, prototype)); } isNotProperty(name) { const descriptor = Reflect.getOwnPropertyDescriptor(this.instance, name); return (0, $69e6bb98e7bc51ac$exports.isUndefined)(descriptor); } isNotAccessor(name, prototype) { const descriptor = Reflect.getOwnPropertyDescriptor(prototype, name); return (0, $69e6bb98e7bc51ac$exports.isUndefined)(descriptor?.get) && (0, $69e6bb98e7bc51ac$exports.isUndefined)(descriptor?.set); } getPropertyNames() { const props = []; let current = this.instance; do props.push(Object.getOwnPropertyNames(current)); while (current = Reflect.getPrototypeOf(current)); return [ ...new Set(props.flat()).values() ]; } } //# sourceMappingURL=surrogate.f2c14ea0.js.map