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.
- package/README.md +21 -2
- package/dist/index.d.mts +42 -461
- package/dist/index.d.ts +42 -461
- package/dist/index.js +128 -1792
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +75 -1742
- package/dist/index.mjs.map +1 -1
- package/internal/dist/index.d.mts +342 -0
- package/internal/dist/index.d.ts +342 -0
- package/internal/dist/index.js +1873 -0
- package/internal/dist/index.js.map +1 -0
- package/internal/dist/index.mjs +1798 -0
- package/internal/dist/index.mjs.map +1 -0
- package/internal/package.json +15 -0
- package/internal/src/atom/create-atom.ts +75 -0
- package/internal/src/atom/delete-atom.ts +10 -0
- package/internal/src/atom/index.ts +3 -0
- package/{src/internal → internal/src/atom}/is-default.ts +4 -2
- package/internal/src/caching.ts +21 -0
- package/internal/src/families/create-atom-family.ts +59 -0
- package/internal/src/families/create-readonly-selector-family.ts +45 -0
- package/internal/src/families/create-selector-family.ts +67 -0
- package/internal/src/families/index.ts +3 -0
- package/internal/src/get-state-internal.ts +23 -0
- package/internal/src/index.ts +13 -0
- package/internal/src/mutable/create-mutable-atom-family.ts +25 -0
- package/internal/src/mutable/create-mutable-atom.ts +49 -0
- package/internal/src/mutable/get-json-token.ts +22 -0
- package/internal/src/mutable/get-update-token.ts +20 -0
- package/internal/src/mutable/index.ts +17 -0
- package/internal/src/mutable/is-atom-token-mutable.ts +7 -0
- package/internal/src/mutable/tracker-family.ts +61 -0
- package/internal/src/mutable/tracker.ts +164 -0
- package/internal/src/mutable/transceiver.ts +110 -0
- package/internal/src/operation.ts +68 -0
- package/{src/internal → internal/src}/selector/create-read-write-selector.ts +10 -13
- package/{src/internal → internal/src}/selector/create-readonly-selector.ts +9 -8
- package/internal/src/selector/create-selector.ts +65 -0
- package/{src/internal → internal/src}/selector/index.ts +1 -0
- package/internal/src/selector/lookup-selector-sources.ts +20 -0
- package/{src/internal → internal/src}/selector/register-selector.ts +13 -9
- package/{src/internal → internal/src}/selector/trace-selector-atoms.ts +4 -2
- package/{src/internal → internal/src}/selector/update-selector-atoms.ts +4 -3
- package/internal/src/set-state/become.ts +10 -0
- package/internal/src/set-state/copy-mutable-if-needed.ts +23 -0
- package/internal/src/set-state/copy-mutable-in-transaction.ts +59 -0
- package/internal/src/set-state/copy-mutable-into-new-store.ts +34 -0
- package/internal/src/set-state/emit-update.ts +23 -0
- package/internal/src/set-state/evict-downstream.ts +39 -0
- package/internal/src/set-state/index.ts +2 -0
- package/internal/src/set-state/set-atom-state.ts +38 -0
- package/internal/src/set-state/set-selector-state.ts +19 -0
- package/internal/src/set-state/set-state-internal.ts +18 -0
- package/internal/src/set-state/stow-update.ts +42 -0
- package/internal/src/store/deposit.ts +43 -0
- package/internal/src/store/index.ts +5 -0
- package/internal/src/store/lookup.ts +26 -0
- package/internal/src/store/store.ts +154 -0
- package/internal/src/store/withdraw-new-family-member.ts +53 -0
- package/internal/src/store/withdraw.ts +113 -0
- package/internal/src/subject.ts +21 -0
- package/internal/src/subscribe/index.ts +1 -0
- package/internal/src/subscribe/recall-state.ts +19 -0
- package/internal/src/subscribe/subscribe-to-root-atoms.ts +47 -0
- package/{src/internal → internal/src}/timeline/add-atom-to-timeline.ts +50 -29
- package/internal/src/timeline/index.ts +3 -0
- package/{src/internal → internal/src/timeline}/time-travel-internal.ts +6 -6
- package/{src/internal → internal/src/timeline}/timeline-internal.ts +20 -12
- package/{src/internal → internal/src}/transaction/abort-transaction.ts +1 -1
- package/{src/internal → internal/src}/transaction/apply-transaction.ts +25 -18
- package/{src/internal → internal/src}/transaction/build-transaction.ts +12 -6
- package/{src/internal → internal/src}/transaction/index.ts +3 -2
- package/{src/internal → internal/src}/transaction/redo-transaction.ts +4 -5
- package/{src/internal → internal/src/transaction}/transaction-internal.ts +16 -13
- package/{src/internal → internal/src}/transaction/undo-transaction.ts +4 -5
- package/introspection/dist/index.d.mts +12 -260
- package/introspection/dist/index.d.ts +12 -260
- package/introspection/dist/index.js +125 -140
- package/introspection/dist/index.js.map +1 -1
- package/introspection/dist/index.mjs +103 -116
- package/introspection/dist/index.mjs.map +1 -1
- package/{src/introspection → introspection/src}/attach-atom-index.ts +41 -30
- package/{src/introspection → introspection/src}/attach-introspection-states.ts +6 -10
- package/introspection/src/attach-selector-index.ts +90 -0
- package/{src/introspection → introspection/src}/attach-timeline-family.ts +16 -16
- package/introspection/src/attach-timeline-index.ts +38 -0
- package/introspection/src/attach-transaction-index.ts +40 -0
- package/{src/introspection → introspection/src}/attach-transaction-logs.ts +11 -8
- package/json/dist/index.d.mts +41 -2
- package/json/dist/index.d.ts +41 -2
- package/json/dist/index.js +88 -48
- package/json/dist/index.js.map +1 -1
- package/json/dist/index.mjs +76 -13
- package/json/dist/index.mjs.map +1 -1
- package/json/src/index.ts +5 -0
- package/json/src/select-json-family.ts +35 -0
- package/json/src/select-json.ts +22 -0
- package/package.json +105 -57
- package/react/dist/index.d.mts +9 -17
- package/react/dist/index.d.ts +9 -17
- package/react/dist/index.js +45 -77
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +18 -34
- package/react/dist/index.mjs.map +1 -1
- package/react/src/store-context.tsx +12 -0
- package/react/src/store-hooks.ts +36 -0
- package/react-devtools/dist/index.css +1 -1
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.mts +199 -230
- package/react-devtools/dist/index.d.ts +199 -230
- package/react-devtools/dist/index.js +610 -2466
- package/react-devtools/dist/index.js.map +1 -1
- package/react-devtools/dist/index.mjs +543 -2401
- package/react-devtools/dist/index.mjs.map +1 -1
- package/{src/react-devtools → react-devtools/src}/AtomIODevtools.tsx +5 -3
- package/{src/react-devtools → react-devtools/src}/Button.tsx +2 -3
- package/{src/react-devtools → react-devtools/src}/StateEditor.tsx +3 -2
- package/{src/react-devtools → react-devtools/src}/StateIndex.tsx +7 -4
- package/{src/react-devtools → react-devtools/src}/TimelineIndex.tsx +7 -11
- package/{src/react-devtools → react-devtools/src}/TransactionIndex.tsx +4 -4
- package/{src/react-devtools → react-devtools/src}/Updates.tsx +9 -4
- package/{src/react-devtools → react-devtools/src}/index.ts +5 -5
- package/realtime-react/dist/index.d.mts +9 -25
- package/realtime-react/dist/index.d.ts +9 -25
- package/realtime-react/dist/index.js +75 -193
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/dist/index.mjs +44 -148
- package/realtime-react/dist/index.mjs.map +1 -1
- package/realtime-react/src/index.ts +7 -0
- package/{src/realtime-react → realtime-react/src}/realtime-context.tsx +3 -4
- package/realtime-react/src/use-pull-family-member.ts +15 -0
- package/realtime-react/src/use-pull-mutable-family-member.ts +20 -0
- package/realtime-react/src/use-pull-mutable.ts +17 -0
- package/realtime-react/src/use-pull.ts +15 -0
- package/realtime-react/src/use-push.ts +19 -0
- package/realtime-react/src/use-server-action.ts +18 -0
- package/realtime-testing/dist/index.d.mts +49 -0
- package/realtime-testing/dist/index.d.ts +49 -0
- package/realtime-testing/dist/index.js +147 -0
- package/realtime-testing/dist/index.js.map +1 -0
- package/realtime-testing/dist/index.mjs +116 -0
- package/realtime-testing/dist/index.mjs.map +1 -0
- package/{src/realtime-testing → realtime-testing/src}/setup-realtime-test.tsx +10 -8
- package/src/atom.ts +64 -8
- package/src/index.ts +36 -29
- package/src/logger.ts +7 -7
- package/src/selector.ts +5 -5
- package/src/silo.ts +49 -43
- package/src/subscribe.ts +27 -22
- package/src/timeline.ts +9 -4
- package/src/transaction.ts +3 -4
- package/transceivers/set-rtx/dist/index.d.mts +39 -0
- package/transceivers/set-rtx/dist/index.d.ts +39 -0
- package/transceivers/set-rtx/dist/index.js +213 -0
- package/transceivers/set-rtx/dist/index.js.map +1 -0
- package/transceivers/set-rtx/dist/index.mjs +211 -0
- package/transceivers/set-rtx/dist/index.mjs.map +1 -0
- package/{realtime → transceivers/set-rtx}/package.json +1 -1
- package/transceivers/set-rtx/src/index.ts +1 -0
- package/transceivers/set-rtx/src/set-rtx.ts +242 -0
- package/realtime/dist/index.d.mts +0 -25
- package/realtime/dist/index.d.ts +0 -25
- package/realtime/dist/index.js +0 -190
- package/realtime/dist/index.js.map +0 -1
- package/realtime/dist/index.mjs +0 -151
- package/realtime/dist/index.mjs.map +0 -1
- package/src/internal/atom-internal.ts +0 -54
- package/src/internal/families-internal.ts +0 -144
- package/src/internal/get.ts +0 -129
- package/src/internal/index.ts +0 -15
- package/src/internal/operation.ts +0 -139
- package/src/internal/selector/lookup-selector-sources.ts +0 -16
- package/src/internal/selector-internal.ts +0 -58
- package/src/internal/set.ts +0 -99
- package/src/internal/store.ts +0 -151
- package/src/internal/subscribe-internal.ts +0 -88
- package/src/internal/timeline/index.ts +0 -1
- package/src/introspection/attach-selector-index.ts +0 -77
- package/src/introspection/attach-timeline-index.ts +0 -36
- package/src/introspection/attach-transaction-index.ts +0 -38
- package/src/json/index.ts +0 -1
- package/src/json/select-json.ts +0 -18
- package/src/react/store-context.tsx +0 -13
- package/src/react/store-hooks.ts +0 -47
- package/src/react-explorer/AtomIOExplorer.tsx +0 -218
- package/src/react-explorer/explorer-effects.ts +0 -20
- package/src/react-explorer/explorer-states.ts +0 -217
- package/src/react-explorer/index.ts +0 -23
- package/src/react-explorer/space-states.ts +0 -72
- package/src/react-explorer/view-states.ts +0 -41
- package/src/realtime/README.md +0 -33
- package/src/realtime/hook-composition/expose-family.ts +0 -101
- package/src/realtime/hook-composition/expose-single.ts +0 -38
- package/src/realtime/hook-composition/expose-timeline.ts +0 -60
- package/src/realtime/hook-composition/index.ts +0 -12
- package/src/realtime/hook-composition/receive-state.ts +0 -29
- package/src/realtime/hook-composition/receive-transaction.ts +0 -18
- package/src/realtime/index.ts +0 -1
- package/src/realtime-react/index.ts +0 -3
- package/src/realtime-react/realtime-hooks.ts +0 -39
- package/src/realtime-react/realtime-state.ts +0 -10
- package/src/realtime-react/use-pull-family-member.ts +0 -26
- package/src/realtime-react/use-pull-family.ts +0 -24
- package/src/realtime-react/use-pull.ts +0 -24
- package/src/realtime-react/use-push.ts +0 -27
- package/src/realtime-react/use-server-action.ts +0 -33
- package/src/tracker/index.ts +0 -3
- package/src/tracker/tracker.ts +0 -61
- package/src/web-effects/index.ts +0 -1
- package/src/web-effects/storage.ts +0 -30
- /package/{src/introspection → introspection/src}/index.ts +0 -0
- /package/{src/react → react/src}/index.ts +0 -0
- /package/{src/react-devtools → react-devtools/src}/devtools.scss +0 -0
- /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
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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 =
|
|
11
|
+
store: Store = IMPLICIT.STORE,
|
|
8
12
|
): ReadonlySelectorFamily<Timeline> => {
|
|
9
|
-
const findTimelineLogState__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
|
|
33
|
+
const unsubscribe = store.subject.operationStatus.subscribe(
|
|
34
|
+
`introspection`,
|
|
32
35
|
(operationStatus) => {
|
|
33
36
|
if (operationStatus.open === false) {
|
|
34
|
-
|
|
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 =
|
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
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:
|
|
10
|
+
store: Store = IMPLICIT.STORE,
|
|
8
11
|
): ReadonlySelectorFamily<TransactionUpdate<ƒn>[]> => {
|
|
9
|
-
const findTransactionUpdateLog =
|
|
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 =
|
|
32
|
+
const findTransactionUpdateLogState = createSelectorFamily<
|
|
30
33
|
TransactionUpdate<ƒn>[],
|
|
31
34
|
string
|
|
32
35
|
>(
|
package/json/dist/index.d.mts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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 };
|
package/json/dist/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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 };
|
package/json/dist/index.js
CHANGED
|
@@ -1,51 +1,91 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
package/json/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
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"]}
|
package/json/dist/index.mjs
CHANGED
|
@@ -1,15 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
package/json/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
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"]}
|