UNPKG

ts-list-comprehension

Version:

List comprehension for TypeScript

48 lines 2.27 kB
"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.array = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var out_index = args.findIndex(function (a) { return typeof a == 'function'; }); var inputs = __spreadArrays(args).splice(0, out_index); var f = args[out_index]; var predicates = args.splice(out_index + 1); if (inputs.length == 1) return inputs[0].filter(function (v) { return predicates.every(function (p) { return p.apply(void 0, v); }); }).map(f); return cross_join(inputs).filter(function (v) { return predicates.every(function (p) { return p.apply(void 0, v); }); }).map(function (v) { return f.apply(void 0, v); }); }; exports.set = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return new Set(exports.array.apply(undefined, args)); }; var cross_join_with = function (current, next) { return next.map(function (n) { return current.map(function (c) { return c.concat(n); }); }).reduce(function (a, b) { return a.concat(b); }, []); }; var cross_join = function (sets) { var seed = sets.shift().map(function (x) { return [x]; }); return sets.reduce(cross_join_with, seed); }; exports.map = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var out_index = args.findIndex(function (a) { return typeof a == 'function'; }); var inputs = __spreadArrays(args).splice(0, out_index); var f = args[out_index]; var predicates = args.splice(out_index + 1); if (inputs.length == 1) return new Map(inputs[0].map(f)); return new Map(cross_join(inputs).filter(function (v) { return predicates.every(function (p) { return p.apply(void 0, v); }); }).map(f)); }; //# sourceMappingURL=comprehension.js.map