"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTraversableWithIndex = exports.getFoldableWithIndex = exports.reduceRightWithIndex = exports.foldMapWithIndex = exports.reduceWithIndex = exports.getFoldable = exports.reduceRight = exports.foldMap = exports.reduce = exports.getWitherable = exports.getFilterableWithIndex = exports.getDifferenceMagma = exports.getIntersectionSemigroup = exports.getUnionMonoid = exports.getUnionSemigroup = exports.URI = exports.separate = exports.partitionMap = exports.partition = exports.mapWithIndex = exports.map = exports.filterMap = exports.filter = exports.compact = exports.filterWithIndex = exports.filterMapWithIndex = exports.partitionWithIndex = exports.partitionMapWithIndex = exports.fromFoldable = exports.singleton = exports.getMonoid = exports.getEq = exports.isSubmap = exports.lookup = exports.lookupWithKey = exports.pop = exports.modifyAt = exports.updateAt = exports.deleteAt = exports.upsertAt = exports.toUnfoldable = exports.toArray = exports.collect = exports.values = exports.keys = exports.elem = exports.member = exports.isEmpty = exports.size = exports.getShow = void 0; exports.map_ = exports.insertAt = exports.empty = exports.difference = exports.intersection = exports.union = exports.Filterable = exports.Compactable = exports.flap = exports.Functor = void 0; var function_1 = require("./function"); var Functor_1 = require("./Functor"); var _ = __importStar(require("./internal")); var O = __importStar(require("./Option")); var RM = __importStar(require("./ReadonlyMap")); var Separated_1 = require("./Separated"); var Witherable_1 = require("./Witherable"); /** * @category instances * @since 2.0.0 */ exports.getShow = RM.getShow; /** * Calculate the number of key/value pairs in a map * * @since 2.0.0 */ exports.size = RM.size; /** * Test whether or not a map is empty * * @since 2.0.0 */ exports.isEmpty = RM.isEmpty; // TODO: remove non-curried overloading in v3 /** * Test whether or not a key exists in a map * * @since 2.0.0 */ exports.member = RM.member; // TODO: remove non-curried overloading in v3 /** * Test whether or not a value is a member of a map * * @since 2.0.0 */ exports.elem = RM.elem; /** * Get a sorted `Array` of the keys contained in a `Map`. * * @since 2.0.0 */ var keys = function (O) { return function (m) { return Array.from(m.keys()).sort(O.compare); }; }; exports.keys = keys; /** * Get a sorted `Array` of the values contained in a `Map`. * * @since 2.0.0 */ var values = function (O) { return function (m) { return Array.from(m.values()).sort(O.compare); }; }; exports.values = values; /** * @since 2.0.0 */ function collect(O) { var keysO = (0, exports.keys)(O); return function (f) { return function (m) { var out = []; var ks = keysO(m); for (var _i = 0, ks_1 = ks; _i < ks_1.length; _i++) { var key = ks_1[_i]; out.push(f(key, m.get(key))); } return out; }; }; } exports.collect = collect; /** * Get a sorted `Array` of the key/value pairs contained in a `Map`. * * @since 2.0.0 */ function toArray(O) { return collect(O)(function (k, a) { return [k, a]; }); } exports.toArray = toArray; function toUnfoldable(ord, U) { var toArrayO = toArray(ord); return function (d) { var kas = toArrayO(d); var len = kas.length; return U.unfold(0, function (b) { return (b < len ? _.some([kas[b], b + 1]) : _.none); }); }; } exports.toUnfoldable = toUnfoldable; /** * Insert or replace a key/value pair in a `Map`. * * @since 2.0.0 */ var upsertAt = function (E) { var lookupWithKeyE = lookupWithKey(E); return function (k, a) { var lookupWithKeyEk = lookupWithKeyE(k); return function (m) { var found = lookupWithKeyEk(m); if (_.isNone(found)) { var out = new Map(m); out.set(k, a); return out; } else if (found.value[1] !== a) { var out = new Map(m); out.set(found.value[0], a); return out; } return m; }; }; }; exports.upsertAt = upsertAt; /** * Delete a key and value from a map * * @since 2.0.0 */ var deleteAt = function (E) { var lookupWithKeyE = lookupWithKey(E); return function (k) { return function (m) { var found = lookupWithKeyE(k, m); if (_.isSome(found)) { var r = new Map(m); r.delete(found.value[0]); return r; } return m; }; }; }; exports.deleteAt = deleteAt; /** * @since 2.0.0 */ var updateAt = function (E) { var modifyAtE = (0, exports.modifyAt)(E); return function (k, a) { return modifyAtE(k, function () { return a; }); }; }; exports.updateAt = updateAt; /** * @since 2.0.0 */ var modifyAt = function (E) { var lookupWithKeyE = lookupWithKey(E); return function (k, f) { return function (m) { var found = lookupWithKeyE(k, m); if (_.isNone(found)) { return _.none; } var r = new Map(m); r.set(found.value[0], f(found.value[1])); return _.some(r); }; }; }; exports.modifyAt = modifyAt; /** * Delete a key and value from a map, returning the value as well as the subsequent map * * @since 2.0.0 */ function pop(E) { var lookupE = (0, exports.lookup)(E); var deleteAtE = (0, exports.deleteAt)(E); return function (k) { var deleteAtEk = deleteAtE(k); return function (m) { return (0, function_1.pipe)(lookupE(k, m), O.map(function (a) { return [a, deleteAtEk(m)]; })); }; }; } exports.pop = pop; function lookupWithKey(E) { return function (k, m) { if (m === undefined) { var lookupWithKeyE_1 = lookupWithKey(E); return function (m) { return lookupWithKeyE_1(k, m); }; } var entries = m.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, ka = _a[0], a = _a[1]; if (E.equals(ka, k)) { return _.some([ka, a]); } } return _.none; }; } exports.lookupWithKey = lookupWithKey; // TODO: remove non-curried overloading in v3 /** * Lookup the value for a key in a `Map`. * * @since 2.0.0 */ exports.lookup = RM.lookup; // TODO: remove non-curried overloading in v3 /** * Test whether or not one `Map` contains all of the keys and values contained in another `Map` * * @since 2.0.0 */ exports.isSubmap = RM.isSubmap; /** * @category instances * @since 2.0.0 */ exports.getEq = RM.getEq; /** * Gets `Monoid` instance for Maps given `Semigroup` instance for their values * * @category instances * @since 2.0.0 */ function getMonoid(SK, SA) { var lookupWithKeyS = lookupWithKey(SK); return { concat: function (mx, my) { if ((0, exports.isEmpty)(mx)) { return my; } if ((0, exports.isEmpty)(my)) { return mx; } var r = new Map(mx); var entries = my.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], a = _a[1]; var mxOptA = lookupWithKeyS(k, mx); if (_.isSome(mxOptA)) { r.set(mxOptA.value[0], SA.concat(mxOptA.value[1], a)); } else { r.set(k, a); } } return r; }, empty: new Map() }; } exports.getMonoid = getMonoid; /** * Create a map with one key/value pair * * @since 2.0.0 */ var singleton = function (k, a) { return new Map([[k, a]]); }; exports.singleton = singleton; function fromFoldable(E, M, F) { return function (fka) { var lookupWithKeyE = lookupWithKey(E); return F.reduce(fka, new Map(), function (b, _a) { var k = _a[0], a = _a[1]; var bOpt = lookupWithKeyE(k, b); if (_.isSome(bOpt)) { b.set(bOpt.value[0], M.concat(bOpt.value[1], a)); } else { b.set(k, a); } return b; }); }; } exports.fromFoldable = fromFoldable; var _mapWithIndex = function (fa, f) { var m = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, key = _a[0], a = _a[1]; m.set(key, f(key, a)); } return m; }; /** * @since 2.10.0 */ var partitionMapWithIndex = function (f) { return function (fa) { var left = new Map(); var right = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], a = _a[1]; var ei = f(k, a); if (_.isLeft(ei)) { left.set(k, ei.left); } else { right.set(k, ei.right); } } return (0, Separated_1.separated)(left, right); }; }; exports.partitionMapWithIndex = partitionMapWithIndex; function partitionWithIndex(predicateWithIndex) { return function (fa) { var left = new Map(); var right = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], a = _a[1]; if (predicateWithIndex(k, a)) { right.set(k, a); } else { left.set(k, a); } } return (0, Separated_1.separated)(left, right); }; } exports.partitionWithIndex = partitionWithIndex; /** * @since 2.10.0 */ var filterMapWithIndex = function (f) { return function (fa) { var m = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], a = _a[1]; var o = f(k, a); if (_.isSome(o)) { m.set(k, o.value); } } return m; }; }; exports.filterMapWithIndex = filterMapWithIndex; function filterWithIndex(p) { return function (m) { var out = new Map(); var entries = m.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], a = _a[1]; if (p(k, a)) { out.set(k, a); } } return out; }; } exports.filterWithIndex = filterWithIndex; var _map = function (fa, f) { return _mapWithIndex(fa, function (_, a) { return f(a); }); }; var _filter = function (fa, p) { return _filterWithIndex(fa, function (_, a) { return p(a); }); }; var _filterMap = function (fa, f) { return _filterMapWithIndex(fa, function (_, a) { return f(a); }); }; var _partition = function (fa, predicate) { return _partitionWithIndex(fa, function (_, a) { return predicate(a); }); }; var _partitionMap = function (fa, f) { return _partitionMapWithIndex(fa, function (_, a) { return f(a); }); }; var _filterWithIndex = function (fa, p) { return (0, function_1.pipe)(fa, filterWithIndex(p)); }; var _filterMapWithIndex = function (fa, f) { return (0, function_1.pipe)(fa, (0, exports.filterMapWithIndex)(f)); }; var _partitionWithIndex = function (fa, p) { return (0, function_1.pipe)(fa, partitionWithIndex(p)); }; var _partitionMapWithIndex = function (fa, f) { return (0, function_1.pipe)(fa, (0, exports.partitionMapWithIndex)(f)); }; /** * @category filtering * @since 2.0.0 */ var compact = function (fa) { var m = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], oa = _a[1]; if (_.isSome(oa)) { m.set(k, oa.value); } } return m; }; exports.compact = compact; /** * @category filtering * @since 2.0.0 */ var filter = function (predicate) { return function (fa) { return _filter(fa, predicate); }; }; exports.filter = filter; /** * @category filtering * @since 2.0.0 */ var filterMap = function (f) { return function (fa) { return _filterMap(fa, f); }; }; exports.filterMap = filterMap; /** * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F) => F` whose argument and return types * use the type constructor `F` to represent some computational context. * * @category mapping * @since 2.0.0 */ var map = function (f) { return function (fa) { return _map(fa, f); }; }; exports.map = map; /** * @category mapping * @since 2.7.1 */ var mapWithIndex = function (f) { return function (fa) { return _mapWithIndex(fa, f); }; }; exports.mapWithIndex = mapWithIndex; /** * @category filtering * @since 2.0.0 */ var partition = function (predicate) { return function (fa) { return _partition(fa, predicate); }; }; exports.partition = partition; /** * @category filtering * @since 2.0.0 */ var partitionMap = function (f) { return function (fa) { return _partitionMap(fa, f); }; }; exports.partitionMap = partitionMap; /** * @category filtering * @since 2.0.0 */ var separate = function (fa) { var left = new Map(); var right = new Map(); var entries = fa.entries(); var e; while (!(e = entries.next()).done) { var _a = e.value, k = _a[0], ei = _a[1]; if (_.isLeft(ei)) { left.set(k, ei.left); } else { right.set(k, ei.right); } } return (0, Separated_1.separated)(left, right); }; exports.separate = separate; /** * @category type lambdas * @since 2.0.0 */ exports.URI = 'Map'; /** * @category instances * @since 2.11.0 */ var getUnionSemigroup = function (E, S) { var unionES = (0, exports.union)(E, S); return { concat: function (first, second) { return unionES(second)(first); } }; }; exports.getUnionSemigroup = getUnionSemigroup; /** * @category instances * @since 2.11.0 */ var getUnionMonoid = function (E, S) { return ({ concat: (0, exports.getUnionSemigroup)(E, S).concat, empty: new Map() }); }; exports.getUnionMonoid = getUnionMonoid; /** * @category instances * @since 2.11.0 */ var getIntersectionSemigroup = function (E, S) { var intersectionES = (0, exports.intersection)(E, S); return { concat: function (first, second) { return intersectionES(second)(first); } }; }; exports.getIntersectionSemigroup = getIntersectionSemigroup; /** * @category instances * @since 2.11.0 */ var getDifferenceMagma = function (E) { return function () { var differenceE = (0, exports.difference)(E); return { concat: function (first, second) { return differenceE(second)(first); } }; }; }; exports.getDifferenceMagma = getDifferenceMagma; /** * @category filtering * @since 2.0.0 */ function getFilterableWithIndex() { return { URI: exports.URI, _E: undefined, map: _map, mapWithIndex: _mapWithIndex, compact: exports.compact, separate: exports.separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap, partitionMapWithIndex: _partitionMapWithIndex, partitionWithIndex: _partitionWithIndex, filterMapWithIndex: _filterMapWithIndex, filterWithIndex: _filterWithIndex }; } exports.getFilterableWithIndex = getFilterableWithIndex; /** * @category filtering * @since 2.0.0 */ function getWitherable(O) { var TWI = (0, exports.getTraversableWithIndex)(O); return { URI: exports.URI, _E: undefined, map: _map, compact: exports.compact, separate: exports.separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap, reduce: TWI.reduce, foldMap: TWI.foldMap, reduceRight: TWI.reduceRight, traverse: TWI.traverse, sequence: TWI.sequence, mapWithIndex: _mapWithIndex, reduceWithIndex: TWI.reduceWithIndex, foldMapWithIndex: TWI.foldMapWithIndex, reduceRightWithIndex: TWI.reduceRightWithIndex, traverseWithIndex: TWI.traverseWithIndex, wilt: (0, Witherable_1.wiltDefault)(TWI, exports.Compactable), wither: (0, Witherable_1.witherDefault)(TWI, exports.Compactable) }; } exports.getWitherable = getWitherable; /** * @category folding * @since 2.11.0 */ exports.reduce = RM.reduce; /** * @category folding * @since 2.11.0 */ exports.foldMap = RM.foldMap; /** * @category folding * @since 2.11.0 */ exports.reduceRight = RM.reduceRight; /** * @category folding * @since 2.11.0 */ var getFoldable = function (O) { return __assign(__assign({}, RM.getFoldable(O)), { URI: exports.URI }); }; exports.getFoldable = getFoldable; /** * @category folding * @since 2.11.0 */ exports.reduceWithIndex = RM.reduceWithIndex; /** * @category folding * @since 2.11.0 */ exports.foldMapWithIndex = RM.foldMapWithIndex; /** * @category folding * @since 2.11.0 */ exports.reduceRightWithIndex = RM.reduceRightWithIndex; /** * @category folding * @since 2.10.0 */ var getFoldableWithIndex = function (O) { return __assign(__assign({}, RM.getFoldableWithIndex(O)), { URI: exports.URI }); }; exports.getFoldableWithIndex = getFoldableWithIndex; /** * @category traversing * @since 2.10.0 */ var getTraversableWithIndex = function (O) { var FWI = (0, exports.getFoldableWithIndex)(O); var keysO = (0, exports.keys)(O); var traverseWithIndex = function (F) { return function (ta, f) { var fm = F.of(new Map()); var ks = keysO(ta); var len = ks.length; var _loop_1 = function (i) { var key = ks[i]; var a = ta.get(key); fm = F.ap(F.map(fm, function (m) { return function (b) { return m.set(key, b); }; }), f(key, a)); }; for (var i = 0; i < len; i++) { _loop_1(i); } return fm; }; }; var traverse = function (F) { var traverseWithIndexF = traverseWithIndex(F); return function (ta, f) { return traverseWithIndexF(ta, function (_, a) { return f(a); }); }; }; var sequence = function (F) { var traverseWithIndexF = traverseWithIndex(F); return function (ta) { return traverseWithIndexF(ta, function (_, a) { return a; }); }; }; return { URI: exports.URI, _E: undefined, map: _map, mapWithIndex: _mapWithIndex, reduce: FWI.reduce, foldMap: FWI.foldMap, reduceRight: FWI.reduceRight, reduceWithIndex: FWI.reduceWithIndex, foldMapWithIndex: FWI.foldMapWithIndex, reduceRightWithIndex: FWI.reduceRightWithIndex, traverse: traverse, sequence: sequence, traverseWithIndex: traverseWithIndex }; }; exports.getTraversableWithIndex = getTraversableWithIndex; /** * @category instances * @since 2.7.0 */ exports.Functor = { URI: exports.URI, map: _map }; /** * @category mapping * @since 2.10.0 */ exports.flap = (0, Functor_1.flap)(exports.Functor); /** * @category instances * @since 2.7.0 */ exports.Compactable = { URI: exports.URI, compact: exports.compact, separate: exports.separate }; /** * @category instances * @since 2.7.0 */ exports.Filterable = { URI: exports.URI, map: _map, compact: exports.compact, separate: exports.separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap }; // ------------------------------------------------------------------------------------- // utils // ------------------------------------------------------------------------------------- var copy = function (m) { return new Map(m); }; /** * @since 2.11.0 */ var union = function (E, M) { var unionEM = RM.union(E, M); return function (second) { return function (first) { if ((0, exports.isEmpty)(first)) { return copy(second); } if ((0, exports.isEmpty)(second)) { return copy(first); } return unionEM(second)(first); }; }; }; exports.union = union; /** * @since 2.11.0 */ var intersection = function (E, M) { var intersectionEM = RM.intersection(E, M); return function (second) { return function (first) { if ((0, exports.isEmpty)(first) || (0, exports.isEmpty)(second)) { return new Map(); } return intersectionEM(second)(first); }; }; }; exports.intersection = intersection; /** * @since 2.11.0 */ var difference = function (E) { var differenceE = RM.difference(E); return function (second) { return function (first) { if ((0, exports.isEmpty)(first)) { return copy(second); } if ((0, exports.isEmpty)(second)) { return copy(first); } return differenceE(second)(first); }; }; }; exports.difference = difference; // ------------------------------------------------------------------------------------- // deprecated // ------------------------------------------------------------------------------------- /** * Use a `new Map()` instead. * * @category zone of death * @since 2.0.0 * @deprecated */ exports.empty = new Map(); /** * Use [`upsertAt`](#upsertat) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ exports.insertAt = exports.upsertAt; /** * Use [`Filterable`](#filterable) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ exports.map_ = exports.Filterable;