atom.io 0.14.8 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/data/dist/index.cjs +216 -218
- package/data/dist/index.cjs.map +1 -1
- package/data/dist/index.d.ts +30 -11
- package/data/dist/index.js +218 -221
- package/data/dist/index.js.map +1 -1
- package/data/src/join.ts +337 -296
- package/data/src/struct-family.ts +2 -2
- package/data/src/struct.ts +2 -2
- package/dist/chunk-S7R5MU6A.js +137 -0
- package/dist/chunk-S7R5MU6A.js.map +1 -0
- package/dist/index.cjs +3 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -8
- package/dist/index.js +1 -151
- package/dist/index.js.map +1 -1
- package/internal/dist/index.cjs +278 -201
- package/internal/dist/index.cjs.map +1 -1
- package/internal/dist/index.d.ts +43 -36
- package/internal/dist/index.js +224 -194
- package/internal/dist/index.js.map +1 -1
- package/internal/src/atom/create-atom.ts +5 -86
- package/internal/src/atom/create-regular-atom.ts +92 -0
- package/internal/src/atom/index.ts +16 -0
- package/internal/src/atom/is-default.ts +0 -5
- package/internal/src/caching.ts +14 -16
- package/internal/src/families/create-atom-family.ts +20 -46
- package/internal/src/families/create-readonly-selector-family.ts +4 -1
- package/internal/src/families/create-regular-atom-family.ts +72 -0
- package/internal/src/families/create-selector-family.ts +2 -0
- package/internal/src/families/index.ts +1 -0
- package/internal/src/mutable/create-mutable-atom-family.ts +2 -2
- package/internal/src/mutable/create-mutable-atom.ts +8 -3
- package/internal/src/mutable/get-update-family.ts +1 -1
- package/internal/src/mutable/is-mutable.ts +3 -30
- package/internal/src/mutable/tracker-family.ts +2 -2
- package/internal/src/mutable/tracker.ts +5 -5
- package/internal/src/operation.ts +14 -18
- package/internal/src/selector/create-read-write-selector.ts +2 -3
- package/internal/src/selector/create-selector.ts +1 -1
- package/internal/src/selector/register-selector.ts +9 -14
- package/internal/src/set-state/evict-downstream.ts +3 -5
- package/internal/src/set-state/set-atom.ts +14 -17
- package/internal/src/store/store.ts +23 -19
- package/internal/src/store/withdraw.ts +32 -70
- package/internal/src/subscribe/subscribe-to-root-atoms.ts +5 -3
- package/internal/src/subscribe/subscribe-to-state.ts +5 -3
- package/internal/src/transaction/apply-transaction.ts +20 -2
- package/internal/src/transaction/build-transaction.ts +19 -11
- package/internal/src/transaction/create-transaction.ts +6 -11
- package/internal/src/transaction/index.ts +2 -3
- package/introspection/dist/index.cjs +6 -6
- package/introspection/dist/index.cjs.map +1 -1
- package/introspection/dist/index.d.ts +3 -3
- package/introspection/dist/index.js +7 -7
- package/introspection/dist/index.js.map +1 -1
- package/introspection/src/attach-atom-index.ts +7 -2
- package/introspection/src/attach-selector-index.ts +7 -2
- package/introspection/src/attach-timeline-family.ts +5 -2
- package/introspection/src/attach-timeline-index.ts +2 -2
- package/introspection/src/attach-transaction-index.ts +2 -2
- package/introspection/src/attach-transaction-logs.ts +2 -2
- package/package.json +10 -8
- package/react-devtools/dist/index.d.ts +17 -11
- package/realtime-client/dist/index.cjs +3 -0
- package/realtime-client/dist/index.cjs.map +1 -1
- package/realtime-client/dist/index.d.ts +3 -3
- package/realtime-client/dist/index.js +3 -0
- package/realtime-client/dist/index.js.map +1 -1
- package/realtime-client/src/index.ts +6 -6
- package/realtime-client/src/{use-pull-family-member.ts → pull-family-member.ts} +1 -1
- package/realtime-client/src/{use-pull-mutable-family-member.ts → pull-mutable-family-member.ts} +1 -1
- package/realtime-client/src/{use-pull-mutable.ts → pull-mutable.ts} +1 -1
- package/realtime-client/src/{use-server-action.ts → server-action.ts} +3 -0
- package/realtime-react/dist/index.cjs +31 -17
- package/realtime-react/dist/index.cjs.map +1 -1
- package/realtime-react/dist/index.d.ts +3 -3
- package/realtime-react/dist/index.js +31 -17
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/src/realtime-context.tsx +2 -3
- package/realtime-react/src/use-pull-family-member.ts +6 -2
- package/realtime-react/src/use-pull-mutable-family-member.ts +5 -4
- package/realtime-react/src/use-pull-mutable.ts +6 -2
- package/realtime-react/src/use-pull.ts +5 -1
- package/realtime-react/src/use-push.ts +5 -4
- package/realtime-react/src/use-server-action.ts +5 -4
- package/src/atom.ts +8 -17
- package/src/selector.ts +3 -1
- package/src/set-state.ts +1 -3
- package/src/silo.ts +2 -14
- package/src/transaction.ts +17 -6
- package/transceivers/set-rtx/dist/index.cjs +2 -1
- package/transceivers/set-rtx/dist/index.cjs.map +1 -1
- package/transceivers/set-rtx/dist/index.js +2 -1
- package/transceivers/set-rtx/dist/index.js.map +1 -1
- package/transceivers/set-rtx/src/set-rtx.ts +2 -1
- package/internal/src/transaction/redo-transaction.ts +0 -27
- package/internal/src/transaction/undo-transaction.ts +0 -27
- /package/realtime-client/src/{use-pull.ts → pull.ts} +0 -0
- /package/realtime-client/src/{use-push.ts → push.ts} +0 -0
package/internal/dist/index.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
import { getState as getState$1, setState as setState$1, runTransaction } from '../../dist/chunk-S7R5MU6A.js';
|
|
1
2
|
import { Junction } from '../../dist/chunk-NYTGCPHB.js';
|
|
2
3
|
import { __spreadValues, __spreadProps } from '../../dist/chunk-PZLG2HP3.js';
|
|
3
|
-
import { AtomIOLogger, getState, setState, runTransaction } from 'atom.io';
|
|
4
4
|
import { selectJson, stringifyJson, parseJson, selectJsonFamily } from 'atom.io/json';
|
|
5
|
-
import {
|
|
5
|
+
import { AtomIOLogger, getState, setState } from 'atom.io';
|
|
6
|
+
import { withdraw as withdraw$1 } from 'atom.io/internal';
|
|
7
|
+
|
|
8
|
+
// internal/src/lineage.ts
|
|
9
|
+
function newest(scion) {
|
|
10
|
+
while (scion.child !== null) {
|
|
11
|
+
scion = scion.child;
|
|
12
|
+
}
|
|
13
|
+
return scion;
|
|
14
|
+
}
|
|
15
|
+
function eldest(scion) {
|
|
16
|
+
while (scion.parent !== null) {
|
|
17
|
+
scion = scion.parent;
|
|
18
|
+
}
|
|
19
|
+
return scion;
|
|
20
|
+
}
|
|
6
21
|
|
|
7
22
|
// internal/src/future.ts
|
|
8
23
|
var Future = class extends Promise {
|
|
@@ -23,39 +38,24 @@ var Future = class extends Promise {
|
|
|
23
38
|
}
|
|
24
39
|
};
|
|
25
40
|
|
|
26
|
-
// internal/src/lineage.ts
|
|
27
|
-
function newest(scion) {
|
|
28
|
-
while (scion.child !== null) {
|
|
29
|
-
scion = scion.child;
|
|
30
|
-
}
|
|
31
|
-
return scion;
|
|
32
|
-
}
|
|
33
|
-
function eldest(scion) {
|
|
34
|
-
while (scion.parent !== null) {
|
|
35
|
-
scion = scion.parent;
|
|
36
|
-
}
|
|
37
|
-
return scion;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
41
|
// internal/src/caching.ts
|
|
41
|
-
function cacheValue(key, value, subject,
|
|
42
|
-
const target = newest(store);
|
|
42
|
+
function cacheValue(key, value, subject, target) {
|
|
43
43
|
const currentValue = target.valueMap.get(key);
|
|
44
44
|
if (currentValue instanceof Future) {
|
|
45
45
|
currentValue.cancel();
|
|
46
46
|
}
|
|
47
47
|
if (value instanceof Promise) {
|
|
48
48
|
const future = new Future(value);
|
|
49
|
-
|
|
49
|
+
target.valueMap.set(key, future);
|
|
50
50
|
future.then((resolved) => {
|
|
51
51
|
if (future.isCanceled) {
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
|
-
cacheValue(key, resolved, subject,
|
|
54
|
+
cacheValue(key, resolved, subject, target);
|
|
55
55
|
subject.next({ newValue: resolved, oldValue: future });
|
|
56
56
|
}).catch((thrown) => {
|
|
57
57
|
if (thrown !== `canceled`) {
|
|
58
|
-
|
|
58
|
+
target.logger.error(`\u{1F4A5}`, `state`, key, `rejected:`, thrown);
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
return future;
|
|
@@ -63,23 +63,22 @@ function cacheValue(key, value, subject, store) {
|
|
|
63
63
|
target.valueMap.set(key, value);
|
|
64
64
|
return value;
|
|
65
65
|
}
|
|
66
|
-
var readCachedValue = (key,
|
|
67
|
-
return
|
|
66
|
+
var readCachedValue = (key, target) => {
|
|
67
|
+
return target.valueMap.get(key);
|
|
68
68
|
};
|
|
69
|
-
var isValueCached = (key,
|
|
70
|
-
return
|
|
69
|
+
var isValueCached = (key, target) => {
|
|
70
|
+
return target.valueMap.has(key);
|
|
71
71
|
};
|
|
72
|
-
var evictCachedValue = (key,
|
|
73
|
-
const
|
|
74
|
-
const currentValue = core.valueMap.get(key);
|
|
72
|
+
var evictCachedValue = (key, target) => {
|
|
73
|
+
const currentValue = target.valueMap.get(key);
|
|
75
74
|
if (currentValue instanceof Future) {
|
|
76
75
|
currentValue.cancel();
|
|
77
76
|
}
|
|
78
|
-
if (
|
|
79
|
-
|
|
77
|
+
if (target.operation.open) {
|
|
78
|
+
target.operation.prev.set(key, currentValue);
|
|
80
79
|
}
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
target.valueMap.delete(key);
|
|
81
|
+
target.logger.info(`\u{1F5D1}`, `state`, key, `evicted`);
|
|
83
82
|
};
|
|
84
83
|
|
|
85
84
|
// internal/src/read-or-compute-value.ts
|
|
@@ -105,17 +104,16 @@ var readOrComputeValue = (state, store) => {
|
|
|
105
104
|
|
|
106
105
|
// internal/src/operation.ts
|
|
107
106
|
var openOperation = (token, store) => {
|
|
108
|
-
|
|
109
|
-
if (target.operation.open) {
|
|
107
|
+
if (store.operation.open) {
|
|
110
108
|
store.logger.error(
|
|
111
109
|
`\u274C`,
|
|
112
110
|
token.type,
|
|
113
111
|
token.key,
|
|
114
|
-
`failed to setState during a setState for "${
|
|
112
|
+
`failed to setState during a setState for "${store.operation.token.key}"`
|
|
115
113
|
);
|
|
116
114
|
return `rejection`;
|
|
117
115
|
}
|
|
118
|
-
|
|
116
|
+
store.operation = {
|
|
119
117
|
open: true,
|
|
120
118
|
done: /* @__PURE__ */ new Set(),
|
|
121
119
|
prev: /* @__PURE__ */ new Map(),
|
|
@@ -126,25 +124,23 @@ var openOperation = (token, store) => {
|
|
|
126
124
|
`\u2B55`,
|
|
127
125
|
token.type,
|
|
128
126
|
token.key,
|
|
129
|
-
`operation start in store "${store.config.name}"${
|
|
127
|
+
`operation start in store "${store.config.name}"${store.transactionMeta === null ? `` : ` ${store.transactionMeta.phase} "${store.transactionMeta.update.key}"`}`
|
|
130
128
|
);
|
|
131
129
|
};
|
|
132
130
|
var closeOperation = (store) => {
|
|
133
|
-
|
|
134
|
-
if (target.operation.open) {
|
|
131
|
+
if (store.operation.open) {
|
|
135
132
|
store.logger.info(
|
|
136
133
|
`\u{1F534}`,
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
store.operation.token.type,
|
|
135
|
+
store.operation.token.key,
|
|
139
136
|
`operation done in store "${store.config.name}"`
|
|
140
137
|
);
|
|
141
138
|
}
|
|
142
|
-
|
|
143
|
-
store.subject.operationStatus.next(
|
|
139
|
+
store.operation = { open: false };
|
|
140
|
+
store.subject.operationStatus.next(store.operation);
|
|
144
141
|
};
|
|
145
142
|
var isDone = (key, store) => {
|
|
146
|
-
|
|
147
|
-
if (!target.operation.open) {
|
|
143
|
+
if (!store.operation.open) {
|
|
148
144
|
store.logger.warn(
|
|
149
145
|
`\u{1F41E}`,
|
|
150
146
|
`unknown`,
|
|
@@ -153,11 +149,10 @@ var isDone = (key, store) => {
|
|
|
153
149
|
);
|
|
154
150
|
return true;
|
|
155
151
|
}
|
|
156
|
-
return
|
|
152
|
+
return store.operation.done.has(key);
|
|
157
153
|
};
|
|
158
154
|
var markDone = (key, store) => {
|
|
159
|
-
|
|
160
|
-
if (!target.operation.open) {
|
|
155
|
+
if (!store.operation.open) {
|
|
161
156
|
store.logger.warn(
|
|
162
157
|
`\u{1F41E}`,
|
|
163
158
|
`unknown`,
|
|
@@ -166,7 +161,7 @@ var markDone = (key, store) => {
|
|
|
166
161
|
);
|
|
167
162
|
return;
|
|
168
163
|
}
|
|
169
|
-
|
|
164
|
+
store.operation.done.add(key);
|
|
170
165
|
};
|
|
171
166
|
|
|
172
167
|
// internal/src/set-state/become.ts
|
|
@@ -272,8 +267,7 @@ var emitUpdate = (state, update, store) => {
|
|
|
272
267
|
|
|
273
268
|
// internal/src/set-state/evict-downstream.ts
|
|
274
269
|
var evictDownStream = (atom, store) => {
|
|
275
|
-
const
|
|
276
|
-
const downstreamKeys = target.selectorAtoms.getRelatedKeys(atom.key);
|
|
270
|
+
const downstreamKeys = store.selectorAtoms.getRelatedKeys(atom.key);
|
|
277
271
|
store.logger.info(
|
|
278
272
|
`\u{1F9F9}`,
|
|
279
273
|
atom.type,
|
|
@@ -282,12 +276,12 @@ var evictDownStream = (atom, store) => {
|
|
|
282
276
|
downstreamKeys != null ? downstreamKeys : `to evict`
|
|
283
277
|
);
|
|
284
278
|
if (downstreamKeys) {
|
|
285
|
-
if (
|
|
279
|
+
if (store.operation.open) {
|
|
286
280
|
store.logger.info(
|
|
287
281
|
`\u{1F9F9}`,
|
|
288
282
|
atom.type,
|
|
289
283
|
atom.key,
|
|
290
|
-
`[ ${[...
|
|
284
|
+
`[ ${[...store.operation.done].join(`, `)} ] already done`
|
|
291
285
|
);
|
|
292
286
|
}
|
|
293
287
|
for (const key of downstreamKeys) {
|
|
@@ -344,23 +338,24 @@ var stowUpdate = (state, update, store) => {
|
|
|
344
338
|
};
|
|
345
339
|
|
|
346
340
|
// internal/src/set-state/set-atom.ts
|
|
347
|
-
var setAtom = (atom, next,
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
let newValue = copyMutableIfWithinTransaction(oldValue, atom, store);
|
|
341
|
+
var setAtom = (atom, next, target) => {
|
|
342
|
+
const oldValue = readOrComputeValue(atom, target);
|
|
343
|
+
let newValue = copyMutableIfWithinTransaction(oldValue, atom, target);
|
|
351
344
|
newValue = become(next)(newValue);
|
|
352
|
-
|
|
353
|
-
newValue = cacheValue(atom.key, newValue, atom.subject,
|
|
354
|
-
if (isAtomDefault(atom.key,
|
|
355
|
-
markAtomAsNotDefault(atom.key,
|
|
345
|
+
target.logger.info(`\u{1F4DD}`, `atom`, atom.key, `set to`, newValue);
|
|
346
|
+
newValue = cacheValue(atom.key, newValue, atom.subject, target);
|
|
347
|
+
if (isAtomDefault(atom.key, target)) {
|
|
348
|
+
markAtomAsNotDefault(atom.key, target);
|
|
356
349
|
}
|
|
357
|
-
markDone(atom.key,
|
|
358
|
-
evictDownStream(atom,
|
|
350
|
+
markDone(atom.key, target);
|
|
351
|
+
evictDownStream(atom, target);
|
|
359
352
|
const update = { oldValue, newValue };
|
|
360
|
-
if (target.transactionMeta === null
|
|
361
|
-
emitUpdate(atom, update,
|
|
353
|
+
if (target.transactionMeta === null) {
|
|
354
|
+
emitUpdate(atom, update, target);
|
|
355
|
+
} else if (target.transactionMeta.phase === `applying` && target.parent) {
|
|
356
|
+
emitUpdate(atom, update, target.parent);
|
|
362
357
|
} else {
|
|
363
|
-
stowUpdate(atom, update,
|
|
358
|
+
stowUpdate(atom, update, target);
|
|
364
359
|
}
|
|
365
360
|
};
|
|
366
361
|
|
|
@@ -451,13 +446,29 @@ var Store = class {
|
|
|
451
446
|
this.config = __spreadProps(__spreadValues({}, store == null ? void 0 : store.config), {
|
|
452
447
|
name
|
|
453
448
|
});
|
|
449
|
+
for (const [, family] of store.families) {
|
|
450
|
+
family.install(this);
|
|
451
|
+
}
|
|
452
|
+
const mutableHelpers = /* @__PURE__ */ new Set();
|
|
454
453
|
for (const [, atom] of store.atoms) {
|
|
454
|
+
if (mutableHelpers.has(atom.key)) {
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
455
457
|
atom.install(this);
|
|
458
|
+
if (`mutable` in atom) {
|
|
459
|
+
const originalJsonToken = getJsonToken(atom);
|
|
460
|
+
const originalUpdateToken = getUpdateToken(atom);
|
|
461
|
+
mutableHelpers.add(originalJsonToken.key);
|
|
462
|
+
mutableHelpers.add(originalUpdateToken.key);
|
|
463
|
+
}
|
|
456
464
|
}
|
|
457
465
|
for (const [, selector] of store.readonlySelectors) {
|
|
458
466
|
selector.install(this);
|
|
459
467
|
}
|
|
460
468
|
for (const [, selector] of store.selectors) {
|
|
469
|
+
if (mutableHelpers.has(selector.key)) {
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
461
472
|
selector.install(this);
|
|
462
473
|
}
|
|
463
474
|
for (const [, tx] of store.transactions) {
|
|
@@ -484,13 +495,31 @@ var clearStore = (store) => {
|
|
|
484
495
|
|
|
485
496
|
// internal/src/store/withdraw.ts
|
|
486
497
|
function withdraw(token, store) {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
498
|
+
let withdrawn;
|
|
499
|
+
let target = store;
|
|
500
|
+
while (target !== null) {
|
|
501
|
+
switch (token.type) {
|
|
502
|
+
case `atom`:
|
|
503
|
+
withdrawn = target.atoms.get(token.key);
|
|
504
|
+
break;
|
|
505
|
+
case `selector`:
|
|
506
|
+
withdrawn = target.selectors.get(token.key);
|
|
507
|
+
break;
|
|
508
|
+
case `readonly_selector`:
|
|
509
|
+
withdrawn = target.readonlySelectors.get(token.key);
|
|
510
|
+
break;
|
|
511
|
+
case `timeline`:
|
|
512
|
+
withdrawn = target.timelines.get(token.key);
|
|
513
|
+
break;
|
|
514
|
+
case `transaction`:
|
|
515
|
+
withdrawn = target.transactions.get(token.key);
|
|
516
|
+
break;
|
|
517
|
+
}
|
|
518
|
+
if (withdrawn) {
|
|
519
|
+
return withdrawn;
|
|
520
|
+
}
|
|
521
|
+
target = target.child;
|
|
492
522
|
}
|
|
493
|
-
return void 0;
|
|
494
523
|
}
|
|
495
524
|
|
|
496
525
|
// internal/src/store/withdraw-new-family-member.ts
|
|
@@ -594,7 +623,6 @@ var updateSelectorAtoms = (selectorKey, dependency, store) => {
|
|
|
594
623
|
var registerSelector = (selectorKey, store) => ({
|
|
595
624
|
get: (dependency) => {
|
|
596
625
|
const target = newest(store);
|
|
597
|
-
const alreadyRegistered = target.selectorGraph.getRelationEntries({ downstreamSelectorKey: selectorKey }).some(([_, { source }]) => source === dependency.key);
|
|
598
626
|
const dependencyState = withdraw(dependency, store);
|
|
599
627
|
if (dependencyState === void 0) {
|
|
600
628
|
throw new Error(
|
|
@@ -610,17 +638,15 @@ var registerSelector = (selectorKey, store) => ({
|
|
|
610
638
|
dependencyValue,
|
|
611
639
|
`)`
|
|
612
640
|
);
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
);
|
|
623
|
-
}
|
|
641
|
+
target.selectorGraph.set(
|
|
642
|
+
{
|
|
643
|
+
upstreamSelectorKey: dependency.key,
|
|
644
|
+
downstreamSelectorKey: selectorKey
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
source: dependency.key
|
|
648
|
+
}
|
|
649
|
+
);
|
|
624
650
|
updateSelectorAtoms(selectorKey, dependency, store);
|
|
625
651
|
return dependencyValue;
|
|
626
652
|
},
|
|
@@ -642,7 +668,7 @@ var createReadWriteSelector = (options, family, store) => {
|
|
|
642
668
|
const { get, set } = registerSelector(options.key, store);
|
|
643
669
|
const getSelf = () => {
|
|
644
670
|
const value = options.get({ get });
|
|
645
|
-
cacheValue(options.key, value, subject, store);
|
|
671
|
+
cacheValue(options.key, value, subject, newest(store));
|
|
646
672
|
return value;
|
|
647
673
|
};
|
|
648
674
|
const setSelf = (next) => {
|
|
@@ -732,7 +758,7 @@ function createSelector(options, family, store) {
|
|
|
732
758
|
`\u274C`,
|
|
733
759
|
existingReadonly ? `readonly_selector` : `selector`,
|
|
734
760
|
options.key,
|
|
735
|
-
`Tried to create selector, but it already exists in the store
|
|
761
|
+
`Tried to create selector, but it already exists in the store.`
|
|
736
762
|
);
|
|
737
763
|
}
|
|
738
764
|
if (`set` in options) {
|
|
@@ -781,8 +807,9 @@ var recallState = (state, store) => {
|
|
|
781
807
|
|
|
782
808
|
// internal/src/subscribe/subscribe-to-root-atoms.ts
|
|
783
809
|
var subscribeToRootAtoms = (state, store) => {
|
|
810
|
+
const target = newest(store);
|
|
784
811
|
const dependencySubscriptions = `default` in state ? null : traceAllSelectorAtoms(state.key, store).map((atomKey) => {
|
|
785
|
-
const atom =
|
|
812
|
+
const atom = target.atoms.get(atomKey);
|
|
786
813
|
if (atom === void 0) {
|
|
787
814
|
throw new Error(
|
|
788
815
|
`Atom "${atomKey}", a dependency of selector "${state.key}", not found in store "${store.config.name}".`
|
|
@@ -802,8 +829,8 @@ var subscribeToRootAtoms = (state, store) => {
|
|
|
802
829
|
`->`,
|
|
803
830
|
atomChange.newValue
|
|
804
831
|
);
|
|
805
|
-
const oldValue = recallState(state,
|
|
806
|
-
const newValue = readOrComputeValue(state,
|
|
832
|
+
const oldValue = recallState(state, target);
|
|
833
|
+
const newValue = readOrComputeValue(state, target);
|
|
807
834
|
store.logger.info(
|
|
808
835
|
`\u2728`,
|
|
809
836
|
state.type,
|
|
@@ -819,8 +846,11 @@ var subscribeToRootAtoms = (state, store) => {
|
|
|
819
846
|
});
|
|
820
847
|
return dependencySubscriptions;
|
|
821
848
|
};
|
|
849
|
+
|
|
850
|
+
// internal/src/subscribe/subscribe-to-state.ts
|
|
822
851
|
function subscribeToState(token, handleUpdate, key, store) {
|
|
823
|
-
|
|
852
|
+
var _a;
|
|
853
|
+
const state = (_a = withdraw(token, store)) != null ? _a : withdrawNewFamilyMember(token, store);
|
|
824
854
|
if (state === void 0) {
|
|
825
855
|
throw new Error(
|
|
826
856
|
`State "${token.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`
|
|
@@ -828,7 +858,7 @@ function subscribeToState(token, handleUpdate, key, store) {
|
|
|
828
858
|
}
|
|
829
859
|
const unsubFunction = state.subject.subscribe(key, handleUpdate);
|
|
830
860
|
store.logger.info(`\u{1F440}`, state.type, state.key, `Adding subscription "${key}"`);
|
|
831
|
-
const dependencyUnsubFunctions = state.type !== `atom` ? subscribeToRootAtoms
|
|
861
|
+
const dependencyUnsubFunctions = state.type !== `atom` ? subscribeToRootAtoms(state, store) : null;
|
|
832
862
|
const unsubscribe = dependencyUnsubFunctions === null ? () => {
|
|
833
863
|
store.logger.info(
|
|
834
864
|
`\u{1F648}`,
|
|
@@ -905,6 +935,7 @@ var Tracker = class {
|
|
|
905
935
|
target.trackers.set(mutableState.key, this);
|
|
906
936
|
}
|
|
907
937
|
initializeState(mutableState, store) {
|
|
938
|
+
var _a;
|
|
908
939
|
const latestUpdateStateKey = `*${mutableState.key}`;
|
|
909
940
|
store.atoms.delete(latestUpdateStateKey);
|
|
910
941
|
store.valueMap.delete(latestUpdateStateKey);
|
|
@@ -912,7 +943,7 @@ var Tracker = class {
|
|
|
912
943
|
key: `*${mutableState.family.key}`,
|
|
913
944
|
subKey: mutableState.family.subKey
|
|
914
945
|
} : void 0;
|
|
915
|
-
const latestUpdateState =
|
|
946
|
+
const latestUpdateState = createRegularAtom(
|
|
916
947
|
{
|
|
917
948
|
key: latestUpdateStateKey,
|
|
918
949
|
default: null
|
|
@@ -920,7 +951,7 @@ var Tracker = class {
|
|
|
920
951
|
familyMetaData,
|
|
921
952
|
store
|
|
922
953
|
);
|
|
923
|
-
if (store.parent) {
|
|
954
|
+
if ((_a = store.parent) == null ? void 0 : _a.valueMap.has(latestUpdateStateKey)) {
|
|
924
955
|
const parentValue = store.parent.valueMap.get(latestUpdateStateKey);
|
|
925
956
|
store.valueMap.set(latestUpdateStateKey, parentValue);
|
|
926
957
|
}
|
|
@@ -932,11 +963,11 @@ var Tracker = class {
|
|
|
932
963
|
this.unsubscribeFromInnerValue = originalInnerValue.subscribe(
|
|
933
964
|
`tracker:${store.config.name}:${target.transactionMeta === null ? `main` : target.transactionMeta.update.key}`,
|
|
934
965
|
(update) => {
|
|
935
|
-
const unsubscribe =
|
|
966
|
+
const unsubscribe = target.subject.operationStatus.subscribe(
|
|
936
967
|
mutableState.key,
|
|
937
968
|
() => {
|
|
938
969
|
unsubscribe();
|
|
939
|
-
setState(latestUpdateState, update,
|
|
970
|
+
setState(latestUpdateState, update, target);
|
|
940
971
|
}
|
|
941
972
|
);
|
|
942
973
|
}
|
|
@@ -1023,14 +1054,14 @@ var Tracker = class {
|
|
|
1023
1054
|
};
|
|
1024
1055
|
|
|
1025
1056
|
// internal/src/mutable/create-mutable-atom.ts
|
|
1026
|
-
function createMutableAtom(options, store) {
|
|
1057
|
+
function createMutableAtom(options, family, store) {
|
|
1027
1058
|
store.logger.info(
|
|
1028
1059
|
`\u{1F527}`,
|
|
1029
1060
|
`atom`,
|
|
1030
1061
|
options.key,
|
|
1031
1062
|
`creating in store "${store.config.name}"`
|
|
1032
1063
|
);
|
|
1033
|
-
const coreState =
|
|
1064
|
+
const coreState = createRegularAtom(options, family, store);
|
|
1034
1065
|
new Tracker(coreState, store);
|
|
1035
1066
|
const jsonState = selectJson(coreState, options, store);
|
|
1036
1067
|
const target = newest(store);
|
|
@@ -1047,7 +1078,7 @@ function createMutableAtom(options, store) {
|
|
|
1047
1078
|
);
|
|
1048
1079
|
return coreState;
|
|
1049
1080
|
}
|
|
1050
|
-
function
|
|
1081
|
+
function createRegularAtomFamily(options, store) {
|
|
1051
1082
|
const subject = new Subject();
|
|
1052
1083
|
const atomFamily = Object.assign(
|
|
1053
1084
|
(key) => {
|
|
@@ -1066,7 +1097,16 @@ function createAtomFamily(options, store) {
|
|
|
1066
1097
|
if (options.effects) {
|
|
1067
1098
|
individualOptions.effects = options.effects(key);
|
|
1068
1099
|
}
|
|
1069
|
-
|
|
1100
|
+
if (`mutable` in options) {
|
|
1101
|
+
const mutableOptions = __spreadProps(__spreadValues({}, individualOptions), {
|
|
1102
|
+
mutable: true,
|
|
1103
|
+
toJson: options.toJson,
|
|
1104
|
+
fromJson: options.fromJson
|
|
1105
|
+
});
|
|
1106
|
+
token = createMutableAtom(mutableOptions, family, store);
|
|
1107
|
+
} else {
|
|
1108
|
+
token = createRegularAtom(individualOptions, family, store);
|
|
1109
|
+
}
|
|
1070
1110
|
subject.next(token);
|
|
1071
1111
|
}
|
|
1072
1112
|
return token;
|
|
@@ -1074,7 +1114,8 @@ function createAtomFamily(options, store) {
|
|
|
1074
1114
|
{
|
|
1075
1115
|
key: options.key,
|
|
1076
1116
|
type: `atom_family`,
|
|
1077
|
-
subject
|
|
1117
|
+
subject,
|
|
1118
|
+
install: (store2) => createRegularAtomFamily(options, store2)
|
|
1078
1119
|
}
|
|
1079
1120
|
);
|
|
1080
1121
|
if (`mutable` in options && typeof options.mutable === `boolean`) {
|
|
@@ -1084,9 +1125,17 @@ function createAtomFamily(options, store) {
|
|
|
1084
1125
|
target.families.set(options.key, atomFamily);
|
|
1085
1126
|
return atomFamily;
|
|
1086
1127
|
}
|
|
1128
|
+
|
|
1129
|
+
// internal/src/families/create-atom-family.ts
|
|
1130
|
+
function createAtomFamily(options, store) {
|
|
1131
|
+
if (`mutable` in options) {
|
|
1132
|
+
return createMutableAtomFamily(options, store);
|
|
1133
|
+
}
|
|
1134
|
+
return createRegularAtomFamily(options, store);
|
|
1135
|
+
}
|
|
1087
1136
|
function createReadonlySelectorFamily(options, store) {
|
|
1088
1137
|
const subject = new Subject();
|
|
1089
|
-
|
|
1138
|
+
const readonlySelectorFamily = Object.assign(
|
|
1090
1139
|
(key) => {
|
|
1091
1140
|
const target = newest(store);
|
|
1092
1141
|
const subKey = stringifyJson(key);
|
|
@@ -1108,9 +1157,12 @@ function createReadonlySelectorFamily(options, store) {
|
|
|
1108
1157
|
{
|
|
1109
1158
|
key: options.key,
|
|
1110
1159
|
type: `readonly_selector_family`,
|
|
1111
|
-
subject
|
|
1160
|
+
subject,
|
|
1161
|
+
install: (store2) => createReadonlySelectorFamily(options, store2)
|
|
1112
1162
|
}
|
|
1113
1163
|
);
|
|
1164
|
+
store.families.set(options.key, readonlySelectorFamily);
|
|
1165
|
+
return readonlySelectorFamily;
|
|
1114
1166
|
}
|
|
1115
1167
|
function createSelectorFamily(options, store) {
|
|
1116
1168
|
const isReadonly = !(`set` in options);
|
|
@@ -1142,7 +1194,9 @@ function createSelectorFamily(options, store) {
|
|
|
1142
1194
|
},
|
|
1143
1195
|
{
|
|
1144
1196
|
key: options.key,
|
|
1145
|
-
type: `selector_family
|
|
1197
|
+
type: `selector_family`,
|
|
1198
|
+
subject,
|
|
1199
|
+
install: (store2) => createSelectorFamily(options, store2)
|
|
1146
1200
|
}
|
|
1147
1201
|
);
|
|
1148
1202
|
target.families.set(options.key, selectorFamily);
|
|
@@ -1152,7 +1206,7 @@ function createSelectorFamily(options, store) {
|
|
|
1152
1206
|
// internal/src/mutable/tracker-family.ts
|
|
1153
1207
|
var FamilyTracker = class {
|
|
1154
1208
|
constructor(findMutableState, store) {
|
|
1155
|
-
this.findLatestUpdateState =
|
|
1209
|
+
this.findLatestUpdateState = createRegularAtomFamily(
|
|
1156
1210
|
{
|
|
1157
1211
|
key: `*${findMutableState.key}`,
|
|
1158
1212
|
default: null
|
|
@@ -1186,7 +1240,7 @@ var FamilyTracker = class {
|
|
|
1186
1240
|
// internal/src/mutable/create-mutable-atom-family.ts
|
|
1187
1241
|
function createMutableAtomFamily(options, store) {
|
|
1188
1242
|
const coreFamily = Object.assign(
|
|
1189
|
-
|
|
1243
|
+
createRegularAtomFamily(options, store),
|
|
1190
1244
|
options
|
|
1191
1245
|
);
|
|
1192
1246
|
selectJsonFamily(coreFamily, options);
|
|
@@ -1257,13 +1311,9 @@ var markAtomAsNotDefault = (key, store) => {
|
|
|
1257
1311
|
core.atomsThatAreDefault = new Set(newest(store).atomsThatAreDefault);
|
|
1258
1312
|
core.atomsThatAreDefault.delete(key);
|
|
1259
1313
|
};
|
|
1260
|
-
var isSelectorDefault = (key, store) => {
|
|
1261
|
-
const rootKeys = traceAllSelectorAtoms(key, store);
|
|
1262
|
-
return rootKeys.every((rootKey) => isAtomDefault(rootKey, store));
|
|
1263
|
-
};
|
|
1264
1314
|
|
|
1265
|
-
// internal/src/atom/create-atom.ts
|
|
1266
|
-
function
|
|
1315
|
+
// internal/src/atom/create-regular-atom.ts
|
|
1316
|
+
function createRegularAtom(options, family, store) {
|
|
1267
1317
|
store.logger.info(
|
|
1268
1318
|
`\u{1F528}`,
|
|
1269
1319
|
`atom`,
|
|
@@ -1277,13 +1327,12 @@ function createAtom(options, family, store) {
|
|
|
1277
1327
|
`\u274C`,
|
|
1278
1328
|
`atom`,
|
|
1279
1329
|
options.key,
|
|
1280
|
-
`Tried to create atom, but it already exists in the store
|
|
1281
|
-
`(Ignore if you are in development using hot module replacement.)`
|
|
1330
|
+
`Tried to create atom, but it already exists in the store.`
|
|
1282
1331
|
);
|
|
1283
1332
|
return deposit(existing);
|
|
1284
1333
|
}
|
|
1285
1334
|
const subject = new Subject();
|
|
1286
|
-
const newAtom =
|
|
1335
|
+
const newAtom = __spreadProps(__spreadValues({}, options), {
|
|
1287
1336
|
type: `atom`,
|
|
1288
1337
|
install: (store2) => {
|
|
1289
1338
|
store2.logger.info(
|
|
@@ -1292,17 +1341,20 @@ function createAtom(options, family, store) {
|
|
|
1292
1341
|
options.key,
|
|
1293
1342
|
`installing in store "${store2.config.name}"`
|
|
1294
1343
|
);
|
|
1295
|
-
return `mutable` in options ? createMutableAtom(options, store2) :
|
|
1344
|
+
return `mutable` in options ? createMutableAtom(options, family, store2) : createRegularAtom(options, family, store2);
|
|
1296
1345
|
},
|
|
1297
1346
|
subject
|
|
1298
|
-
})
|
|
1347
|
+
});
|
|
1348
|
+
if (family) {
|
|
1349
|
+
newAtom.family = family;
|
|
1350
|
+
}
|
|
1299
1351
|
let initialValue = options.default;
|
|
1300
1352
|
if (options.default instanceof Function) {
|
|
1301
1353
|
initialValue = options.default();
|
|
1302
1354
|
}
|
|
1303
1355
|
target.atoms.set(newAtom.key, newAtom);
|
|
1304
1356
|
markAtomAsDefault(options.key, store);
|
|
1305
|
-
cacheValue(options.key, initialValue, subject,
|
|
1357
|
+
cacheValue(options.key, initialValue, subject, target);
|
|
1306
1358
|
const token = deposit(newAtom);
|
|
1307
1359
|
if (options.effects) {
|
|
1308
1360
|
let effectIndex = 0;
|
|
@@ -1327,6 +1379,14 @@ function createAtom(options, family, store) {
|
|
|
1327
1379
|
return token;
|
|
1328
1380
|
}
|
|
1329
1381
|
|
|
1382
|
+
// internal/src/atom/create-atom.ts
|
|
1383
|
+
function createAtom(options, family, store) {
|
|
1384
|
+
if (`mutable` in options) {
|
|
1385
|
+
return createMutableAtom(options, family, store);
|
|
1386
|
+
}
|
|
1387
|
+
return createRegularAtom(options, family, store);
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1330
1390
|
// internal/src/atom/delete-atom.ts
|
|
1331
1391
|
function deleteAtom2(atomToken, store) {
|
|
1332
1392
|
var _a, _b;
|
|
@@ -1608,26 +1668,10 @@ var addAtomToTimeline = (atomToken, tl, store) => {
|
|
|
1608
1668
|
};
|
|
1609
1669
|
|
|
1610
1670
|
// internal/src/mutable/is-mutable.ts
|
|
1611
|
-
function isMutable(atomOrTokenOrFamily
|
|
1671
|
+
function isMutable(atomOrTokenOrFamily) {
|
|
1612
1672
|
if (`mutable` in atomOrTokenOrFamily) {
|
|
1613
1673
|
return atomOrTokenOrFamily.mutable;
|
|
1614
1674
|
}
|
|
1615
|
-
if (atomOrTokenOrFamily.type === `atom_family`) {
|
|
1616
|
-
return false;
|
|
1617
|
-
}
|
|
1618
|
-
if (`default` in atomOrTokenOrFamily) {
|
|
1619
|
-
return false;
|
|
1620
|
-
}
|
|
1621
|
-
if (!store) {
|
|
1622
|
-
throw new Error(`Cannot check mutability without a store`);
|
|
1623
|
-
}
|
|
1624
|
-
const atom = withdraw(atomOrTokenOrFamily, store);
|
|
1625
|
-
if (!atom) {
|
|
1626
|
-
throw new Error(`Cannot check mutability without an atom`);
|
|
1627
|
-
}
|
|
1628
|
-
if (`mutable` in atom) {
|
|
1629
|
-
return atom.mutable;
|
|
1630
|
-
}
|
|
1631
1675
|
return false;
|
|
1632
1676
|
}
|
|
1633
1677
|
|
|
@@ -1888,8 +1932,27 @@ var applyTransaction = (output, store) => {
|
|
|
1888
1932
|
`Applying transaction with ${updates.length} updates:`,
|
|
1889
1933
|
updates
|
|
1890
1934
|
);
|
|
1935
|
+
for (const tracker of child.trackers.values()) {
|
|
1936
|
+
const mutableKey = tracker.mutableState.key;
|
|
1937
|
+
if (!parent.atoms.has(mutableKey)) {
|
|
1938
|
+
const atom = child.atoms.get(mutableKey);
|
|
1939
|
+
atom == null ? void 0 : atom.install(parent);
|
|
1940
|
+
}
|
|
1941
|
+
}
|
|
1942
|
+
for (const atom of child.atoms.values()) {
|
|
1943
|
+
if (!parent.atoms.has(atom.key)) {
|
|
1944
|
+
parent.atoms.set(atom.key, atom);
|
|
1945
|
+
parent.valueMap.set(atom.key, atom.default);
|
|
1946
|
+
parent.logger.info(
|
|
1947
|
+
`\u{1F528}`,
|
|
1948
|
+
`transaction`,
|
|
1949
|
+
child.transactionMeta.update.key,
|
|
1950
|
+
`Adding atom "${atom.key}"`
|
|
1951
|
+
);
|
|
1952
|
+
}
|
|
1953
|
+
}
|
|
1954
|
+
ingestTransactionUpdate(child.transactionMeta.update, parent, child);
|
|
1891
1955
|
if (parent.transactionMeta === null) {
|
|
1892
|
-
ingestTransactionUpdate(child.transactionMeta.update, parent, child);
|
|
1893
1956
|
const myTransaction = withdraw(
|
|
1894
1957
|
{ key: child.transactionMeta.update.key, type: `transaction` },
|
|
1895
1958
|
store
|
|
@@ -1902,7 +1965,6 @@ var applyTransaction = (output, store) => {
|
|
|
1902
1965
|
`Finished applying transaction.`
|
|
1903
1966
|
);
|
|
1904
1967
|
} else {
|
|
1905
|
-
ingestTransactionUpdate(child.transactionMeta.update, parent, child);
|
|
1906
1968
|
parent.transactionMeta.update.updates.push(child.transactionMeta.update);
|
|
1907
1969
|
}
|
|
1908
1970
|
parent.subject.transactionApplying.next(null);
|
|
@@ -1911,23 +1973,14 @@ var applyTransaction = (output, store) => {
|
|
|
1911
1973
|
// internal/src/transaction/build-transaction.ts
|
|
1912
1974
|
var buildTransaction = (key, params, store) => {
|
|
1913
1975
|
const parent = newest(store);
|
|
1914
|
-
|
|
1976
|
+
const child = {
|
|
1915
1977
|
parent,
|
|
1916
1978
|
child: null,
|
|
1917
1979
|
subject: parent.subject,
|
|
1918
1980
|
loggers: parent.loggers,
|
|
1919
1981
|
logger: parent.logger,
|
|
1920
1982
|
config: parent.config,
|
|
1921
|
-
transactionMeta:
|
|
1922
|
-
phase: `building`,
|
|
1923
|
-
time: Date.now(),
|
|
1924
|
-
update: {
|
|
1925
|
-
key,
|
|
1926
|
-
updates: [],
|
|
1927
|
-
params,
|
|
1928
|
-
output: void 0
|
|
1929
|
-
}
|
|
1930
|
-
},
|
|
1983
|
+
transactionMeta: null,
|
|
1931
1984
|
atoms: new LazyMap(parent.atoms),
|
|
1932
1985
|
atomsThatAreDefault: new Set(parent.atomsThatAreDefault),
|
|
1933
1986
|
families: new LazyMap(parent.families),
|
|
@@ -1944,6 +1997,22 @@ var buildTransaction = (key, params, store) => {
|
|
|
1944
1997
|
selectors: new LazyMap(parent.selectors),
|
|
1945
1998
|
valueMap: new LazyMap(parent.valueMap)
|
|
1946
1999
|
};
|
|
2000
|
+
child.transactionMeta = {
|
|
2001
|
+
phase: `building`,
|
|
2002
|
+
time: Date.now(),
|
|
2003
|
+
update: {
|
|
2004
|
+
key,
|
|
2005
|
+
updates: [],
|
|
2006
|
+
params,
|
|
2007
|
+
output: void 0
|
|
2008
|
+
},
|
|
2009
|
+
transactors: {
|
|
2010
|
+
get: (token) => getState$1(token, child),
|
|
2011
|
+
set: (token, value) => setState$1(token, value, child),
|
|
2012
|
+
run: (token) => runTransaction(token, child)
|
|
2013
|
+
}
|
|
2014
|
+
};
|
|
2015
|
+
parent.child = child;
|
|
1947
2016
|
store.logger.info(
|
|
1948
2017
|
`\u{1F6EB}`,
|
|
1949
2018
|
`transaction`,
|
|
@@ -1952,6 +2021,8 @@ var buildTransaction = (key, params, store) => {
|
|
|
1952
2021
|
params
|
|
1953
2022
|
);
|
|
1954
2023
|
};
|
|
2024
|
+
|
|
2025
|
+
// internal/src/transaction/create-transaction.ts
|
|
1955
2026
|
function createTransaction(options, store) {
|
|
1956
2027
|
const newTransaction = {
|
|
1957
2028
|
key: options.key,
|
|
@@ -1959,18 +2030,13 @@ function createTransaction(options, store) {
|
|
|
1959
2030
|
run: (...params) => {
|
|
1960
2031
|
buildTransaction(options.key, params, store);
|
|
1961
2032
|
try {
|
|
1962
|
-
const
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
run: (token2) => runTransaction(token2, store)
|
|
1967
|
-
},
|
|
1968
|
-
...params
|
|
1969
|
-
);
|
|
1970
|
-
applyTransaction(output, store);
|
|
2033
|
+
const target2 = newest(store);
|
|
2034
|
+
const { transactors } = target2.transactionMeta;
|
|
2035
|
+
const output = options.do(transactors, ...params);
|
|
2036
|
+
applyTransaction(output, target2);
|
|
1971
2037
|
return output;
|
|
1972
2038
|
} catch (thrown) {
|
|
1973
|
-
abortTransaction(
|
|
2039
|
+
abortTransaction(target);
|
|
1974
2040
|
store.logger.warn(`\u{1F4A5}`, `transaction`, options.key, `caught:`, thrown);
|
|
1975
2041
|
throw thrown;
|
|
1976
2042
|
}
|
|
@@ -1984,46 +2050,10 @@ function createTransaction(options, store) {
|
|
|
1984
2050
|
store.subject.transactionCreation.next(token);
|
|
1985
2051
|
return token;
|
|
1986
2052
|
}
|
|
1987
|
-
var redoTransactionUpdate = (transactionUpdate, store) => {
|
|
1988
|
-
store.logger.info(`\u23ED\uFE0F`, `transaction`, transactionUpdate.key, `Redo`);
|
|
1989
|
-
for (const update of transactionUpdate.updates) {
|
|
1990
|
-
if (`newValue` in update) {
|
|
1991
|
-
const { key, newValue } = update;
|
|
1992
|
-
const token = { key, type: `atom` };
|
|
1993
|
-
const state = withdraw(token, store);
|
|
1994
|
-
if (state === void 0) {
|
|
1995
|
-
throw new Error(
|
|
1996
|
-
`State "${token.key}" not found in this store. This is surprising, because we are navigating the history of the store.`
|
|
1997
|
-
);
|
|
1998
|
-
}
|
|
1999
|
-
setState(state, newValue, store);
|
|
2000
|
-
} else {
|
|
2001
|
-
redoTransactionUpdate(update, store);
|
|
2002
|
-
}
|
|
2003
|
-
}
|
|
2004
|
-
};
|
|
2005
|
-
var undoTransactionUpdate = (transactionUpdate, store) => {
|
|
2006
|
-
store.logger.info(`\u23EE\uFE0F`, `transaction`, transactionUpdate.key, `Undo`);
|
|
2007
|
-
for (const update of transactionUpdate.updates.reverse()) {
|
|
2008
|
-
if (`newValue` in update) {
|
|
2009
|
-
const { key, newValue } = update;
|
|
2010
|
-
const token = { key, type: `atom` };
|
|
2011
|
-
const state = withdraw(token, store);
|
|
2012
|
-
if (state === void 0) {
|
|
2013
|
-
throw new Error(
|
|
2014
|
-
`State "${token.key}" not found in this store. This is surprising, because we are navigating the history of the store.`
|
|
2015
|
-
);
|
|
2016
|
-
}
|
|
2017
|
-
setState(state, newValue, store);
|
|
2018
|
-
} else {
|
|
2019
|
-
undoTransactionUpdate(update, store);
|
|
2020
|
-
}
|
|
2021
|
-
}
|
|
2022
|
-
};
|
|
2023
2053
|
|
|
2024
2054
|
// internal/src/transaction/index.ts
|
|
2025
2055
|
var TRANSACTION_PHASES = [`idle`, `building`, `applying`];
|
|
2026
2056
|
|
|
2027
|
-
export { FamilyTracker, Future, IMPLICIT, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtom, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelectorFamily, createSelector, createSelectorFamily, createTimeline, createTransaction, deleteAtom2 as deleteAtom, deleteSelector, deposit, eldest, evictCachedValue, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, isAtomDefault, isAtomKey, isDone, isReadonlySelectorKey,
|
|
2057
|
+
export { FamilyTracker, Future, IMPLICIT, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtom, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelector, createSelectorFamily, createTimeline, createTransaction, deleteAtom2 as deleteAtom, deleteSelector, deposit, eldest, evictCachedValue, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, isAtomDefault, isAtomKey, isDone, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, isValueCached, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
|
|
2028
2058
|
//# sourceMappingURL=out.js.map
|
|
2029
2059
|
//# sourceMappingURL=index.js.map
|