surrogate
Version:
Object method hooks made easy
55 lines (48 loc) • 2.1 kB
JavaScript
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