You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
716 lines
15 KiB
716 lines
15 KiB
// Generated by LiveScript 1.6.0 |
|
var each, map, compact, filter, reject, remove, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString; |
|
each = curry$(function(f, xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
f(x); |
|
} |
|
return xs; |
|
}); |
|
map = curry$(function(f, xs){ |
|
var i$, len$, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
results$.push(f(x)); |
|
} |
|
return results$; |
|
}); |
|
compact = function(xs){ |
|
var i$, len$, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (x) { |
|
results$.push(x); |
|
} |
|
} |
|
return results$; |
|
}; |
|
filter = curry$(function(f, xs){ |
|
var i$, len$, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (f(x)) { |
|
results$.push(x); |
|
} |
|
} |
|
return results$; |
|
}); |
|
reject = curry$(function(f, xs){ |
|
var i$, len$, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (!f(x)) { |
|
results$.push(x); |
|
} |
|
} |
|
return results$; |
|
}); |
|
remove = curry$(function(el, xs){ |
|
var i, x$; |
|
i = elemIndex(el, xs); |
|
x$ = xs.slice(); |
|
if (i != null) { |
|
x$.splice(i, 1); |
|
} |
|
return x$; |
|
}); |
|
partition = curry$(function(f, xs){ |
|
var passed, failed, i$, len$, x; |
|
passed = []; |
|
failed = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
(f(x) ? passed : failed).push(x); |
|
} |
|
return [passed, failed]; |
|
}); |
|
find = curry$(function(f, xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (f(x)) { |
|
return x; |
|
} |
|
} |
|
}); |
|
head = first = function(xs){ |
|
return xs[0]; |
|
}; |
|
tail = function(xs){ |
|
if (!xs.length) { |
|
return; |
|
} |
|
return xs.slice(1); |
|
}; |
|
last = function(xs){ |
|
return xs[xs.length - 1]; |
|
}; |
|
initial = function(xs){ |
|
if (!xs.length) { |
|
return; |
|
} |
|
return xs.slice(0, -1); |
|
}; |
|
empty = function(xs){ |
|
return !xs.length; |
|
}; |
|
reverse = function(xs){ |
|
return xs.concat().reverse(); |
|
}; |
|
unique = function(xs){ |
|
var result, i$, len$, x; |
|
result = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (!in$(x, result)) { |
|
result.push(x); |
|
} |
|
} |
|
return result; |
|
}; |
|
uniqueBy = curry$(function(f, xs){ |
|
var seen, i$, len$, x, val, results$ = []; |
|
seen = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
val = f(x); |
|
if (in$(val, seen)) { |
|
continue; |
|
} |
|
seen.push(val); |
|
results$.push(x); |
|
} |
|
return results$; |
|
}); |
|
fold = foldl = curry$(function(f, memo, xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
memo = f(memo, x); |
|
} |
|
return memo; |
|
}); |
|
fold1 = foldl1 = curry$(function(f, xs){ |
|
return fold(f, xs[0], xs.slice(1)); |
|
}); |
|
foldr = curry$(function(f, memo, xs){ |
|
var i$, x; |
|
for (i$ = xs.length - 1; i$ >= 0; --i$) { |
|
x = xs[i$]; |
|
memo = f(x, memo); |
|
} |
|
return memo; |
|
}); |
|
foldr1 = curry$(function(f, xs){ |
|
return foldr(f, xs[xs.length - 1], xs.slice(0, -1)); |
|
}); |
|
unfoldr = curry$(function(f, b){ |
|
var result, x, that; |
|
result = []; |
|
x = b; |
|
while ((that = f(x)) != null) { |
|
result.push(that[0]); |
|
x = that[1]; |
|
} |
|
return result; |
|
}); |
|
concat = function(xss){ |
|
return [].concat.apply([], xss); |
|
}; |
|
concatMap = curry$(function(f, xs){ |
|
var x; |
|
return [].concat.apply([], (function(){ |
|
var i$, ref$, len$, results$ = []; |
|
for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
results$.push(f(x)); |
|
} |
|
return results$; |
|
}())); |
|
}); |
|
flatten = function(xs){ |
|
var x; |
|
return [].concat.apply([], (function(){ |
|
var i$, ref$, len$, results$ = []; |
|
for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
if (toString$.call(x).slice(8, -1) === 'Array') { |
|
results$.push(flatten(x)); |
|
} else { |
|
results$.push(x); |
|
} |
|
} |
|
return results$; |
|
}())); |
|
}; |
|
difference = function(xs){ |
|
var yss, res$, i$, to$, results, len$, x, j$, len1$, ys; |
|
res$ = []; |
|
for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { |
|
res$.push(arguments[i$]); |
|
} |
|
yss = res$; |
|
results = []; |
|
outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { |
|
ys = yss[j$]; |
|
if (in$(x, ys)) { |
|
continue outer; |
|
} |
|
} |
|
results.push(x); |
|
} |
|
return results; |
|
}; |
|
intersection = function(xs){ |
|
var yss, res$, i$, to$, results, len$, x, j$, len1$, ys; |
|
res$ = []; |
|
for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { |
|
res$.push(arguments[i$]); |
|
} |
|
yss = res$; |
|
results = []; |
|
outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { |
|
ys = yss[j$]; |
|
if (!in$(x, ys)) { |
|
continue outer; |
|
} |
|
} |
|
results.push(x); |
|
} |
|
return results; |
|
}; |
|
union = function(){ |
|
var xss, res$, i$, to$, results, len$, xs, j$, len1$, x; |
|
res$ = []; |
|
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) { |
|
res$.push(arguments[i$]); |
|
} |
|
xss = res$; |
|
results = []; |
|
for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { |
|
xs = xss[i$]; |
|
for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) { |
|
x = xs[j$]; |
|
if (!in$(x, results)) { |
|
results.push(x); |
|
} |
|
} |
|
} |
|
return results; |
|
}; |
|
countBy = curry$(function(f, xs){ |
|
var results, i$, len$, x, key; |
|
results = {}; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
key = f(x); |
|
if (key in results) { |
|
results[key] += 1; |
|
} else { |
|
results[key] = 1; |
|
} |
|
} |
|
return results; |
|
}); |
|
groupBy = curry$(function(f, xs){ |
|
var results, i$, len$, x, key; |
|
results = {}; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
key = f(x); |
|
if (key in results) { |
|
results[key].push(x); |
|
} else { |
|
results[key] = [x]; |
|
} |
|
} |
|
return results; |
|
}); |
|
andList = function(xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (!x) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
}; |
|
orList = function(xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (x) { |
|
return true; |
|
} |
|
} |
|
return false; |
|
}; |
|
any = curry$(function(f, xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (f(x)) { |
|
return true; |
|
} |
|
} |
|
return false; |
|
}); |
|
all = curry$(function(f, xs){ |
|
var i$, len$, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
if (!f(x)) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
}); |
|
sort = function(xs){ |
|
return xs.concat().sort(function(x, y){ |
|
if (x > y) { |
|
return 1; |
|
} else if (x < y) { |
|
return -1; |
|
} else { |
|
return 0; |
|
} |
|
}); |
|
}; |
|
sortWith = curry$(function(f, xs){ |
|
return xs.concat().sort(f); |
|
}); |
|
sortBy = curry$(function(f, xs){ |
|
return xs.concat().sort(function(x, y){ |
|
if (f(x) > f(y)) { |
|
return 1; |
|
} else if (f(x) < f(y)) { |
|
return -1; |
|
} else { |
|
return 0; |
|
} |
|
}); |
|
}); |
|
sum = function(xs){ |
|
var result, i$, len$, x; |
|
result = 0; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
result += x; |
|
} |
|
return result; |
|
}; |
|
product = function(xs){ |
|
var result, i$, len$, x; |
|
result = 1; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
result *= x; |
|
} |
|
return result; |
|
}; |
|
mean = average = function(xs){ |
|
var sum, i$, len$, x; |
|
sum = 0; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
x = xs[i$]; |
|
sum += x; |
|
} |
|
return sum / xs.length; |
|
}; |
|
maximum = function(xs){ |
|
var max, i$, ref$, len$, x; |
|
max = xs[0]; |
|
for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
if (x > max) { |
|
max = x; |
|
} |
|
} |
|
return max; |
|
}; |
|
minimum = function(xs){ |
|
var min, i$, ref$, len$, x; |
|
min = xs[0]; |
|
for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
if (x < min) { |
|
min = x; |
|
} |
|
} |
|
return min; |
|
}; |
|
maximumBy = curry$(function(f, xs){ |
|
var max, i$, ref$, len$, x; |
|
max = xs[0]; |
|
for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
if (f(x) > f(max)) { |
|
max = x; |
|
} |
|
} |
|
return max; |
|
}); |
|
minimumBy = curry$(function(f, xs){ |
|
var min, i$, ref$, len$, x; |
|
min = xs[0]; |
|
for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
if (f(x) < f(min)) { |
|
min = x; |
|
} |
|
} |
|
return min; |
|
}); |
|
scan = scanl = curry$(function(f, memo, xs){ |
|
var last, x; |
|
last = memo; |
|
return [memo].concat((function(){ |
|
var i$, ref$, len$, results$ = []; |
|
for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { |
|
x = ref$[i$]; |
|
results$.push(last = f(last, x)); |
|
} |
|
return results$; |
|
}())); |
|
}); |
|
scan1 = scanl1 = curry$(function(f, xs){ |
|
if (!xs.length) { |
|
return; |
|
} |
|
return scan(f, xs[0], xs.slice(1)); |
|
}); |
|
scanr = curry$(function(f, memo, xs){ |
|
xs = xs.concat().reverse(); |
|
return scan(f, memo, xs).reverse(); |
|
}); |
|
scanr1 = curry$(function(f, xs){ |
|
if (!xs.length) { |
|
return; |
|
} |
|
xs = xs.concat().reverse(); |
|
return scan(f, xs[0], xs.slice(1)).reverse(); |
|
}); |
|
slice = curry$(function(x, y, xs){ |
|
return xs.slice(x, y); |
|
}); |
|
take = curry$(function(n, xs){ |
|
if (n <= 0) { |
|
return xs.slice(0, 0); |
|
} else { |
|
return xs.slice(0, n); |
|
} |
|
}); |
|
drop = curry$(function(n, xs){ |
|
if (n <= 0) { |
|
return xs; |
|
} else { |
|
return xs.slice(n); |
|
} |
|
}); |
|
splitAt = curry$(function(n, xs){ |
|
return [take(n, xs), drop(n, xs)]; |
|
}); |
|
takeWhile = curry$(function(p, xs){ |
|
var len, i; |
|
len = xs.length; |
|
if (!len) { |
|
return xs; |
|
} |
|
i = 0; |
|
while (i < len && p(xs[i])) { |
|
i += 1; |
|
} |
|
return xs.slice(0, i); |
|
}); |
|
dropWhile = curry$(function(p, xs){ |
|
var len, i; |
|
len = xs.length; |
|
if (!len) { |
|
return xs; |
|
} |
|
i = 0; |
|
while (i < len && p(xs[i])) { |
|
i += 1; |
|
} |
|
return xs.slice(i); |
|
}); |
|
span = curry$(function(p, xs){ |
|
return [takeWhile(p, xs), dropWhile(p, xs)]; |
|
}); |
|
breakList = curry$(function(p, xs){ |
|
return span(compose$(p, not$), xs); |
|
}); |
|
zip = curry$(function(xs, ys){ |
|
var result, len, i$, len$, i, x; |
|
result = []; |
|
len = ys.length; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (i === len) { |
|
break; |
|
} |
|
result.push([x, ys[i]]); |
|
} |
|
return result; |
|
}); |
|
zipWith = curry$(function(f, xs, ys){ |
|
var result, len, i$, len$, i, x; |
|
result = []; |
|
len = ys.length; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (i === len) { |
|
break; |
|
} |
|
result.push(f(x, ys[i])); |
|
} |
|
return result; |
|
}); |
|
zipAll = function(){ |
|
var xss, res$, i$, to$, minLength, len$, xs, ref$, i, lresult$, j$, results$ = []; |
|
res$ = []; |
|
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) { |
|
res$.push(arguments[i$]); |
|
} |
|
xss = res$; |
|
minLength = undefined; |
|
for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { |
|
xs = xss[i$]; |
|
minLength <= (ref$ = xs.length) || (minLength = ref$); |
|
} |
|
for (i$ = 0; i$ < minLength; ++i$) { |
|
i = i$; |
|
lresult$ = []; |
|
for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) { |
|
xs = xss[j$]; |
|
lresult$.push(xs[i]); |
|
} |
|
results$.push(lresult$); |
|
} |
|
return results$; |
|
}; |
|
zipAllWith = function(f){ |
|
var xss, res$, i$, to$, minLength, len$, xs, ref$, i, results$ = []; |
|
res$ = []; |
|
for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { |
|
res$.push(arguments[i$]); |
|
} |
|
xss = res$; |
|
minLength = undefined; |
|
for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { |
|
xs = xss[i$]; |
|
minLength <= (ref$ = xs.length) || (minLength = ref$); |
|
} |
|
for (i$ = 0; i$ < minLength; ++i$) { |
|
i = i$; |
|
results$.push(f.apply(null, (fn$()))); |
|
} |
|
return results$; |
|
function fn$(){ |
|
var i$, ref$, len$, results$ = []; |
|
for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) { |
|
xs = ref$[i$]; |
|
results$.push(xs[i]); |
|
} |
|
return results$; |
|
} |
|
}; |
|
at = curry$(function(n, xs){ |
|
if (n < 0) { |
|
return xs[xs.length + n]; |
|
} else { |
|
return xs[n]; |
|
} |
|
}); |
|
elemIndex = curry$(function(el, xs){ |
|
var i$, len$, i, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (x === el) { |
|
return i; |
|
} |
|
} |
|
}); |
|
elemIndices = curry$(function(el, xs){ |
|
var i$, len$, i, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (x === el) { |
|
results$.push(i); |
|
} |
|
} |
|
return results$; |
|
}); |
|
findIndex = curry$(function(f, xs){ |
|
var i$, len$, i, x; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (f(x)) { |
|
return i; |
|
} |
|
} |
|
}); |
|
findIndices = curry$(function(f, xs){ |
|
var i$, len$, i, x, results$ = []; |
|
for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { |
|
i = i$; |
|
x = xs[i$]; |
|
if (f(x)) { |
|
results$.push(i); |
|
} |
|
} |
|
return results$; |
|
}); |
|
module.exports = { |
|
each: each, |
|
map: map, |
|
filter: filter, |
|
compact: compact, |
|
reject: reject, |
|
remove: remove, |
|
partition: partition, |
|
find: find, |
|
head: head, |
|
first: first, |
|
tail: tail, |
|
last: last, |
|
initial: initial, |
|
empty: empty, |
|
reverse: reverse, |
|
difference: difference, |
|
intersection: intersection, |
|
union: union, |
|
countBy: countBy, |
|
groupBy: groupBy, |
|
fold: fold, |
|
fold1: fold1, |
|
foldl: foldl, |
|
foldl1: foldl1, |
|
foldr: foldr, |
|
foldr1: foldr1, |
|
unfoldr: unfoldr, |
|
andList: andList, |
|
orList: orList, |
|
any: any, |
|
all: all, |
|
unique: unique, |
|
uniqueBy: uniqueBy, |
|
sort: sort, |
|
sortWith: sortWith, |
|
sortBy: sortBy, |
|
sum: sum, |
|
product: product, |
|
mean: mean, |
|
average: average, |
|
concat: concat, |
|
concatMap: concatMap, |
|
flatten: flatten, |
|
maximum: maximum, |
|
minimum: minimum, |
|
maximumBy: maximumBy, |
|
minimumBy: minimumBy, |
|
scan: scan, |
|
scan1: scan1, |
|
scanl: scanl, |
|
scanl1: scanl1, |
|
scanr: scanr, |
|
scanr1: scanr1, |
|
slice: slice, |
|
take: take, |
|
drop: drop, |
|
splitAt: splitAt, |
|
takeWhile: takeWhile, |
|
dropWhile: dropWhile, |
|
span: span, |
|
breakList: breakList, |
|
zip: zip, |
|
zipWith: zipWith, |
|
zipAll: zipAll, |
|
zipAllWith: zipAllWith, |
|
at: at, |
|
elemIndex: elemIndex, |
|
elemIndices: elemIndices, |
|
findIndex: findIndex, |
|
findIndices: findIndices |
|
}; |
|
function curry$(f, bound){ |
|
var context, |
|
_curry = function(args) { |
|
return f.length > 1 ? function(){ |
|
var params = args ? args.concat() : []; |
|
context = bound ? context || this : this; |
|
return params.push.apply(params, arguments) < |
|
f.length && arguments.length ? |
|
_curry.call(context, params) : f.apply(context, params); |
|
} : f; |
|
}; |
|
return _curry(); |
|
} |
|
function in$(x, xs){ |
|
var i = -1, l = xs.length >>> 0; |
|
while (++i < l) if (x === xs[i]) return true; |
|
return false; |
|
} |
|
function compose$() { |
|
var functions = arguments; |
|
return function() { |
|
var i, result; |
|
result = functions[0].apply(this, arguments); |
|
for (i = 1; i < functions.length; ++i) { |
|
result = functions[i](result); |
|
} |
|
return result; |
|
}; |
|
} |
|
function not$(x){ return !x; } |