atom.io 0.33.20 → 0.33.21
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/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +4 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/react/index.js +22 -11
- package/dist/react/index.js.map +1 -1
- package/package.json +2 -2
- package/src/internal/caching.ts +1 -0
- package/src/react/use-loadable.ts +18 -13
package/dist/react/index.js
CHANGED
|
@@ -16,7 +16,7 @@ function useJSON(token, key) {
|
|
|
16
16
|
//#endregion
|
|
17
17
|
//#region src/react/use-loadable.ts
|
|
18
18
|
function useLoadable(...params) {
|
|
19
|
-
let
|
|
19
|
+
let state;
|
|
20
20
|
let fallback;
|
|
21
21
|
const [token] = params;
|
|
22
22
|
let key;
|
|
@@ -27,7 +27,7 @@ function useLoadable(...params) {
|
|
|
27
27
|
case `readonly_pure_selector`:
|
|
28
28
|
case `writable_held_selector`:
|
|
29
29
|
case `writable_pure_selector`:
|
|
30
|
-
|
|
30
|
+
state = useO$1(token);
|
|
31
31
|
fallback = params[1];
|
|
32
32
|
break;
|
|
33
33
|
case `atom_family`:
|
|
@@ -37,23 +37,34 @@ function useLoadable(...params) {
|
|
|
37
37
|
case `writable_held_selector_family`:
|
|
38
38
|
case `writable_pure_selector_family`:
|
|
39
39
|
key = params[1];
|
|
40
|
-
|
|
40
|
+
state = useO$1(token, key);
|
|
41
41
|
fallback = params[2];
|
|
42
42
|
}
|
|
43
|
-
const
|
|
43
|
+
const wrapperRef = React.useRef({
|
|
44
|
+
loading: false,
|
|
45
|
+
value: null
|
|
46
|
+
});
|
|
47
|
+
const lastLoadedRef = React.useRef(fallback ?? (state instanceof Promise ? `LOADING` : state));
|
|
44
48
|
const { current: lastLoaded } = lastLoadedRef;
|
|
45
|
-
|
|
49
|
+
let { current: wrapper } = wrapperRef;
|
|
50
|
+
if (state instanceof Promise) {
|
|
46
51
|
if (lastLoaded === `LOADING`) return `LOADING`;
|
|
47
|
-
|
|
52
|
+
wrapper = wrapperRef.current = {
|
|
48
53
|
loading: true,
|
|
49
54
|
value: lastLoaded
|
|
50
55
|
};
|
|
56
|
+
} else {
|
|
57
|
+
lastLoadedRef.current = state;
|
|
58
|
+
if (wrapper.loading === true) wrapper = wrapperRef.current = {
|
|
59
|
+
loading: false,
|
|
60
|
+
value: state
|
|
61
|
+
};
|
|
62
|
+
else {
|
|
63
|
+
wrapper.loading = false;
|
|
64
|
+
wrapper.value = state;
|
|
65
|
+
}
|
|
51
66
|
}
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
loading: false,
|
|
55
|
-
value: loadable
|
|
56
|
-
};
|
|
67
|
+
return wrapper;
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
//#endregion
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["token:\n\t\t| MutableAtomFamilyToken<any, Serializable, Key>\n\t\t| MutableAtomToken<any, Serializable>","key?: Key","React","stateToken: ReadableToken<any>","
|
|
1
|
+
{"version":3,"file":"index.js","names":["token:\n\t\t| MutableAtomFamilyToken<any, Serializable, Key>\n\t\t| MutableAtomToken<any, Serializable>","key?: Key","React","stateToken: ReadableToken<any>","state: unknown","fallback: unknown","key: Canonical","useO","token: TimelineToken<any>","React"],"sources":["../../src/react/use-json.ts","../../src/react/use-loadable.ts","../../src/react/use-tl.ts"],"sourcesContent":["import type {\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableToken,\n} from \"atom.io\"\nimport { findInStore, getJsonToken } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport * as React from \"react\"\n\nimport { StoreContext } from \"./store-context\"\nimport { useO } from \"./use-o\"\n\nexport function useJSON<Serializable extends Json.Serializable>(\n\ttoken: MutableAtomToken<any, Serializable>,\n): Serializable\n\nexport function useJSON<\n\tSerializable extends Json.Serializable,\n\tKey extends Canonical,\n>(token: MutableAtomFamilyToken<any, Serializable, Key>, key: Key): Serializable\n\nexport function useJSON<\n\tSerializable extends Json.Serializable,\n\tKey extends Canonical,\n>(\n\ttoken:\n\t\t| MutableAtomFamilyToken<any, Serializable, Key>\n\t\t| MutableAtomToken<any, Serializable>,\n\tkey?: Key,\n): Serializable {\n\tconst store = React.useContext(StoreContext)\n\tconst stateToken: ReadableToken<any> =\n\t\ttoken.type === `mutable_atom_family`\n\t\t\t? findInStore(store, token, key as Key)\n\t\t\t: token\n\tconst jsonToken = getJsonToken(store, stateToken)\n\treturn useO(jsonToken)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: params are used in an invariant way */\nimport type { Loadable, ReadableFamilyToken, ReadableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { useO } from \"atom.io/react\"\nimport React from \"react\"\n\nexport function useLoadable<T>(\n\ttoken: ReadableToken<Loadable<T>>,\n): `LOADING` | { loading: boolean; value: T }\n\nexport function useLoadable<T, K extends Canonical>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K>,\n\tkey: K,\n): `LOADING` | { loading: boolean; value: T }\n\nexport function useLoadable<T, F extends T>(\n\ttoken: ReadableToken<Loadable<T>>,\n\tfallback: F,\n): { loading: boolean; value: T }\n\nexport function useLoadable<T, K extends Canonical, F extends T>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K>,\n\tkey: K,\n\tfallback: F,\n): { loading: boolean; value: T }\n\nexport function useLoadable(\n\t...params:\n\t\t| readonly [ReadableFamilyToken<any, Canonical>, Canonical, unknown]\n\t\t| readonly [ReadableFamilyToken<any, Canonical>, Canonical]\n\t\t| readonly [ReadableToken<any>, unknown]\n\t\t| readonly [ReadableToken<any>]\n): `LOADING` | { loading: boolean; value: unknown } {\n\tlet state: unknown\n\tlet fallback: unknown\n\n\tconst [token] = params\n\tlet key: Canonical\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\tcase `readonly_held_selector`:\n\t\tcase `readonly_pure_selector`:\n\t\tcase `writable_held_selector`:\n\t\tcase `writable_pure_selector`:\n\t\t\tstate = useO(token)\n\t\t\tfallback = params[1]\n\t\t\tbreak\n\t\tcase `atom_family`:\n\t\tcase `mutable_atom_family`:\n\t\tcase `readonly_held_selector_family`:\n\t\tcase `readonly_pure_selector_family`:\n\t\tcase `writable_held_selector_family`:\n\t\tcase `writable_pure_selector_family`:\n\t\t\tkey = params[1] as Canonical\n\t\t\tstate = useO(token, key)\n\t\t\tfallback = params[2]\n\t}\n\n\tconst wrapperRef = React.useRef({ loading: false, value: null as unknown })\n\tconst lastLoadedRef = React.useRef(\n\t\tfallback ?? (state instanceof Promise ? `LOADING` : state),\n\t)\n\n\tconst { current: lastLoaded } = lastLoadedRef\n\tlet { current: wrapper } = wrapperRef\n\n\tif (state instanceof Promise) {\n\t\tif (lastLoaded === `LOADING`) {\n\t\t\treturn `LOADING`\n\t\t}\n\t\twrapper = wrapperRef.current = { loading: true, value: lastLoaded }\n\t} else {\n\t\tlastLoadedRef.current = state\n\t\tif (wrapper.loading === true) {\n\t\t\twrapper = wrapperRef.current = { loading: false, value: state }\n\t\t} else {\n\t\t\twrapper.loading = false\n\t\t\twrapper.value = state\n\t\t}\n\t}\n\n\treturn wrapper\n}\n","import type { TimelineToken } from \"atom.io\"\nimport { redo, undo } from \"atom.io\"\nimport { subscribeToTimeline, withdraw } from \"atom.io/internal\"\nimport * as React from \"react\"\n\nimport { StoreContext } from \"./store-context\"\n\nexport type TimelineMeta = {\n\tat: number\n\tlength: number\n\tundo: () => void\n\tredo: () => void\n}\n\nexport function useTL(token: TimelineToken<any>): TimelineMeta {\n\tconst store = React.useContext(StoreContext)\n\tconst id = React.useId()\n\tconst timeline = withdraw(store, token)\n\tconst tokenRef = React.useRef(token)\n\tconst rebuildMeta = () => {\n\t\treturn {\n\t\t\tat: timeline.at,\n\t\t\tlength: timeline.history.length,\n\t\t\tundo: () => {\n\t\t\t\tundo(token)\n\t\t\t},\n\t\t\tredo: () => {\n\t\t\t\tredo(token)\n\t\t\t},\n\t\t}\n\t}\n\tconst meta = React.useRef<TimelineMeta>(rebuildMeta())\n\tconst retrieve = () => {\n\t\tif (\n\t\t\tmeta.current.at !== timeline?.at ||\n\t\t\tmeta.current.length !== timeline?.history.length ||\n\t\t\ttokenRef.current !== token\n\t\t) {\n\t\t\ttokenRef.current = token\n\t\t\tmeta.current = rebuildMeta()\n\t\t}\n\t\treturn meta.current\n\t}\n\treturn React.useSyncExternalStore<TimelineMeta>(\n\t\t(dispatch) => subscribeToTimeline(store, token, `use-tl:${id}`, dispatch),\n\t\tretrieve,\n\t\tretrieve,\n\t)\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,QAIfA,OAGAC,KACe;CACf,MAAM,QAAQC,QAAM,WAAW,aAAa;CAC5C,MAAMC,aACL,MAAM,SAAS,CAAC,mBAAmB,CAAC,GACjC,YAAY,OAAO,OAAO,IAAW,GACrC;CACJ,MAAM,YAAY,aAAa,OAAO,WAAW;AACjD,QAAO,KAAK,UAAU;AACtB;;;;ACXD,SAAgB,YACf,GAAG,QAKgD;CACnD,IAAIC;CACJ,IAAIC;CAEJ,MAAM,CAAC,MAAM,GAAG;CAChB,IAAIC;AACJ,SAAQ,MAAM,MAAd;EACC,KAAK,CAAC,IAAI,CAAC;EACX,KAAK,CAAC,YAAY,CAAC;EACnB,KAAK,CAAC,sBAAsB,CAAC;EAC7B,KAAK,CAAC,sBAAsB,CAAC;EAC7B,KAAK,CAAC,sBAAsB,CAAC;EAC7B,KAAK,CAAC,sBAAsB,CAAC;GAC5B,QAAQC,OAAK,MAAM;GACnB,WAAW,OAAO;AAClB;EACD,KAAK,CAAC,WAAW,CAAC;EAClB,KAAK,CAAC,mBAAmB,CAAC;EAC1B,KAAK,CAAC,6BAA6B,CAAC;EACpC,KAAK,CAAC,6BAA6B,CAAC;EACpC,KAAK,CAAC,6BAA6B,CAAC;EACpC,KAAK,CAAC,6BAA6B,CAAC;GACnC,MAAM,OAAO;GACb,QAAQA,OAAK,OAAO,IAAI;GACxB,WAAW,OAAO;CACnB;CAED,MAAM,aAAa,MAAM,OAAO;EAAE,SAAS;EAAO,OAAO;CAAiB,EAAC;CAC3E,MAAM,gBAAgB,MAAM,OAC3B,aAAa,iBAAiB,UAAU,CAAC,OAAO,CAAC,GAAG,OACpD;CAED,MAAM,EAAE,SAAS,YAAY,GAAG;CAChC,IAAI,EAAE,SAAS,SAAS,GAAG;AAE3B,KAAI,iBAAiB,SAAS;AAC7B,MAAI,eAAe,CAAC,OAAO,CAAC,CAC3B,QAAO,CAAC,OAAO,CAAC;EAEjB,UAAU,WAAW,UAAU;GAAE,SAAS;GAAM,OAAO;EAAY;CACnE,OAAM;EACN,cAAc,UAAU;AACxB,MAAI,QAAQ,YAAY,MACvB,UAAU,WAAW,UAAU;GAAE,SAAS;GAAO,OAAO;EAAO;OACzD;GACN,QAAQ,UAAU;GAClB,QAAQ,QAAQ;EAChB;CACD;AAED,QAAO;AACP;;;;ACrED,SAAgB,MAAMC,OAAyC;CAC9D,MAAM,QAAQC,QAAM,WAAW,aAAa;CAC5C,MAAM,KAAKA,QAAM,OAAO;CACxB,MAAM,WAAW,SAAS,OAAO,MAAM;CACvC,MAAM,WAAWA,QAAM,OAAO,MAAM;CACpC,MAAM,cAAc,MAAM;AACzB,SAAO;GACN,IAAI,SAAS;GACb,QAAQ,SAAS,QAAQ;GACzB,MAAM,MAAM;IACX,KAAK,MAAM;GACX;GACD,MAAM,MAAM;IACX,KAAK,MAAM;GACX;EACD;CACD;CACD,MAAM,OAAOA,QAAM,OAAqB,aAAa,CAAC;CACtD,MAAM,WAAW,MAAM;AACtB,MACC,KAAK,QAAQ,OAAO,UAAU,MAC9B,KAAK,QAAQ,WAAW,UAAU,QAAQ,UAC1C,SAAS,YAAY,OACpB;GACD,SAAS,UAAU;GACnB,KAAK,UAAU,aAAa;EAC5B;AACD,SAAO,KAAK;CACZ;AACD,QAAOA,QAAM,qBACZ,CAAC,aAAa,oBAAoB,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EACzE,UACA,SACA;AACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atom.io",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.21",
|
|
4
4
|
"description": "Composable and testable reactive data library.",
|
|
5
5
|
"homepage": "https://atom.io.fyi",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"eslint": "9.32.0",
|
|
84
84
|
"happy-dom": "18.0.1",
|
|
85
85
|
"http-proxy": "1.18.1",
|
|
86
|
-
"motion": "12.23.
|
|
86
|
+
"motion": "12.23.12",
|
|
87
87
|
"npmlog": "7.0.1",
|
|
88
88
|
"nyc": "17.1.0",
|
|
89
89
|
"postgres": "3.4.7",
|
package/src/internal/caching.ts
CHANGED
|
@@ -31,7 +31,7 @@ export function useLoadable(
|
|
|
31
31
|
| readonly [ReadableToken<any>, unknown]
|
|
32
32
|
| readonly [ReadableToken<any>]
|
|
33
33
|
): `LOADING` | { loading: boolean; value: unknown } {
|
|
34
|
-
let
|
|
34
|
+
let state: unknown
|
|
35
35
|
let fallback: unknown
|
|
36
36
|
|
|
37
37
|
const [token] = params
|
|
@@ -43,7 +43,7 @@ export function useLoadable(
|
|
|
43
43
|
case `readonly_pure_selector`:
|
|
44
44
|
case `writable_held_selector`:
|
|
45
45
|
case `writable_pure_selector`:
|
|
46
|
-
|
|
46
|
+
state = useO(token)
|
|
47
47
|
fallback = params[1]
|
|
48
48
|
break
|
|
49
49
|
case `atom_family`:
|
|
@@ -53,27 +53,32 @@ export function useLoadable(
|
|
|
53
53
|
case `writable_held_selector_family`:
|
|
54
54
|
case `writable_pure_selector_family`:
|
|
55
55
|
key = params[1] as Canonical
|
|
56
|
-
|
|
56
|
+
state = useO(token, key)
|
|
57
57
|
fallback = params[2]
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
const wrapperRef = React.useRef({ loading: false, value: null as unknown })
|
|
60
61
|
const lastLoadedRef = React.useRef(
|
|
61
|
-
fallback ?? (
|
|
62
|
+
fallback ?? (state instanceof Promise ? `LOADING` : state),
|
|
62
63
|
)
|
|
64
|
+
|
|
63
65
|
const { current: lastLoaded } = lastLoadedRef
|
|
64
|
-
|
|
66
|
+
let { current: wrapper } = wrapperRef
|
|
67
|
+
|
|
68
|
+
if (state instanceof Promise) {
|
|
65
69
|
if (lastLoaded === `LOADING`) {
|
|
66
70
|
return `LOADING`
|
|
67
71
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
wrapper = wrapperRef.current = { loading: true, value: lastLoaded }
|
|
73
|
+
} else {
|
|
74
|
+
lastLoadedRef.current = state
|
|
75
|
+
if (wrapper.loading === true) {
|
|
76
|
+
wrapper = wrapperRef.current = { loading: false, value: state }
|
|
77
|
+
} else {
|
|
78
|
+
wrapper.loading = false
|
|
79
|
+
wrapper.value = state
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
loading: false,
|
|
77
|
-
value: loadable,
|
|
78
|
-
}
|
|
83
|
+
return wrapper
|
|
79
84
|
}
|