1 | System.register(['immer', 'jotai', 'react'], (function (exports) {
|
2 | 'use strict';
|
3 | var produce, atom, useAtom, useCallback;
|
4 | return {
|
5 | setters: [function (module) {
|
6 | produce = module.produce;
|
7 | }, function (module) {
|
8 | atom = module.atom;
|
9 | useAtom = module.useAtom;
|
10 | }, function (module) {
|
11 | useCallback = module.useCallback;
|
12 | }],
|
13 | execute: (function () {
|
14 |
|
15 | exports({
|
16 | atomWithImmer: atomWithImmer,
|
17 | useImmerAtom: useImmerAtom,
|
18 | withImmer: withImmer
|
19 | });
|
20 |
|
21 | function atomWithImmer(initialValue) {
|
22 | const anAtom = atom(
|
23 | initialValue,
|
24 | (get, set, fn) => set(
|
25 | anAtom,
|
26 | produce(
|
27 | get(anAtom),
|
28 | typeof fn === "function" ? fn : () => fn
|
29 | )
|
30 | )
|
31 | );
|
32 | return anAtom;
|
33 | }
|
34 |
|
35 | function useImmerAtom(anAtom, scope) {
|
36 | const [state, setState] = useAtom(anAtom, scope);
|
37 | const setStateWithImmer = useCallback(
|
38 | (fn) => setState(produce(fn)),
|
39 | [setState]
|
40 | );
|
41 | return [state, setStateWithImmer];
|
42 | }
|
43 |
|
44 | const getWeakCacheItem = (cache, deps) => {
|
45 | do {
|
46 | const [dep, ...rest] = deps;
|
47 | const entry = cache.get(dep);
|
48 | if (!entry) {
|
49 | return;
|
50 | }
|
51 | if (!rest.length) {
|
52 | return entry[1];
|
53 | }
|
54 | cache = entry[0];
|
55 | deps = rest;
|
56 | } while (deps.length);
|
57 | };
|
58 | const setWeakCacheItem = (cache, deps, item) => {
|
59 | do {
|
60 | const [dep, ...rest] = deps;
|
61 | let entry = cache.get(dep);
|
62 | if (!entry) {
|
63 | entry = [ new WeakMap()];
|
64 | cache.set(dep, entry);
|
65 | }
|
66 | if (!rest.length) {
|
67 | entry[1] = item;
|
68 | return;
|
69 | }
|
70 | cache = entry[0];
|
71 | deps = rest;
|
72 | } while (deps.length);
|
73 | };
|
74 | const createMemoizeAtom = () => {
|
75 | const cache = new WeakMap();
|
76 | const memoizeAtom = (createAtom, deps) => {
|
77 | const cachedAtom = getWeakCacheItem(cache, deps);
|
78 | if (cachedAtom) {
|
79 | return cachedAtom;
|
80 | }
|
81 | const createdAtom = createAtom();
|
82 | setWeakCacheItem(cache, deps, createdAtom);
|
83 | return createdAtom;
|
84 | };
|
85 | return memoizeAtom;
|
86 | };
|
87 |
|
88 | const memoizeAtom = createMemoizeAtom();
|
89 | function withImmer(anAtom) {
|
90 | return memoizeAtom(() => {
|
91 | const derivedAtom = atom(
|
92 | (get) => get(anAtom),
|
93 | (get, set, fn) => set(
|
94 | anAtom,
|
95 | produce(
|
96 | get(anAtom),
|
97 | typeof fn === "function" ? fn : () => fn
|
98 | )
|
99 | )
|
100 | );
|
101 | return derivedAtom;
|
102 | }, [anAtom]);
|
103 | }
|
104 |
|
105 | })
|
106 | };
|
107 | }));
|