27 lines
922 B
JavaScript
27 lines
922 B
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
|
function partial(func, ...partialArgs) {
|
|
return partialImpl(func, placeholderSymbol, ...partialArgs);
|
|
}
|
|
function partialImpl(func, placeholder, ...partialArgs) {
|
|
const partialed = function (...providedArgs) {
|
|
let providedArgsIndex = 0;
|
|
const substitutedArgs = partialArgs
|
|
.slice()
|
|
.map(arg => (arg === placeholder ? providedArgs[providedArgsIndex++] : arg));
|
|
const remainingArgs = providedArgs.slice(providedArgsIndex);
|
|
return func.apply(this, substitutedArgs.concat(remainingArgs));
|
|
};
|
|
if (func.prototype) {
|
|
partialed.prototype = Object.create(func.prototype);
|
|
}
|
|
return partialed;
|
|
}
|
|
const placeholderSymbol = Symbol('partial.placeholder');
|
|
partial.placeholder = placeholderSymbol;
|
|
|
|
exports.partial = partial;
|
|
exports.partialImpl = partialImpl;
|