atom.io 0.6.8 → 0.7.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.
Files changed (214) hide show
  1. package/README.md +21 -2
  2. package/dist/index.d.mts +42 -461
  3. package/dist/index.d.ts +42 -461
  4. package/dist/index.js +128 -1792
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +75 -1742
  7. package/dist/index.mjs.map +1 -1
  8. package/internal/dist/index.d.mts +342 -0
  9. package/internal/dist/index.d.ts +342 -0
  10. package/internal/dist/index.js +1873 -0
  11. package/internal/dist/index.js.map +1 -0
  12. package/internal/dist/index.mjs +1798 -0
  13. package/internal/dist/index.mjs.map +1 -0
  14. package/internal/package.json +15 -0
  15. package/internal/src/atom/create-atom.ts +75 -0
  16. package/internal/src/atom/delete-atom.ts +10 -0
  17. package/internal/src/atom/index.ts +3 -0
  18. package/{src/internal → internal/src/atom}/is-default.ts +4 -2
  19. package/internal/src/caching.ts +21 -0
  20. package/internal/src/families/create-atom-family.ts +59 -0
  21. package/internal/src/families/create-readonly-selector-family.ts +45 -0
  22. package/internal/src/families/create-selector-family.ts +67 -0
  23. package/internal/src/families/index.ts +3 -0
  24. package/internal/src/get-state-internal.ts +23 -0
  25. package/internal/src/index.ts +13 -0
  26. package/internal/src/mutable/create-mutable-atom-family.ts +25 -0
  27. package/internal/src/mutable/create-mutable-atom.ts +49 -0
  28. package/internal/src/mutable/get-json-token.ts +22 -0
  29. package/internal/src/mutable/get-update-token.ts +20 -0
  30. package/internal/src/mutable/index.ts +17 -0
  31. package/internal/src/mutable/is-atom-token-mutable.ts +7 -0
  32. package/internal/src/mutable/tracker-family.ts +61 -0
  33. package/internal/src/mutable/tracker.ts +164 -0
  34. package/internal/src/mutable/transceiver.ts +110 -0
  35. package/internal/src/operation.ts +68 -0
  36. package/{src/internal → internal/src}/selector/create-read-write-selector.ts +10 -13
  37. package/{src/internal → internal/src}/selector/create-readonly-selector.ts +9 -8
  38. package/internal/src/selector/create-selector.ts +65 -0
  39. package/{src/internal → internal/src}/selector/index.ts +1 -0
  40. package/internal/src/selector/lookup-selector-sources.ts +20 -0
  41. package/{src/internal → internal/src}/selector/register-selector.ts +13 -9
  42. package/{src/internal → internal/src}/selector/trace-selector-atoms.ts +4 -2
  43. package/{src/internal → internal/src}/selector/update-selector-atoms.ts +4 -3
  44. package/internal/src/set-state/become.ts +10 -0
  45. package/internal/src/set-state/copy-mutable-if-needed.ts +23 -0
  46. package/internal/src/set-state/copy-mutable-in-transaction.ts +59 -0
  47. package/internal/src/set-state/copy-mutable-into-new-store.ts +34 -0
  48. package/internal/src/set-state/emit-update.ts +23 -0
  49. package/internal/src/set-state/evict-downstream.ts +39 -0
  50. package/internal/src/set-state/index.ts +2 -0
  51. package/internal/src/set-state/set-atom-state.ts +38 -0
  52. package/internal/src/set-state/set-selector-state.ts +19 -0
  53. package/internal/src/set-state/set-state-internal.ts +18 -0
  54. package/internal/src/set-state/stow-update.ts +42 -0
  55. package/internal/src/store/deposit.ts +43 -0
  56. package/internal/src/store/index.ts +5 -0
  57. package/internal/src/store/lookup.ts +26 -0
  58. package/internal/src/store/store.ts +154 -0
  59. package/internal/src/store/withdraw-new-family-member.ts +53 -0
  60. package/internal/src/store/withdraw.ts +113 -0
  61. package/internal/src/subject.ts +21 -0
  62. package/internal/src/subscribe/index.ts +1 -0
  63. package/internal/src/subscribe/recall-state.ts +19 -0
  64. package/internal/src/subscribe/subscribe-to-root-atoms.ts +47 -0
  65. package/{src/internal → internal/src}/timeline/add-atom-to-timeline.ts +50 -29
  66. package/internal/src/timeline/index.ts +3 -0
  67. package/{src/internal → internal/src/timeline}/time-travel-internal.ts +6 -6
  68. package/{src/internal → internal/src/timeline}/timeline-internal.ts +20 -12
  69. package/{src/internal → internal/src}/transaction/abort-transaction.ts +1 -1
  70. package/{src/internal → internal/src}/transaction/apply-transaction.ts +25 -18
  71. package/{src/internal → internal/src}/transaction/build-transaction.ts +12 -6
  72. package/{src/internal → internal/src}/transaction/index.ts +3 -2
  73. package/{src/internal → internal/src}/transaction/redo-transaction.ts +4 -5
  74. package/{src/internal → internal/src/transaction}/transaction-internal.ts +16 -13
  75. package/{src/internal → internal/src}/transaction/undo-transaction.ts +4 -5
  76. package/introspection/dist/index.d.mts +12 -260
  77. package/introspection/dist/index.d.ts +12 -260
  78. package/introspection/dist/index.js +125 -140
  79. package/introspection/dist/index.js.map +1 -1
  80. package/introspection/dist/index.mjs +103 -116
  81. package/introspection/dist/index.mjs.map +1 -1
  82. package/{src/introspection → introspection/src}/attach-atom-index.ts +41 -30
  83. package/{src/introspection → introspection/src}/attach-introspection-states.ts +6 -10
  84. package/introspection/src/attach-selector-index.ts +90 -0
  85. package/{src/introspection → introspection/src}/attach-timeline-family.ts +16 -16
  86. package/introspection/src/attach-timeline-index.ts +38 -0
  87. package/introspection/src/attach-transaction-index.ts +40 -0
  88. package/{src/introspection → introspection/src}/attach-transaction-logs.ts +11 -8
  89. package/json/dist/index.d.mts +41 -2
  90. package/json/dist/index.d.ts +41 -2
  91. package/json/dist/index.js +88 -48
  92. package/json/dist/index.js.map +1 -1
  93. package/json/dist/index.mjs +76 -13
  94. package/json/dist/index.mjs.map +1 -1
  95. package/json/src/index.ts +5 -0
  96. package/json/src/select-json-family.ts +35 -0
  97. package/json/src/select-json.ts +22 -0
  98. package/package.json +105 -57
  99. package/react/dist/index.d.mts +9 -17
  100. package/react/dist/index.d.ts +9 -17
  101. package/react/dist/index.js +45 -77
  102. package/react/dist/index.js.map +1 -1
  103. package/react/dist/index.mjs +18 -34
  104. package/react/dist/index.mjs.map +1 -1
  105. package/react/src/store-context.tsx +12 -0
  106. package/react/src/store-hooks.ts +36 -0
  107. package/react-devtools/dist/index.css +1 -1
  108. package/react-devtools/dist/index.css.map +1 -1
  109. package/react-devtools/dist/index.d.mts +199 -230
  110. package/react-devtools/dist/index.d.ts +199 -230
  111. package/react-devtools/dist/index.js +610 -2466
  112. package/react-devtools/dist/index.js.map +1 -1
  113. package/react-devtools/dist/index.mjs +543 -2401
  114. package/react-devtools/dist/index.mjs.map +1 -1
  115. package/{src/react-devtools → react-devtools/src}/AtomIODevtools.tsx +5 -3
  116. package/{src/react-devtools → react-devtools/src}/Button.tsx +2 -3
  117. package/{src/react-devtools → react-devtools/src}/StateEditor.tsx +3 -2
  118. package/{src/react-devtools → react-devtools/src}/StateIndex.tsx +7 -4
  119. package/{src/react-devtools → react-devtools/src}/TimelineIndex.tsx +7 -11
  120. package/{src/react-devtools → react-devtools/src}/TransactionIndex.tsx +4 -4
  121. package/{src/react-devtools → react-devtools/src}/Updates.tsx +9 -4
  122. package/{src/react-devtools → react-devtools/src}/index.ts +5 -5
  123. package/realtime-react/dist/index.d.mts +9 -25
  124. package/realtime-react/dist/index.d.ts +9 -25
  125. package/realtime-react/dist/index.js +75 -193
  126. package/realtime-react/dist/index.js.map +1 -1
  127. package/realtime-react/dist/index.mjs +44 -148
  128. package/realtime-react/dist/index.mjs.map +1 -1
  129. package/realtime-react/src/index.ts +7 -0
  130. package/{src/realtime-react → realtime-react/src}/realtime-context.tsx +3 -4
  131. package/realtime-react/src/use-pull-family-member.ts +15 -0
  132. package/realtime-react/src/use-pull-mutable-family-member.ts +20 -0
  133. package/realtime-react/src/use-pull-mutable.ts +17 -0
  134. package/realtime-react/src/use-pull.ts +15 -0
  135. package/realtime-react/src/use-push.ts +19 -0
  136. package/realtime-react/src/use-server-action.ts +18 -0
  137. package/realtime-testing/dist/index.d.mts +49 -0
  138. package/realtime-testing/dist/index.d.ts +49 -0
  139. package/realtime-testing/dist/index.js +147 -0
  140. package/realtime-testing/dist/index.js.map +1 -0
  141. package/realtime-testing/dist/index.mjs +116 -0
  142. package/realtime-testing/dist/index.mjs.map +1 -0
  143. package/{src/realtime-testing → realtime-testing/src}/setup-realtime-test.tsx +10 -8
  144. package/src/atom.ts +64 -8
  145. package/src/index.ts +36 -29
  146. package/src/logger.ts +7 -7
  147. package/src/selector.ts +5 -5
  148. package/src/silo.ts +49 -43
  149. package/src/subscribe.ts +27 -22
  150. package/src/timeline.ts +9 -4
  151. package/src/transaction.ts +3 -4
  152. package/transceivers/set-rtx/dist/index.d.mts +39 -0
  153. package/transceivers/set-rtx/dist/index.d.ts +39 -0
  154. package/transceivers/set-rtx/dist/index.js +213 -0
  155. package/transceivers/set-rtx/dist/index.js.map +1 -0
  156. package/transceivers/set-rtx/dist/index.mjs +211 -0
  157. package/transceivers/set-rtx/dist/index.mjs.map +1 -0
  158. package/{realtime → transceivers/set-rtx}/package.json +1 -1
  159. package/transceivers/set-rtx/src/index.ts +1 -0
  160. package/transceivers/set-rtx/src/set-rtx.ts +242 -0
  161. package/realtime/dist/index.d.mts +0 -25
  162. package/realtime/dist/index.d.ts +0 -25
  163. package/realtime/dist/index.js +0 -190
  164. package/realtime/dist/index.js.map +0 -1
  165. package/realtime/dist/index.mjs +0 -151
  166. package/realtime/dist/index.mjs.map +0 -1
  167. package/src/internal/atom-internal.ts +0 -54
  168. package/src/internal/families-internal.ts +0 -144
  169. package/src/internal/get.ts +0 -129
  170. package/src/internal/index.ts +0 -15
  171. package/src/internal/operation.ts +0 -139
  172. package/src/internal/selector/lookup-selector-sources.ts +0 -16
  173. package/src/internal/selector-internal.ts +0 -58
  174. package/src/internal/set.ts +0 -99
  175. package/src/internal/store.ts +0 -151
  176. package/src/internal/subscribe-internal.ts +0 -88
  177. package/src/internal/timeline/index.ts +0 -1
  178. package/src/introspection/attach-selector-index.ts +0 -77
  179. package/src/introspection/attach-timeline-index.ts +0 -36
  180. package/src/introspection/attach-transaction-index.ts +0 -38
  181. package/src/json/index.ts +0 -1
  182. package/src/json/select-json.ts +0 -18
  183. package/src/react/store-context.tsx +0 -13
  184. package/src/react/store-hooks.ts +0 -47
  185. package/src/react-explorer/AtomIOExplorer.tsx +0 -218
  186. package/src/react-explorer/explorer-effects.ts +0 -20
  187. package/src/react-explorer/explorer-states.ts +0 -217
  188. package/src/react-explorer/index.ts +0 -23
  189. package/src/react-explorer/space-states.ts +0 -72
  190. package/src/react-explorer/view-states.ts +0 -41
  191. package/src/realtime/README.md +0 -33
  192. package/src/realtime/hook-composition/expose-family.ts +0 -101
  193. package/src/realtime/hook-composition/expose-single.ts +0 -38
  194. package/src/realtime/hook-composition/expose-timeline.ts +0 -60
  195. package/src/realtime/hook-composition/index.ts +0 -12
  196. package/src/realtime/hook-composition/receive-state.ts +0 -29
  197. package/src/realtime/hook-composition/receive-transaction.ts +0 -18
  198. package/src/realtime/index.ts +0 -1
  199. package/src/realtime-react/index.ts +0 -3
  200. package/src/realtime-react/realtime-hooks.ts +0 -39
  201. package/src/realtime-react/realtime-state.ts +0 -10
  202. package/src/realtime-react/use-pull-family-member.ts +0 -26
  203. package/src/realtime-react/use-pull-family.ts +0 -24
  204. package/src/realtime-react/use-pull.ts +0 -24
  205. package/src/realtime-react/use-push.ts +0 -27
  206. package/src/realtime-react/use-server-action.ts +0 -33
  207. package/src/tracker/index.ts +0 -3
  208. package/src/tracker/tracker.ts +0 -61
  209. package/src/web-effects/index.ts +0 -1
  210. package/src/web-effects/storage.ts +0 -30
  211. /package/{src/introspection → introspection/src}/index.ts +0 -0
  212. /package/{src/react → react/src}/index.ts +0 -0
  213. /package/{src/react-devtools → react-devtools/src}/devtools.scss +0 -0
  214. /package/{src/realtime-testing → realtime-testing/src}/index.ts +0 -0
@@ -0,0 +1,90 @@
1
+ import type { ReadonlySelectorToken, SelectorToken } from "atom.io"
2
+ import type { Store } from "atom.io/internal"
3
+ import { IMPLICIT, createAtom, createSelector, target } from "atom.io/internal"
4
+
5
+ import type { StateTokenIndex } from "."
6
+
7
+ export type SelectorTokenIndex = StateTokenIndex<
8
+ ReadonlySelectorToken<unknown> | SelectorToken<unknown>
9
+ >
10
+
11
+ export const attachSelectorIndex = (
12
+ store: Store = IMPLICIT.STORE,
13
+ ): ReadonlySelectorToken<SelectorTokenIndex> => {
14
+ const readonlySelectorTokenIndexState__INTERNAL =
15
+ createAtom<SelectorTokenIndex>(
16
+ {
17
+ key: `👁‍🗨 Selector Token Index (Internal)`,
18
+ default: () =>
19
+ Object.assign(
20
+ [...store.readonlySelectors]
21
+ .filter(([key]) => !key.includes(`👁‍🗨`))
22
+ .reduce<SelectorTokenIndex>((acc, [key]) => {
23
+ acc[key] = { key, type: `readonly_selector` }
24
+ return acc
25
+ }, {}),
26
+ [...store.selectors].reduce<SelectorTokenIndex>((acc, [key]) => {
27
+ acc[key] = { key, type: `selector` }
28
+ return acc
29
+ }, {}),
30
+ ),
31
+ effects: [
32
+ ({ setSelf }) => {
33
+ store.subject.selectorCreation.subscribe(
34
+ `introspection`,
35
+ (selectorToken) => {
36
+ if (selectorToken.key.includes(`👁‍🗨`)) {
37
+ return
38
+ }
39
+ const set = () =>
40
+ setSelf((state) => {
41
+ const { key, family } = selectorToken
42
+ if (family) {
43
+ const { key: familyKey, subKey } = family
44
+ const current = state[familyKey]
45
+ if (current === undefined || `familyMembers` in current) {
46
+ const familyKeyState = current || {
47
+ key: familyKey,
48
+ familyMembers: {},
49
+ }
50
+ return {
51
+ ...state,
52
+ [familyKey]: {
53
+ ...familyKeyState,
54
+ familyMembers: {
55
+ ...familyKeyState.familyMembers,
56
+ [subKey]: selectorToken,
57
+ },
58
+ },
59
+ }
60
+ }
61
+ }
62
+ return {
63
+ ...state,
64
+ [key]: selectorToken,
65
+ }
66
+ })
67
+ if (target(store).operation.open) {
68
+ const unsubscribe = store.subject.operationStatus.subscribe(
69
+ `introspection: waiting to update selector index`,
70
+ () => {
71
+ unsubscribe()
72
+ set()
73
+ },
74
+ )
75
+ } else {
76
+ set()
77
+ }
78
+ },
79
+ )
80
+ },
81
+ ],
82
+ },
83
+ undefined,
84
+ store,
85
+ )
86
+ return createSelector({
87
+ key: `👁‍🗨 Selector Token Index`,
88
+ get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),
89
+ })
90
+ }
@@ -1,19 +1,21 @@
1
- import type { ReadonlySelectorFamily, Store } from "atom.io"
2
- import { __INTERNAL__, timeline } from "atom.io"
3
-
4
- import { withdraw, type Timeline, Subject } from "../internal"
1
+ import type { ReadonlySelectorFamily } from "atom.io"
2
+ import type { Store, Timeline } from "atom.io/internal"
3
+ import {
4
+ IMPLICIT,
5
+ Subject,
6
+ createAtomFamily,
7
+ createSelectorFamily,
8
+ } from "atom.io/internal"
5
9
 
6
10
  export const attachTimelineFamily = (
7
- store: Store = __INTERNAL__.IMPLICIT.STORE,
11
+ store: Store = IMPLICIT.STORE,
8
12
  ): ReadonlySelectorFamily<Timeline> => {
9
- const findTimelineLogState__INTERNAL = __INTERNAL__.atomFamily__INTERNAL<
10
- Timeline,
11
- string
12
- >(
13
+ const findTimelineLogState__INTERNAL = createAtomFamily<Timeline, string>(
13
14
  {
14
15
  key: `👁‍🗨 Timeline Update Log (Internal)`,
15
16
  default: (key) =>
16
17
  store.timelines.get(key) ?? {
18
+ type: `timeline`,
17
19
  key: ``,
18
20
  at: 0,
19
21
  timeTraveling: null,
@@ -26,12 +28,13 @@ export const attachTimelineFamily = (
26
28
  effects: (key) => [
27
29
  ({ setSelf }) => {
28
30
  const tl = store.timelines.get(key)
29
- tl?.subject.subscribe((_) => {
31
+ tl?.subject.subscribe(`introspection`, (_) => {
30
32
  if (store.operation.open === true) {
31
- const subscription = store.subject.operationStatus.subscribe(
33
+ const unsubscribe = store.subject.operationStatus.subscribe(
34
+ `introspection`,
32
35
  (operationStatus) => {
33
36
  if (operationStatus.open === false) {
34
- subscription.unsubscribe()
37
+ unsubscribe()
35
38
  setSelf({ ...tl })
36
39
  }
37
40
  },
@@ -45,10 +48,7 @@ export const attachTimelineFamily = (
45
48
  },
46
49
  store,
47
50
  )
48
- const findTimelineLogState = __INTERNAL__.selectorFamily__INTERNAL<
49
- Timeline,
50
- string
51
- >(
51
+ const findTimelineLogState = createSelectorFamily<Timeline, string>(
52
52
  {
53
53
  key: `👁‍🗨 Timeline Update Log`,
54
54
  get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL(key)),
@@ -0,0 +1,38 @@
1
+ import type { ReadonlySelectorToken, TimelineToken } from "atom.io"
2
+ import type { Store } from "atom.io/internal"
3
+ import { IMPLICIT, createAtom, createSelector } from "atom.io/internal"
4
+
5
+ export const attachTimelineIndex = (
6
+ store: Store = IMPLICIT.STORE,
7
+ ): ReadonlySelectorToken<TimelineToken[]> => {
8
+ const timelineTokenIndexState__INTERNAL = createAtom<TimelineToken[]>(
9
+ {
10
+ key: `👁‍🗨 Timeline Token Index (Internal)`,
11
+ default: () =>
12
+ [...store.timelines].map(([key]): TimelineToken => {
13
+ return { key, type: `timeline` }
14
+ }),
15
+ effects: [
16
+ ({ setSelf }) => {
17
+ store.subject.timelineCreation.subscribe(
18
+ `introspection`,
19
+ (timelineToken) => {
20
+ setSelf((state) => [...state, timelineToken])
21
+ },
22
+ )
23
+ },
24
+ ],
25
+ },
26
+ undefined,
27
+ store,
28
+ )
29
+ const timelineTokenIndex = createSelector(
30
+ {
31
+ key: `👁‍🗨 Timeline Token Index`,
32
+ get: ({ get }) => get(timelineTokenIndexState__INTERNAL),
33
+ },
34
+ undefined,
35
+ store,
36
+ )
37
+ return timelineTokenIndex
38
+ }
@@ -0,0 +1,40 @@
1
+ import type { ReadonlySelectorToken, TransactionToken, ƒn } from "atom.io"
2
+ import type { Store } from "atom.io/internal"
3
+ import { IMPLICIT, createAtom, createSelector } from "atom.io/internal"
4
+
5
+ export const attachTransactionIndex = (
6
+ store: Store = IMPLICIT.STORE,
7
+ ): ReadonlySelectorToken<TransactionToken<ƒn>[]> => {
8
+ const transactionTokenIndexState__INTERNAL = createAtom<
9
+ TransactionToken<ƒn>[]
10
+ >(
11
+ {
12
+ key: `👁‍🗨 Transaction Token Index (Internal)`,
13
+ default: () =>
14
+ [...store.transactions].map(([key]): TransactionToken<ƒn> => {
15
+ return { key, type: `transaction` }
16
+ }),
17
+ effects: [
18
+ ({ setSelf }) => {
19
+ store.subject.transactionCreation.subscribe(
20
+ `introspection`,
21
+ (transactionToken) => {
22
+ setSelf((state) => [...state, transactionToken])
23
+ },
24
+ )
25
+ },
26
+ ],
27
+ },
28
+ undefined,
29
+ store,
30
+ )
31
+ const transactionTokenIndex = createSelector(
32
+ {
33
+ key: `👁‍🗨 Transaction Token Index`,
34
+ get: ({ get }) => get(transactionTokenIndexState__INTERNAL),
35
+ },
36
+ undefined,
37
+ store,
38
+ )
39
+ return transactionTokenIndex
40
+ }
@@ -1,12 +1,15 @@
1
- import type { ReadonlySelectorFamily, TransactionUpdate } from "atom.io"
2
- import { __INTERNAL__ } from "atom.io"
3
-
4
- import type { ƒn } from "~/packages/anvl/src/function"
1
+ import type { ReadonlySelectorFamily, TransactionUpdate, ƒn } from "atom.io"
2
+ import type { Store } from "atom.io/internal"
3
+ import {
4
+ IMPLICIT,
5
+ createAtomFamily,
6
+ createSelectorFamily,
7
+ } from "atom.io/internal"
5
8
 
6
9
  export const attachTransactionLogs = (
7
- store: __INTERNAL__.Store = __INTERNAL__.IMPLICIT.STORE,
10
+ store: Store = IMPLICIT.STORE,
8
11
  ): ReadonlySelectorFamily<TransactionUpdate<ƒn>[]> => {
9
- const findTransactionUpdateLog = __INTERNAL__.atomFamily__INTERNAL<
12
+ const findTransactionUpdateLog = createAtomFamily<
10
13
  TransactionUpdate<ƒn>[],
11
14
  string
12
15
  >(
@@ -16,7 +19,7 @@ export const attachTransactionLogs = (
16
19
  effects: (key) => [
17
20
  ({ setSelf }) => {
18
21
  const tx = store.transactions.get(key)
19
- tx?.subject.subscribe((transactionUpdate) => {
22
+ tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
20
23
  if (transactionUpdate.key === key) {
21
24
  setSelf((state) => [...state, transactionUpdate])
22
25
  }
@@ -26,7 +29,7 @@ export const attachTransactionLogs = (
26
29
  },
27
30
  store,
28
31
  )
29
- const findTransactionUpdateLogState = __INTERNAL__.selectorFamily__INTERNAL<
32
+ const findTransactionUpdateLogState = createSelectorFamily<
30
33
  TransactionUpdate<ƒn>[],
31
34
  string
32
35
  >(
@@ -1,16 +1,55 @@
1
1
  import * as AtomIO from 'atom.io';
2
+ import { Store } from 'atom.io/internal';
2
3
 
3
4
  type JsonInterface<T, J extends Serializable = Serializable> = {
4
5
  toJson: (t: T) => J;
5
6
  fromJson: (json: J) => T;
6
7
  };
8
+ declare const stringSetJsonInterface: JsonInterface<Set<string>, Array<string>>;
7
9
 
8
10
  type primitive = boolean | number | string | null;
11
+ declare const isString: (input: unknown) => input is string;
12
+ declare const isNumber: (input: unknown) => input is number;
13
+ declare const isBoolean: (input: unknown) => input is boolean;
14
+ declare const isNull: (input: unknown) => input is null;
15
+ declare const isPrimitive: (input: unknown) => input is primitive;
9
16
 
10
17
  type Serializable = primitive | Readonly<{
11
18
  [key: string]: Serializable;
12
19
  }> | ReadonlyArray<Serializable>;
20
+ type Object$1<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
21
+ type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
13
22
 
14
- declare const selectJson: <T, J extends AtomIO.Json.Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: AtomIO.Store) => AtomIO.SelectorToken<J>;
23
+ type json_Array<Element extends Serializable = Serializable> = Array<Element>;
24
+ type json_Serializable = Serializable;
25
+ declare namespace json {
26
+ export {
27
+ json_Array as Array,
28
+ Object$1 as Object,
29
+ json_Serializable as Serializable,
30
+ };
31
+ }
15
32
 
16
- export { selectJson };
33
+ declare const parseJson: <S extends Stringified<Serializable>>(str: string | S) => S extends Stringified<infer J extends Serializable> ? J : Serializable;
34
+ type Stringified<J extends Serializable> = string & {
35
+ __json: J;
36
+ };
37
+ declare const stringifyJson: <J extends Serializable>(json: J) => Stringified<J>;
38
+ type Empty = Record<string, never>;
39
+ declare const JSON_TYPE_NAMES: readonly ["array", "boolean", "null", "number", "object", "string"];
40
+ type JsonTypeName = typeof JSON_TYPE_NAMES[number];
41
+ interface JsonTypes extends Record<JsonTypeName, Serializable> {
42
+ array: Array;
43
+ boolean: boolean;
44
+ null: null;
45
+ number: number;
46
+ object: Object$1;
47
+ string: string;
48
+ }
49
+ declare const JSON_DEFAULTS: JsonTypes;
50
+
51
+ declare const selectJson: <T, J extends Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorToken<J>;
52
+
53
+ declare const selectJsonFamily: <T, J extends Serializable, K extends Serializable>(atomFamily: AtomIO.AtomFamily<T, K>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorFamily<J, K>;
54
+
55
+ export { Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, JsonInterface, JsonTypeName, JsonTypes, Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
@@ -1,16 +1,55 @@
1
1
  import * as AtomIO from 'atom.io';
2
+ import { Store } from 'atom.io/internal';
2
3
 
3
4
  type JsonInterface<T, J extends Serializable = Serializable> = {
4
5
  toJson: (t: T) => J;
5
6
  fromJson: (json: J) => T;
6
7
  };
8
+ declare const stringSetJsonInterface: JsonInterface<Set<string>, Array<string>>;
7
9
 
8
10
  type primitive = boolean | number | string | null;
11
+ declare const isString: (input: unknown) => input is string;
12
+ declare const isNumber: (input: unknown) => input is number;
13
+ declare const isBoolean: (input: unknown) => input is boolean;
14
+ declare const isNull: (input: unknown) => input is null;
15
+ declare const isPrimitive: (input: unknown) => input is primitive;
9
16
 
10
17
  type Serializable = primitive | Readonly<{
11
18
  [key: string]: Serializable;
12
19
  }> | ReadonlyArray<Serializable>;
20
+ type Object$1<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
21
+ type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
13
22
 
14
- declare const selectJson: <T, J extends AtomIO.Json.Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: AtomIO.Store) => AtomIO.SelectorToken<J>;
23
+ type json_Array<Element extends Serializable = Serializable> = Array<Element>;
24
+ type json_Serializable = Serializable;
25
+ declare namespace json {
26
+ export {
27
+ json_Array as Array,
28
+ Object$1 as Object,
29
+ json_Serializable as Serializable,
30
+ };
31
+ }
15
32
 
16
- export { selectJson };
33
+ declare const parseJson: <S extends Stringified<Serializable>>(str: string | S) => S extends Stringified<infer J extends Serializable> ? J : Serializable;
34
+ type Stringified<J extends Serializable> = string & {
35
+ __json: J;
36
+ };
37
+ declare const stringifyJson: <J extends Serializable>(json: J) => Stringified<J>;
38
+ type Empty = Record<string, never>;
39
+ declare const JSON_TYPE_NAMES: readonly ["array", "boolean", "null", "number", "object", "string"];
40
+ type JsonTypeName = typeof JSON_TYPE_NAMES[number];
41
+ interface JsonTypes extends Record<JsonTypeName, Serializable> {
42
+ array: Array;
43
+ boolean: boolean;
44
+ null: null;
45
+ number: number;
46
+ object: Object$1;
47
+ string: string;
48
+ }
49
+ declare const JSON_DEFAULTS: JsonTypes;
50
+
51
+ declare const selectJson: <T, J extends Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorToken<J>;
52
+
53
+ declare const selectJsonFamily: <T, J extends Serializable, K extends Serializable>(atomFamily: AtomIO.AtomFamily<T, K>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorFamily<J, K>;
54
+
55
+ export { Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, JsonInterface, JsonTypeName, JsonTypes, Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
@@ -1,51 +1,91 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ 'use strict';
28
2
 
29
- // ../src/json/index.ts
30
- var json_exports = {};
31
- __export(json_exports, {
32
- selectJson: () => selectJson
33
- });
34
- module.exports = __toCommonJS(json_exports);
3
+ var internal = require('atom.io/internal');
35
4
 
36
- // ../src/json/select-json.ts
37
- var AtomIO = __toESM(require("atom.io"));
38
- var selectJson = (atom, transform, store = AtomIO.__INTERNAL__.IMPLICIT.STORE) => AtomIO.__INTERNAL__.selector__INTERNAL(
39
- {
40
- key: `${atom.key}JSON`,
41
- get: ({ get }) => transform.toJson(get(atom)),
42
- set: ({ set }, newValue) => set(atom, transform.fromJson(newValue))
43
- },
44
- void 0,
45
- store
46
- );
47
- // Annotate the CommonJS export names for ESM import in node:
48
- 0 && (module.exports = {
49
- selectJson
50
- });
5
+ // ../../anvl/src/json/json-interface.ts
6
+ var stringSetJsonInterface = {
7
+ toJson: (stringSet) => Array.from(stringSet),
8
+ fromJson: (json) => new Set(json)
9
+ };
10
+
11
+ // ../../anvl/src/json/index.ts
12
+ var parseJson = (str) => JSON.parse(str);
13
+ var stringifyJson = (json) => JSON.stringify(json);
14
+ var JSON_TYPE_NAMES = [
15
+ `array`,
16
+ `boolean`,
17
+ `null`,
18
+ `number`,
19
+ `object`,
20
+ `string`
21
+ ];
22
+ var JSON_DEFAULTS = {
23
+ array: [],
24
+ boolean: false,
25
+ null: null,
26
+ number: 0,
27
+ object: {},
28
+ string: ``
29
+ };
30
+
31
+ // ../../anvl/src/primitive/index.ts
32
+ var isString = (input) => {
33
+ return typeof input === `string`;
34
+ };
35
+ var isNumber = (input) => {
36
+ return typeof input === `number`;
37
+ };
38
+ var isBoolean = (input) => {
39
+ return typeof input === `boolean`;
40
+ };
41
+ var isNull = (input) => {
42
+ return input === null;
43
+ };
44
+ var isPrimitive = (input) => {
45
+ return isString(input) || isNumber(input) || isBoolean(input) || isNull(input);
46
+ };
47
+ var selectJson = (atom, transform, store = internal.IMPLICIT.STORE) => {
48
+ return internal.createSelector(
49
+ {
50
+ key: `${atom.key}:JSON`,
51
+ get: ({ get }) => transform.toJson(get(atom)),
52
+ set: ({ set }, newValue) => set(atom, transform.fromJson(newValue))
53
+ },
54
+ void 0,
55
+ store
56
+ );
57
+ };
58
+ var selectJsonFamily = (atomFamily, transform, store = internal.IMPLICIT.STORE) => {
59
+ const jsonFamily = internal.createSelectorFamily(
60
+ {
61
+ key: `${atomFamily.key}:JSON`,
62
+ get: (key) => ({ get }) => transform.toJson(get(atomFamily(key))),
63
+ set: (key) => ({ set }, newValue) => set(atomFamily(key), transform.fromJson(newValue))
64
+ },
65
+ store
66
+ );
67
+ atomFamily.subject.subscribe(
68
+ `store=${store.config.name}::json-selector-family`,
69
+ (token) => {
70
+ if (token.family) {
71
+ jsonFamily(parseJson(token.family.subKey));
72
+ }
73
+ }
74
+ );
75
+ return jsonFamily;
76
+ };
77
+
78
+ exports.JSON_DEFAULTS = JSON_DEFAULTS;
79
+ exports.JSON_TYPE_NAMES = JSON_TYPE_NAMES;
80
+ exports.isBoolean = isBoolean;
81
+ exports.isNull = isNull;
82
+ exports.isNumber = isNumber;
83
+ exports.isPrimitive = isPrimitive;
84
+ exports.isString = isString;
85
+ exports.parseJson = parseJson;
86
+ exports.selectJson = selectJson;
87
+ exports.selectJsonFamily = selectJsonFamily;
88
+ exports.stringSetJsonInterface = stringSetJsonInterface;
89
+ exports.stringifyJson = stringifyJson;
90
+ //# sourceMappingURL=out.js.map
51
91
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/json/index.ts","../../src/json/select-json.ts"],"sourcesContent":["export * from \"./select-json\"\n","import * as AtomIO from \"atom.io\"\n\nimport type { Json, JsonInterface } from \"~/packages/anvl/src/json\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: AtomIO.Store = AtomIO.__INTERNAL__.IMPLICIT.STORE,\n): AtomIO.SelectorToken<J> =>\n\tAtomIO.__INTERNAL__.selector__INTERNAL(\n\t\t{\n\t\t\tkey: `${atom.key}JSON`,\n\t\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\t\tset: ({ set }, newValue) => set(atom, transform.fromJson(newValue)),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,aAAwB;AAIjB,IAAM,aAAa,CACzB,MACA,WACA,QAA6B,oBAAa,SAAS,UAE5C,oBAAa;AAAA,EACnB;AAAA,IACC,KAAK,GAAG,KAAK,GAAG;AAAA,IAChB,KAAK,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,IAC5C,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,IAAI,MAAM,UAAU,SAAS,QAAQ,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../anvl/src/json/json-interface.ts","../../../anvl/src/json/index.ts","../../../anvl/src/primitive/index.ts","../src/select-json.ts","../src/select-json-family.ts"],"names":["IMPLICIT"],"mappings":";AAOO,IAAM,yBAGT;AAAA,EACH,QAAQ,CAAC,cAAc,MAAM,KAAK,SAAS;AAAA,EAC3C,UAAU,CAAC,SAAS,IAAI,IAAI,IAAI;AACjC;;;ACTO,IAAM,YAAY,CACxB,QAC4D,KAAK,MAAM,GAAG;AAIpE,IAAM,gBAAgB,CAC5B,SACoB,KAAK,UAAU,IAAI;AAIjC,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAaO,IAAM,gBAA2B;AAAA,EACvC,OAAO,CAAC;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ,CAAC;AAAA,EACT,QAAQ;AACT;;;ACzCO,IAAM,WAAW,CAAC,UAAoC;AAC5D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,WAAW,CAAC,UAAoC;AAC5D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,YAAY,CAAC,UAAqC;AAC9D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,SAAS,CAAC,UAAkC;AACxD,SAAO,UAAU;AAClB;AAEO,IAAM,cAAc,CAAC,UAAuC;AAClE,SAAO,SAAS,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;AAC9E;;;AClBA,SAAS,gBAAgB;AAEzB,SAAS,sBAAsB;AAGxB,IAAM,aAAa,CACzB,MACA,WACA,QAAe,SAAS,UACK;AAC7B,SAAO;AAAA,IACN;AAAA,MACC,KAAK,GAAG,KAAK,GAAG;AAAA,MAChB,KAAK,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,MAC5C,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,IAAI,MAAM,UAAU,SAAS,QAAQ,CAAC;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACnBA,SAAS,YAAAA,WAAU,4BAA4B;AAKxC,IAAM,mBAAmB,CAK/B,YACA,WACA,QAAeA,UAAS,UACS;AACjC,QAAM,aAAa;AAAA,IAClB;AAAA,MACC,KAAK,GAAG,WAAW,GAAG;AAAA,MACtB,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC;AAAA,MAChE,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,aACvB,IAAI,WAAW,GAAG,GAAG,UAAU,SAAS,QAAQ,CAAC;AAAA,IACnD;AAAA,IACA;AAAA,EACD;AACA,aAAW,QAAQ;AAAA,IAClB,SAAS,MAAM,OAAO,IAAI;AAAA,IAC1B,CAAC,UAAU;AACV,UAAI,MAAM,QAAQ;AACjB,mBAAW,UAAU,MAAM,OAAO,MAAM,CAAM;AAAA,MAC/C;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR","sourcesContent":["import type { Json } from \".\"\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: T) => J\n\tfromJson: (json: J) => T\n}\n\nexport const stringSetJsonInterface: JsonInterface<\n\tSet<string>,\n\tJson.Array<string>\n> = {\n\ttoJson: (stringSet) => Array.from(stringSet),\n\tfromJson: (json) => new Set(json),\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","export type primitive = boolean | number | string | null\n\nexport const isString = (input: unknown): input is string => {\n\treturn typeof input === `string`\n}\n\nexport const isNumber = (input: unknown): input is number => {\n\treturn typeof input === `number`\n}\n\nexport const isBoolean = (input: unknown): input is boolean => {\n\treturn typeof input === `boolean`\n}\n\nexport const isNull = (input: unknown): input is null => {\n\treturn input === null\n}\n\nexport const isPrimitive = (input: unknown): input is primitive => {\n\treturn isString(input) || isNumber(input) || isBoolean(input) || isNull(input)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\n\nimport { createSelector } from \"atom.io/internal\"\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.SelectorToken<J> => {\n\treturn createSelector(\n\t\t{\n\t\t\tkey: `${atom.key}:JSON`,\n\t\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\t\tset: ({ set }, newValue) => set(atom, transform.fromJson(newValue)),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createSelectorFamily } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\nimport { parseJson } from \".\"\n\nexport const selectJsonFamily = <\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n>(\n\tatomFamily: AtomIO.AtomFamily<T, K>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.SelectorFamily<J, K> => {\n\tconst jsonFamily = createSelectorFamily<J, K>(\n\t\t{\n\t\t\tkey: `${atomFamily.key}:JSON`,\n\t\t\tget: (key) => ({ get }) => transform.toJson(get(atomFamily(key))),\n\t\t\tset: (key) => ({ set }, newValue) =>\n\t\t\t\tset(atomFamily(key), transform.fromJson(newValue)),\n\t\t},\n\t\tstore,\n\t)\n\tatomFamily.subject.subscribe(\n\t\t`store=${store.config.name}::json-selector-family`,\n\t\t(token) => {\n\t\t\tif (token.family) {\n\t\t\t\tjsonFamily(parseJson(token.family.subKey) as K)\n\t\t\t}\n\t\t},\n\t)\n\treturn jsonFamily\n}\n"]}
@@ -1,15 +1,78 @@
1
- // ../src/json/select-json.ts
2
- import * as AtomIO from "atom.io";
3
- var selectJson = (atom, transform, store = AtomIO.__INTERNAL__.IMPLICIT.STORE) => AtomIO.__INTERNAL__.selector__INTERNAL(
4
- {
5
- key: `${atom.key}JSON`,
6
- get: ({ get }) => transform.toJson(get(atom)),
7
- set: ({ set }, newValue) => set(atom, transform.fromJson(newValue))
8
- },
9
- void 0,
10
- store
11
- );
12
- export {
13
- selectJson
1
+ import { createSelector, IMPLICIT, createSelectorFamily } from 'atom.io/internal';
2
+
3
+ // ../../anvl/src/json/json-interface.ts
4
+ var stringSetJsonInterface = {
5
+ toJson: (stringSet) => Array.from(stringSet),
6
+ fromJson: (json) => new Set(json)
14
7
  };
8
+
9
+ // ../../anvl/src/json/index.ts
10
+ var parseJson = (str) => JSON.parse(str);
11
+ var stringifyJson = (json) => JSON.stringify(json);
12
+ var JSON_TYPE_NAMES = [
13
+ `array`,
14
+ `boolean`,
15
+ `null`,
16
+ `number`,
17
+ `object`,
18
+ `string`
19
+ ];
20
+ var JSON_DEFAULTS = {
21
+ array: [],
22
+ boolean: false,
23
+ null: null,
24
+ number: 0,
25
+ object: {},
26
+ string: ``
27
+ };
28
+
29
+ // ../../anvl/src/primitive/index.ts
30
+ var isString = (input) => {
31
+ return typeof input === `string`;
32
+ };
33
+ var isNumber = (input) => {
34
+ return typeof input === `number`;
35
+ };
36
+ var isBoolean = (input) => {
37
+ return typeof input === `boolean`;
38
+ };
39
+ var isNull = (input) => {
40
+ return input === null;
41
+ };
42
+ var isPrimitive = (input) => {
43
+ return isString(input) || isNumber(input) || isBoolean(input) || isNull(input);
44
+ };
45
+ var selectJson = (atom, transform, store = IMPLICIT.STORE) => {
46
+ return createSelector(
47
+ {
48
+ key: `${atom.key}:JSON`,
49
+ get: ({ get }) => transform.toJson(get(atom)),
50
+ set: ({ set }, newValue) => set(atom, transform.fromJson(newValue))
51
+ },
52
+ void 0,
53
+ store
54
+ );
55
+ };
56
+ var selectJsonFamily = (atomFamily, transform, store = IMPLICIT.STORE) => {
57
+ const jsonFamily = createSelectorFamily(
58
+ {
59
+ key: `${atomFamily.key}:JSON`,
60
+ get: (key) => ({ get }) => transform.toJson(get(atomFamily(key))),
61
+ set: (key) => ({ set }, newValue) => set(atomFamily(key), transform.fromJson(newValue))
62
+ },
63
+ store
64
+ );
65
+ atomFamily.subject.subscribe(
66
+ `store=${store.config.name}::json-selector-family`,
67
+ (token) => {
68
+ if (token.family) {
69
+ jsonFamily(parseJson(token.family.subKey));
70
+ }
71
+ }
72
+ );
73
+ return jsonFamily;
74
+ };
75
+
76
+ export { JSON_DEFAULTS, JSON_TYPE_NAMES, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
77
+ //# sourceMappingURL=out.js.map
15
78
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/json/select-json.ts"],"sourcesContent":["import * as AtomIO from \"atom.io\"\n\nimport type { Json, JsonInterface } from \"~/packages/anvl/src/json\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: AtomIO.Store = AtomIO.__INTERNAL__.IMPLICIT.STORE,\n): AtomIO.SelectorToken<J> =>\n\tAtomIO.__INTERNAL__.selector__INTERNAL(\n\t\t{\n\t\t\tkey: `${atom.key}JSON`,\n\t\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\t\tset: ({ set }, newValue) => set(atom, transform.fromJson(newValue)),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n"],"mappings":";AAAA,YAAY,YAAY;AAIjB,IAAM,aAAa,CACzB,MACA,WACA,QAA6B,oBAAa,SAAS,UAE5C,oBAAa;AAAA,EACnB;AAAA,IACC,KAAK,GAAG,KAAK,GAAG;AAAA,IAChB,KAAK,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,IAC5C,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,IAAI,MAAM,UAAU,SAAS,QAAQ,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../anvl/src/json/json-interface.ts","../../../anvl/src/json/index.ts","../../../anvl/src/primitive/index.ts","../src/select-json.ts","../src/select-json-family.ts"],"names":["IMPLICIT"],"mappings":";AAOO,IAAM,yBAGT;AAAA,EACH,QAAQ,CAAC,cAAc,MAAM,KAAK,SAAS;AAAA,EAC3C,UAAU,CAAC,SAAS,IAAI,IAAI,IAAI;AACjC;;;ACTO,IAAM,YAAY,CACxB,QAC4D,KAAK,MAAM,GAAG;AAIpE,IAAM,gBAAgB,CAC5B,SACoB,KAAK,UAAU,IAAI;AAIjC,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAaO,IAAM,gBAA2B;AAAA,EACvC,OAAO,CAAC;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ,CAAC;AAAA,EACT,QAAQ;AACT;;;ACzCO,IAAM,WAAW,CAAC,UAAoC;AAC5D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,WAAW,CAAC,UAAoC;AAC5D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,YAAY,CAAC,UAAqC;AAC9D,SAAO,OAAO,UAAU;AACzB;AAEO,IAAM,SAAS,CAAC,UAAkC;AACxD,SAAO,UAAU;AAClB;AAEO,IAAM,cAAc,CAAC,UAAuC;AAClE,SAAO,SAAS,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;AAC9E;;;AClBA,SAAS,gBAAgB;AAEzB,SAAS,sBAAsB;AAGxB,IAAM,aAAa,CACzB,MACA,WACA,QAAe,SAAS,UACK;AAC7B,SAAO;AAAA,IACN;AAAA,MACC,KAAK,GAAG,KAAK,GAAG;AAAA,MAChB,KAAK,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,MAC5C,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,IAAI,MAAM,UAAU,SAAS,QAAQ,CAAC;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACnBA,SAAS,YAAAA,WAAU,4BAA4B;AAKxC,IAAM,mBAAmB,CAK/B,YACA,WACA,QAAeA,UAAS,UACS;AACjC,QAAM,aAAa;AAAA,IAClB;AAAA,MACC,KAAK,GAAG,WAAW,GAAG;AAAA,MACtB,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,UAAU,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC;AAAA,MAChE,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,aACvB,IAAI,WAAW,GAAG,GAAG,UAAU,SAAS,QAAQ,CAAC;AAAA,IACnD;AAAA,IACA;AAAA,EACD;AACA,aAAW,QAAQ;AAAA,IAClB,SAAS,MAAM,OAAO,IAAI;AAAA,IAC1B,CAAC,UAAU;AACV,UAAI,MAAM,QAAQ;AACjB,mBAAW,UAAU,MAAM,OAAO,MAAM,CAAM;AAAA,MAC/C;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR","sourcesContent":["import type { Json } from \".\"\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: T) => J\n\tfromJson: (json: J) => T\n}\n\nexport const stringSetJsonInterface: JsonInterface<\n\tSet<string>,\n\tJson.Array<string>\n> = {\n\ttoJson: (stringSet) => Array.from(stringSet),\n\tfromJson: (json) => new Set(json),\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","export type primitive = boolean | number | string | null\n\nexport const isString = (input: unknown): input is string => {\n\treturn typeof input === `string`\n}\n\nexport const isNumber = (input: unknown): input is number => {\n\treturn typeof input === `number`\n}\n\nexport const isBoolean = (input: unknown): input is boolean => {\n\treturn typeof input === `boolean`\n}\n\nexport const isNull = (input: unknown): input is null => {\n\treturn input === null\n}\n\nexport const isPrimitive = (input: unknown): input is primitive => {\n\treturn isString(input) || isNumber(input) || isBoolean(input) || isNull(input)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\n\nimport { createSelector } from \"atom.io/internal\"\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.SelectorToken<J> => {\n\treturn createSelector(\n\t\t{\n\t\t\tkey: `${atom.key}:JSON`,\n\t\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\t\tset: ({ set }, newValue) => set(atom, transform.fromJson(newValue)),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createSelectorFamily } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\nimport { parseJson } from \".\"\n\nexport const selectJsonFamily = <\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n>(\n\tatomFamily: AtomIO.AtomFamily<T, K>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.SelectorFamily<J, K> => {\n\tconst jsonFamily = createSelectorFamily<J, K>(\n\t\t{\n\t\t\tkey: `${atomFamily.key}:JSON`,\n\t\t\tget: (key) => ({ get }) => transform.toJson(get(atomFamily(key))),\n\t\t\tset: (key) => ({ set }, newValue) =>\n\t\t\t\tset(atomFamily(key), transform.fromJson(newValue)),\n\t\t},\n\t\tstore,\n\t)\n\tatomFamily.subject.subscribe(\n\t\t`store=${store.config.name}::json-selector-family`,\n\t\t(token) => {\n\t\t\tif (token.family) {\n\t\t\t\tjsonFamily(parseJson(token.family.subKey) as K)\n\t\t\t}\n\t\t},\n\t)\n\treturn jsonFamily\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export * from "~/packages/anvl/src/json"
2
+ export * from "~/packages/anvl/src/primitive"
3
+
4
+ export * from "./select-json"
5
+ export * from "./select-json-family"