PHP 8.2.30
Preview: implementation.js Size: 2.00 KB
//proc/thread-self/root/home/byroehnu/.trash/node_modules11/function-bind/implementation.js

'use strict';

/* eslint no-invalid-this: 1 */

var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
var toStr = Object.prototype.toString;
var max = Math.max;
var funcType = '[object Function]';

var concatty = function concatty(a, b) {
    var arr = [];

    for (var i = 0; i < a.length; i += 1) {
        arr[i] = a[i];
    }
    for (var j = 0; j < b.length; j += 1) {
        arr[j + a.length] = b[j];
    }

    return arr;
};

var slicy = function slicy(arrLike, offset) {
    var arr = [];
    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
        arr[j] = arrLike[i];
    }
    return arr;
};

var joiny = function (arr, joiner) {
    var str = '';
    for (var i = 0; i < arr.length; i += 1) {
        str += arr[i];
        if (i + 1 < arr.length) {
            str += joiner;
        }
    }
    return str;
};

module.exports = function bind(that) {
    var target = this;
    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
        throw new TypeError(ERROR_MESSAGE + target);
    }
    var args = slicy(arguments, 1);

    var bound;
    var binder = function () {
        if (this instanceof bound) {
            var result = target.apply(
                this,
                concatty(args, arguments)
            );
            if (Object(result) === result) {
                return result;
            }
            return this;
        }
        return target.apply(
            that,
            concatty(args, arguments)
        );

    };

    var boundLength = max(0, target.length - args.length);
    var boundArgs = [];
    for (var i = 0; i < boundLength; i++) {
        boundArgs[i] = '$' + i;
    }

    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);

    if (target.prototype) {
        var Empty = function Empty() {};
        Empty.prototype = target.prototype;
        bound.prototype = new Empty();
        Empty.prototype = null;
    }

    return bound;
};

Directory Contents

Dirs: 2 × Files: 8

Name Size Perms Modified Actions
.github DIR
- drwxr-xr-x 2026-02-03 15:06:18
Edit Download
test DIR
- drwxr-xr-x 2026-02-03 15:06:14
Edit Download
253 B lrw-r--r-- 2026-02-03 15:06:12
Edit Download
216 B lrw-r--r-- 2026-02-03 15:06:14
Edit Download
13.49 KB lrw-r--r-- 2026-02-03 15:06:16
Edit Download
2.00 KB lrw-r--r-- 2026-02-03 15:06:14
Edit Download
126 B lrw-r--r-- 2026-02-03 15:06:14
Edit Download
1.03 KB lrw-r--r-- 2026-02-03 15:06:14
Edit Download
2.21 KB lrw-r--r-- 2026-02-03 15:06:16
Edit Download
1.71 KB lrw-r--r-- 2026-02-03 15:06:18
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).