UNPKG

3.38 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('optics-ts'), require('jotai')) :
3 typeof define === 'function' && define.amd ? define(['exports', 'optics-ts', 'jotai'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jotaiOptics = {}, global.O, global.jotai));
5})(this, (function (exports, O, jotai) { 'use strict';
6
7 function _interopNamespace(e) {
8 if (e && e.__esModule) return e;
9 var n = Object.create(null);
10 if (e) {
11 Object.keys(e).forEach(function (k) {
12 if (k !== 'default') {
13 var d = Object.getOwnPropertyDescriptor(e, k);
14 Object.defineProperty(n, k, d.get ? d : {
15 enumerable: true,
16 get: function () { return e[k]; }
17 });
18 }
19 });
20 }
21 n["default"] = e;
22 return Object.freeze(n);
23 }
24
25 var O__namespace = /*#__PURE__*/_interopNamespace(O);
26
27 var getWeakCacheItem = function getWeakCacheItem(cache, deps) {
28 do {
29 var _deps = deps,
30 dep = _deps[0],
31 rest = _deps.slice(1);
32
33 var entry = cache.get(dep);
34
35 if (!entry) {
36 return;
37 }
38
39 if (!rest.length) {
40 return entry[1];
41 }
42
43 cache = entry[0];
44 deps = rest;
45 } while (deps.length);
46 };
47
48 var setWeakCacheItem = function setWeakCacheItem(cache, deps, item) {
49 do {
50 var _deps2 = deps,
51 dep = _deps2[0],
52 rest = _deps2.slice(1);
53
54 var entry = cache.get(dep);
55
56 if (!entry) {
57 entry = [new WeakMap()];
58 cache.set(dep, entry);
59 }
60
61 if (!rest.length) {
62 entry[1] = item;
63 return;
64 }
65
66 cache = entry[0];
67 deps = rest;
68 } while (deps.length);
69 };
70
71 var createMemoizeAtom = function createMemoizeAtom() {
72 var cache = new WeakMap();
73
74 var memoizeAtom = function memoizeAtom(createAtom, deps) {
75 var cachedAtom = getWeakCacheItem(cache, deps);
76
77 if (cachedAtom) {
78 return cachedAtom;
79 }
80
81 var createdAtom = createAtom();
82 setWeakCacheItem(cache, deps, createdAtom);
83 return createdAtom;
84 };
85
86 return memoizeAtom;
87 };
88
89 var memoizeAtom = createMemoizeAtom();
90
91 var isFunction = function isFunction(x) {
92 return typeof x === 'function';
93 };
94
95 function focusAtom(baseAtom, callback) {
96 return memoizeAtom(function () {
97 var focus = callback(O__namespace.optic());
98 var derivedAtom = jotai.atom(function (get) {
99 return getValueUsingOptic(focus, get(baseAtom));
100 }, function (get, set, update) {
101 var newValueProducer = isFunction(update) ? O__namespace.modify(focus)(update) : O__namespace.set(focus)(update);
102 return set(baseAtom, newValueProducer(get(baseAtom)));
103 });
104 return derivedAtom;
105 }, [baseAtom, callback]);
106 }
107
108 var getValueUsingOptic = function getValueUsingOptic(focus, bigValue) {
109 if (focus._tag === 'Traversal') {
110 var values = O__namespace.collect(focus)(bigValue);
111 return values;
112 }
113
114 if (focus._tag === 'Prism') {
115 var _value = O__namespace.preview(focus)(bigValue);
116
117 return _value;
118 }
119
120 var value = O__namespace.get(focus)(bigValue);
121 return value;
122 };
123
124 exports.focusAtom = focusAtom;
125
126 Object.defineProperty(exports, '__esModule', { value: true });
127
128}));