Skip to content
Snippets Groups Projects
Select Git revision
  • 9cb9b17af5950ac779d34b3f40a0d21271dc8ca5
  • main default protected
2 results

index.js

Blame
  • index.js 1.01 KiB
    'use strict';
    
    var bind = require('function-bind');
    var GetIntrinsic = require('get-intrinsic');
    var setFunctionLength = require('set-function-length');
    
    var $TypeError = require('es-errors/type');
    var $apply = GetIntrinsic('%Function.prototype.apply%');
    var $call = GetIntrinsic('%Function.prototype.call%');
    var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
    
    var $defineProperty = require('es-define-property');
    var $max = GetIntrinsic('%Math.max%');
    
    module.exports = function callBind(originalFunction) {
    	if (typeof originalFunction !== 'function') {
    		throw new $TypeError('a function is required');
    	}
    	var func = $reflectApply(bind, $call, arguments);
    	return setFunctionLength(
    		func,
    		1 + $max(0, originalFunction.length - (arguments.length - 1)),
    		true
    	);
    };
    
    var applyBind = function applyBind() {
    	return $reflectApply(bind, $apply, arguments);
    };
    
    if ($defineProperty) {
    	$defineProperty(module.exports, 'apply', { value: applyBind });
    } else {
    	module.exports.apply = applyBind;
    }