source: node_modules/ramda-adjunct/lib/lensIso.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 1.9 KB
Line 
1"use strict";
2
3exports.__esModule = true;
4exports["default"] = void 0;
5var _ramda = require("ramda");
6// This implementation was highly inspired by the implementations
7// in ramda-lens library.
8//
9// https://github.com/ramda/ramda-lens
10
11// isomorphic :: ((a -> b), (b -> a)) -> Isomorphism
12// Isomorphism = x -> y
13var isomorphic = function isomorphic(to, from) {
14 var isomorphism = function isomorphism(x) {
15 return to(x);
16 };
17 isomorphism.from = from;
18 return isomorphism;
19};
20
21// isomorphisms :: ((a -> b), (b -> a)) -> (a -> b)
22var isomorphisms = function isomorphisms(to, from) {
23 return isomorphic((0, _ramda.curry)(function (toFunctorFn, target) {
24 return (0, _ramda.map)(from, toFunctorFn(to(target)));
25 }), (0, _ramda.curry)(function (toFunctorFn, target) {
26 return (0, _ramda.map)(to, toFunctorFn(from(target)));
27 }));
28};
29
30// from :: Isomorphism -> a -> b
31var from = (0, _ramda.curry)(function (isomorphism, x) {
32 return isomorphism.from(x);
33});
34
35/**
36 * Defines an isomorphism that will work like a lens. It takes two functions.
37 * The function that converts and the function that recovers.
38 *
39 * @func lensIso
40 * @memberOf RA
41 * @since {@link https://char0n.github.io/ramda-adjunct/1.19.0|1.19.0}
42 * @category Relation
43 * @typedef Lens s a = Functor f => (a -> f a) -> s -> f s
44 * @sig (s -> a) -> (a -> s) -> Lens s a
45 * @param {!function} to The function that converts
46 * @param {!function} from The function that recovers
47 * @return {!function} The isomorphic lens
48 * @see {@link http://ramdajs.com/docs/#lens|R.lens}
49 *
50 * @example
51 *
52 * const lensJSON = RA.lensIso(JSON.parse, JSON.stringify);
53 *
54 * R.over(lensJSON, assoc('b', 2), '{"a":1}'); //=> '{"a":1,"b":2}'
55 * R.over(RA.lensIso.from(lensJSON), R.replace('}', ',"b":2}'), { a: 1 }); // => { a: 1, b: 2 }
56 */
57var lensIso = (0, _ramda.curry)(isomorphisms);
58lensIso.from = from;
59var _default = lensIso;
60exports["default"] = _default;
Note: See TracBrowser for help on using the repository browser.