atom.io 0.21.1 → 0.22.0
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/data/dist/index.cjs +136 -63
- package/data/dist/index.d.ts +6 -0
- package/data/dist/index.js +3 -3
- package/data/src/join.ts +135 -51
- package/data/src/struct-family.ts +2 -2
- package/dist/{chunk-RT43TVKP.js → chunk-GVHKIJ3G.js} +1 -1
- package/dist/{chunk-HITX3MO4.js → chunk-JA4V7TJY.js} +135 -62
- package/dist/index.cjs +2 -7
- package/dist/index.d.ts +29 -14
- package/dist/index.js +4 -8
- package/ephemeral/dist/index.cjs +11 -0
- package/ephemeral/dist/index.js +9 -0
- package/ephemeral/package.json +16 -0
- package/ephemeral/src/index.ts +1 -0
- package/eslint-plugin/dist/index.cjs +156 -1
- package/eslint-plugin/dist/index.js +156 -1
- package/eslint-plugin/src/rules/index.ts +1 -0
- package/eslint-plugin/src/rules/lifespan.ts +204 -0
- package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -65
- package/eslint-plugin/src/walk.ts +73 -0
- package/immortal/dist/index.cjs +100 -0
- package/immortal/dist/index.js +97 -0
- package/immortal/package.json +16 -0
- package/immortal/src/index.ts +2 -0
- package/immortal/src/molecule.ts +134 -0
- package/immortal/src/seek-state.ts +60 -0
- package/internal/dist/index.cjs +186 -146
- package/internal/dist/index.d.ts +29 -13
- package/internal/dist/index.js +185 -146
- package/internal/src/atom/dispose-atom.ts +4 -1
- package/internal/src/families/create-readonly-selector-family.ts +9 -9
- package/internal/src/families/create-regular-atom-family.ts +15 -20
- package/internal/src/families/create-writable-selector-family.ts +6 -7
- package/internal/src/families/find-in-store.ts +11 -5
- package/internal/src/families/index.ts +2 -0
- package/internal/src/families/init-family-member.ts +91 -0
- package/internal/src/families/seek-in-store.ts +106 -0
- package/internal/src/get-state/get-from-store.ts +2 -2
- package/internal/src/mutable/create-mutable-atom-family.ts +17 -23
- package/internal/src/mutable/create-mutable-atom.ts +3 -1
- package/internal/src/mutable/get-json-family.ts +2 -2
- package/internal/src/mutable/get-json-token.ts +27 -12
- package/internal/src/mutable/tracker-family.ts +14 -12
- package/internal/src/not-found-error.ts +11 -3
- package/internal/src/selector/create-readonly-selector.ts +2 -2
- package/internal/src/selector/create-writable-selector.ts +2 -2
- package/internal/src/selector/dispose-selector.ts +40 -23
- package/internal/src/selector/register-selector.ts +8 -5
- package/internal/src/set-state/set-into-store.ts +2 -2
- package/internal/src/store/index.ts +0 -1
- package/internal/src/store/store.ts +18 -5
- package/internal/src/subscribe/subscribe-to-state.ts +2 -2
- package/internal/src/transaction/build-transaction.ts +7 -2
- package/introspection/dist/index.cjs +38 -52
- package/introspection/dist/index.js +38 -52
- package/introspection/src/attach-atom-index.ts +38 -48
- package/introspection/src/attach-selector-index.ts +45 -50
- package/json/dist/index.cjs +38 -4
- package/json/dist/index.js +40 -6
- package/json/src/select-json-family.ts +46 -7
- package/package.json +30 -10
- package/react/dist/index.cjs +1 -1
- package/react/dist/index.js +1 -1
- package/react/src/use-json.ts +1 -1
- package/react-devtools/dist/index.cjs +11 -10
- package/react-devtools/dist/index.js +2 -1
- package/react-devtools/src/StateIndex.tsx +2 -1
- package/react-devtools/src/TimelineIndex.tsx +2 -1
- package/react-devtools/src/TransactionIndex.tsx +7 -7
- package/realtime-client/dist/index.cjs +3 -3
- package/realtime-client/dist/index.js +3 -3
- package/realtime-client/src/pull-mutable-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-mutable-atom.ts +1 -1
- package/realtime-client/src/sync-continuity.ts +1 -2
- package/realtime-react/dist/index.cjs +1 -1
- package/realtime-react/dist/index.js +1 -1
- package/realtime-server/dist/index.cjs +18 -17
- package/realtime-server/dist/index.js +7 -6
- package/realtime-server/src/realtime-continuity-synchronizer.ts +5 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
- package/realtime-server/src/realtime-mutable-provider.ts +1 -1
- package/realtime-testing/dist/index.cjs +6 -2
- package/realtime-testing/dist/index.js +8 -5
- package/realtime-testing/src/setup-realtime-test.tsx +5 -2
- package/src/atom.ts +10 -4
- package/src/index.ts +1 -2
- package/src/selector.ts +10 -4
- package/src/silo.ts +3 -3
- package/src/transaction.ts +5 -2
- package/internal/src/store/withdraw-new-family-member.ts +0 -69
- /package/{src → ephemeral/src}/find-state.ts +0 -0
- /package/src/{dispose.ts → dispose-state.ts} +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Transactors } from "atom.io"
|
|
2
|
+
import type { findState } from "atom.io/ephemeral"
|
|
3
|
+
import type { seekState } from "atom.io/immortal"
|
|
2
4
|
|
|
3
|
-
import { findInStore } from "../families"
|
|
5
|
+
import { findInStore, seekInStore } from "../families"
|
|
4
6
|
import { readOrComputeValue } from "../get-state/read-or-compute-value"
|
|
5
7
|
import { newest } from "../lineage"
|
|
6
8
|
import { setAtomOrSelector } from "../set-state"
|
|
7
9
|
import type { Store } from "../store"
|
|
8
|
-
import {
|
|
10
|
+
import { withdraw } from "../store"
|
|
9
11
|
import { updateSelectorAtoms } from "./update-selector-atoms"
|
|
10
12
|
|
|
11
13
|
export const registerSelector = (
|
|
@@ -15,7 +17,7 @@ export const registerSelector = (
|
|
|
15
17
|
get: (dependency) => {
|
|
16
18
|
const target = newest(store)
|
|
17
19
|
|
|
18
|
-
const dependencyState =
|
|
20
|
+
const dependencyState = withdraw(dependency, store)
|
|
19
21
|
const dependencyValue = readOrComputeValue(dependencyState, store)
|
|
20
22
|
|
|
21
23
|
store.logger.info(
|
|
@@ -40,8 +42,9 @@ export const registerSelector = (
|
|
|
40
42
|
return dependencyValue
|
|
41
43
|
},
|
|
42
44
|
set: (WritableToken, newValue) => {
|
|
43
|
-
const state =
|
|
45
|
+
const state = withdraw(WritableToken, store)
|
|
44
46
|
setAtomOrSelector(state, newValue, store)
|
|
45
47
|
},
|
|
46
48
|
find: ((token, key) => findInStore(token, key, store)) as typeof findState,
|
|
49
|
+
seek: ((token, key) => seekInStore(token, key, store)) as typeof seekState,
|
|
47
50
|
})
|
|
@@ -2,7 +2,7 @@ import type { WritableToken } from "atom.io"
|
|
|
2
2
|
|
|
3
3
|
import { closeOperation, openOperation } from "../operation"
|
|
4
4
|
import type { Store } from "../store"
|
|
5
|
-
import {
|
|
5
|
+
import { withdraw } from "../store"
|
|
6
6
|
import { setAtomOrSelector } from "./set-atom-or-selector"
|
|
7
7
|
|
|
8
8
|
export function setIntoStore<T, New extends T>(
|
|
@@ -27,7 +27,7 @@ export function setIntoStore<T, New extends T>(
|
|
|
27
27
|
)
|
|
28
28
|
return
|
|
29
29
|
}
|
|
30
|
-
const state =
|
|
30
|
+
const state = withdraw(token, store)
|
|
31
31
|
setAtomOrSelector(state, value, store)
|
|
32
32
|
closeOperation(store)
|
|
33
33
|
}
|
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
WritableSelectorToken,
|
|
13
13
|
} from "atom.io"
|
|
14
14
|
import { AtomIOLogger } from "atom.io"
|
|
15
|
+
import type { Molecule } from "atom.io/immortal"
|
|
15
16
|
|
|
16
17
|
import { Junction } from "~/packages/rel8/junction/src"
|
|
17
18
|
|
|
@@ -80,6 +81,9 @@ export class Store implements Lineage {
|
|
|
80
81
|
},
|
|
81
82
|
)
|
|
82
83
|
|
|
84
|
+
public molecules = new Map<string, Molecule<any>>()
|
|
85
|
+
public miscResources = new Map<string, Disposable>()
|
|
86
|
+
|
|
83
87
|
public on = {
|
|
84
88
|
atomCreation: new Subject<AtomToken<unknown>>(),
|
|
85
89
|
atomDisposal: new Subject<AtomToken<unknown>>(),
|
|
@@ -107,8 +111,10 @@ export class Store implements Lineage {
|
|
|
107
111
|
|
|
108
112
|
public config: {
|
|
109
113
|
name: string
|
|
114
|
+
lifespan: `ephemeral` | `immortal`
|
|
110
115
|
} = {
|
|
111
116
|
name: `IMPLICIT_STORE`,
|
|
117
|
+
lifespan: `ephemeral`,
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
public loggers: AtomIOLogger[] = [
|
|
@@ -126,7 +132,7 @@ export class Store implements Lineage {
|
|
|
126
132
|
},
|
|
127
133
|
}
|
|
128
134
|
|
|
129
|
-
public constructor(
|
|
135
|
+
public constructor(config: Store[`config`], store: Store | null = null) {
|
|
130
136
|
if (store !== null) {
|
|
131
137
|
this.valueMap = new Map(store?.valueMap)
|
|
132
138
|
this.operation = { ...store?.operation }
|
|
@@ -141,7 +147,7 @@ export class Store implements Lineage {
|
|
|
141
147
|
|
|
142
148
|
this.config = {
|
|
143
149
|
...store?.config,
|
|
144
|
-
|
|
150
|
+
...config,
|
|
145
151
|
}
|
|
146
152
|
for (const [, family] of store.families) {
|
|
147
153
|
family.install(this)
|
|
@@ -153,7 +159,7 @@ export class Store implements Lineage {
|
|
|
153
159
|
}
|
|
154
160
|
atom.install(this)
|
|
155
161
|
if (atom.type === `mutable_atom`) {
|
|
156
|
-
const originalJsonToken = getJsonToken(atom)
|
|
162
|
+
const originalJsonToken = getJsonToken(atom, store)
|
|
157
163
|
const originalUpdateToken = getUpdateToken(atom)
|
|
158
164
|
mutableHelpers.add(originalJsonToken.key)
|
|
159
165
|
mutableHelpers.add(originalUpdateToken.key)
|
|
@@ -182,13 +188,20 @@ export const IMPLICIT = {
|
|
|
182
188
|
STORE_INTERNAL: undefined as Store | undefined,
|
|
183
189
|
get STORE(): Store {
|
|
184
190
|
return (
|
|
185
|
-
this.STORE_INTERNAL ??
|
|
191
|
+
this.STORE_INTERNAL ??
|
|
192
|
+
(this.STORE_INTERNAL = new Store({
|
|
193
|
+
name: `IMPLICIT_STORE`,
|
|
194
|
+
lifespan: `ephemeral`,
|
|
195
|
+
}))
|
|
186
196
|
)
|
|
187
197
|
},
|
|
188
198
|
}
|
|
189
199
|
|
|
190
200
|
export const clearStore = (store: Store): void => {
|
|
191
201
|
const { config } = store
|
|
192
|
-
|
|
202
|
+
for (const disposable of store.miscResources.values()) {
|
|
203
|
+
disposable[Symbol.dispose]()
|
|
204
|
+
}
|
|
205
|
+
Object.assign(store, new Store(config))
|
|
193
206
|
store.config = config
|
|
194
207
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReadableToken, StateUpdate, UpdateHandler } from "atom.io"
|
|
2
2
|
|
|
3
3
|
import type { Store } from "../store"
|
|
4
|
-
import {
|
|
4
|
+
import { withdraw } from "../store"
|
|
5
5
|
import { subscribeToRootAtoms } from "./subscribe-to-root-atoms"
|
|
6
6
|
|
|
7
7
|
export function subscribeToState<T>(
|
|
@@ -23,7 +23,7 @@ export function subscribeToState<T>(
|
|
|
23
23
|
handleUpdate(update)
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
const state =
|
|
26
|
+
const state = withdraw(token, store)
|
|
27
27
|
store.logger.info(`👀`, state.type, state.key, `Adding subscription "${key}"`)
|
|
28
28
|
const isSelector =
|
|
29
29
|
state.type === `selector` || state.type === `readonly_selector`
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Func } from "atom.io"
|
|
2
|
+
import type { findState } from "atom.io/ephemeral"
|
|
3
|
+
import type { seekState } from "atom.io/immortal"
|
|
2
4
|
|
|
3
5
|
import { Junction } from "~/packages/rel8/junction/src"
|
|
4
6
|
|
|
5
7
|
import { arbitrary } from "../arbitrary"
|
|
6
|
-
import { findInStore } from "../families"
|
|
8
|
+
import { findInStore, seekInStore } from "../families"
|
|
7
9
|
import { getEnvironmentData } from "../get-environment-data"
|
|
8
10
|
import { getFromStore } from "../get-state"
|
|
9
11
|
import { LazyMap } from "../lazy-map"
|
|
@@ -43,6 +45,8 @@ export const buildTransaction = (
|
|
|
43
45
|
}),
|
|
44
46
|
selectors: new LazyMap(parent.selectors),
|
|
45
47
|
valueMap: new LazyMap(parent.valueMap),
|
|
48
|
+
molecules: new LazyMap(parent.molecules),
|
|
49
|
+
miscResources: new LazyMap(parent.miscResources),
|
|
46
50
|
}
|
|
47
51
|
const epoch = getEpochNumberOfAction(key, store)
|
|
48
52
|
const transactionMeta: TransactionProgress<Func> = {
|
|
@@ -63,6 +67,7 @@ export const buildTransaction = (
|
|
|
63
67
|
run: (token, identifier = arbitrary()) =>
|
|
64
68
|
actUponStore(token, identifier, child),
|
|
65
69
|
find: ((token, k) => findInStore(token, k, child)) as typeof findState,
|
|
70
|
+
seek: ((token, k) => seekInStore(token, k, child)) as typeof seekState,
|
|
66
71
|
env: () => getEnvironmentData(child),
|
|
67
72
|
},
|
|
68
73
|
}
|
|
@@ -66,55 +66,45 @@ var attachAtomIndex = (store = Internal2.IMPLICIT.STORE) => {
|
|
|
66
66
|
},
|
|
67
67
|
effects: [
|
|
68
68
|
({ setSelf }) => {
|
|
69
|
-
|
|
70
|
-
`
|
|
71
|
-
|
|
72
|
-
if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
setSelf((self) => {
|
|
76
|
-
if (atomToken.family) {
|
|
77
|
-
const { key: familyKey, subKey } = atomToken.family;
|
|
78
|
-
let familyNode = self.get(familyKey);
|
|
79
|
-
if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
|
|
80
|
-
familyNode = {
|
|
81
|
-
key: familyKey,
|
|
82
|
-
familyMembers: /* @__PURE__ */ new Map()
|
|
83
|
-
};
|
|
84
|
-
self.set(familyKey, familyNode);
|
|
85
|
-
}
|
|
86
|
-
familyNode.familyMembers.set(subKey, atomToken);
|
|
87
|
-
} else {
|
|
88
|
-
self.set(atomToken.key, atomToken);
|
|
89
|
-
}
|
|
90
|
-
return self;
|
|
91
|
-
});
|
|
69
|
+
store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
|
|
70
|
+
if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
71
|
+
return;
|
|
92
72
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
73
|
+
setSelf((self) => {
|
|
74
|
+
if (atomToken.family) {
|
|
75
|
+
const { key: familyKey, subKey } = atomToken.family;
|
|
76
|
+
let familyNode = self.get(familyKey);
|
|
77
|
+
if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
|
|
78
|
+
familyNode = {
|
|
79
|
+
key: familyKey,
|
|
80
|
+
familyMembers: /* @__PURE__ */ new Map()
|
|
81
|
+
};
|
|
82
|
+
self.set(familyKey, familyNode);
|
|
83
|
+
}
|
|
84
|
+
familyNode.familyMembers.set(subKey, atomToken);
|
|
85
|
+
} else {
|
|
86
|
+
self.set(atomToken.key, atomToken);
|
|
87
|
+
}
|
|
88
|
+
return self;
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
|
|
92
|
+
setSelf((self) => {
|
|
93
|
+
if (atomToken.family) {
|
|
94
|
+
const { key: familyKey, subKey } = atomToken.family;
|
|
95
|
+
const familyNode = self.get(familyKey);
|
|
96
|
+
if (familyNode && `familyMembers` in familyNode) {
|
|
97
|
+
familyNode.familyMembers.delete(subKey);
|
|
98
|
+
if (familyNode.familyMembers.size === 0) {
|
|
99
|
+
self.delete(familyKey);
|
|
106
100
|
}
|
|
107
|
-
} else {
|
|
108
|
-
self.delete(atomToken.key);
|
|
109
101
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
unsubscribeFromAtomDisposal();
|
|
117
|
-
};
|
|
102
|
+
} else {
|
|
103
|
+
self.delete(atomToken.key);
|
|
104
|
+
}
|
|
105
|
+
return self;
|
|
106
|
+
});
|
|
107
|
+
});
|
|
118
108
|
}
|
|
119
109
|
]
|
|
120
110
|
},
|
|
@@ -159,7 +149,7 @@ var attachSelectorIndex = (store = Internal2.IMPLICIT.STORE) => {
|
|
|
159
149
|
},
|
|
160
150
|
effects: [
|
|
161
151
|
({ setSelf }) => {
|
|
162
|
-
|
|
152
|
+
store.on.selectorCreation.subscribe(
|
|
163
153
|
`introspection`,
|
|
164
154
|
(selectorToken) => {
|
|
165
155
|
if (selectorToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
@@ -184,7 +174,7 @@ var attachSelectorIndex = (store = Internal2.IMPLICIT.STORE) => {
|
|
|
184
174
|
});
|
|
185
175
|
}
|
|
186
176
|
);
|
|
187
|
-
|
|
177
|
+
store.on.selectorDisposal.subscribe(
|
|
188
178
|
`introspection`,
|
|
189
179
|
(selectorToken) => {
|
|
190
180
|
setSelf((self) => {
|
|
@@ -204,10 +194,6 @@ var attachSelectorIndex = (store = Internal2.IMPLICIT.STORE) => {
|
|
|
204
194
|
});
|
|
205
195
|
}
|
|
206
196
|
);
|
|
207
|
-
return () => {
|
|
208
|
-
unsubscribeFromSelectorCreation();
|
|
209
|
-
unsubscribeFromSelectorDisposal();
|
|
210
|
-
};
|
|
211
197
|
}
|
|
212
198
|
]
|
|
213
199
|
},
|
|
@@ -31,55 +31,45 @@ var attachAtomIndex = (store = IMPLICIT.STORE) => {
|
|
|
31
31
|
},
|
|
32
32
|
effects: [
|
|
33
33
|
({ setSelf }) => {
|
|
34
|
-
|
|
35
|
-
`
|
|
36
|
-
|
|
37
|
-
if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
setSelf((self) => {
|
|
41
|
-
if (atomToken.family) {
|
|
42
|
-
const { key: familyKey, subKey } = atomToken.family;
|
|
43
|
-
let familyNode = self.get(familyKey);
|
|
44
|
-
if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
|
|
45
|
-
familyNode = {
|
|
46
|
-
key: familyKey,
|
|
47
|
-
familyMembers: /* @__PURE__ */ new Map()
|
|
48
|
-
};
|
|
49
|
-
self.set(familyKey, familyNode);
|
|
50
|
-
}
|
|
51
|
-
familyNode.familyMembers.set(subKey, atomToken);
|
|
52
|
-
} else {
|
|
53
|
-
self.set(atomToken.key, atomToken);
|
|
54
|
-
}
|
|
55
|
-
return self;
|
|
56
|
-
});
|
|
34
|
+
store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
|
|
35
|
+
if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
36
|
+
return;
|
|
57
37
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
38
|
+
setSelf((self) => {
|
|
39
|
+
if (atomToken.family) {
|
|
40
|
+
const { key: familyKey, subKey } = atomToken.family;
|
|
41
|
+
let familyNode = self.get(familyKey);
|
|
42
|
+
if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
|
|
43
|
+
familyNode = {
|
|
44
|
+
key: familyKey,
|
|
45
|
+
familyMembers: /* @__PURE__ */ new Map()
|
|
46
|
+
};
|
|
47
|
+
self.set(familyKey, familyNode);
|
|
48
|
+
}
|
|
49
|
+
familyNode.familyMembers.set(subKey, atomToken);
|
|
50
|
+
} else {
|
|
51
|
+
self.set(atomToken.key, atomToken);
|
|
52
|
+
}
|
|
53
|
+
return self;
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
|
|
57
|
+
setSelf((self) => {
|
|
58
|
+
if (atomToken.family) {
|
|
59
|
+
const { key: familyKey, subKey } = atomToken.family;
|
|
60
|
+
const familyNode = self.get(familyKey);
|
|
61
|
+
if (familyNode && `familyMembers` in familyNode) {
|
|
62
|
+
familyNode.familyMembers.delete(subKey);
|
|
63
|
+
if (familyNode.familyMembers.size === 0) {
|
|
64
|
+
self.delete(familyKey);
|
|
71
65
|
}
|
|
72
|
-
} else {
|
|
73
|
-
self.delete(atomToken.key);
|
|
74
66
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
unsubscribeFromAtomDisposal();
|
|
82
|
-
};
|
|
67
|
+
} else {
|
|
68
|
+
self.delete(atomToken.key);
|
|
69
|
+
}
|
|
70
|
+
return self;
|
|
71
|
+
});
|
|
72
|
+
});
|
|
83
73
|
}
|
|
84
74
|
]
|
|
85
75
|
},
|
|
@@ -124,7 +114,7 @@ var attachSelectorIndex = (store = IMPLICIT.STORE) => {
|
|
|
124
114
|
},
|
|
125
115
|
effects: [
|
|
126
116
|
({ setSelf }) => {
|
|
127
|
-
|
|
117
|
+
store.on.selectorCreation.subscribe(
|
|
128
118
|
`introspection`,
|
|
129
119
|
(selectorToken) => {
|
|
130
120
|
if (selectorToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
@@ -149,7 +139,7 @@ var attachSelectorIndex = (store = IMPLICIT.STORE) => {
|
|
|
149
139
|
});
|
|
150
140
|
}
|
|
151
141
|
);
|
|
152
|
-
|
|
142
|
+
store.on.selectorDisposal.subscribe(
|
|
153
143
|
`introspection`,
|
|
154
144
|
(selectorToken) => {
|
|
155
145
|
setSelf((self) => {
|
|
@@ -169,10 +159,6 @@ var attachSelectorIndex = (store = IMPLICIT.STORE) => {
|
|
|
169
159
|
});
|
|
170
160
|
}
|
|
171
161
|
);
|
|
172
|
-
return () => {
|
|
173
|
-
unsubscribeFromSelectorCreation();
|
|
174
|
-
unsubscribeFromSelectorDisposal();
|
|
175
|
-
};
|
|
176
162
|
}
|
|
177
163
|
]
|
|
178
164
|
},
|
|
@@ -41,59 +41,49 @@ export const attachAtomIndex = (
|
|
|
41
41
|
},
|
|
42
42
|
effects: [
|
|
43
43
|
({ setSelf }) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
}
|
|
44
|
+
store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
|
|
45
|
+
if (atomToken.key.includes(`👁🗨`)) {
|
|
46
|
+
return
|
|
47
|
+
}
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
self.set(familyKey, familyNode)
|
|
49
|
+
setSelf((self) => {
|
|
50
|
+
if (atomToken.family) {
|
|
51
|
+
const { key: familyKey, subKey } = atomToken.family
|
|
52
|
+
let familyNode = self.get(familyKey)
|
|
53
|
+
if (
|
|
54
|
+
familyNode === undefined ||
|
|
55
|
+
!(`familyMembers` in familyNode)
|
|
56
|
+
) {
|
|
57
|
+
familyNode = {
|
|
58
|
+
key: familyKey,
|
|
59
|
+
familyMembers: new Map(),
|
|
64
60
|
}
|
|
65
|
-
|
|
66
|
-
} else {
|
|
67
|
-
self.set(atomToken.key, atomToken)
|
|
61
|
+
self.set(familyKey, familyNode)
|
|
68
62
|
}
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
63
|
+
familyNode.familyMembers.set(subKey, atomToken)
|
|
64
|
+
} else {
|
|
65
|
+
self.set(atomToken.key, atomToken)
|
|
66
|
+
}
|
|
67
|
+
return self
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
|
|
71
|
+
setSelf((self) => {
|
|
72
|
+
if (atomToken.family) {
|
|
73
|
+
const { key: familyKey, subKey } = atomToken.family
|
|
74
|
+
const familyNode = self.get(familyKey)
|
|
75
|
+
if (familyNode && `familyMembers` in familyNode) {
|
|
76
|
+
familyNode.familyMembers.delete(subKey)
|
|
77
|
+
if (familyNode.familyMembers.size === 0) {
|
|
78
|
+
self.delete(familyKey)
|
|
85
79
|
}
|
|
86
|
-
} else {
|
|
87
|
-
self.delete(atomToken.key)
|
|
88
80
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
unsubscribeFromAtomDisposal()
|
|
96
|
-
}
|
|
81
|
+
} else {
|
|
82
|
+
self.delete(atomToken.key)
|
|
83
|
+
}
|
|
84
|
+
return self
|
|
85
|
+
})
|
|
86
|
+
})
|
|
97
87
|
},
|
|
98
88
|
],
|
|
99
89
|
},
|
|
@@ -44,61 +44,56 @@ export const attachSelectorIndex = (
|
|
|
44
44
|
},
|
|
45
45
|
effects: [
|
|
46
46
|
({ setSelf }) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
(selectorToken)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
47
|
+
store.on.selectorCreation.subscribe(
|
|
48
|
+
`introspection`,
|
|
49
|
+
(selectorToken) => {
|
|
50
|
+
if (selectorToken.key.includes(`👁🗨`)) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
self.set(familyKey, familyNode)
|
|
54
|
+
setSelf((self) => {
|
|
55
|
+
if (selectorToken.family) {
|
|
56
|
+
const { key: familyKey, subKey } = selectorToken.family
|
|
57
|
+
let familyNode = self.get(familyKey)
|
|
58
|
+
if (
|
|
59
|
+
familyNode === undefined ||
|
|
60
|
+
!(`familyMembers` in familyNode)
|
|
61
|
+
) {
|
|
62
|
+
familyNode = {
|
|
63
|
+
key: familyKey,
|
|
64
|
+
familyMembers: new Map(),
|
|
68
65
|
}
|
|
69
|
-
|
|
70
|
-
} else {
|
|
71
|
-
self.set(selectorToken.key, selectorToken)
|
|
66
|
+
self.set(familyKey, familyNode)
|
|
72
67
|
}
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
68
|
+
familyNode.familyMembers.set(subKey, selectorToken)
|
|
69
|
+
} else {
|
|
70
|
+
self.set(selectorToken.key, selectorToken)
|
|
71
|
+
}
|
|
72
|
+
return self
|
|
73
|
+
})
|
|
74
|
+
},
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
store.on.selectorDisposal.subscribe(
|
|
78
|
+
`introspection`,
|
|
79
|
+
(selectorToken) => {
|
|
80
|
+
setSelf((self) => {
|
|
81
|
+
if (selectorToken.family) {
|
|
82
|
+
const { key: familyKey, subKey } = selectorToken.family
|
|
83
|
+
const familyNode = self.get(familyKey)
|
|
84
|
+
if (familyNode && `familyMembers` in familyNode) {
|
|
85
|
+
familyNode.familyMembers.delete(subKey)
|
|
86
|
+
if (familyNode.familyMembers.size === 0) {
|
|
87
|
+
self.delete(familyKey)
|
|
90
88
|
}
|
|
91
|
-
} else {
|
|
92
|
-
self.delete(selectorToken.key)
|
|
93
89
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
90
|
+
} else {
|
|
91
|
+
self.delete(selectorToken.key)
|
|
92
|
+
}
|
|
93
|
+
return self
|
|
94
|
+
})
|
|
95
|
+
},
|
|
96
|
+
)
|
|
102
97
|
},
|
|
103
98
|
],
|
|
104
99
|
},
|