ts-list-comprehension
Version:
List comprehension for TypeScript
48 lines • 2.27 kB
JavaScript
;
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