@backtickjs/expo-router 0.3.1 → 0.3.2
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/index.d.ts +4 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +17 -9
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Link as ExpoLink, router as expoRouter, useRouter as useExpoRouter } from "expo-router";
|
|
2
2
|
import { type ReactNode } from "react";
|
|
3
3
|
export * from "expo-router";
|
|
4
|
-
type Prefetch = (href: string,
|
|
4
|
+
type Prefetch = (href: string, options: {
|
|
5
|
+
kind: "auto" | "full";
|
|
6
|
+
urgent: boolean;
|
|
7
|
+
}) => () => void;
|
|
5
8
|
/**
|
|
6
9
|
* How links and `router.prefetch` under it prefetch, set by the app
|
|
7
10
|
* serving this module: `prefetch` is the page too.
|
package/dist/index.js
CHANGED
|
@@ -44,17 +44,17 @@ function PrefetchingLink({ prefetch, onPressIn, ...props }) {
|
|
|
44
44
|
const focused = useIsFocused();
|
|
45
45
|
const href = resolveHref(props.href);
|
|
46
46
|
const enabled = prefetch !== false;
|
|
47
|
-
const
|
|
47
|
+
const kind = prefetch === true ? "full" : "auto";
|
|
48
48
|
useEffect(() => {
|
|
49
49
|
if (enabled && focused) {
|
|
50
|
-
prefetchHref(href,
|
|
50
|
+
return prefetchHref(href, { kind, urgent: false });
|
|
51
51
|
}
|
|
52
|
-
}, [enabled, focused, prefetchHref, href,
|
|
52
|
+
}, [enabled, focused, prefetchHref, href, kind]);
|
|
53
53
|
return createElement(ExpoLink, {
|
|
54
54
|
...props,
|
|
55
55
|
onPressIn: (event) => {
|
|
56
56
|
if (enabled) {
|
|
57
|
-
prefetchHref(href,
|
|
57
|
+
prefetchHref(href, { kind, urgent: true });
|
|
58
58
|
}
|
|
59
59
|
onPressIn?.(event);
|
|
60
60
|
},
|
|
@@ -63,7 +63,9 @@ function PrefetchingLink({ prefetch, onPressIn, ...props }) {
|
|
|
63
63
|
export const Link = Object.assign(PrefetchingLink, ExpoLink);
|
|
64
64
|
// The router's `prefetch`, as a Link without `prefetch` prefetches: for the
|
|
65
65
|
// app on top, and with none (a moment at startup), nothing. Never a preload.
|
|
66
|
-
const prefetch = (href) =>
|
|
66
|
+
const prefetch = (href) => {
|
|
67
|
+
prefetchOnTop?.(resolveHref(href), { kind: "auto", urgent: false });
|
|
68
|
+
};
|
|
67
69
|
// expo-router's router, with that `prefetch`. Read through on each access:
|
|
68
70
|
// expo-router binds the router's methods once it renders.
|
|
69
71
|
export const router = new Proxy(expoRouter, {
|
|
@@ -77,7 +79,9 @@ export function useRouter() {
|
|
|
77
79
|
const prefetchHref = usePrefetch();
|
|
78
80
|
return useMemo(() => ({
|
|
79
81
|
...actions,
|
|
80
|
-
prefetch: (href) =>
|
|
82
|
+
prefetch: (href) => {
|
|
83
|
+
prefetchHref(resolveHref(href), { kind: "auto", urgent: false });
|
|
84
|
+
},
|
|
81
85
|
}), [actions, prefetchHref]);
|
|
82
86
|
}
|
|
83
87
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,IAAI,QAAQ,EAChB,MAAM,IAAI,UAAU,EACpB,YAAY,EACZ,SAAS,IAAI,aAAa,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,aAAa,EAEb,GAAG,EACH,SAAS,EACT,OAAO,GACR,MAAM,OAAO,CAAC;AAEf,cAAc,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -16,7 +16,13 @@ import {
|
|
|
16
16
|
|
|
17
17
|
export * from "expo-router";
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
// Fetches an href ahead, as Next.js's `kind` says ("full" with its page,
|
|
20
|
+
// for `prefetch`; `urgent` for a pressed link), and returns a cancel, for a
|
|
21
|
+
// link that goes away first.
|
|
22
|
+
type Prefetch = (
|
|
23
|
+
href: string,
|
|
24
|
+
options: { kind: "auto" | "full"; urgent: boolean },
|
|
25
|
+
) => () => void;
|
|
20
26
|
|
|
21
27
|
// How a Link fetches its href ahead (with its page, for `prefetch`).
|
|
22
28
|
const PrefetchContext = createContext<Prefetch | undefined>(undefined);
|
|
@@ -71,17 +77,17 @@ function PrefetchingLink({ prefetch, onPressIn, ...props }: LinkProps) {
|
|
|
71
77
|
const focused = useIsFocused();
|
|
72
78
|
const href = resolveHref(props.href);
|
|
73
79
|
const enabled = prefetch !== false;
|
|
74
|
-
const
|
|
80
|
+
const kind = prefetch === true ? "full" : "auto";
|
|
75
81
|
useEffect(() => {
|
|
76
82
|
if (enabled && focused) {
|
|
77
|
-
prefetchHref(href,
|
|
83
|
+
return prefetchHref(href, { kind, urgent: false });
|
|
78
84
|
}
|
|
79
|
-
}, [enabled, focused, prefetchHref, href,
|
|
85
|
+
}, [enabled, focused, prefetchHref, href, kind]);
|
|
80
86
|
return createElement(ExpoLink, {
|
|
81
87
|
...props,
|
|
82
88
|
onPressIn: (event) => {
|
|
83
89
|
if (enabled) {
|
|
84
|
-
prefetchHref(href,
|
|
90
|
+
prefetchHref(href, { kind, urgent: true });
|
|
85
91
|
}
|
|
86
92
|
onPressIn?.(event);
|
|
87
93
|
},
|
|
@@ -94,8 +100,9 @@ type Router = typeof expoRouter;
|
|
|
94
100
|
|
|
95
101
|
// The router's `prefetch`, as a Link without `prefetch` prefetches: for the
|
|
96
102
|
// app on top, and with none (a moment at startup), nothing. Never a preload.
|
|
97
|
-
const prefetch: Router["prefetch"] = (href) =>
|
|
98
|
-
prefetchOnTop?.(resolveHref(href), false);
|
|
103
|
+
const prefetch: Router["prefetch"] = (href) => {
|
|
104
|
+
prefetchOnTop?.(resolveHref(href), { kind: "auto", urgent: false });
|
|
105
|
+
};
|
|
99
106
|
|
|
100
107
|
// expo-router's router, with that `prefetch`. Read through on each access:
|
|
101
108
|
// expo-router binds the router's methods once it renders.
|
|
@@ -112,8 +119,9 @@ export function useRouter(): ReturnType<typeof useExpoRouter> {
|
|
|
112
119
|
return useMemo(
|
|
113
120
|
() => ({
|
|
114
121
|
...actions,
|
|
115
|
-
prefetch: (href: Parameters<Router["prefetch"]>[0]) =>
|
|
116
|
-
prefetchHref(resolveHref(href), false)
|
|
122
|
+
prefetch: (href: Parameters<Router["prefetch"]>[0]) => {
|
|
123
|
+
prefetchHref(resolveHref(href), { kind: "auto", urgent: false });
|
|
124
|
+
},
|
|
117
125
|
}),
|
|
118
126
|
[actions, prefetchHref],
|
|
119
127
|
);
|