atom.io 0.34.2 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/eslint-plugin/index.d.ts +2 -18
  2. package/dist/eslint-plugin/index.d.ts.map +1 -1
  3. package/dist/eslint-plugin/index.js +4 -141
  4. package/dist/eslint-plugin/index.js.map +1 -1
  5. package/dist/internal/index.d.ts +74 -77
  6. package/dist/internal/index.d.ts.map +1 -1
  7. package/dist/internal/index.js +197 -202
  8. package/dist/internal/index.js.map +1 -1
  9. package/dist/json/index.d.ts +9 -17
  10. package/dist/json/index.d.ts.map +1 -1
  11. package/dist/json/index.js +3 -33
  12. package/dist/json/index.js.map +1 -1
  13. package/dist/main/index.d.ts +689 -795
  14. package/dist/main/index.d.ts.map +1 -1
  15. package/dist/main/index.js +55 -23
  16. package/dist/main/index.js.map +1 -1
  17. package/dist/react/index.d.ts +4 -4
  18. package/dist/react/index.d.ts.map +1 -1
  19. package/dist/react/index.js.map +1 -1
  20. package/dist/react-devtools/index.d.ts.map +1 -1
  21. package/dist/react-devtools/index.js +10 -10
  22. package/dist/react-devtools/index.js.map +1 -1
  23. package/dist/realtime/index.d.ts +4 -4
  24. package/dist/realtime/index.d.ts.map +1 -1
  25. package/dist/realtime/index.js +5 -11
  26. package/dist/realtime/index.js.map +1 -1
  27. package/dist/realtime-client/index.d.ts +2 -2
  28. package/dist/realtime-client/index.d.ts.map +1 -1
  29. package/dist/realtime-client/index.js +10 -10
  30. package/dist/realtime-client/index.js.map +1 -1
  31. package/dist/realtime-react/index.d.ts +2 -2
  32. package/dist/realtime-react/index.d.ts.map +1 -1
  33. package/dist/realtime-react/index.js.map +1 -1
  34. package/dist/realtime-server/index.d.ts +18 -18
  35. package/dist/realtime-server/index.d.ts.map +1 -1
  36. package/dist/realtime-server/index.js +13 -19
  37. package/dist/realtime-server/index.js.map +1 -1
  38. package/dist/transceivers/set-rtx/index.d.ts +1 -1
  39. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  40. package/dist/transceivers/set-rtx/index.js.map +1 -1
  41. package/package.json +7 -7
  42. package/src/eslint-plugin/index.ts +0 -1
  43. package/src/eslint-plugin/rules/explicit-state-types.ts +8 -1
  44. package/src/eslint-plugin/rules/index.ts +0 -1
  45. package/src/internal/atom/create-regular-atom.ts +1 -0
  46. package/src/internal/atom/dispose-atom.ts +1 -0
  47. package/src/internal/atom/index.ts +0 -1
  48. package/src/internal/families/find-in-store.ts +4 -5
  49. package/src/internal/families/get-family-of-token.ts +4 -5
  50. package/src/internal/families/index.ts +0 -1
  51. package/src/internal/families/init-family-member.ts +3 -4
  52. package/src/internal/families/seek-in-store.ts +4 -5
  53. package/src/internal/get-state/read-or-compute-value.ts +14 -2
  54. package/src/internal/index.ts +116 -96
  55. package/src/internal/ingest-updates/ingest-creation-disposal.ts +18 -15
  56. package/src/internal/ingest-updates/ingest-selector-update.ts +9 -5
  57. package/src/internal/join/get-internal-relations-from-store.ts +2 -2
  58. package/src/internal/join/join-internal.ts +6 -18
  59. package/src/internal/molecule.ts +1 -0
  60. package/src/internal/mutable/create-mutable-atom-family.ts +37 -21
  61. package/src/internal/mutable/create-mutable-atom.ts +17 -13
  62. package/src/internal/mutable/get-json-family.ts +7 -6
  63. package/src/internal/mutable/get-json-token.ts +6 -13
  64. package/src/internal/mutable/get-update-family.ts +7 -8
  65. package/src/internal/mutable/get-update-token.ts +5 -9
  66. package/src/internal/mutable/tracker-family.ts +10 -13
  67. package/src/internal/mutable/tracker.ts +66 -90
  68. package/src/internal/mutable/transceiver.ts +35 -8
  69. package/src/internal/selector/dispose-selector.ts +9 -9
  70. package/src/internal/selector/register-selector.ts +2 -2
  71. package/src/internal/set-state/copy-mutable-if-needed.ts +8 -6
  72. package/src/internal/set-state/reset-atom-or-selector.ts +11 -4
  73. package/src/internal/set-state/set-atom.ts +1 -1
  74. package/src/internal/store/counterfeit.ts +3 -4
  75. package/src/internal/store/deposit.ts +7 -9
  76. package/src/internal/store/store.ts +2 -2
  77. package/src/internal/store/withdraw.ts +7 -11
  78. package/src/json/entries.ts +7 -7
  79. package/src/json/index.ts +0 -2
  80. package/src/main/atom.ts +68 -127
  81. package/src/main/dispose-state.ts +4 -6
  82. package/src/main/find-state.ts +6 -13
  83. package/src/main/get-state.ts +0 -2
  84. package/src/main/index.ts +1 -176
  85. package/src/main/join.ts +2 -9
  86. package/src/main/logger.ts +7 -7
  87. package/src/main/reset-state.ts +0 -2
  88. package/src/main/selector.ts +5 -72
  89. package/src/main/set-state.ts +1 -4
  90. package/src/main/silo.ts +14 -5
  91. package/src/main/subscribe.ts +0 -7
  92. package/src/main/timeline.ts +1 -18
  93. package/src/main/tokens.ts +245 -0
  94. package/src/main/transaction.ts +28 -60
  95. package/src/main/validators.ts +2 -2
  96. package/src/react/use-json.ts +15 -25
  97. package/src/react-devtools/store.ts +61 -45
  98. package/src/realtime/shared-room-store.ts +12 -25
  99. package/src/realtime-client/pull-mutable-atom-family-member.ts +5 -9
  100. package/src/realtime-client/pull-mutable-atom.ts +5 -9
  101. package/src/realtime-react/use-pull-mutable-atom.ts +3 -5
  102. package/src/realtime-react/use-pull-mutable-family-member.ts +3 -4
  103. package/src/realtime-server/realtime-mutable-family-provider.ts +3 -4
  104. package/src/realtime-server/realtime-mutable-provider.ts +2 -3
  105. package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +6 -5
  106. package/src/realtime-server/realtime-server-stores/server-user-store.ts +9 -18
  107. package/src/transceivers/set-rtx/set-rtx.ts +1 -1
  108. package/src/eslint-plugin/rules/synchronous-selector-dependencies.ts +0 -140
  109. package/src/eslint-plugin/walk.ts +0 -81
  110. package/src/internal/atom/create-standalone-atom.ts +0 -39
  111. package/src/internal/families/create-atom-family.ts +0 -38
  112. package/src/json/select-json-family.ts +0 -55
  113. package/src/json/select-json.ts +0 -19
@@ -1,29 +1,21 @@
1
- import { Count, Flat, Store, Transceiver } from "atom.io/internal";
2
- import * as AtomIO from "atom.io";
1
+ import { Count, Flat } from "atom.io/internal";
3
2
 
4
3
  //#region src/json/entries.d.ts
5
- /** @public Tuples of `[key, value]` pairs, as returned from `Object.entries` */
4
+ /** Tuples of `[key, value]` pairs, as returned from `Object.entries` */
6
5
  type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][];
7
- /** @public The collective or "union" type of the keys in a set of entries */
6
+ /** The collective or "union" type of the keys in a set of entries */
8
7
  type KeyOfEntries<E extends Entries> = E extends [infer K, any][] ? K : never;
9
- /** @public The type of the value of entry `K` in a set of entries `E` */
8
+ /** The type of the value of entry `K` in a set of entries `E` */
10
9
  type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = { [P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never }[Count<E[`length`]>];
11
- /** @public The type of a set of entries `E` in object form */
10
+ /** The type of a set of entries `E` in object form */
12
11
  type FromEntries<E extends Entries> = Flat<{ [K in KeyOfEntries<E>]: ValueOfEntry<E, K> }>;
13
- /** @public Typed form of `Object.fromEntries` */
12
+ /** Typed form of `Object.fromEntries` */
14
13
  declare function fromEntries<E extends Entries>(entries: E): FromEntries<E>;
15
- /** @public The type of an object T in {@link Entries} form */
14
+ /** The type of an object T in {@link Entries} form */
16
15
  type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>;
17
- /** @public Typed form of `Object.entries` */
16
+ /** Typed form of `Object.entries` */
18
17
  declare function toEntries<T extends object>(obj: T): ToEntries<T>;
19
18
  //#endregion
20
- //#region src/json/select-json.d.ts
21
- declare const selectJson: <T, J extends Json.Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.WritablePureSelectorToken<J>;
22
- //#endregion
23
- //#region src/json/select-json-family.d.ts
24
- declare function selectJsonFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(store: Store, atomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, transform: JsonInterface<T, J>): AtomIO.WritablePureSelectorFamilyToken<J, K>;
25
- declare function selectJsonFamily<T, J extends Json.Serializable, K extends Canonical>(store: Store, atomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>, transform: JsonInterface<T, J>): AtomIO.WritablePureSelectorFamilyToken<J, K>;
26
- //#endregion
27
19
  //#region src/json/index.d.ts
28
20
  type primitive = boolean | number | string | null;
29
21
  declare namespace Json {
@@ -71,5 +63,5 @@ interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {
71
63
  }
72
64
  declare const JSON_DEFAULTS: JsonTypes;
73
65
  //#endregion
74
- export { Canonical, Entries, FromEntries, JSON_DEFAULTS, JSON_TYPE_NAMES, Json, JsonIO, JsonInterface, JsonTypeName, JsonTypes, KeyOfEntries, ToEntries, ValueOfEntry, fromEntries, isJson, parseJson, primitive, selectJson, selectJsonFamily, stringified, stringifyJson, toEntries };
66
+ export { Canonical, Entries, FromEntries, JSON_DEFAULTS, JSON_TYPE_NAMES, Json, JsonIO, JsonInterface, JsonTypeName, JsonTypes, KeyOfEntries, ToEntries, ValueOfEntry, fromEntries, isJson, parseJson, primitive, stringified, stringifyJson, toEntries };
75
67
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["entries: E","obj: T","atom: AtomIO.AtomToken<T>","transform: JsonInterface<T, J>","store: Store","store: Store","atomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>","transform: JsonInterface<T, J>","atomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>","str: S | string","json: J","t: T","input: unknown","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/select-json.ts","../../src/json/select-json-family.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["entries: E","obj: T","str: S | string","json: J","t: T","input: unknown","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,43 +1,13 @@
1
- import { IMPLICIT, createStandaloneSelector, createWritablePureSelectorFamily } from "atom.io/internal";
2
-
3
1
  //#region src/json/entries.ts
4
- /** @public Typed form of `Object.fromEntries` */
2
+ /** Typed form of `Object.fromEntries` */
5
3
  function fromEntries(entries) {
6
4
  return Object.fromEntries(entries);
7
5
  }
8
- /** @public Typed form of `Object.entries` */
6
+ /** Typed form of `Object.entries` */
9
7
  function toEntries(obj) {
10
8
  return Object.entries(obj);
11
9
  }
12
10
 
13
- //#endregion
14
- //#region src/json/select-json.ts
15
- const selectJson = (atom, transform, store = IMPLICIT.STORE) => {
16
- return createStandaloneSelector(store, {
17
- key: `${atom.key}:JSON`,
18
- get: ({ get }) => transform.toJson(get(atom)),
19
- set: ({ set }, newValue) => {
20
- set(atom, transform.fromJson(newValue));
21
- }
22
- });
23
- };
24
-
25
- //#endregion
26
- //#region src/json/select-json-family.ts
27
- function selectJsonFamily(store, atomFamilyToken, transform) {
28
- const jsonFamily = createWritablePureSelectorFamily(store, {
29
- key: `${atomFamilyToken.key}:JSON`,
30
- get: (key) => ({ get }) => {
31
- const baseState = get(atomFamilyToken, key);
32
- return transform.toJson(baseState);
33
- },
34
- set: (key) => ({ set }, newValue) => {
35
- set(atomFamilyToken, key, transform.fromJson(newValue));
36
- }
37
- }, [`mutable`, `json`]);
38
- return jsonFamily;
39
- }
40
-
41
11
  //#endregion
42
12
  //#region src/json/index.ts
43
13
  /** Type-safe wrapper for {@link JSON.parse} */
@@ -75,5 +45,5 @@ const JSON_DEFAULTS = {
75
45
  };
76
46
 
77
47
  //#endregion
78
- export { JSON_DEFAULTS, JSON_TYPE_NAMES, fromEntries, isJson, parseJson, selectJson, selectJsonFamily, stringifyJson, toEntries };
48
+ export { JSON_DEFAULTS, JSON_TYPE_NAMES, fromEntries, isJson, parseJson, stringifyJson, toEntries };
79
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["entries: E","obj: T","atom: AtomIO.AtomToken<T>","transform: JsonInterface<T, J>","store: Store","store: Store","atomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>","transform: JsonInterface<T, J>","str: S | string","json: J","input: unknown","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/select-json.ts","../../src/json/select-json-family.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** @public Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** @public 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/** @public 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/** @public 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/** @public 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/** @public The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** @public 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 * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createStandaloneSelector, IMPLICIT } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.WritablePureSelectorToken<J> => {\n\treturn createStandaloneSelector(store, {\n\t\tkey: `${atom.key}:JSON`,\n\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\tset: ({ set }, newValue) => {\n\t\t\tset(atom, transform.fromJson(newValue))\n\t\t},\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\nimport { createWritablePureSelectorFamily } from \"atom.io/internal\"\n\nimport type { Canonical, Json, JsonInterface } from \".\"\n\nexport function selectJsonFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K> {\n\tconst jsonFamily = createWritablePureSelectorFamily<J, K>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `${atomFamilyToken.key}:JSON`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) => {\n\t\t\t\t\tconst baseState = get(atomFamilyToken, key)\n\t\t\t\t\treturn transform.toJson(baseState)\n\t\t\t\t},\n\t\t\tset:\n\t\t\t\t(key) =>\n\t\t\t\t({ set }, newValue) => {\n\t\t\t\t\tset(atomFamilyToken, key, transform.fromJson(newValue))\n\t\t\t\t},\n\t\t},\n\t\t[`mutable`, `json`],\n\t)\n\treturn jsonFamily\n}\n","export * from \"./entries\"\nexport * from \"./select-json\"\nexport * from \"./select-json-family\"\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 const parseJson = <S extends stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\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: 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+BA,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;AAClC;;AAMD,SAAgB,UAA4BC,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;AAC1B;;;;ACzBD,MAAa,aAAa,CACzBC,MACAC,WACAC,QAAe,SAAS,UACiB;AACzC,QAAO,yBAAyB,OAAO;EACtC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;EACvB,KAAK,CAAC,EAAE,KAAK,KAAK,UAAU,OAAO,IAAI,KAAK,CAAC;EAC7C,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa;GAC3B,IAAI,MAAM,UAAU,SAAS,SAAS,CAAC;EACvC;CACD,EAAC;AACF;;;;ACMD,SAAgB,iBAKfC,OACAC,iBAGAC,WAC+C;CAC/C,MAAM,aAAa,iCAClB,OACA;EACC,KAAK,GAAG,gBAAgB,IAAI,KAAK,CAAC;EAClC,KACC,CAAC,QACD,CAAC,EAAE,KAAK,KAAK;GACZ,MAAM,YAAY,IAAI,iBAAiB,IAAI;AAC3C,UAAO,UAAU,OAAO,UAAU;EAClC;EACF,KACC,CAAC,QACD,CAAC,EAAE,KAAK,EAAE,aAAa;GACtB,IAAI,iBAAiB,KAAK,UAAU,SAAS,SAAS,CAAC;EACvD;CACF,GACD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,AAAC,EACnB;AACD,QAAO;AACP;;;;;ACcD,MAAa,YAAY,CACxBC,QAC4D,KAAK,MAAM,IAAI;;AAG5E,MAAa,gBAAgB,CAC5BC,SACoB,KAAK,UAAU,KAAK;AAazC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;AACP;AACD,MAAa,SAAS,CAACC,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;AAC1C;AAED,MAAa,kBAAkB;CAC9B,CAAC,KAAK,CAAC;CACP,CAAC,OAAO,CAAC;CACT,CAAC,IAAI,CAAC;CACN,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;AACR;AAaD,MAAaC,gBAA2B;CACvC,OAAO,CAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,CAAE;CACV,QAAQ,EAAE;AACV"}
1
+ {"version":3,"file":"index.js","names":["entries: E","obj: T","str: S | string","json: J","input: unknown","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","export * 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 const parseJson = <S extends stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\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: 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+BA,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;AAClC;;AAMD,SAAgB,UAA4BC,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;AAC1B;;;;;ACmCD,MAAa,YAAY,CACxBC,QAC4D,KAAK,MAAM,IAAI;;AAG5E,MAAa,gBAAgB,CAC5BC,SACoB,KAAK,UAAU,KAAK;AAazC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;AACP;AACD,MAAa,SAAS,CAACC,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;AAC1C;AAED,MAAa,kBAAkB;CAC9B,CAAC,KAAK,CAAC;CACP,CAAC,OAAO,CAAC;CACT,CAAC,IAAI,CAAC;CACN,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;AACR;AAaD,MAAaC,gBAA2B;CACvC,OAAO,CAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,CAAE;CACV,QAAQ,EAAE;AACV"}