source: node_modules/es-toolkit/dist/compat/function/curry.js@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 2.0 KB
Line 
1'use strict';
2
3Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
5function curry(func, arity = func.length, guard) {
6 arity = guard ? func.length : arity;
7 arity = Number.parseInt(arity, 10);
8 if (Number.isNaN(arity) || arity < 1) {
9 arity = 0;
10 }
11 const wrapper = function (...partialArgs) {
12 const holders = partialArgs.filter(item => item === curry.placeholder);
13 const length = partialArgs.length - holders.length;
14 if (length < arity) {
15 return makeCurry(func, arity - length, partialArgs);
16 }
17 if (this instanceof wrapper) {
18 return new func(...partialArgs);
19 }
20 return func.apply(this, partialArgs);
21 };
22 wrapper.placeholder = curryPlaceholder;
23 return wrapper;
24}
25function makeCurry(func, arity, partialArgs) {
26 function wrapper(...providedArgs) {
27 const holders = providedArgs.filter(item => item === curry.placeholder);
28 const length = providedArgs.length - holders.length;
29 providedArgs = composeArgs(providedArgs, partialArgs);
30 if (length < arity) {
31 return makeCurry(func, arity - length, providedArgs);
32 }
33 if (this instanceof wrapper) {
34 return new func(...providedArgs);
35 }
36 return func.apply(this, providedArgs);
37 }
38 wrapper.placeholder = curryPlaceholder;
39 return wrapper;
40}
41function composeArgs(providedArgs, partialArgs) {
42 const args = [];
43 let startIndex = 0;
44 for (let i = 0; i < partialArgs.length; i++) {
45 const arg = partialArgs[i];
46 if (arg === curry.placeholder && startIndex < providedArgs.length) {
47 args.push(providedArgs[startIndex++]);
48 }
49 else {
50 args.push(arg);
51 }
52 }
53 for (let i = startIndex; i < providedArgs.length; i++) {
54 args.push(providedArgs[i]);
55 }
56 return args;
57}
58const curryPlaceholder = Symbol('curry.placeholder');
59curry.placeholder = curryPlaceholder;
60
61exports.curry = curry;
Note: See TracBrowser for help on using the repository browser.