atom.io 0.40.6 → 0.40.8
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 +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/data/index.js +1 -2
- package/dist/data/index.js.map +1 -1
- package/dist/employ-socket-D6wgByWh.js +12 -0
- package/dist/employ-socket-D6wgByWh.js.map +1 -0
- package/dist/eslint-plugin/index.js.map +1 -1
- package/dist/has-role-CMlaUlaf.js +1133 -0
- package/dist/has-role-CMlaUlaf.js.map +1 -0
- package/dist/internal/index.d.ts +248 -248
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +590 -1803
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +1 -1
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +13 -32
- package/dist/introspection/index.js.map +1 -1
- package/dist/is-fn-DY1wZ-md.js +10 -0
- package/dist/is-fn-DY1wZ-md.js.map +1 -0
- package/dist/json/index.d.ts.map +1 -1
- package/dist/json/index.js.map +1 -1
- package/dist/main/index.d.ts +33 -33
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +3 -4
- package/dist/main/index.js.map +1 -1
- package/dist/mutex-store-CSvxY9i3.js +11 -0
- package/dist/mutex-store-CSvxY9i3.js.map +1 -0
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/react-devtools/index.js +9 -11
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts +7 -15
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +4 -35
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +6 -9
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +96 -88
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +17 -13
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +39 -50
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +83 -84
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +604 -543
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +5 -4
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +35 -22
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-BfW3nWif.js +31 -0
- package/dist/shared-room-store-BfW3nWif.js.map +1 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js +4 -8
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/dist/web/index.d.ts +3 -3
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +4 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +13 -13
- package/src/internal/atom/create-regular-atom.ts +5 -4
- package/src/internal/atom/dispose-atom.ts +7 -2
- package/src/internal/atom/has-role.ts +3 -3
- package/src/internal/caching.ts +4 -2
- package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
- package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
- package/src/internal/families/create-regular-atom-family.ts +2 -1
- package/src/internal/families/create-writable-held-selector-family.ts +2 -1
- package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
- package/src/internal/families/dispose-from-store.ts +4 -4
- package/src/internal/families/find-in-store.ts +10 -10
- package/src/internal/families/get-family-of-token.ts +2 -2
- package/src/internal/families/index.ts +1 -0
- package/src/internal/families/mint-in-store.ts +54 -19
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/get-fallback.ts +2 -2
- package/src/internal/get-state/get-from-store.ts +5 -5
- package/src/internal/get-state/read-or-compute-value.ts +1 -1
- package/src/internal/get-state/reduce-reference.ts +8 -6
- package/src/internal/index.ts +2 -220
- package/src/internal/molecule.ts +1 -2
- package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
- package/src/internal/mutable/create-mutable-atom.ts +4 -2
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +2 -1
- package/src/internal/mutable/tracker.ts +71 -59
- package/src/internal/safe-compute.ts +1 -1
- package/src/internal/selector/create-readonly-held-selector.ts +2 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -1
- package/src/internal/selector/create-writable-pure-selector.ts +2 -1
- package/src/internal/selector/dispose-selector.ts +3 -2
- package/src/internal/selector/register-selector.ts +8 -5
- package/src/internal/selector/trace-selector-atoms.ts +2 -1
- package/src/internal/set-state/dispatch-state-update.ts +3 -2
- package/src/internal/set-state/evict-downstream.ts +1 -1
- package/src/internal/set-state/operate-on-store.ts +16 -22
- package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
- package/src/internal/set-state/reset-in-store.ts +5 -5
- package/src/internal/set-state/set-atom-or-selector.ts +2 -2
- package/src/internal/set-state/set-atom.ts +4 -2
- package/src/internal/set-state/set-into-store.ts +21 -39
- package/src/internal/set-state/set-selector.ts +3 -2
- package/src/internal/state-types.ts +228 -0
- package/src/internal/store/deposit.ts +4 -4
- package/src/internal/store/index.ts +0 -1
- package/src/internal/store/store.ts +9 -9
- package/src/internal/store/withdraw.ts +4 -4
- package/src/internal/subscribe/recall-state.ts +1 -1
- package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
- package/src/internal/subscribe/subscribe-to-state.ts +9 -0
- package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
- package/src/internal/transaction/build-transaction.ts +3 -2
- package/src/internal/transaction/index.ts +1 -23
- package/src/internal/transaction/is-root-store.ts +4 -1
- package/src/internal/transaction/transaction-meta-progress.ts +22 -0
- package/src/main/atom.ts +1 -2
- package/src/main/find-state.ts +5 -5
- package/src/main/get-state.ts +4 -4
- package/src/main/realm.ts +2 -2
- package/src/main/set-state.ts +10 -10
- package/src/react/parse-state-overloads.ts +3 -3
- package/src/react/use-i.ts +6 -4
- package/src/react/use-loadable.ts +4 -10
- package/src/react/use-o.ts +6 -4
- package/src/react-devtools/store.ts +6 -6
- package/src/realtime/index.ts +1 -0
- package/src/realtime/mutex-store.ts +11 -0
- package/src/realtime/realtime-continuity.ts +1 -5
- package/src/realtime-client/index.ts +0 -1
- package/src/realtime-client/pull-atom-family-member.ts +14 -17
- package/src/realtime-client/pull-atom.ts +1 -1
- package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
- package/src/realtime-client/pull-selector-family-member.ts +8 -35
- package/src/realtime-client/pull-selector-roots.ts +90 -0
- package/src/realtime-client/pull-selector.ts +2 -27
- package/src/realtime-client/push-state.ts +33 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
- package/src/realtime-react/index.ts +2 -2
- package/src/realtime-react/realtime-context.tsx +9 -5
- package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
- package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
- package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
- package/src/realtime-react/use-push.ts +7 -3
- package/src/realtime-react/use-realtime-service.ts +11 -11
- package/src/realtime-react/use-single-effect.ts +11 -14
- package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +2 -27
- package/src/realtime-server/continuity/provide-continuity.ts +50 -0
- package/src/realtime-server/continuity/{subscribe-to-continuity-actions.ts → provide-outcomes.ts} +15 -13
- package/src/realtime-server/continuity/{subscribe-to-continuity-perpectives.ts → provide-perspectives.ts} +10 -8
- package/src/realtime-server/continuity/{prepare-to-send-initial-payload.ts → provide-startup-payloads.ts} +6 -4
- package/src/realtime-server/continuity/receive-action-requests.ts +68 -0
- package/src/realtime-server/continuity/track-acknowledgements.ts +46 -0
- package/src/realtime-server/employ-socket.ts +14 -0
- package/src/realtime-server/index.ts +3 -22
- package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
- package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
- package/src/realtime-server/ipc-sockets/parent-socket.ts +98 -69
- package/src/realtime-server/realtime-family-provider.ts +78 -29
- package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
- package/src/realtime-server/realtime-mutable-provider.ts +30 -22
- package/src/realtime-server/realtime-server-stores/index.ts +0 -2
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
- package/src/realtime-server/realtime-state-provider.ts +30 -29
- package/src/realtime-server/realtime-state-receiver.ts +62 -16
- package/src/realtime-server/server-config.ts +8 -0
- package/src/realtime-server/socket-interface.ts +14 -0
- package/src/realtime-testing/setup-realtime-test.tsx +70 -31
- package/src/web/index.ts +1 -1
- package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
- package/src/internal/store/mint-or-counterfeit.ts +0 -108
- package/src/realtime-client/server-action.ts +0 -23
- package/src/realtime-react/on-mount.ts +0 -5
- package/src/realtime-react/use-server-action.ts +0 -19
- package/src/realtime-server/continuity/prepare-to-serve-transaction-request.ts +0 -59
- package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +0 -145
- package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +0 -41
- package/src/realtime-server/realtime-action-receiver.ts +0 -40
- package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Flat, Fn, Refinement, RootStore, Store, Timeline } from "atom.io/internal";
|
|
2
|
-
import { Json } from "atom.io/json";
|
|
3
2
|
import { AtomToken, Loadable, ReadableToken, ReadonlyPureSelectorFamilyToken, SelectorToken, TimelineToken, TransactionOutcomeEvent, TransactionToken } from "atom.io";
|
|
3
|
+
import { Json } from "atom.io/json";
|
|
4
4
|
|
|
5
5
|
//#region src/introspection/attach-atom-index.d.ts
|
|
6
6
|
type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":";;;;;KAUY,cAAA,GAAiB,mBAAmB;;;KCApC,kBAAA,GAAqB,mBAChC;;;KCQW,mBAAA;EFTZ,SAAY,EEUA,SFVA,CEUU,cFVV,CAAA;EAAA,aAAA,EEWI,SFXJ,CEWc,kBFXd,CAAA;kBAAoC,EEY7B,SFZ6B,CEYnB,gBFZmB,CEYF,EFZE,CAAA,EAAA,CAAA;yBAAnB,EEaH,+BFbG,CEc3B,uBFd2B,CEcH,gBFdG,CEcc,EFdd,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":";;;;;KAUY,cAAA,GAAiB,mBAAmB;;;KCApC,kBAAA,GAAqB,mBAChC;;;KCQW,mBAAA;EFTZ,SAAY,EEUA,SFVA,CEUU,cFVV,CAAA;EAAA,aAAA,EEWI,SFXJ,CEWc,kBFXd,CAAA;kBAAoC,EEY7B,SFZ6B,CEYnB,gBFZmB,CEYF,EFZE,CAAA,EAAA,CAAA;yBAAnB,EEaH,+BFbG,CEc3B,uBFd2B,CEcH,gBFdG,CEcc,EFdd,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA;EAAA,aAAA,EEiBb,SFjBa,CEiBH,aFjBG,CAAA,GAAA,CAAA,EAAA,CAAA;qBEkBT,gCAAgC;iBACpC,gCAAgC;;ADnBpC,cCsBC,yBDtBD,EAAA,CAAA,KAAA,ECuBJ,SDvBI,EAAA,GCwBT,mBDxBS;;;KEIA,kBAAA;EHJZ,YAAY,EAAA,OAAA;EAAA,gBAAA,EAAA,OAAA;;;;;;cGaC,OAAA;EFbb,SAAY,KAAA,EEcY,KFdZ;EAAA,gBAAA,EAAA,MAAA;iBACX,EEewB,GFfxB,CAAA,MAAA,EAAA,MAAA,CAAA;WADgC,SAAA,EEiBL,SFjBK,CEiBK,cFjBL,CAAA;EAAA,SAAA,aAAA,EEkBD,SFlBC,CEkBS,kBFlBT,CAAA;;;;ECSjC,iBAAY,+BAAA;EAAA,iBAAA,+BAAA;;;;aAEI,CAAA,KAAA,CAAA,ECkBW,KDlBX;kBAC8B,4BAAA,ECoDQ,kBDpDR;;;;;;;eAKpB,CAAA,KAAA,CAAA,EC0DjB,kBD1DiB,CAAA,EAAA,CAAA,SAAA,CC2DX,aD3DW,CAAA,OAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAAA;GCmGjB,MAAA,CAAO,OAAA,GDnGA,EAAA,IAAA;;;;KExBJ,cAAA;KAEA,kBAAA,GAAqB,iBAAiB;KAEtC,yBAAyB,sBACpC,eAAe,+BACZ,IACA,eAAe,iBACd,aAAa;AJDN,KIIA,iBAAA,GAAoB,MJJpB,CAAA,MAAA,EIImC,kBJJnC,CAAA;AAAA,cIMC,QJND,CAAA,uBIMiC,iBJNjC,CAAA,CAAA;WAAoC,EIO7B,cJP6B;aAAnB,CAAA,SAAA,EISE,cJTF;EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EIaJ,CJbI,CAAA,EIczB,IJdyB,CAAA,QAAA,MIeb,cJfa,GIeI,CJfJ,SIec,SJfd,CIewB,cJfxB,CIeuC,CJfvC,CAAA,CAAA,GAAA;UIiBhB;UACA,UAAU,eAAe;MAE/B,UAAU,eAAe,YAAY;IHpB5C,IAAY,EGsBE,CHtBF;IAAA,IAAA,EGuBE,SHvBF,CGuBY,cHvBZ,CGuB2B,CHvB3B,CAAA,CAAA;WACX,EAAA,CAAA,CAAA,MGyBY,cHzBZ,CAAA,GAAA,CG0BI,CH1BJ,SG0Bc,SH1Bd,CG0BwB,cH1BxB,CAAA,MG0B6C,cH1B7C,CAAA,CAAA,GAAA,KAAA,GAAA,IAAA,CAAA;;AADgC,cGmDpBA,iBHnDoB,EGmDD,QHnDC,CAAA;;;;ECSjC,IAAY,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,IAAA;CAAA,CAAA;AACU,iBEqDN,aAAA,CFrDM,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IEqDkC,IAAA,CAAK,IAAA,CAAK,MFrD5C;AAAV,cE6DCC,gBF7DD,EE6DmB,QF7DnB,CAAA;QACc,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IE6DY,IAAA,CAAK,IAAA,CAAK,MF7DtB;SAAV,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IE8DqB,IAAA,CAAK,IAAA,CAAK,KF9D/B;;AACa,cEmEhBC,YFnEgB,EEmEF,QFnEE,CAAA;QAAV,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IEoEmB,IAAA,CAAK,IAAA,CAAK,MFpE7B;SAEwB,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IEmEN,IAAA,CAAK,IAAA,CAAK,KFnEJ;QAAjB,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,MAAA;QAAxB,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,MAAA;SADwB,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,OAAA;QAIA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,IAAA;;AAC0B,KEyExC,QAAA,GFzEwC,MAAA,OEyEhB,YAAA,CAAa,SFzEG;AAAhC,cE2EP,YF3EO,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GE6EjB,QF7EiB,GAAA,KAAA,GAAA,KAAA,GAAA,WAAA,GAAA,CAAA,MAAA,GAAA,CAAA,CAAA,CAAA;;;iBGtBJ,UAAA,wBAAkC;iBAOlC,UAAA,wBAAkC;iBAOlC,WAAA,0BAAqC;ALVzC,iBKgBI,UAAA,CLhBJ,CAAA,EKiBR,IAAA,CAAK,IAAA,CAAK,MLjBF,EAAA,CAAA,EKkBR,IAAA,CAAK,IAAA,CAAK,MLlBF,EAAA,OAAA,EKmBF,ILnBE,CAAA,OAAA,CAAA,CAAA,EKoBT,KLpBS;AAAA,iBK6DI,SAAA,CL7DJ,CAAA,EK8DR,IAAA,CAAK,IAAA,CAAK,KL9DF,EAAA,CAAA,EK+DR,IAAA,CAAK,IAAA,CAAK,KL/DF,EAAA,OAAA,EKgEF,ILhEE,CAAA,OAAA,CAAA,CAAA,EKiET,KLjES;KKqEP,KAAA,GLrE2C;SAAnB,EAAA,MAAA;EAAA,KAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,qBAAA,EAAA,MAAA,CAAA,EAAA;;kCKyEI;;AJzEjC,KI4EK,IJ5EO,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EI4EO,CJ5EP,EAAA,CAAA,EI4Ea,CJ5Eb,EAAA,GI4EmB,KJ5EnB;KI6EP,QJ7EO,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EI6EW,CJ7EX,EAAA,CAAA,EI6EiB,CJ7EjB,EAAA,OAAA,EI6E6B,MJ7E7B,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA,MAAA,CAAA,EAAA,GI6E0D,KJ7E1D;AACX,cI8EY,MJ9EZ,cI+Ea,MJhFmB,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,aIiFnB,MJjFmB,CAAA,MAAA,EAAA,GAAA,CAAA;gBImFX,SAAS;gBACT,SAAS;EH3E/B,WAAY,EAAA,SAAA,MG4EwB,IH5ExB,GG4E+B,IH5E/B,CG4EoC,SH5EpC,CG4E8C,IH5E9C,CG4EmD,EH5EnD,CAAA,CAAA,CAAA,EAAA;EAAA,WAAA,EAAA,SAAA,MG6EwB,IH7ExB,GG6E+B,QH7E/B,CG6EwC,SH7ExC,CG6EkD,IH7ElD,CG6EuD,EH7EvD,CAAA,CAAA,CAAA,EAAA;aACU,CAAA,YAAA,EG+EN,QH/EM,CG+EG,IH/EH,CAAA,EAAA,YAAA,EGgFN,QHhFM,CGgFG,IHhFH,CAAA,EAAA,aAAA,EAAA,SAAA,MGkFN,IHlFM,GGkFC,QHlFD,CGkFU,SHlFV,CGkFoB,IHlFpB,CGkFyB,EHlFzB,CAAA,CAAA,CAAA,EAAA,GAAA,SAAA,MGmFD,IHnFC,GGmFM,IHnFN,CGmFW,SHnFX,CGmFqB,IHnFrB,CGmF0B,EHnF1B,CAAA,CAAA,CAAA,EAAA;QAAV,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,CAAA,EGmG0B,KHnG1B;;AACI,cG0IHC,UH1IG,EG0IS,MH1IT,CAAA;QAC8B,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,MAAA;QAAjB,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,MAAA;SAAV,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,OAAA;QAEwB,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IAAA,IAAA;;QAAzC,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IG+IqC,IAAA,CAAK,IAAA,CAAK,MH/I/C;SADwB,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,KAAA,IGiJY,IAAA,CAAK,IAAA,CAAK,KHjJtB;;;;KIpBd,gBAAA,GAAmB;;;;KAInB,WAAA,sCAGP;ANAO,cMEC,MNFD,EAAA,CAAA,IAAA,EMGL,KNHK,CAAA,OAAA,CAAA,GAAA,MAAA,EAAA,SAAA,EMIA,WNJA,EAAA,GAAA,IAAA;;;AAAA,KOFA,UPEA,CAAA,cOFyB,aPEzB,CAAA,OAAA,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,GAAA;aAAoC;eAAnB,EOAb,GPAa,CAAA,MAAA,EOAD,KPAC,CAAA;CAAA;KOGjB,iCAAiC,oCAC5C,YAAY,WAAW,SAAS"}
|
|
@@ -144,11 +144,10 @@ const attachTimelineFamily = (store) => {
|
|
|
144
144
|
});
|
|
145
145
|
}]
|
|
146
146
|
});
|
|
147
|
-
|
|
147
|
+
return createSelectorFamily(store, {
|
|
148
148
|
key: `🔍 Timeline Update Log`,
|
|
149
149
|
get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL, key)
|
|
150
150
|
});
|
|
151
|
-
return findTimelineLogState;
|
|
152
151
|
};
|
|
153
152
|
|
|
154
153
|
//#endregion
|
|
@@ -202,17 +201,15 @@ const attachTransactionLogs = (store) => {
|
|
|
202
201
|
key: `🔍 Transaction Update Log (Internal)`,
|
|
203
202
|
default: () => [],
|
|
204
203
|
effects: (key) => [({ setSelf }) => {
|
|
205
|
-
|
|
206
|
-
tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
|
|
204
|
+
store.transactions.get(key)?.subject.subscribe(`introspection`, (transactionUpdate) => {
|
|
207
205
|
if (transactionUpdate.token.key === key) setSelf((state) => [...state, transactionUpdate]);
|
|
208
206
|
});
|
|
209
207
|
}]
|
|
210
208
|
});
|
|
211
|
-
|
|
209
|
+
return createSelectorFamily(store, {
|
|
212
210
|
key: `🔍 Transaction Update Log`,
|
|
213
211
|
get: (key) => ({ get }) => get(transactionUpdateLogAtoms, key)
|
|
214
212
|
});
|
|
215
|
-
return findTransactionUpdateLogState;
|
|
216
213
|
};
|
|
217
214
|
|
|
218
215
|
//#endregion
|
|
@@ -247,8 +244,7 @@ const primitiveRefinery = new Refinery({
|
|
|
247
244
|
});
|
|
248
245
|
function isPlainObject(input) {
|
|
249
246
|
if (!input) return false;
|
|
250
|
-
|
|
251
|
-
return prototype === Object.prototype;
|
|
247
|
+
return Object.getPrototypeOf(input) === Object.prototype;
|
|
252
248
|
}
|
|
253
249
|
const jsonTreeRefinery = new Refinery({
|
|
254
250
|
object: isPlainObject,
|
|
@@ -268,7 +264,7 @@ const discoverType = (input) => {
|
|
|
268
264
|
//#endregion
|
|
269
265
|
//#region src/introspection/attach-type-selectors.ts
|
|
270
266
|
const attachTypeSelectors = (store) => {
|
|
271
|
-
|
|
267
|
+
return createReadonlyPureSelectorFamily(store, {
|
|
272
268
|
key: `🔍 State Type`,
|
|
273
269
|
get: (key) => async ({ get }) => {
|
|
274
270
|
let state;
|
|
@@ -280,11 +276,9 @@ const attachTypeSelectors = (store) => {
|
|
|
280
276
|
return `error`;
|
|
281
277
|
}
|
|
282
278
|
if (state instanceof Promise) state = await state;
|
|
283
|
-
|
|
284
|
-
return typeOfState;
|
|
279
|
+
return discoverType(state);
|
|
285
280
|
}
|
|
286
281
|
});
|
|
287
|
-
return typeSelectors;
|
|
288
282
|
};
|
|
289
283
|
|
|
290
284
|
//#endregion
|
|
@@ -359,8 +353,7 @@ var Auditor = class Auditor {
|
|
|
359
353
|
if (param.atomFamilies) for (const familyNode of atomFamilyNodes) {
|
|
360
354
|
const tokens = familyNode.familyMembers.values();
|
|
361
355
|
for (const token of tokens) {
|
|
362
|
-
const
|
|
363
|
-
const creationTime = storedTime ?? this.auditorCreatedAt;
|
|
356
|
+
const creationTime = this.statesCreatedAt.get(token.key) ?? this.auditorCreatedAt;
|
|
364
357
|
const age = currentTime - creationTime;
|
|
365
358
|
resources.push([token, age]);
|
|
366
359
|
}
|
|
@@ -368,8 +361,7 @@ var Auditor = class Auditor {
|
|
|
368
361
|
if (param.selectorFamilies) for (const familyNode of selectorFamilyNodes) {
|
|
369
362
|
const tokens = familyNode.familyMembers.values();
|
|
370
363
|
for (const token of tokens) {
|
|
371
|
-
const
|
|
372
|
-
const creationTime = storedTime ?? this.auditorCreatedAt;
|
|
364
|
+
const creationTime = this.statesCreatedAt.get(token.key) ?? this.auditorCreatedAt;
|
|
373
365
|
const age = currentTime - creationTime;
|
|
374
366
|
resources.push([token, age]);
|
|
375
367
|
}
|
|
@@ -409,12 +401,10 @@ const sprawl = (tree, inspector) => {
|
|
|
409
401
|
//#endregion
|
|
410
402
|
//#region src/introspection/differ.ts
|
|
411
403
|
function diffNumber(a, b) {
|
|
412
|
-
|
|
413
|
-
return { summary: `${sign}${Math.abs(a - b)} (${a} → ${b})` };
|
|
404
|
+
return { summary: `${a < b ? `+` : `-`}${Math.abs(a - b)} (${a} → ${b})` };
|
|
414
405
|
}
|
|
415
406
|
function diffString(a, b) {
|
|
416
|
-
|
|
417
|
-
return { summary: `${sign}${Math.abs(a.length - b.length)} ("${a}" → "${b}")` };
|
|
407
|
+
return { summary: `${a.length < b.length ? `+` : `-`}${Math.abs(a.length - b.length)} ("${a}" → "${b}")` };
|
|
418
408
|
}
|
|
419
409
|
function diffBoolean(a, b) {
|
|
420
410
|
return { summary: `${a} → ${b}` };
|
|
@@ -437,10 +427,7 @@ function diffObject(a, b, recurse) {
|
|
|
437
427
|
});
|
|
438
428
|
sprawl(b, (path, nodeB) => {
|
|
439
429
|
let key;
|
|
440
|
-
for (key of path)
|
|
441
|
-
const nodeA = a[key];
|
|
442
|
-
if (nodeA === void 0) added.push([key, JSON.stringify(nodeB)]);
|
|
443
|
-
}
|
|
430
|
+
for (key of path) if (a[key] === void 0) added.push([key, JSON.stringify(nodeB)]);
|
|
444
431
|
});
|
|
445
432
|
summary = `~${changed.length} +${added.length} -${removed.length}`;
|
|
446
433
|
return {
|
|
@@ -478,14 +465,8 @@ var Differ = class {
|
|
|
478
465
|
const bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b);
|
|
479
466
|
if (aRefined !== null && bRefined !== null) {
|
|
480
467
|
if (aRefined.type === bRefined.type) {
|
|
481
|
-
if (aRefined.type in this.leafDiffers)
|
|
482
|
-
|
|
483
|
-
return delta;
|
|
484
|
-
}
|
|
485
|
-
if (aRefined.type in this.treeDiffers) {
|
|
486
|
-
const delta = this.treeDiffers[aRefined.type](aRefined.data, bRefined.data, (x, y) => this.diff(x, y));
|
|
487
|
-
return delta;
|
|
488
|
-
}
|
|
468
|
+
if (aRefined.type in this.leafDiffers) return this.leafDiffers[aRefined.type](aRefined.data, bRefined.data);
|
|
469
|
+
if (aRefined.type in this.treeDiffers) return this.treeDiffers[aRefined.type](aRefined.data, bRefined.data, (x, y) => this.diff(x, y));
|
|
489
470
|
}
|
|
490
471
|
}
|
|
491
472
|
const typeA = discoverType(a);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @returns {readonly [ReadableToken<unknown>, number]}[] - An array of tuples, where each tuple contains a state token belonging to a family in the store and that state's creation time.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @returns {readonly [ReadableToken<unknown>, number]}[] - An array of tuples, where each tuple contains a state token belonging to a family in the store and that state's creation time.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/internal/is-fn.ts
|
|
2
|
+
const NON_CTOR_FN_REGEX = /^\[object (?:Async|Generator|AsyncGenerator)?Function\]$/;
|
|
3
|
+
function isFn(input) {
|
|
4
|
+
const protoString = Object.prototype.toString.call(input);
|
|
5
|
+
return NON_CTOR_FN_REGEX.test(protoString);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { isFn };
|
|
10
|
+
//# sourceMappingURL=is-fn-DY1wZ-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-fn-DY1wZ-md.js","names":[],"sources":["../src/internal/is-fn.ts"],"sourcesContent":["import type { Fn } from \"./utility-types\"\n\nconst NON_CTOR_FN_REGEX =\n\t/^\\[object (?:Async|Generator|AsyncGenerator)?Function\\]$/\n\nexport function isFn(input: unknown): input is Fn {\n\tconst protoString = Object.prototype.toString.call(input)\n\treturn NON_CTOR_FN_REGEX.test(protoString)\n}\n"],"mappings":";AAEA,MAAM,oBACL;AAED,SAAgB,KAAK,OAA6B;CACjD,MAAM,cAAc,OAAO,UAAU,SAAS,KAAK,MAAM;AACzD,QAAO,kBAAkB,KAAK,YAAY"}
|
package/dist/json/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":";;;;;KAGY,kBAAkB,cAAc,aAA5C,IAAY,GAAA,CAAA,GAAA,CAAyD,CAAzD,EAA4D,CAA5D,CAAA,EAAA;;AAAgC,KAGhC,YAHgC,CAAA,UAGT,OAHS,CAAA,GAGE,CAHF,SAAA,CAAA,KAAA,EAAA,EAAA,GAAA,CAAA,EAAA,GAIzC,CAJyC,GAAA,KAAA;;AAA4B,KAQ5D,YAR4D,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/json/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport * from \"./entries\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\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"],"mappings":";;AAqBA,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY;;;
|
|
1
|
+
{"version":3,"file":"index.js","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport * from \"./entries\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\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"],"mappings":";;AAqBA,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;;;AAOnC,SAAgB,UAA4B,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;;;;;ACyC3B,SAAgB,UAAU,KAAgC;AACzD,QAAO,KAAK,MAAM,IAAI;;;AAIvB,MAAa,iBACZ,SACoB,KAAK,UAAU,KAAK;AAazC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP;AACD,MAAa,UAAU,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;;AAG3C,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;AAaD,MAAaA,gBAA2B;CACvC,OAAO,EAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,EAAE;CACV,QAAQ;CACR"}
|
package/dist/main/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsJSON, ConstructorOf, Ctor, Each, EnvironmentData, Flat, Fn as Fn$1, Junction, JunctionEntriesBase, JunctionSchemaBase, Refinement, RootStore, Store, Transceiver } from "atom.io/internal";
|
|
2
|
-
import { Canonical, Json, stringified } from "atom.io/json";
|
|
3
2
|
import { MutableAtomFamilyToken as MutableAtomFamilyToken$1, MutableAtomToken as MutableAtomToken$1, ReadableFamilyToken as ReadableFamilyToken$1, ReadableToken as ReadableToken$1, ReadonlyPureSelectorToken as ReadonlyPureSelectorToken$1, ReadonlySelectorFamilyToken as ReadonlySelectorFamilyToken$1, ReadonlySelectorToken as ReadonlySelectorToken$1, RegularAtomToken as RegularAtomToken$1, ViewOf as ViewOf$1, WritableFamilyToken as WritableFamilyToken$1, WritableSelectorFamilyToken as WritableSelectorFamilyToken$1, WritableSelectorToken as WritableSelectorToken$1, WritableToken as WritableToken$1, findState as findState$1 } from "atom.io";
|
|
3
|
+
import { Canonical, Json, stringified } from "atom.io/json";
|
|
4
4
|
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
5
5
|
|
|
6
6
|
//#region src/main/timeline.d.ts
|
|
@@ -320,31 +320,6 @@ type TimelineEvent<ManagedAtom extends TimelineManageable> = {
|
|
|
320
320
|
checkpoint?: true;
|
|
321
321
|
} & (AtomUpdateEvent<AtomOnly<ManagedAtom>> | StateCreationEvent<AtomOnly<ManagedAtom>> | StateDisposalEvent<AtomOnly<ManagedAtom>> | TimelineSelectorUpdateEvent<ManagedAtom> | TransactionOutcomeEvent<TransactionToken<any>>);
|
|
322
322
|
//#endregion
|
|
323
|
-
//#region src/main/set-state.d.ts
|
|
324
|
-
/**
|
|
325
|
-
* A function that sets the value of a state.
|
|
326
|
-
* @param oldValue - The current value of the state.
|
|
327
|
-
* @returns
|
|
328
|
-
* The new value of the state.
|
|
329
|
-
*/
|
|
330
|
-
type Setter<T, New extends T> = (oldValue: T) => New;
|
|
331
|
-
/**
|
|
332
|
-
* Set the value of a state into the implicit store.
|
|
333
|
-
* @param token - An atom or writable selector token.
|
|
334
|
-
* @param value - The new value of the state.
|
|
335
|
-
* @overload Default
|
|
336
|
-
* @default
|
|
337
|
-
*/
|
|
338
|
-
declare function setState<T, New extends T>(token: WritableToken<T, any, any>, value: New | Setter<T, New>): void;
|
|
339
|
-
/**
|
|
340
|
-
* Set the value of a state into the implicit store.
|
|
341
|
-
* @param token - An atom family or writable selector family token.
|
|
342
|
-
* @param key - The unique key of the state to set.
|
|
343
|
-
* @param value - The new value of the state.
|
|
344
|
-
* @overload Streamlined
|
|
345
|
-
*/
|
|
346
|
-
declare function setState<T, K extends Canonical, New extends T, Key extends K>(token: WritableFamilyToken<T, K, any>, key: Key, value: New | Setter<T, New>): void;
|
|
347
|
-
//#endregion
|
|
348
323
|
//#region src/main/atom.d.ts
|
|
349
324
|
type RegularAtomOptions<T, E = never> = {
|
|
350
325
|
/** The unique identifier of the atom */
|
|
@@ -397,7 +372,7 @@ type Effectors<T> = {
|
|
|
397
372
|
* Set the value of the atom
|
|
398
373
|
* @param next - The new value of the atom, or a setter function
|
|
399
374
|
*/
|
|
400
|
-
setSelf: <New extends T>(next: New |
|
|
375
|
+
setSelf: <New extends T>(next: New | ((old: T) => New)) => void;
|
|
401
376
|
/** Subscribe to changes to the atom */
|
|
402
377
|
onSet: (callback: (options: StateUpdate<T>) => void) => void;
|
|
403
378
|
};
|
|
@@ -486,7 +461,7 @@ declare function findState<T extends Transceiver<any, any, any>, K extends Canon
|
|
|
486
461
|
* The current value of the state
|
|
487
462
|
* @overload Regular Atom
|
|
488
463
|
*/
|
|
489
|
-
declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken$1<T,
|
|
464
|
+
declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken$1<T, Key>;
|
|
490
465
|
/**
|
|
491
466
|
* Finds a {@link WritableSelectorToken} in the store, without accessing its value.
|
|
492
467
|
*
|
|
@@ -500,7 +475,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Regular
|
|
|
500
475
|
* The current value of the state
|
|
501
476
|
* @overload Writable Selector
|
|
502
477
|
*/
|
|
503
|
-
declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken$1<T, K>, key: Key): WritableSelectorToken$1<T,
|
|
478
|
+
declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken$1<T, K>, key: Key): WritableSelectorToken$1<T, Key>;
|
|
504
479
|
/**
|
|
505
480
|
* Finds a {@link ReadonlySelectorToken} in the store, without accessing its value.
|
|
506
481
|
*
|
|
@@ -514,7 +489,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
|
|
|
514
489
|
* The current value of the state
|
|
515
490
|
* @overload Readonly Selector
|
|
516
491
|
*/
|
|
517
|
-
declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken$1<T, K>, key: Key): ReadonlySelectorToken$1<T,
|
|
492
|
+
declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken$1<T, K>, key: Key): ReadonlySelectorToken$1<T, Key>;
|
|
518
493
|
/**
|
|
519
494
|
* Finds a {@link WritableToken} in the store, without accessing its value.
|
|
520
495
|
*
|
|
@@ -528,7 +503,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Readonl
|
|
|
528
503
|
* The current value of the state
|
|
529
504
|
* @overload Writable State
|
|
530
505
|
*/
|
|
531
|
-
declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken$1<T, K>, key: Key): WritableToken$1<T,
|
|
506
|
+
declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken$1<T, K>, key: Key): WritableToken$1<T, Key>;
|
|
532
507
|
/**
|
|
533
508
|
* Finds a {@link MutableAtomToken} in the store, without accessing its value.
|
|
534
509
|
*
|
|
@@ -543,7 +518,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
|
|
|
543
518
|
* @overload Unknown
|
|
544
519
|
* @default
|
|
545
520
|
*/
|
|
546
|
-
declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken$1<T, K>, key: Key): ReadableToken$1<T,
|
|
521
|
+
declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken$1<T, K>, key: Key): ReadableToken$1<T, Key>;
|
|
547
522
|
//#endregion
|
|
548
523
|
//#region src/main/get-state.d.ts
|
|
549
524
|
/**
|
|
@@ -561,7 +536,7 @@ declare function getState<T, E = never>(token: ReadableToken<T, any, E>): ViewOf
|
|
|
561
536
|
* @return The current value of the state
|
|
562
537
|
* @overload Streamlined
|
|
563
538
|
*/
|
|
564
|
-
declare function getState<T, K extends Canonical,
|
|
539
|
+
declare function getState<T, K extends Canonical, E = never>(token: ReadableFamilyToken<T, K, E>, key: NoInfer<K>): ViewOf$1<E | T>;
|
|
565
540
|
//#endregion
|
|
566
541
|
//#region src/main/join.d.ts
|
|
567
542
|
type JoinOptions<ASide extends string, AType extends string, BSide extends string, BType extends string, Cardinality extends `1:1` | `1:n` | `n:n`, Content extends Json.Object | null> = Flat<JunctionSchemaBase<ASide, BSide> & {
|
|
@@ -837,6 +812,31 @@ declare function resetState(token: WritableToken<any, any, any>): void;
|
|
|
837
812
|
*/
|
|
838
813
|
declare function resetState<K extends Canonical>(token: WritableFamilyToken<any, K, any>, key: K): void;
|
|
839
814
|
//#endregion
|
|
815
|
+
//#region src/main/set-state.d.ts
|
|
816
|
+
/**
|
|
817
|
+
* A function that sets the value of a state.
|
|
818
|
+
* @param oldValue - The current value of the state.
|
|
819
|
+
* @returns
|
|
820
|
+
* The new value of the state.
|
|
821
|
+
*/
|
|
822
|
+
type Setter<T> = (oldValue: T) => T;
|
|
823
|
+
/**
|
|
824
|
+
* Set the value of a state into the implicit store.
|
|
825
|
+
* @param token - An atom or writable selector token.
|
|
826
|
+
* @param value - The new value of the state.
|
|
827
|
+
* @overload Default
|
|
828
|
+
* @default
|
|
829
|
+
*/
|
|
830
|
+
declare function setState<T, TT extends T>(token: WritableToken<T, any, any>, value: Setter<TT> | TT): void;
|
|
831
|
+
/**
|
|
832
|
+
* Set the value of a state into the implicit store.
|
|
833
|
+
* @param token - An atom family or writable selector family token.
|
|
834
|
+
* @param key - The unique key of the state to set.
|
|
835
|
+
* @param value - The new value of the state.
|
|
836
|
+
* @overload Streamlined
|
|
837
|
+
*/
|
|
838
|
+
declare function setState<T, TT extends T, K extends Canonical>(token: WritableFamilyToken<T, K, any>, key: NoInfer<K>, value: Setter<TT> | TT): void;
|
|
839
|
+
//#endregion
|
|
840
840
|
//#region src/main/transaction.d.ts
|
|
841
841
|
type ReaderToolkit = Pick<ActorToolkit, `find` | `get` | `json`>;
|
|
842
842
|
type WriterToolkit = Pick<ActorToolkit, `find` | `get` | `json` | `set`>;
|