atom.io 0.11.0 → 0.12.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.
Files changed (174) hide show
  1. package/data/dist/index.cjs +614 -0
  2. package/data/dist/index.cjs.map +1 -0
  3. package/data/dist/index.d.cts +158 -0
  4. package/data/dist/index.d.ts +118 -1
  5. package/data/dist/index.js +551 -30
  6. package/data/dist/index.js.map +1 -1
  7. package/data/dist/metafile-cjs.json +1 -0
  8. package/data/dist/metafile-esm.json +1 -0
  9. package/data/package.json +4 -3
  10. package/data/src/index.ts +1 -0
  11. package/data/src/join.ts +450 -0
  12. package/data/src/struct-family.ts +34 -24
  13. package/data/src/struct.ts +6 -8
  14. package/dist/index.cjs +257 -0
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/{index.d.mts → index.d.cts} +10 -11
  17. package/dist/index.d.ts +10 -11
  18. package/dist/index.js +63 -104
  19. package/dist/index.js.map +1 -1
  20. package/dist/metafile-cjs.json +1 -0
  21. package/dist/metafile-esm.json +1 -0
  22. package/internal/dist/{index.mjs → index.cjs} +716 -495
  23. package/internal/dist/index.cjs.map +1 -0
  24. package/internal/dist/{index.d.mts → index.d.cts} +124 -105
  25. package/internal/dist/index.d.ts +124 -105
  26. package/internal/dist/index.js +651 -555
  27. package/internal/dist/index.js.map +1 -1
  28. package/internal/dist/metafile-cjs.json +1 -0
  29. package/internal/dist/metafile-esm.json +1 -0
  30. package/internal/package.json +4 -3
  31. package/internal/src/atom/create-atom.ts +29 -16
  32. package/internal/src/atom/delete-atom.ts +25 -6
  33. package/internal/src/atom/is-default.ts +4 -17
  34. package/internal/src/caching.ts +28 -23
  35. package/internal/src/families/create-atom-family.ts +3 -2
  36. package/internal/src/families/create-readonly-selector-family.ts +1 -1
  37. package/internal/src/families/create-selector-family.ts +4 -4
  38. package/internal/src/index.ts +4 -2
  39. package/internal/src/lazy-map.ts +33 -0
  40. package/internal/src/mutable/create-mutable-atom-family.ts +2 -2
  41. package/internal/src/mutable/create-mutable-atom.ts +1 -2
  42. package/internal/src/mutable/get-json-family.ts +22 -0
  43. package/internal/src/mutable/get-json-token.ts +1 -0
  44. package/internal/src/mutable/index.ts +1 -0
  45. package/internal/src/mutable/tracker-family.ts +1 -2
  46. package/internal/src/mutable/tracker.ts +8 -6
  47. package/internal/src/mutable/transceiver.ts +2 -0
  48. package/internal/src/not-found-error.ts +27 -0
  49. package/internal/src/operation.ts +2 -3
  50. package/internal/src/{get-state-internal.ts → read-or-compute-value.ts} +13 -6
  51. package/internal/src/selector/create-selector.ts +6 -7
  52. package/internal/src/selector/delete-selector.ts +37 -0
  53. package/internal/src/selector/index.ts +2 -1
  54. package/internal/src/selector/register-selector.ts +7 -7
  55. package/internal/src/set-state/copy-mutable-in-transaction.ts +3 -2
  56. package/internal/src/set-state/emit-update.ts +1 -3
  57. package/internal/src/set-state/evict-downstream.ts +6 -8
  58. package/internal/src/set-state/index.ts +1 -1
  59. package/internal/src/set-state/{set-state-internal.ts → set-atom-or-selector.ts} +2 -3
  60. package/internal/src/set-state/set-atom.ts +5 -6
  61. package/internal/src/store/store.ts +1 -1
  62. package/internal/src/store/withdraw-new-family-member.ts +6 -6
  63. package/internal/src/subscribe/recall-state.ts +1 -2
  64. package/internal/src/subscribe/subscribe-to-root-atoms.ts +2 -2
  65. package/internal/src/timeline/add-atom-to-timeline.ts +5 -16
  66. package/internal/src/timeline/{timeline-internal.ts → create-timeline.ts} +4 -5
  67. package/internal/src/timeline/index.ts +2 -2
  68. package/internal/src/timeline/time-travel.ts +89 -0
  69. package/internal/src/transaction/build-transaction.ts +8 -7
  70. package/internal/src/transaction/{transaction-internal.ts → create-transaction.ts} +6 -5
  71. package/internal/src/transaction/index.ts +2 -3
  72. package/introspection/dist/{index.mjs → index.cjs} +54 -29
  73. package/introspection/dist/index.cjs.map +1 -0
  74. package/introspection/dist/{index.d.mts → index.d.cts} +2 -2
  75. package/introspection/dist/index.d.ts +2 -2
  76. package/introspection/dist/index.js +32 -49
  77. package/introspection/dist/index.js.map +1 -1
  78. package/introspection/dist/metafile-cjs.json +1 -0
  79. package/introspection/dist/metafile-esm.json +1 -0
  80. package/introspection/package.json +4 -3
  81. package/introspection/src/attach-introspection-states.ts +2 -2
  82. package/introspection/src/attach-selector-index.ts +8 -4
  83. package/json/dist/{index.mjs → index.cjs} +20 -7
  84. package/json/dist/{index.mjs.map → index.cjs.map} +1 -1
  85. package/json/dist/{index.d.mts → index.d.cts} +1 -1
  86. package/json/dist/index.d.ts +1 -1
  87. package/json/dist/index.js +6 -19
  88. package/json/dist/index.js.map +1 -1
  89. package/json/dist/metafile-cjs.json +1 -0
  90. package/json/dist/metafile-esm.json +1 -0
  91. package/json/package.json +4 -3
  92. package/package.json +48 -47
  93. package/react/dist/index.cjs +59 -0
  94. package/react/dist/index.cjs.map +1 -0
  95. package/react/dist/index.js +20 -42
  96. package/react/dist/index.js.map +1 -1
  97. package/react/dist/metafile-cjs.json +1 -0
  98. package/react/dist/metafile-esm.json +1 -0
  99. package/react/package.json +4 -3
  100. package/react/src/store-hooks.ts +8 -2
  101. package/react-devtools/dist/{index.mjs → index.cjs} +286 -240
  102. package/react-devtools/dist/index.cjs.map +1 -0
  103. package/react-devtools/dist/{index.d.mts → index.d.cts} +29 -17
  104. package/react-devtools/dist/index.d.ts +29 -17
  105. package/react-devtools/dist/index.js +251 -273
  106. package/react-devtools/dist/index.js.map +1 -1
  107. package/react-devtools/dist/metafile-cjs.json +1 -0
  108. package/react-devtools/dist/metafile-esm.json +1 -0
  109. package/react-devtools/package.json +4 -3
  110. package/react-devtools/src/StateEditor.tsx +8 -8
  111. package/realtime-client/dist/{index.mjs → index.cjs} +50 -21
  112. package/realtime-client/dist/index.js +20 -49
  113. package/realtime-client/dist/metafile-cjs.json +1 -0
  114. package/realtime-client/dist/metafile-esm.json +1 -0
  115. package/realtime-client/package.json +4 -3
  116. package/realtime-react/dist/index.cjs +99 -0
  117. package/realtime-react/dist/index.js +35 -66
  118. package/realtime-react/dist/metafile-cjs.json +1 -0
  119. package/realtime-react/dist/metafile-esm.json +1 -0
  120. package/realtime-react/package.json +4 -3
  121. package/realtime-server/dist/{index.mjs → index.cjs} +67 -40
  122. package/realtime-server/dist/index.js +39 -66
  123. package/realtime-server/dist/metafile-cjs.json +1 -0
  124. package/realtime-server/dist/metafile-esm.json +1 -0
  125. package/realtime-server/package.json +4 -3
  126. package/realtime-testing/dist/{index.mjs → index.cjs} +54 -23
  127. package/realtime-testing/dist/index.js +22 -53
  128. package/realtime-testing/dist/metafile-cjs.json +1 -0
  129. package/realtime-testing/dist/metafile-esm.json +1 -0
  130. package/realtime-testing/package.json +4 -3
  131. package/src/atom.ts +6 -8
  132. package/src/dispose.ts +18 -0
  133. package/src/get-state.ts +16 -0
  134. package/src/index.ts +3 -1
  135. package/src/logger.ts +1 -1
  136. package/src/selector.ts +3 -3
  137. package/src/set-state.ts +22 -0
  138. package/src/silo.ts +7 -8
  139. package/src/timeline.ts +6 -11
  140. package/src/transaction.ts +2 -2
  141. package/transceivers/set-rtx/dist/{index.mjs → index.cjs} +40 -36
  142. package/transceivers/set-rtx/dist/index.cjs.map +1 -0
  143. package/transceivers/set-rtx/dist/{index.d.mts → index.d.cts} +2 -1
  144. package/transceivers/set-rtx/dist/index.d.ts +2 -1
  145. package/transceivers/set-rtx/dist/index.js +37 -37
  146. package/transceivers/set-rtx/dist/index.js.map +1 -1
  147. package/transceivers/set-rtx/dist/metafile-cjs.json +1 -0
  148. package/transceivers/set-rtx/dist/metafile-esm.json +1 -0
  149. package/transceivers/set-rtx/package.json +4 -3
  150. package/transceivers/set-rtx/src/set-rtx.ts +29 -26
  151. package/data/dist/index.d.mts +0 -41
  152. package/data/dist/index.mjs +0 -82
  153. package/data/dist/index.mjs.map +0 -1
  154. package/dist/index.mjs +0 -215
  155. package/dist/index.mjs.map +0 -1
  156. package/internal/dist/index.mjs.map +0 -1
  157. package/internal/src/set-state/set-selector-state.ts +0 -8
  158. package/internal/src/timeline/time-travel-internal.ts +0 -109
  159. package/introspection/dist/index.mjs.map +0 -1
  160. package/react/dist/index.mjs +0 -29
  161. package/react/dist/index.mjs.map +0 -1
  162. package/react-devtools/dist/index.mjs.map +0 -1
  163. package/realtime-react/dist/index.mjs +0 -68
  164. package/src/get-set.ts +0 -48
  165. package/transceivers/set-rtx/dist/index.mjs.map +0 -1
  166. /package/react/dist/{index.d.mts → index.d.cts} +0 -0
  167. /package/realtime-client/dist/{index.mjs.map → index.cjs.map} +0 -0
  168. /package/realtime-client/dist/{index.d.mts → index.d.cts} +0 -0
  169. /package/realtime-react/dist/{index.mjs.map → index.cjs.map} +0 -0
  170. /package/realtime-react/dist/{index.d.mts → index.d.cts} +0 -0
  171. /package/realtime-server/dist/{index.mjs.map → index.cjs.map} +0 -0
  172. /package/realtime-server/dist/{index.d.mts → index.d.cts} +0 -0
  173. /package/realtime-testing/dist/{index.mjs.map → index.cjs.map} +0 -0
  174. /package/realtime-testing/dist/{index.d.mts → index.d.cts} +0 -0
@@ -1,10 +1,10 @@
1
- 'use strict';
2
-
3
- var internal = require('atom.io/internal');
1
+ import { createSelector, IMPLICIT, createMutableAtomFamily, createAtomFamily, createAtom, createSelectorFamily, getJsonFamily } from 'atom.io/internal';
2
+ import { getState, setState } from 'atom.io';
3
+ import { SetRTX } from 'atom.io/transceivers/set-rtx';
4
4
 
5
5
  // src/dict.ts
6
- function dict(findState, index, store = internal.IMPLICIT.STORE) {
7
- return internal.createSelector(
6
+ function dict(findState, index, store = IMPLICIT.STORE) {
7
+ return createSelector(
8
8
  {
9
9
  key: `${findState.key}Dict`,
10
10
  get: ({ get }) => {
@@ -19,11 +19,527 @@ function dict(findState, index, store = internal.IMPLICIT.STORE) {
19
19
  store
20
20
  );
21
21
  }
22
- var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
23
- function struct(options, store = internal.IMPLICIT.STORE) {
22
+
23
+ // ../../rel8/junction/src/junction.ts
24
+ var Junction = class {
25
+ constructor(data, config) {
26
+ this.relations = /* @__PURE__ */ new Map();
27
+ this.contents = /* @__PURE__ */ new Map();
28
+ this.makeContentKey = (a, b) => `${a}:${b}`;
29
+ var _a, _b, _c, _d;
30
+ this.a = data.between[0];
31
+ this.b = data.between[1];
32
+ this.cardinality = data.cardinality;
33
+ if (!(config == null ? void 0 : config.externalStore)) {
34
+ this.relations = new Map((_a = data.relations) == null ? void 0 : _a.map(([a, b]) => [a, new Set(b)]));
35
+ this.contents = new Map(data.contents);
36
+ }
37
+ this.isContent = (_b = config == null ? void 0 : config.isContent) != null ? _b : null;
38
+ if (config == null ? void 0 : config.makeContentKey) {
39
+ this.makeContentKey = config.makeContentKey;
40
+ }
41
+ if (config == null ? void 0 : config.externalStore) {
42
+ const externalStore = config.externalStore;
43
+ this.has = (a, b) => externalStore.has(a, b);
44
+ this.addRelation = (a, b) => {
45
+ externalStore.addRelation(a, b);
46
+ };
47
+ this.deleteRelation = (a, b) => {
48
+ externalStore.deleteRelation(a, b);
49
+ };
50
+ this.replaceRelationsSafely = (a, bs) => {
51
+ externalStore.replaceRelationsSafely(a, bs);
52
+ };
53
+ this.replaceRelationsUnsafely = (a, bs) => {
54
+ externalStore.replaceRelationsUnsafely(a, bs);
55
+ };
56
+ this.getRelatedKeys = (key) => externalStore.getRelatedKeys(key);
57
+ if (externalStore.getContent) {
58
+ this.getContentInternal = (contentKey) => {
59
+ return externalStore.getContent(contentKey);
60
+ };
61
+ this.setContent = (contentKey, content) => {
62
+ externalStore.setContent(contentKey, content);
63
+ };
64
+ this.deleteContent = (contentKey) => {
65
+ externalStore.deleteContent(contentKey);
66
+ };
67
+ }
68
+ for (const [x, ys] of (_c = data.relations) != null ? _c : []) {
69
+ for (const y of ys)
70
+ this.addRelation(x, y);
71
+ }
72
+ for (const [contentKey, content] of (_d = data.contents) != null ? _d : []) {
73
+ this.setContent(contentKey, content);
74
+ }
75
+ }
76
+ }
77
+ getRelatedKeys(key) {
78
+ return this.relations.get(key);
79
+ }
80
+ addRelation(a, b) {
81
+ let aRelations = this.relations.get(a);
82
+ let bRelations = this.relations.get(b);
83
+ if (aRelations) {
84
+ aRelations.add(b);
85
+ } else {
86
+ aRelations = /* @__PURE__ */ new Set([b]);
87
+ this.relations.set(a, aRelations);
88
+ }
89
+ if (bRelations) {
90
+ bRelations.add(a);
91
+ } else {
92
+ bRelations = /* @__PURE__ */ new Set([a]);
93
+ this.relations.set(b, bRelations);
94
+ }
95
+ }
96
+ deleteRelation(a, b) {
97
+ const aRelations = this.relations.get(a);
98
+ if (aRelations) {
99
+ aRelations.delete(b);
100
+ if (aRelations.size === 0) {
101
+ this.relations.delete(a);
102
+ }
103
+ const bRelations = this.relations.get(b);
104
+ if (bRelations) {
105
+ bRelations.delete(a);
106
+ if (bRelations.size === 0) {
107
+ this.relations.delete(b);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ replaceRelationsUnsafely(a, bs) {
113
+ this.relations.set(a, new Set(bs));
114
+ for (const b of bs) {
115
+ const bRelations = /* @__PURE__ */ new Set([a]);
116
+ this.relations.set(b, bRelations);
117
+ }
118
+ }
119
+ replaceRelationsSafely(a, bs) {
120
+ const aRelationsPrev = this.relations.get(a);
121
+ if (aRelationsPrev) {
122
+ for (const b of aRelationsPrev) {
123
+ const bRelations = this.relations.get(b);
124
+ if (bRelations) {
125
+ if (bRelations.size === 1) {
126
+ this.relations.delete(b);
127
+ } else {
128
+ bRelations.delete(a);
129
+ }
130
+ this.contents.delete(this.makeContentKey(a, b));
131
+ }
132
+ }
133
+ }
134
+ this.relations.set(a, new Set(bs));
135
+ for (const b of bs) {
136
+ let bRelations = this.relations.get(b);
137
+ if (bRelations) {
138
+ bRelations.add(a);
139
+ } else {
140
+ bRelations = /* @__PURE__ */ new Set([a]);
141
+ this.relations.set(b, bRelations);
142
+ }
143
+ }
144
+ }
145
+ getContentInternal(contentKey) {
146
+ return this.contents.get(contentKey);
147
+ }
148
+ setContent(contentKey, content) {
149
+ this.contents.set(contentKey, content);
150
+ }
151
+ deleteContent(contentKey) {
152
+ this.contents.delete(contentKey);
153
+ }
154
+ toJSON() {
155
+ return {
156
+ between: [this.a, this.b],
157
+ cardinality: this.cardinality,
158
+ relations: [...this.relations.entries()].map(([a, b]) => [a, [...b]]),
159
+ contents: [...this.contents.entries()]
160
+ };
161
+ }
162
+ set(a, ...rest) {
163
+ var _a;
164
+ const b = typeof rest[0] === `string` ? rest[0] : a[this.b];
165
+ const content = ((_a = rest[1]) != null ? _a : typeof rest[0] === `string`) ? void 0 : rest[0];
166
+ a = typeof a === `string` ? a : a[this.a];
167
+ switch (this.cardinality) {
168
+ case `1:1`: {
169
+ const bPrev = this.getRelatedKey(a);
170
+ if (bPrev && bPrev !== b)
171
+ this.delete(bPrev, a);
172
+ }
173
+ case `1:n`: {
174
+ const aPrev = this.getRelatedKey(b);
175
+ if (aPrev && aPrev !== a)
176
+ this.delete(aPrev, b);
177
+ }
178
+ }
179
+ if (content) {
180
+ const contentKey = this.makeContentKey(a, b);
181
+ this.setContent(contentKey, content);
182
+ }
183
+ this.addRelation(a, b);
184
+ return this;
185
+ }
186
+ delete(x, b) {
187
+ b = typeof b === `string` ? b : x[this.b];
188
+ const a = typeof x === `string` ? x : x[this.a];
189
+ if (a === void 0 && typeof b === `string`) {
190
+ const bRelations = this.getRelatedKeys(b);
191
+ if (bRelations) {
192
+ for (const a2 of bRelations) {
193
+ this.delete(a2, b);
194
+ }
195
+ }
196
+ }
197
+ if (typeof a === `string` && b === void 0) {
198
+ const aRelations = this.getRelatedKeys(a);
199
+ if (aRelations) {
200
+ for (const b2 of aRelations) {
201
+ this.delete(a, b2);
202
+ }
203
+ }
204
+ }
205
+ if (typeof a === `string` && typeof b === `string`) {
206
+ this.deleteRelation(a, b);
207
+ const contentKey = this.makeContentKey(a, b);
208
+ this.deleteContent(contentKey);
209
+ }
210
+ return this;
211
+ }
212
+ getRelatedKey(key) {
213
+ const relations = this.getRelatedKeys(key);
214
+ if (relations) {
215
+ if (relations.size > 1) {
216
+ console.warn(
217
+ `${relations.size} related keys were found for key "${key}": (${[
218
+ ...relations
219
+ ].map((k) => `"${k}"`).join(`, `)}). Only one related key was expected.`
220
+ );
221
+ }
222
+ for (const relation of relations) {
223
+ return relation;
224
+ }
225
+ }
226
+ }
227
+ replaceRelations(a, relations, config) {
228
+ const hasContent = !Array.isArray(relations);
229
+ const bs = hasContent ? Object.keys(relations) : relations;
230
+ if (config == null ? void 0 : config.reckless) {
231
+ this.replaceRelationsUnsafely(a, bs);
232
+ } else {
233
+ this.replaceRelationsSafely(a, bs);
234
+ }
235
+ if (hasContent) {
236
+ for (const b of bs) {
237
+ const contentKey = this.makeContentKey(a, b);
238
+ const content = relations[b];
239
+ this.setContent(contentKey, content);
240
+ }
241
+ }
242
+ return this;
243
+ }
244
+ getContent(a, b) {
245
+ const contentKey = this.makeContentKey(a, b);
246
+ return this.getContentInternal(contentKey);
247
+ }
248
+ getRelationEntries(input) {
249
+ const a = input[this.a];
250
+ const b = input[this.b];
251
+ if (a !== void 0 && b === void 0) {
252
+ const aRelations = this.getRelatedKeys(a);
253
+ if (aRelations) {
254
+ return [...aRelations].map((b2) => {
255
+ var _a;
256
+ return [b2, (_a = this.getContent(a, b2)) != null ? _a : null];
257
+ });
258
+ }
259
+ }
260
+ if (a === void 0 && b !== void 0) {
261
+ const bRelations = this.getRelatedKeys(b);
262
+ if (bRelations) {
263
+ return [...bRelations].map((a2) => {
264
+ var _a;
265
+ return [a2, (_a = this.getContent(a2, b)) != null ? _a : null];
266
+ });
267
+ }
268
+ }
269
+ return [];
270
+ }
271
+ has(a, b) {
272
+ var _a;
273
+ if (b) {
274
+ const setA = this.getRelatedKeys(a);
275
+ return (_a = setA == null ? void 0 : setA.has(b)) != null ? _a : false;
276
+ }
277
+ return this.relations.has(a);
278
+ }
279
+ };
280
+
281
+ // src/join.ts
282
+ var TRANSACTORS = { get: getState, set: setState };
283
+ function capitalize(string) {
284
+ return string[0].toUpperCase() + string.slice(1);
285
+ }
286
+ function join(options, defaultContent, store = IMPLICIT.STORE) {
287
+ const a = options.between[0];
288
+ const b = options.between[1];
289
+ const findRelatedKeysState = createMutableAtomFamily(
290
+ {
291
+ key: `${options.key}/relatedKeys`,
292
+ default: () => new SetRTX(),
293
+ mutable: true,
294
+ fromJson: (json) => new SetRTX(json),
295
+ toJson: (set) => [...set]
296
+ },
297
+ store
298
+ );
299
+ const getRelatedKeys = ({ get }, key) => get(findRelatedKeysState(key));
300
+ const addRelation = (transactors, a2, b2) => {
301
+ const aKeys = getRelatedKeys(transactors, a2);
302
+ const bKeys = getRelatedKeys(transactors, b2);
303
+ if (aKeys) {
304
+ transactors.set(findRelatedKeysState(a2), aKeys.add(b2));
305
+ } else {
306
+ transactors.set(findRelatedKeysState(a2), new SetRTX([b2]));
307
+ }
308
+ if (bKeys) {
309
+ transactors.set(findRelatedKeysState(b2), bKeys.add(a2));
310
+ } else {
311
+ transactors.set(findRelatedKeysState(b2), new SetRTX([a2]));
312
+ }
313
+ };
314
+ const deleteRelation = (transactors, a2, b2) => {
315
+ const aKeys = getRelatedKeys(transactors, a2);
316
+ if (aKeys) {
317
+ aKeys.delete(b2);
318
+ if (aKeys.size === 0) {
319
+ transactors.set(findRelatedKeysState(a2), void 0);
320
+ }
321
+ const bKeys = getRelatedKeys(transactors, b2);
322
+ if (bKeys) {
323
+ bKeys.delete(a2);
324
+ if (bKeys.size === 0) {
325
+ transactors.set(findRelatedKeysState(b2), void 0);
326
+ }
327
+ }
328
+ }
329
+ };
330
+ const replaceRelationsSafely = (transactors, a2, bs) => {
331
+ const aKeys = getRelatedKeys(transactors, a2);
332
+ if (aKeys) {
333
+ for (const b2 of aKeys) {
334
+ const bKeys = getRelatedKeys(transactors, b2);
335
+ if (bKeys) {
336
+ bKeys.delete(a2);
337
+ if (bKeys.size === 0) {
338
+ transactors.set(findRelatedKeysState(b2), void 0);
339
+ }
340
+ }
341
+ }
342
+ }
343
+ transactors.set(findRelatedKeysState(a2), new SetRTX(bs));
344
+ for (const b2 of bs) {
345
+ const bKeys = getRelatedKeys(transactors, b2);
346
+ if (bKeys) {
347
+ bKeys.add(a2);
348
+ } else {
349
+ transactors.set(findRelatedKeysState(b2), new SetRTX([a2]));
350
+ }
351
+ }
352
+ };
353
+ const replaceRelationsUnsafely = (transactors, a2, bs) => {
354
+ transactors.set(findRelatedKeysState(a2), new SetRTX(bs));
355
+ for (const b2 of bs) {
356
+ let bKeys = getRelatedKeys(transactors, b2);
357
+ if (bKeys) {
358
+ bKeys.add(a2);
359
+ } else {
360
+ bKeys = new SetRTX([a2]);
361
+ transactors.set(findRelatedKeysState(b2), bKeys);
362
+ }
363
+ }
364
+ };
365
+ const has = (transactors, a2, b2) => {
366
+ var _a, _b;
367
+ const aKeys = getRelatedKeys(transactors, a2);
368
+ return b2 ? (_a = aKeys == null ? void 0 : aKeys.has(b2)) != null ? _a : false : ((_b = aKeys == null ? void 0 : aKeys.size) != null ? _b : 0) > 0;
369
+ };
370
+ const baseExternalStoreConfiguration = {
371
+ getRelatedKeys: (key) => getRelatedKeys(TRANSACTORS, key),
372
+ addRelation: (a2, b2) => addRelation(TRANSACTORS, a2, b2),
373
+ deleteRelation: (a2, b2) => deleteRelation(TRANSACTORS, a2, b2),
374
+ replaceRelationsSafely: (a2, bs) => replaceRelationsSafely(TRANSACTORS, a2, bs),
375
+ replaceRelationsUnsafely: (a2, bs) => replaceRelationsUnsafely(TRANSACTORS, a2, bs),
376
+ has: (a2, b2) => has(TRANSACTORS, a2, b2)
377
+ };
378
+ let externalStore;
379
+ let findContentState;
380
+ if (defaultContent) {
381
+ findContentState = createAtomFamily(
382
+ {
383
+ key: `${options.key}/content`,
384
+ default: defaultContent
385
+ },
386
+ store
387
+ );
388
+ const getContent = ({ get }, key) => get(findContentState(key));
389
+ const setContent = (transactors, key, content) => transactors.set(findContentState(key), content);
390
+ const deleteContent = (transactors, key) => transactors.set(findContentState(key), void 0);
391
+ const externalStoreWithContentConfiguration = {
392
+ getContent: (contentKey) => {
393
+ const content = getContent(TRANSACTORS, contentKey);
394
+ return content;
395
+ },
396
+ setContent: (contentKey, content) => {
397
+ setContent(TRANSACTORS, contentKey, content);
398
+ },
399
+ deleteContent: (contentKey) => {
400
+ deleteContent(TRANSACTORS, contentKey);
401
+ }
402
+ };
403
+ externalStore = Object.assign(
404
+ baseExternalStoreConfiguration,
405
+ externalStoreWithContentConfiguration
406
+ );
407
+ } else {
408
+ externalStore = baseExternalStoreConfiguration;
409
+ }
410
+ const relations = new Junction(options, {
411
+ externalStore,
412
+ makeContentKey: (...args) => args.sort().join(`:`)
413
+ });
414
+ const createSingleKeyStateFamily = () => createSelectorFamily(
415
+ {
416
+ key: `${options.key}/singleRelatedKey`,
417
+ get: (key) => ({ get }) => {
418
+ const relatedKeys = get(findRelatedKeysState(key));
419
+ for (const relatedKey of relatedKeys) {
420
+ return relatedKey;
421
+ }
422
+ }
423
+ },
424
+ store
425
+ );
426
+ const getMultipleKeyStateFamily = () => getJsonFamily(findRelatedKeysState, store);
427
+ const createSingleEntryStateFamily = () => createSelectorFamily(
428
+ {
429
+ key: `${options.key}/singleRelatedEntry`,
430
+ get: (key) => ({ get }) => {
431
+ const relatedKeys = get(findRelatedKeysState(key));
432
+ for (const relatedKey of relatedKeys) {
433
+ const contentKey = relations.makeContentKey(key, relatedKey);
434
+ return [relatedKey, get(findContentState(contentKey))];
435
+ }
436
+ }
437
+ },
438
+ store
439
+ );
440
+ const getMultipleEntryStateFamily = () => createSelectorFamily(
441
+ {
442
+ key: `${options.key}/multipleRelatedEntries`,
443
+ get: (key) => ({ get }) => {
444
+ const relatedKeys = get(findRelatedKeysState(key));
445
+ return [...relatedKeys].map((relatedKey) => {
446
+ const contentKey = relations.makeContentKey(key, relatedKey);
447
+ return [relatedKey, get(findContentState(contentKey))];
448
+ });
449
+ }
450
+ },
451
+ store
452
+ );
453
+ switch (options.cardinality) {
454
+ case `1:1`: {
455
+ const findSingleRelatedKeyState = createSingleKeyStateFamily();
456
+ const stateKeyA = `${a}KeyOf${capitalize(b)}`;
457
+ const stateKeyB = `${b}KeyOf${capitalize(a)}`;
458
+ const findStateBase = {
459
+ [stateKeyA]: findSingleRelatedKeyState,
460
+ [stateKeyB]: findSingleRelatedKeyState
461
+ };
462
+ let findState;
463
+ if (defaultContent) {
464
+ const findSingleRelatedEntryState = createSingleEntryStateFamily();
465
+ const entriesStateKeyA = `${a}EntryOf${capitalize(b)}`;
466
+ const entriesStateKeyB = `${b}EntryOf${capitalize(a)}`;
467
+ const findStateWithContent = {
468
+ [entriesStateKeyA]: findSingleRelatedEntryState,
469
+ [entriesStateKeyB]: findSingleRelatedEntryState
470
+ };
471
+ findState = Object.assign(findStateBase, findStateWithContent);
472
+ } else {
473
+ findState = findStateBase;
474
+ }
475
+ return {
476
+ relations,
477
+ findState
478
+ };
479
+ }
480
+ case `1:n`: {
481
+ const findSingleRelatedKeyState = createSingleKeyStateFamily();
482
+ const findMultipleRelatedKeysState = getMultipleKeyStateFamily();
483
+ const stateKeyA = `${a}KeyOf${capitalize(b)}`;
484
+ const stateKeyB = `${b}KeysOf${capitalize(a)}`;
485
+ const findStateBase = {
486
+ [stateKeyA]: findSingleRelatedKeyState,
487
+ [stateKeyB]: findMultipleRelatedKeysState
488
+ };
489
+ let findState;
490
+ if (defaultContent) {
491
+ const findSingleRelatedEntryState = createSingleEntryStateFamily();
492
+ const findMultipleRelatedEntriesState = getMultipleEntryStateFamily();
493
+ const entriesStateKeyA = `${a}EntryOf${capitalize(b)}`;
494
+ const entriesStateKeyB = `${b}EntriesOf${capitalize(a)}`;
495
+ const findStateWithContent = {
496
+ [entriesStateKeyA]: findSingleRelatedEntryState,
497
+ [entriesStateKeyB]: findMultipleRelatedEntriesState
498
+ };
499
+ findState = Object.assign(findStateBase, findStateWithContent);
500
+ } else {
501
+ findState = findStateBase;
502
+ }
503
+ return {
504
+ relations,
505
+ findState
506
+ };
507
+ }
508
+ case `n:n`: {
509
+ const findMultipleRelatedKeysState = getMultipleKeyStateFamily();
510
+ const stateKeyA = `${a}KeysOf${capitalize(b)}`;
511
+ const stateKeyB = `${b}KeysOf${capitalize(a)}`;
512
+ const findStateBase = {
513
+ [stateKeyA]: findMultipleRelatedKeysState,
514
+ [stateKeyB]: findMultipleRelatedKeysState
515
+ };
516
+ let findState;
517
+ if (defaultContent) {
518
+ const findMultipleRelatedEntriesState = getMultipleEntryStateFamily();
519
+ const entriesStateKeyA = `${a}EntriesOf${capitalize(b)}`;
520
+ const entriesStateKeyB = `${b}EntriesOf${capitalize(a)}`;
521
+ const findStateWithContent = {
522
+ [entriesStateKeyA]: findMultipleRelatedEntriesState,
523
+ [entriesStateKeyB]: findMultipleRelatedEntriesState
524
+ };
525
+ findState = Object.assign(findStateBase, findStateWithContent);
526
+ } else {
527
+ findState = findStateBase;
528
+ }
529
+ return {
530
+ relations,
531
+ findState
532
+ };
533
+ }
534
+ default:
535
+ throw new Error(`Invalid cardinality: ${options.cardinality}`);
536
+ }
537
+ }
538
+ var capitalize2 = (str) => str[0].toUpperCase() + str.slice(1);
539
+ function struct(options, store = IMPLICIT.STORE) {
24
540
  const atoms = Object.keys(options.default).reduce((acc, key) => {
25
- const atomName = options.key + capitalize(key) + `State`;
26
- acc[atomName] = internal.createAtom(
541
+ const atomName = options.key + capitalize2(key) + `State`;
542
+ acc[atomName] = createAtom(
27
543
  {
28
544
  key: `${options.key}.${key}`,
29
545
  default: options.default[key]
@@ -33,12 +549,12 @@ function struct(options, store = internal.IMPLICIT.STORE) {
33
549
  );
34
550
  return acc;
35
551
  }, {});
36
- const structState = internal.createSelector(
552
+ const structState = createSelector(
37
553
  {
38
554
  key: options.key,
39
555
  get: ({ get }) => {
40
556
  return Object.keys(options.default).reduce((acc, key) => {
41
- acc[key] = get(atoms[options.key + capitalize(key) + `State`]);
557
+ acc[key] = get(atoms[options.key + capitalize2(key) + `State`]);
42
558
  return acc;
43
559
  }, {});
44
560
  }
@@ -48,26 +564,34 @@ function struct(options, store = internal.IMPLICIT.STORE) {
48
564
  );
49
565
  return [atoms, structState];
50
566
  }
51
- var capitalize2 = (str) => str[0].toUpperCase() + str.slice(1);
52
- var nameFamily = (topKey, subKey) => `find` + capitalize2(topKey) + capitalize2(subKey) + `State`;
567
+ var capitalize3 = (str) => str[0].toUpperCase() + str.slice(1);
568
+ var nameFamily = (topKey, subKey) => `find` + capitalize3(topKey) + capitalize3(subKey) + `State`;
53
569
  function structFamily(options) {
54
570
  const atoms = Object.keys(options.default).reduce((acc, subKey) => {
55
571
  const atomFamilyName = nameFamily(options.key, subKey);
56
- acc[atomFamilyName] = internal.createAtomFamily({
57
- key: `${options.key}.${subKey}`,
58
- default: options.default[subKey]
59
- });
572
+ acc[atomFamilyName] = createAtomFamily(
573
+ {
574
+ key: `${options.key}.${subKey}`,
575
+ default: options.default[subKey]
576
+ },
577
+ IMPLICIT.STORE
578
+ );
60
579
  return acc;
61
580
  }, {});
62
- const findStructState = internal.createSelectorFamily({
63
- key: options.key,
64
- get: (id) => ({ get }) => {
65
- return Object.keys(options.default).reduce((acc, subKey) => {
66
- acc[subKey] = get(atoms[nameFamily(options.key, subKey)](id));
67
- return acc;
68
- }, {});
69
- }
70
- });
581
+ const findStructState = createSelectorFamily(
582
+ {
583
+ key: options.key,
584
+ get: (id) => ({ get }) => {
585
+ return Object.keys(options.default).reduce((acc, subKey) => {
586
+ acc[subKey] = get(
587
+ atoms[nameFamily(options.key, subKey)](id)
588
+ );
589
+ return acc;
590
+ }, {});
591
+ }
592
+ },
593
+ IMPLICIT.STORE
594
+ );
71
595
  return [atoms, findStructState];
72
596
  }
73
597
 
@@ -79,9 +603,6 @@ function until(loadable, fallback) {
79
603
  return loadable;
80
604
  }
81
605
 
82
- exports.dict = dict;
83
- exports.struct = struct;
84
- exports.structFamily = structFamily;
85
- exports.until = until;
606
+ export { dict, join, struct, structFamily, until };
86
607
  //# sourceMappingURL=out.js.map
87
608
  //# sourceMappingURL=index.js.map