@typed/fp
Version:
Data Structures and Resources for fp-ts
99 lines • 2.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOrCreate = exports.upsertAt = exports.updateAt = exports.modifyAt = exports.insertAt = exports.filterWithIndex = exports.filter = exports.deleteAt = void 0;
const tslib_1 = require("tslib");
const O = (0, tslib_1.__importStar)(require("fp-ts/Option"));
const E = (0, tslib_1.__importStar)(require("./Env"));
const EO = (0, tslib_1.__importStar)(require("./EnvOption"));
const function_1 = require("./function");
/**
* @since 0.13.4
* @category Combinator
*/
const deleteAt = (key) => (rm) => (0, function_1.pipe)(rm.get, E.tap((m) => m.delete(key)), E.chainFirstW(rm.set));
exports.deleteAt = deleteAt;
/**
* @since 0.13.4
* @category Combinator
*/
function filter(predicate) {
return (rm) => rm.update((m) => {
m.forEach((value, key) => {
if (!predicate(value)) {
m.delete(key);
}
});
return E.of(m);
});
}
exports.filter = filter;
/**
* @since 0.13.4
* @category Combinator
*/
function filterWithIndex(predicate) {
return (rm) => rm.update((m) => {
m.forEach((value, key) => {
if (!predicate(key, value)) {
m.delete(key);
}
});
return E.of(m);
});
}
exports.filterWithIndex = filterWithIndex;
/**
* @since 0.13.4
* @category Combinator
*/
const insertAt = (key, value) => (rm) => (0, function_1.pipe)(rm.get, E.chainW((map) => E.fromIO(() => {
if (map.has(key)) {
return O.none;
}
map.set(key, value);
return O.some(map);
})), EO.chainFirstEnvK(rm.set));
exports.insertAt = insertAt;
/**
* @since 0.13.4
* @category Combinator
*/
const modifyAt = (key, f) => {
return (rm) => (0, function_1.pipe)(rm.get, E.chainW((map) => E.fromIO(() => {
if (!map.has(key)) {
return O.none;
}
const v = map.get(key);
return O.some(map.set(key, f(v)));
})), EO.chainFirstEnvK(rm.set));
};
exports.modifyAt = modifyAt;
/**
* @since 0.13.4
* @category Combinator
*/
const updateAt = (key, value) => {
return (rm) => (0, function_1.pipe)(rm.get, E.chainW((map) => E.fromIO(() => {
if (!map.has(key)) {
return O.none;
}
return O.some(map.set(key, value));
})), EO.chainFirstEnvK(rm.set));
};
exports.updateAt = updateAt;
/**
* @since 0.13.4
* @category Combinator
*/
const upsertAt = (key, value) => (rm) => rm.update((map) => E.fromIO(() => {
map.set(key, value);
return map;
}));
exports.upsertAt = upsertAt;
/**
* @since 0.13.4
* @category Combinator
*/
const getOrCreate = (key, create) => (rm) => (0, function_1.pipe)(rm.get, E.map((map) => (map.has(key) ? O.some(map.get(key)) : O.none)), EO.matchEW(() => (0, function_1.pipe)(create, E.chainFirstW((v) => (0, function_1.pipe)(rm, (0, exports.upsertAt)(key, v)))), E.of));
exports.getOrCreate = getOrCreate;
//# sourceMappingURL=RefMapM.js.map