"use strict"; var call = Function.call; var throwsOnProto = require("./throws-on-proto"); var disallowedProperties = [ // ignore size because it throws from Map "size", "caller", "callee", "arguments", ]; // This branch is covered when tests are run with `--disable-proto=throw`, // however we can test both branches at the same time, so this is ignored /* istanbul ignore next */ if (throwsOnProto) { disallowedProperties.push("__proto__"); } module.exports = function copyPrototypeMethods(prototype) { // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods return Object.getOwnPropertyNames(prototype).reduce(function ( result, name ) { if (disallowedProperties.includes(name)) { return result; } if (typeof prototype[name] !== "function") { return result; } result[name] = call.bind(prototype[name]); return result; }, Object.create(null)); };