rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
22 lines (21 loc) • 866 B
JavaScript
export default function mergeClasses(target, ...sources) {
sources.forEach((s) => {
const source = s?.prototype ?? {};
const descriptors = Object.keys(source).reduce((descriptors, key) => {
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
return descriptors;
}, {});
Object.getOwnPropertyNames(source).forEach((key) => {
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
return descriptors;
});
Object.getOwnPropertySymbols(source).forEach((sym) => {
const descriptor = Object.getOwnPropertyDescriptor(source, sym);
if (descriptor.enumerable) {
descriptors[sym] = descriptor;
}
});
Object.defineProperties(target.prototype, descriptors);
});
return target;
}