expo-router 4.1.0-canary-20250219-4a5dade → 5.0.0-sdk-52-router-patches
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/build/ExpoRoot.d.ts.map +1 -1
- package/build/ExpoRoot.js +10 -2
- package/build/ExpoRoot.js.map +1 -1
- package/build/fork/NavigationContainer.js.map +1 -1
- package/build/fork/getPathFromState-forks.d.ts.map +1 -1
- package/build/fork/getPathFromState-forks.js +0 -1
- package/build/fork/getPathFromState-forks.js.map +1 -1
- package/build/fork/getPathFromState.d.ts.map +1 -1
- package/build/fork/getPathFromState.js +29 -7
- package/build/fork/getPathFromState.js.map +1 -1
- package/build/fork/getStateFromPath-forks.d.ts.map +1 -1
- package/build/fork/getStateFromPath-forks.js +2 -1
- package/build/fork/getStateFromPath-forks.js.map +1 -1
- package/build/fork/getStateFromPath.d.ts.map +1 -1
- package/build/fork/getStateFromPath.js +4 -2
- package/build/fork/getStateFromPath.js.map +1 -1
- package/build/fork/native-stack/createNativeStackNavigator.d.ts +1 -1
- package/build/fork/native-stack/createNativeStackNavigator.d.ts.map +1 -1
- package/build/fork/native-stack/createNativeStackNavigator.js +1 -2
- package/build/fork/native-stack/createNativeStackNavigator.js.map +1 -1
- package/build/fork/useBackButton.d.ts +1 -1
- package/build/fork/useBackButton.d.ts.map +1 -1
- package/build/fork/useBackButton.js.map +1 -1
- package/build/fork/useDocumentTitle.d.ts +1 -1
- package/build/fork/useDocumentTitle.d.ts.map +1 -1
- package/build/fork/useDocumentTitle.js.map +1 -1
- package/build/fork/useLinking.d.ts +1 -1
- package/build/fork/useLinking.d.ts.map +1 -1
- package/build/fork/useLinking.js.map +1 -1
- package/build/getDevServer/index.native.d.ts.map +1 -1
- package/build/getDevServer/index.native.js +1 -1
- package/build/getDevServer/index.native.js.map +1 -1
- package/build/getLinkingConfig.d.ts +8 -2
- package/build/getLinkingConfig.d.ts.map +1 -1
- package/build/getLinkingConfig.js +10 -2
- package/build/getLinkingConfig.js.map +1 -1
- package/build/global-state/router-store.d.ts.map +1 -1
- package/build/global-state/router-store.js.map +1 -1
- package/build/global-state/routing.d.ts +7 -0
- package/build/global-state/routing.d.ts.map +1 -1
- package/build/global-state/routing.js +7 -25
- package/build/global-state/routing.js.map +1 -1
- package/build/head/ExpoHead.d.ts +1 -1
- package/build/head/ExpoHead.d.ts.map +1 -1
- package/build/head/ExpoHead.ios.d.ts.map +1 -1
- package/build/head/ExpoHead.ios.js +18 -3
- package/build/head/ExpoHead.ios.js.map +1 -1
- package/build/head/ExpoHead.js +3 -3
- package/build/head/ExpoHead.js.map +1 -1
- package/build/layouts/DrawerClient.d.ts +18 -40
- package/build/layouts/DrawerClient.d.ts.map +1 -1
- package/build/layouts/StackClient.d.ts +37 -43
- package/build/layouts/StackClient.d.ts.map +1 -1
- package/build/layouts/StackClient.js +176 -5
- package/build/layouts/StackClient.js.map +1 -1
- package/build/layouts/TabsClient.d.ts +18 -40
- package/build/layouts/TabsClient.d.ts.map +1 -1
- package/build/layouts/withLayoutContext.d.ts +2 -2
- package/build/layouts/withLayoutContext.d.ts.map +1 -1
- package/build/layouts/withLayoutContext.js +8 -4
- package/build/layouts/withLayoutContext.js.map +1 -1
- package/build/link/Link.d.ts +1 -1
- package/build/link/Link.d.ts.map +1 -1
- package/build/link/Link.js +2 -1
- package/build/link/Link.js.map +1 -1
- package/build/link/linking.d.ts.map +1 -1
- package/build/link/linking.js +3 -0
- package/build/link/linking.js.map +1 -1
- package/build/link/useLinkHooks.d.ts +8 -0
- package/build/link/useLinkHooks.d.ts.map +1 -1
- package/build/link/useLinkHooks.js.map +1 -1
- package/build/rsc/router/client.js +1 -1
- package/build/rsc/router/client.js.map +1 -1
- package/build/rsc/router/host.d.ts +5 -5
- package/build/rsc/router/host.d.ts.map +1 -1
- package/build/rsc/router/host.js.map +1 -1
- package/build/testing-library/index.d.ts +1 -1
- package/build/testing-library/index.d.ts.map +1 -1
- package/build/testing-library/index.js.map +1 -1
- package/build/testing-library/mock-config.d.ts +7 -2
- package/build/testing-library/mock-config.d.ts.map +1 -1
- package/build/ui/TabContext.d.ts +29 -22
- package/build/ui/TabContext.d.ts.map +1 -1
- package/build/ui/TabRouter.d.ts +1 -0
- package/build/ui/TabRouter.d.ts.map +1 -1
- package/build/ui/Tabs.d.ts +43 -45
- package/build/ui/Tabs.d.ts.map +1 -1
- package/build/ui/Tabs.js +16 -3
- package/build/ui/Tabs.js.map +1 -1
- package/build/ui/common.d.ts.map +1 -1
- package/build/ui/common.js +6 -8
- package/build/ui/common.js.map +1 -1
- package/build/ui/useComponent.d.ts +1 -1
- package/build/ui/useComponent.d.ts.map +1 -1
- package/build/ui/useComponent.js.map +1 -1
- package/build/useNavigation.d.ts.map +1 -1
- package/build/useNavigation.js +3 -1
- package/build/useNavigation.js.map +1 -1
- package/build/useScreens.d.ts +6 -4
- package/build/useScreens.d.ts.map +1 -1
- package/build/useScreens.js +38 -47
- package/build/useScreens.js.map +1 -1
- package/build/views/Navigator.d.ts +3 -2
- package/build/views/Navigator.d.ts.map +1 -1
- package/build/views/Navigator.js +3 -2
- package/build/views/Navigator.js.map +1 -1
- package/build/views/Try.d.ts +1 -1
- package/package.json +18 -16
- package/vendor/react-helmet-async/LICENSE +201 -0
- package/vendor/react-helmet-async/README.md +205 -0
- package/vendor/react-helmet-async/lib/Dispatcher.d.ts +23 -0
- package/vendor/react-helmet-async/lib/HelmetData.d.ts +26 -0
- package/vendor/react-helmet-async/lib/Provider.d.ts +17 -0
- package/vendor/react-helmet-async/lib/client.d.ts +3 -0
- package/vendor/react-helmet-async/lib/constants.d.ts +58 -0
- package/vendor/react-helmet-async/lib/index.d.ts +38 -0
- package/vendor/react-helmet-async/lib/index.esm.js +798 -0
- package/vendor/react-helmet-async/lib/index.js +829 -0
- package/vendor/react-helmet-async/lib/server.d.ts +44 -0
- package/vendor/react-helmet-async/lib/types.d.ts +85 -0
- package/vendor/react-helmet-async/lib/utils.d.ts +33 -0
- package/vendor/react-helmet-async/package_original.json +49 -0
- package/vendor/react-helmet-async/vendor.md +3 -0
package/build/link/Link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/link/Link.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;AACb,wFAAwF;AACxF,mCAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/link/Link.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n// Fork of @react-navigation/native Link.tsx with `href` and `replace` support added and\n// `to` / `action` support removed.\nimport { PropsWithChildren, forwardRef, useMemo, MouseEvent, ForwardedRef, JSX } from 'react';\nimport { Text, GestureResponderEvent, Platform } from 'react-native';\n\nimport { resolveHref } from './href';\nimport useLinkToPathProps from './useLinkToPathProps';\nimport { useRouter } from '../hooks';\nimport { Href } from '../types';\nimport { useFocusEffect } from '../useFocusEffect';\nimport { useInteropClassName, useHrefAttrs, LinkProps, WebAnchorProps } from './useLinkHooks';\nimport { Slot } from '../ui/Slot';\n\nexport interface LinkComponent {\n (props: PropsWithChildren<LinkProps>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: (href: Href) => string;\n}\n\nexport type RedirectProps = {\n /**\n * The path of the route to navigate to. It can either be:\n * - **string**: A full path like `/profile/settings` or a relative path like `../settings`.\n * - **object**: An object with a `pathname` and optional `params`. The `pathname` can be\n * a full path like `/profile/settings` or a relative path like `../settings`. The\n * params can be an object of key-value pairs.\n *\n * @example\n * ```tsx Dynamic\n * import { Redirect } from 'expo-router';\n *\n * export default function RedirectToAbout() {\n * return (\n * <Redirect href=\"/about\">About</Link>\n * );\n *}\n * ```\n */\n href: Href;\n\n /**\n * Relative URL references are either relative to the directory or the document.\n * By default, relative paths are relative to the document.\n *\n * @see [Resolving relative references in Mozilla's documentation](https://developer.mozilla.org/en-US/docs/Web/API/URL_API/Resolving_relative_references).\n */\n relativeToDirectory?: boolean;\n\n /**\n * Replaces the initial screen with the current route.\n */\n withAnchor?: boolean;\n};\n\n/**\n * Redirects to the `href` as soon as the component is mounted.\n *\n * @example\n * ```tsx\n * import { View, Text } from 'react-native';\n * import { Redirect } from 'expo-router';\n *\n * export default function Page() {\n * const { user } = useAuth();\n *\n * if (!user) {\n * return <Redirect href=\"/login\" />;\n * }\n *\n * return (\n * <View>\n * <Text>Welcome Back!</Text>\n * </View>\n * );\n * }\n * ```\n */\nexport function Redirect({ href, relativeToDirectory, withAnchor }: RedirectProps) {\n const router = useRouter();\n useFocusEffect(() => {\n try {\n router.replace(href, { relativeToDirectory, withAnchor });\n } catch (error) {\n console.error(error);\n }\n });\n return null;\n}\n\n/**\n * Component that renders a link using [`href`](#href) to another route.\n * By default, it accepts children and wraps them in a `<Text>` component.\n *\n * Uses an anchor tag (`<a>`) on web and performs a client-side navigation to preserve\n * the state of the website and navigate faster. The web-only attributes such as `target`,\n * `rel`, and `download` are supported and passed to the anchor tag on web. See\n * [`WebAnchorProps`](#webanchorprops) for more details.\n *\n * > **Note**: Client-side navigation works with both single-page apps,\n * and [static-rendering](/router/reference/static-rendering/).\n *\n * @example\n * ```tsx\n * import { Link } from 'expo-router';\n * import { View } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link href=\"/about\">About</Link>\n * </View>\n * );\n *}\n * ```\n */\nexport const Link = forwardRef(ExpoRouterLink) as unknown as LinkComponent;\n\nLink.resolveHref = resolveHref;\n\nfunction ExpoRouterLink(\n {\n href,\n replace,\n push,\n dismissTo,\n // TODO: This does not prevent default on the anchor tag.\n relativeToDirectory,\n asChild,\n rel,\n target,\n download,\n withAnchor,\n dangerouslySingular: singular,\n ...rest\n }: LinkProps,\n ref: ForwardedRef<Text>\n) {\n // Mutate the style prop to add the className on web.\n const style = useInteropClassName(rest);\n\n // If not passing asChild, we need to forward the props to the anchor tag using React Native Web's `hrefAttrs`.\n const hrefAttrs = useHrefAttrs({ asChild, rel, target, download });\n\n const resolvedHref = useMemo(() => {\n if (href == null) {\n throw new Error('Link: href is required');\n }\n return resolveHref(href);\n }, [href]);\n\n let event;\n if (push) event = 'PUSH';\n if (replace) event = 'REPLACE';\n if (dismissTo) event = 'POP_TO';\n\n const props = useLinkToPathProps({\n href: resolvedHref,\n event,\n relativeToDirectory,\n withAnchor,\n dangerouslySingular: singular,\n });\n\n const onPress = (e: MouseEvent<HTMLAnchorElement> | GestureResponderEvent) => {\n if ('onPress' in rest) {\n rest.onPress?.(e);\n }\n props.onPress(e);\n };\n\n const Element = asChild ? Slot : Text;\n\n // Avoid using createElement directly, favoring JSX, to allow tools like NativeWind to perform custom JSX handling on native.\n return (\n <Element\n ref={ref}\n {...props}\n {...hrefAttrs}\n {...rest}\n style={style}\n {...Platform.select({\n web: {\n onClick: onPress,\n } as any,\n default: { onPress },\n })}\n />\n );\n}\n\nexport { LinkProps, WebAnchorProps };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linking.d.ts","sourceRoot":"","sources":["../../src/link/linking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"linking.d.ts","sourceRoot":"","sources":["../../src/link/linking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AASxC,wBAAgB,aAAa,IAAI,UAAU,CACzC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CACtE,CA0BA;AAID,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAgBD,wBAAgB,gBAAgB,CAAC,aAAa,CAAC,EAAE,YAAY,oBACnC,MAAM,KAAK,IAAI,gBAiCxC;AAED,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
package/build/link/linking.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linking.js","sourceRoot":"","sources":["../../src/link/linking.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sDAAwC;AACxC,+CAAwC;AAExC,
|
|
1
|
+
{"version":3,"file":"linking.js","sourceRoot":"","sources":["../../src/link/linking.ts"],"names":[],"mappings":"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","sourcesContent":["import { LinkingOptions } from '@react-navigation/native';\nimport * as Linking from 'expo-linking';\nimport { Platform } from 'react-native';\n\nimport {\n parsePathAndParamsFromExpoGoLink,\n parsePathFromExpoGoLink,\n} from '../fork/extractPathFromURL';\nimport { getPathFromState } from '../fork/getPathFromState';\nimport { getStateFromPath } from '../fork/getStateFromPath';\nimport { getInitialURLWithTimeout } from '../fork/useLinking';\nimport { NativeIntent } from '../types';\n\nconst isExpoGo = typeof expo !== 'undefined' && globalThis.expo?.modules?.ExpoGo;\n\n// A custom getInitialURL is used on native to ensure the app always starts at\n// the root path if it's launched from something other than a deep link.\n// This helps keep the native functionality working like the web functionality.\n// For example, if you had a root navigator where the first screen was `/settings` and the second was `/index`\n// then `/index` would be used on web and `/settings` would be used on native.\nexport function getInitialURL(): ReturnType<\n NonNullable<LinkingOptions<Record<string, unknown>>['getInitialURL']>\n> {\n if (typeof window === 'undefined') {\n return '';\n }\n if (Platform.OS === 'web' && window.location?.href) {\n return window.location.href;\n }\n if (Platform.OS === 'ios') {\n // Use the new Expo API for iOS. This has better support for App Clips and handoff.\n const url = Linking.getLinkingURL();\n return (\n parseExpoGoUrlFromListener(url) ??\n // The path will be nullish in bare apps when the app is launched from the home screen.\n // TODO(EvanBacon): define some policy around notifications.\n getRootURL()\n );\n }\n\n // TODO: Figure out if expo-linking on Android has full interop with the React Native implementation.\n return Promise.resolve(getInitialURLWithTimeout()).then(\n (url) =>\n parseExpoGoUrlFromListener(url) ??\n // The path will be nullish in bare apps when the app is launched from the home screen.\n // TODO(EvanBacon): define some policy around notifications.\n getRootURL()\n );\n}\n\nlet _rootURL: string | undefined;\n\nexport function getRootURL(): string {\n if (_rootURL === undefined) {\n _rootURL = Linking.createURL('/');\n if (isExpoGo) {\n _rootURL = parsePathFromExpoGoLink(_rootURL);\n }\n }\n return _rootURL;\n}\n\n// Expo Go is weird and requires the root path to be `/--/`\nfunction parseExpoGoUrlFromListener<T extends string | null>(url: T): T {\n if (!url || !isExpoGo) {\n return url;\n }\n const { pathname, queryString } = parsePathAndParamsFromExpoGoLink(url);\n // If the URL is defined (default in Expo Go dev apps) and the URL has no path:\n // `exp://192.168.87.39:19000/` then use the default `exp://192.168.87.39:19000/--/`\n if (!pathname || pathname === '/') {\n return (getRootURL() + queryString) as T;\n }\n return url;\n}\n\nexport function addEventListener(nativeLinking?: NativeIntent) {\n return (listener: (url: string) => void) => {\n let callback: (({ url }: { url: string }) => void) | undefined;\n\n const legacySubscription = nativeLinking?.legacy_subscribe?.(listener);\n\n if (isExpoGo) {\n // This extra work is only done in the Expo Go app.\n callback = async ({ url }) => {\n url = parseExpoGoUrlFromListener(url);\n\n if (url && nativeLinking?.redirectSystemPath) {\n url = await nativeLinking.redirectSystemPath({ path: url, initial: false });\n }\n\n listener(url);\n };\n } else {\n callback = async ({ url }) => {\n if (url && nativeLinking?.redirectSystemPath) {\n url = await nativeLinking.redirectSystemPath({ path: url, initial: false });\n }\n listener(url);\n };\n }\n\n const subscription = Linking.addEventListener('url', callback);\n\n return () => {\n // https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7\n subscription?.remove?.();\n legacySubscription?.();\n };\n };\n}\n\nexport { getStateFromPath, getPathFromState };\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MouseEvent } from 'react';
|
|
2
2
|
import { TextProps, GestureResponderEvent } from 'react-native';
|
|
3
3
|
import { Href } from '../types';
|
|
4
|
+
import { SingularOptions } from '../useScreens';
|
|
4
5
|
/**
|
|
5
6
|
* @platform web
|
|
6
7
|
*/
|
|
@@ -194,6 +195,13 @@ export interface LinkProps extends Omit<TextProps, 'href'>, WebAnchorProps {
|
|
|
194
195
|
* Replaces the initial screen with the current route.
|
|
195
196
|
*/
|
|
196
197
|
withAnchor?: boolean;
|
|
198
|
+
/**
|
|
199
|
+
* When navigating in a Stack, if the target is valid then screens in the history that matches
|
|
200
|
+
* the uniqueness constraint will be removed.
|
|
201
|
+
*
|
|
202
|
+
* If used with `push`, the history will be filtered even if no navigation occurs.
|
|
203
|
+
*/
|
|
204
|
+
dangerouslySingular?: SingularOptions;
|
|
197
205
|
}
|
|
198
206
|
export declare function useInteropClassName(props: {
|
|
199
207
|
style?: TextProps['style'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkHooks.d.ts","sourceRoot":"","sources":["../../src/link/useLinkHooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,UAAU,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAY,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useLinkHooks.d.ts","sourceRoot":"","sources":["../../src/link/useLinkHooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,UAAU,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAY,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAErE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,cAAc;IACxE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,IAAI,EAAE,IAAI,CAAC;IAGX;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,qBAAqB,KAAK,IAAI,CAAC;IAE7E;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,eAAe,CAAC;CACvC;AAGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;wBAoB5F;AAED,eAAO,MAAM,YAAY,UACf,QAAQ,SAAS,CAAC,KAAK;IAAE,SAAS,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,QAAQ,SAAS,CAoBtE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkHooks.js","sourceRoot":"","sources":["../../src/link/useLinkHooks.ts"],"names":[],"mappings":";;;AAAA,wFAAwF;AACxF,mCAAmC;AACnC,iCAA4C;AAC5C,+CAA0E;
|
|
1
|
+
{"version":3,"file":"useLinkHooks.js","sourceRoot":"","sources":["../../src/link/useLinkHooks.ts"],"names":[],"mappings":";;;AAAA,wFAAwF;AACxF,mCAAmC;AACnC,iCAA4C;AAC5C,+CAA0E;AA4N1E,qDAAqD;AACrD,SAAgB,mBAAmB,CAAC,KAAyD;IAC3F,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,EAAE;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC;KACpB;IAED,sDAAsD;IACtD,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAClB,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE;YAC3B,OAAO,KAAK,CAAC,KAAK,CAAC;SACpB;QACD,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,IAAI;YACX,qBAAqB,EAAE,KAAK,CAAC,SAAS;SACvC,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC9B,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACnC;QACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,CAAC;AApBD,kDAoBC;AAEY,QAAA,YAAY,GAAG,uBAAQ,CAAC,MAAM,CAEzC;IACA,GAAG,EAAE,SAAS,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAsB;QAC/E,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;YAClB,MAAM,SAAS,GAAG;gBAChB,GAAG;gBACH,MAAM;gBACN,QAAQ;aACT,CAAC;YACF,IAAI,OAAO,EAAE;gBACX,OAAO,SAAS,CAAC;aAClB;YACD,OAAO;gBACL,SAAS;aACV,CAAC;QACJ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,SAAS,YAAY;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC,CAAC","sourcesContent":["// Fork of @react-navigation/native Link.tsx with `href` and `replace` support added and\n// `to` / `action` support removed.\nimport { useMemo, MouseEvent } from 'react';\nimport { TextProps, GestureResponderEvent, Platform } from 'react-native';\n\nimport { Href } from '../types';\nimport { SingularOptions } from '../useScreens';\n\n// docsMissing\n/**\n * @platform web\n */\nexport type WebAnchorProps = {\n /**\n * Specifies where to open the [`href`](#href).\n *\n * - **_self**: the current tab.\n * - **_blank**: opens in a new tab or window.\n * - **_parent**: opens in the parent browsing context. If no parent, defaults to **_self**.\n * - **_top**: opens in the highest browsing context ancestor. If no ancestors,\n * defaults to **_self**.\n *\n * This property is passed to the underlying anchor (`<a>`) tag.\n *\n * @default '_self'\n *\n * @example\n * ```jsx\n * <Link href=\"https://expo.dev\" target=\"_blank\">Go to Expo in new tab</Link>\n * ```\n */\n target?: '_self' | '_blank' | '_parent' | '_top' | (string & object);\n\n /**\n * Specifies the relationship between the [`href`](#href) and the current route.\n *\n * Common values:\n * - **nofollow**: Indicates to search engines that they should not follow the `href`.\n * This is often used for user-generated content or links that should not influence\n * search engine rankings.\n * - **noopener**: Suggests that the `href` should not have access to the opening\n * window's `window.opener` object, which is a security measure to prevent potentially\n * harmful behavior in cases of links that open new tabs or windows.\n * - **noreferrer**: Requests that the browser does not send the `Referer` HTTP header\n * when navigating to the `href`. This can enhance user privacy.\n *\n * The `rel` property is primarily used for informational and instructive purposes, helping browsers and web\n * crawlers make better decisions about how to handle and interpret the links on a web\n * page. It is important to use appropriate `rel` values to ensure that links behave as intended and adhere\n * to best practices for web development and SEO (Search Engine Optimization).\n *\n * This property is passed to the underlying anchor (`<a>`) tag.\n *\n * @example\n * ```jsx\n * <Link href=\"https://expo.dev\" rel=\"nofollow\">Go to Expo</Link>\n * ```\n */\n rel?: string;\n\n /**\n * Specifies that the [`href`](#href) should be downloaded when the user clicks on the\n * link, instead of navigating to it. It is typically used for links that point to\n * files that the user should download, such as PDFs, images, documents, and more.\n *\n * The value of the `download` property, which represents the filename for the\n * downloaded file. This property is passed to the underlying anchor (`<a>`) tag.\n *\n * @example\n * ```jsx\n * <Link href=\"/image.jpg\" download=\"my-image.jpg\">Download image</Link>\n * ```\n */\n download?: string;\n};\n\n// @docsMissing\nexport interface LinkProps extends Omit<TextProps, 'href'>, WebAnchorProps {\n /**\n * The path of the route to navigate to. It can either be:\n * - **string**: A full path like `/profile/settings` or a relative path like `../settings`.\n * - **object**: An object with a `pathname` and optional `params`. The `pathname` can be\n * a full path like `/profile/settings` or a relative path like `../settings`. The\n * params can be an object of key-value pairs.\n *\n * @example\n * ```tsx Dynamic\n * import { Link } from 'expo-router';\n * import { View } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link href=\"/about\">About</Link>\n * <Link\n * href={{\n * pathname: '/user/[id]',\n * params: { id: 'bacon' }\n * }}>\n * View user\n * </Link>\n * </View>\n * );\n *}\n * ```\n */\n href: Href;\n\n // TODO(EvanBacon): This may need to be extracted for React Native style support.\n /**\n * Used to customize the `Link` component. It will forward all props to the\n * first child of the `Link`. Note that the child component must accept\n * `onPress` or `onClick` props. The `href` and `role` are also\n * passed to the child.\n *\n * @example\n * ```tsx\n * import { Link } from 'expo-router';\n * import { Pressable, Text } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link href=\"/home\" asChild>\n * <Pressable>\n * <Text>Home</Text>\n * </Pressable>\n * </Link>\n * </View>\n * );\n *}\n * ```\n */\n asChild?: boolean;\n\n /**\n * Removes the current route from the history and replace it with the\n * specified URL. This is useful for [redirects](/router/reference/redirects/).\n *\n * @example\n *```tsx\n * import { Link } from 'expo-router';\n * import { View } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link replace href=\"/feed\">Login</Link>\n * </View>\n * );\n *}\n * ```\n */\n replace?: boolean;\n /**\n * Always pushes a new route, and never pops or replaces to existing route.\n * You can push the current route multiple times or with new parameters.\n *\n * @example\n *```tsx\n * import { Link } from 'expo-router';\n * import { View } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link push href=\"/feed\">Login</Link>\n * </View>\n * );\n *}\n * ```\n */\n push?: boolean;\n /**\n * While in a stack, this will dismiss screens until the provided href is reached. If the href is not found,\n * it will instead replace the current screen with the provided href.\n *\n * @example\n *```tsx\n * import { Link } from 'expo-router';\n * import { View } from 'react-native';\n *\n * export default function Route() {\n * return (\n * <View>\n * <Link dismissTo href=\"/feed\">Close modal</Link>\n * </View>\n * );\n *}\n * ```\n */\n dismissTo?: boolean;\n\n /**\n * On native, this can be used with CSS interop tools like Nativewind.\n * On web, this sets the HTML `class` directly.\n */\n className?: string;\n\n onPress?: (e: MouseEvent<HTMLAnchorElement> | GestureResponderEvent) => void;\n\n /**\n * Relative URL references are either relative to the directory or the document.\n * By default, relative paths are relative to the document.\n *\n * @see [Resolving relative references in Mozilla's documentation](https://developer.mozilla.org/en-US/docs/Web/API/URL_API/Resolving_relative_references).\n */\n relativeToDirectory?: boolean;\n\n /**\n * Replaces the initial screen with the current route.\n */\n withAnchor?: boolean;\n\n /**\n * When navigating in a Stack, if the target is valid then screens in the history that matches\n * the uniqueness constraint will be removed.\n *\n * If used with `push`, the history will be filtered even if no navigation occurs.\n */\n dangerouslySingular?: SingularOptions;\n}\n\n// Mutate the style prop to add the className on web.\nexport function useInteropClassName(props: { style?: TextProps['style']; className?: string }) {\n if (Platform.OS !== 'web') {\n return props.style;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMemo(() => {\n if (props.className == null) {\n return props.style;\n }\n const cssStyle = {\n $$css: true,\n __routerLinkClassName: props.className,\n };\n\n if (Array.isArray(props.style)) {\n return [...props.style, cssStyle];\n }\n return [props.style, cssStyle];\n }, [props.style, props.className]);\n}\n\nexport const useHrefAttrs = Platform.select<\n (props: Partial<LinkProps>) => { hrefAttrs?: any } & Partial<LinkProps>\n>({\n web: function useHrefAttrs({ asChild, rel, target, download }: Partial<LinkProps>) {\n return useMemo(() => {\n const hrefAttrs = {\n rel,\n target,\n download,\n };\n if (asChild) {\n return hrefAttrs;\n }\n return {\n hrefAttrs,\n };\n }, [asChild, rel, target, download]);\n },\n default: function useHrefAttrs() {\n return {};\n },\n});\n"]}
|
|
@@ -56,7 +56,7 @@ const equalRouteProps = (a, b) => {
|
|
|
56
56
|
const RouterContext = (0, react_1.createContext)(null);
|
|
57
57
|
const InnerRouter = ({ routerData }) => {
|
|
58
58
|
const refetch = (0, host_js_1.useRefetch)();
|
|
59
|
-
const initialRouteRef = (0, react_1.useRef)();
|
|
59
|
+
const initialRouteRef = (0, react_1.useRef)(null);
|
|
60
60
|
if (!initialRouteRef.current) {
|
|
61
61
|
initialRouteRef.current = parseRoute(new URL(getHref()));
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/client.ts#L1\n */\n\n'use client';\n\nimport { Slot as ReactSlot } from '@radix-ui/react-slot';\nimport {\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useTransition,\n createElement,\n createContext,\n useState,\n Fragment,\n forwardRef,\n useMemo,\n} from 'react';\nimport type {\n ComponentProps,\n FunctionComponent,\n ReactNode,\n MutableRefObject,\n AnchorHTMLAttributes,\n MouseEvent,\n ForwardedRef,\n} from 'react';\nimport { Text } from 'react-native';\n\nimport { PARAM_KEY_SKIP, getComponentIds, getInputString } from './common.js';\nimport type { RouteProps } from './common.js';\nimport { prefetchRSC, Root, Slot, useRefetch } from './host.js';\nimport type { NavigationOptions } from '../../global-state/routing.js';\nimport type { Router as ClassicExpoRouterType } from '../../imperative-api';\nimport type { LinkProps as ClassicLinkProps, LinkComponent } from '../../link/Link.js';\nimport { resolveHref } from '../../link/href';\nimport { useInteropClassName, useHrefAttrs } from '../../link/useLinkHooks';\nimport type { Href } from '../../types.js';\n\nconst normalizeRoutePath = (path: string) => {\n for (const suffix of ['/', '/index.html']) {\n if (path.endsWith(suffix)) {\n return path.slice(0, -suffix.length) || '/';\n }\n }\n return path;\n};\n\nconst parseRoute = (url: URL): RouteProps => {\n if ((globalThis as any).__EXPO_ROUTER_404__) {\n return { path: '/404', query: '', hash: '' };\n }\n const { pathname, searchParams, hash } = url;\n if (searchParams.has(PARAM_KEY_SKIP)) {\n console.warn(`The search param \"${PARAM_KEY_SKIP}\" is reserved`);\n }\n return {\n path: normalizeRoutePath(pathname),\n query: searchParams.toString(),\n hash,\n };\n};\nconst getHref = () =>\n process.env.EXPO_OS === 'web'\n ? window.location.href\n : // TODO: This is hardcoded on native to simplify the initial PR.\n 'http://localhost:8081/';\n\ntype ChangeRoute = (\n route: RouteProps,\n options?: {\n checkCache?: boolean;\n skipRefetch?: boolean;\n }\n) => void;\n\ntype PrefetchRoute = (route: RouteProps) => void;\n\nconst equalRouteProps = (a: RouteProps, b: RouteProps) => {\n if (a.path !== b.path) {\n return false;\n }\n if (a.query !== b.query) {\n return false;\n }\n return true;\n};\n\nconst RouterContext = createContext<{\n route: RouteProps;\n changeRoute: ChangeRoute;\n prefetchRoute: PrefetchRoute;\n} | null>(null);\n\nconst InnerRouter = ({ routerData }: { routerData: RouterData }) => {\n const refetch = useRefetch();\n\n const initialRouteRef = useRef<RouteProps>();\n if (!initialRouteRef.current) {\n initialRouteRef.current = parseRoute(new URL(getHref()));\n }\n const [route, setRoute] = useState(() => ({\n // This is the first initialization of the route, and it has\n // to ignore the hash, because on server side there is none.\n // Otherwise there will be a hydration error.\n // The client side route, including the hash, will be updated in the effect below.\n ...initialRouteRef.current!,\n hash: '',\n }));\n\n // Update the route post-load to include the current hash.\n useEffect(() => {\n const initialRoute = initialRouteRef.current!;\n setRoute((prev) => {\n if (\n prev.path === initialRoute.path &&\n prev.query === initialRoute.query &&\n prev.hash === initialRoute.hash\n ) {\n return prev;\n }\n return initialRoute;\n });\n }, []);\n\n const componentIds = getComponentIds(route.path);\n\n // const refetchRoute = () => {\n // const loc = parseRoute(new URL(getHref()));\n // const input = getInputString(loc.path);\n // refetch(input, loc.query);\n // refetch(input, JSON.stringify({ query: route.query }));\n // };\n // globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__ = refetchRoute;\n\n const [cached, setCached] = useState<Record<string, RouteProps>>(() => {\n return Object.fromEntries(componentIds.map((id) => [id, route]));\n });\n const cachedRef = useRef(cached);\n useEffect(() => {\n cachedRef.current = cached;\n }, [cached]);\n\n const changeRoute: ChangeRoute = useCallback(\n (route, options) => {\n const { checkCache, skipRefetch } = options || {};\n startTransition(() => {\n setRoute(route);\n });\n const componentIds = getComponentIds(route.path);\n if (\n checkCache &&\n componentIds.every((id) => {\n const cachedLoc = cachedRef.current[id];\n return cachedLoc && equalRouteProps(cachedLoc, route);\n })\n ) {\n return; // everything is cached\n }\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is skipped\n }\n const input = getInputString(route.path);\n if (!skipRefetch) {\n refetch(input, JSON.stringify({ query: route.query, skip }));\n }\n startTransition(() => {\n setCached((prev) => ({\n ...prev,\n ...Object.fromEntries(\n componentIds.flatMap((id) => (skip.includes(id) ? [] : [[id, route]]))\n ),\n }));\n });\n },\n [refetch, routerData]\n );\n\n const prefetchRoute: PrefetchRoute = useCallback(\n (route) => {\n const componentIds = getComponentIds(route.path);\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is cached\n }\n const input = getInputString(route.path);\n prefetchRSC(input, JSON.stringify({ query: route.query, skip }));\n (globalThis as any).__EXPO_ROUTER_PREFETCH__?.(route.path);\n },\n [routerData]\n );\n\n useEffect(() => {\n const callback = () => {\n const route = parseRoute(new URL(getHref()));\n changeRoute(route, { checkCache: true });\n };\n if (window.addEventListener) {\n window.addEventListener('popstate', callback);\n return () => {\n window.removeEventListener('popstate', callback);\n };\n }\n return () => {};\n }, [changeRoute]);\n\n useEffect(() => {\n const callback = (pathname: string, searchParamsString: string) => {\n const url = new URL(getHref());\n url.pathname = pathname;\n url.search = searchParamsString;\n url.hash = '';\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url), { skipRefetch: true });\n };\n // eslint-disable-next-line no-multi-assign\n const listeners = (routerData[1] ||= new Set());\n listeners.add(callback);\n return () => {\n listeners.delete(callback);\n };\n }, [changeRoute, routerData]);\n\n useEffect(() => {\n const { hash } = window.location;\n const { state } = getHistory();\n const element = hash && document.getElementById(hash.slice(1));\n if (window.scrollTo) {\n window.scrollTo({\n left: 0,\n top: element ? element.getBoundingClientRect().top + window.scrollY : 0,\n behavior: state?.expo_new_path ? 'instant' : 'auto',\n });\n } else {\n // TODO: Native\n // console.log('window.scrollTo is not available');\n }\n });\n\n const children = componentIds.reduceRight(\n (acc: ReactNode, id) =>\n createElement(RouterSlot, { route, routerData, cachedRef, id, fallback: acc }, acc),\n null\n );\n\n return createElement(\n RouterContext.Provider,\n { value: { route, changeRoute, prefetchRoute } },\n children\n );\n};\n\nfunction getHistory() {\n if (process.env.EXPO_OS === 'web') {\n return window.history;\n }\n // Native shim\n return {\n pushState: () => {},\n replaceState: () => {},\n back: () => {},\n forward: () => {},\n state: {},\n };\n}\n\nexport function useRouter_UNSTABLE(): ClassicExpoRouterType &\n RouteProps & {\n forward: () => void;\n prefetch: (href: Href) => void;\n } {\n const router = useContext(RouterContext);\n if (!router) {\n throw new Error('Missing Router');\n }\n const { route, changeRoute, prefetchRoute } = router;\n const push: ClassicExpoRouterType['push'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.push() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const replace: ClassicExpoRouterType['replace'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.replace() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().replaceState(getHistory().state, '', url);\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const reload = useCallback(() => {\n const url = new URL(getHref());\n changeRoute(parseRoute(url));\n }, [changeRoute]);\n const back = useCallback(() => {\n // FIXME is this correct?\n getHistory().back();\n }, []);\n const forward = useCallback(() => {\n // FIXME is this correct?\n getHistory().forward();\n }, []);\n const prefetch = useCallback(\n (href: Href) => {\n const url = new URL(resolveHref(href), getHref());\n prefetchRoute(parseRoute(url));\n },\n [prefetchRoute]\n );\n return {\n ...route,\n canDismiss() {\n throw new Error('router.canDismiss() is not supported in React Server Components yet');\n },\n canGoBack() {\n throw new Error('router.canGoBack() is not supported in React Server Components yet');\n },\n dismiss() {\n throw new Error('router.dismiss() is not supported in React Server Components yet');\n },\n dismissTo() {\n throw new Error('router.dismissTo() is not supported in React Server Components yet');\n },\n dismissAll() {\n throw new Error('router.dismissAll() is not supported in React Server Components yet');\n },\n setParams() {\n throw new Error('router.setParams() is not supported in React Server Components yet');\n },\n\n // TODO: The behavior here is not the same as before.\n navigate: push,\n push,\n replace,\n reload,\n back,\n forward,\n prefetch,\n };\n}\n\nconst RouterSlot = ({\n route,\n routerData,\n cachedRef,\n id,\n fallback,\n children,\n}: {\n route: RouteProps;\n routerData: RouterData;\n cachedRef: MutableRefObject<Record<string, RouteProps>>;\n id: string;\n fallback?: ReactNode;\n children?: ReactNode;\n}) => {\n // const unstable_shouldRenderPrev = (_err: unknown) => {\n // const shouldSkip = routerData[0];\n // const skip = getSkipList(shouldSkip, [id], route, cachedRef.current);\n // return skip.length > 0;\n // };\n return createElement(Slot, { id, fallback }, children);\n};\n\nconst getSkipList = (\n shouldSkip: ShouldSkip | undefined,\n componentIds: readonly string[],\n route: RouteProps,\n cached: Record<string, RouteProps>\n): string[] => {\n const shouldSkipObj = Object.fromEntries(shouldSkip || []);\n return componentIds.filter((id) => {\n const prevProps = cached[id];\n if (!prevProps) {\n return false;\n }\n const shouldCheck = shouldSkipObj[id];\n if (!shouldCheck) {\n return false;\n }\n if (shouldCheck[0] && route.path !== prevProps.path) {\n return false;\n }\n if (shouldCheck[0] && route.query !== prevProps.query) {\n return false;\n }\n return true;\n });\n};\n\n// TODO revisit shouldSkip API\ntype ShouldSkip = (readonly [\n string,\n readonly [\n boolean, // if we compare path\n string[], // searchParams keys to compare\n ],\n])[];\n\n// Note: The router data must be a stable mutable object (array).\ntype RouterData = [\n shouldSkip?: ShouldSkip,\n locationListeners?: Set<(path: string, query: string) => void>,\n];\n\nconst DEFAULT_ROUTER_DATA: RouterData = [];\n\nexport function Router({ routerData = DEFAULT_ROUTER_DATA }) {\n const route = parseRoute(new URL(getHref()));\n const initialInput = getInputString(route.path);\n const initialParams = JSON.stringify({ query: route.query });\n const unstable_onFetchData = () => {};\n return createElement(\n Root as FunctionComponent<Omit<ComponentProps<typeof Root>, 'children'>>,\n { initialInput, initialParams, unstable_onFetchData },\n createElement(InnerRouter, { routerData })\n );\n}\n\nconst notAvailableInServer = (name: string) => () => {\n throw new Error(`${name} is not in the server`);\n};\n/**\n * ServerRouter for SSR\n * This is not a public API.\n */\nexport function ServerRouter({ children, route }: { children: ReactNode; route: RouteProps }) {\n return createElement(\n Fragment,\n null,\n createElement(\n RouterContext.Provider,\n {\n value: {\n route,\n changeRoute: notAvailableInServer('changeRoute'),\n prefetchRoute: notAvailableInServer('prefetchRoute'),\n },\n },\n children\n )\n );\n}\n\nexport type LinkProps = ClassicLinkProps & {\n href: string;\n // pending?: ReactNode;\n // notPending?: ReactNode;\n\n // unstable_prefetchOnEnter?: boolean;\n // unstable_prefetchOnView?: boolean;\n} & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n\nexport const Link = forwardRef(ExpoRouterLink) as unknown as LinkComponent;\n\nLink.resolveHref = resolveHref;\n\nfunction ExpoRouterLink(\n {\n href,\n replace,\n push,\n // TODO: This does not prevent default on the anchor tag.\n relativeToDirectory,\n asChild,\n rel,\n target,\n download,\n // pending,\n // notPending,\n // unstable_prefetchOnEnter,\n // unstable_prefetchOnView,\n children,\n ...props\n }: LinkProps,\n ref: ForwardedRef<Text>\n) {\n // Mutate the style prop to add the className on web.\n const style = useInteropClassName(props);\n\n // If not passing asChild, we need to forward the props to the anchor tag using React Native Web's `hrefAttrs`.\n const hrefAttrs = useHrefAttrs({ asChild, rel, target, download });\n\n const resolvedHref = useMemo(() => {\n if (href == null) {\n throw new Error('Link: href is required');\n }\n return resolveHref(href);\n }, [href]);\n\n const router = useContext(RouterContext);\n const changeRoute = router\n ? router.changeRoute\n : () => {\n throw new Error('Missing Router');\n };\n const prefetchRoute = router\n ? router.prefetchRoute\n : () => {\n throw new Error('Missing Router');\n };\n // TODO: Implement support for pending states in the future.\n const [, startTransition] = useTransition();\n // const elementRef = useRef<HTMLAnchorElement>();\n\n // useEffect(() => {\n // if (unstable_prefetchOnView && process.env.EXPO_OS === 'web' && ref.current) {\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting) {\n // const url = new URL(resolvedHref, getHref());\n // if (router && url.href !== getHref()) {\n // const route = parseRoute(url);\n // router.prefetchRoute(route);\n // }\n // }\n // });\n // },\n // { threshold: 0.1 }\n // );\n\n // observer.observe(ref.current);\n\n // return () => {\n // observer.disconnect();\n // };\n // }\n // return () => {};\n // }, [unstable_prefetchOnView, router, resolvedHref]);\n\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const url = new URL(resolvedHref, getHref());\n // TODO: Use in-memory route for native platforms.\n // if (url.href !== getHref()) {\n const route = parseRoute(url);\n prefetchRoute(route);\n startTransition(() => {\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(route);\n });\n // }\n props.onClick?.(event);\n };\n // const onMouseEnter = unstable_prefetchOnEnter\n // ? (event: MouseEvent<HTMLAnchorElement>) => {\n // const url = new URL(to, getHref());\n // if (url.href !== getHref()) {\n // const route = parseRoute(url);\n // prefetchRoute(route);\n // }\n // props.onMouseEnter?.(event);\n // }\n // : props.onMouseEnter;\n\n const Element = asChild ? ReactSlot : Text;\n\n const ele = createElement(\n // @ts-expect-error\n Element,\n {\n ...hrefAttrs,\n ...props,\n style,\n href: resolvedHref,\n onPress: onClick,\n // onMouseEnter,\n ref,\n },\n children\n );\n // if (isPending && pending !== undefined) {\n // return createElement(Fragment, null, ele, pending);\n // }\n // if (!isPending && notPending !== undefined) {\n // return createElement(Fragment, null, ele, notPending);\n // }\n return ele;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/client.ts#L1\n */\n\n'use client';\n\nimport { Slot as ReactSlot } from '@radix-ui/react-slot';\nimport {\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useTransition,\n createElement,\n createContext,\n useState,\n Fragment,\n forwardRef,\n useMemo,\n} from 'react';\nimport type {\n ComponentProps,\n FunctionComponent,\n ReactNode,\n MutableRefObject,\n AnchorHTMLAttributes,\n MouseEvent,\n ForwardedRef,\n} from 'react';\nimport { Text } from 'react-native';\n\nimport { PARAM_KEY_SKIP, getComponentIds, getInputString } from './common.js';\nimport type { RouteProps } from './common.js';\nimport { prefetchRSC, Root, Slot, useRefetch } from './host.js';\nimport type { NavigationOptions } from '../../global-state/routing.js';\nimport type { Router as ClassicExpoRouterType } from '../../imperative-api';\nimport type { LinkProps as ClassicLinkProps, LinkComponent } from '../../link/Link.js';\nimport { resolveHref } from '../../link/href';\nimport { useInteropClassName, useHrefAttrs } from '../../link/useLinkHooks';\nimport type { Href } from '../../types.js';\n\nconst normalizeRoutePath = (path: string) => {\n for (const suffix of ['/', '/index.html']) {\n if (path.endsWith(suffix)) {\n return path.slice(0, -suffix.length) || '/';\n }\n }\n return path;\n};\n\nconst parseRoute = (url: URL): RouteProps => {\n if ((globalThis as any).__EXPO_ROUTER_404__) {\n return { path: '/404', query: '', hash: '' };\n }\n const { pathname, searchParams, hash } = url;\n if (searchParams.has(PARAM_KEY_SKIP)) {\n console.warn(`The search param \"${PARAM_KEY_SKIP}\" is reserved`);\n }\n return {\n path: normalizeRoutePath(pathname),\n query: searchParams.toString(),\n hash,\n };\n};\nconst getHref = () =>\n process.env.EXPO_OS === 'web'\n ? window.location.href\n : // TODO: This is hardcoded on native to simplify the initial PR.\n 'http://localhost:8081/';\n\ntype ChangeRoute = (\n route: RouteProps,\n options?: {\n checkCache?: boolean;\n skipRefetch?: boolean;\n }\n) => void;\n\ntype PrefetchRoute = (route: RouteProps) => void;\n\nconst equalRouteProps = (a: RouteProps, b: RouteProps) => {\n if (a.path !== b.path) {\n return false;\n }\n if (a.query !== b.query) {\n return false;\n }\n return true;\n};\n\nconst RouterContext = createContext<{\n route: RouteProps;\n changeRoute: ChangeRoute;\n prefetchRoute: PrefetchRoute;\n} | null>(null);\n\nconst InnerRouter = ({ routerData }: { routerData: RouterData }) => {\n const refetch = useRefetch();\n\n const initialRouteRef = useRef<RouteProps>(null);\n if (!initialRouteRef.current) {\n initialRouteRef.current = parseRoute(new URL(getHref()));\n }\n const [route, setRoute] = useState(() => ({\n // This is the first initialization of the route, and it has\n // to ignore the hash, because on server side there is none.\n // Otherwise there will be a hydration error.\n // The client side route, including the hash, will be updated in the effect below.\n ...initialRouteRef.current!,\n hash: '',\n }));\n\n // Update the route post-load to include the current hash.\n useEffect(() => {\n const initialRoute = initialRouteRef.current!;\n setRoute((prev) => {\n if (\n prev.path === initialRoute.path &&\n prev.query === initialRoute.query &&\n prev.hash === initialRoute.hash\n ) {\n return prev;\n }\n return initialRoute;\n });\n }, []);\n\n const componentIds = getComponentIds(route.path);\n\n // const refetchRoute = () => {\n // const loc = parseRoute(new URL(getHref()));\n // const input = getInputString(loc.path);\n // refetch(input, loc.query);\n // refetch(input, JSON.stringify({ query: route.query }));\n // };\n // globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__ = refetchRoute;\n\n const [cached, setCached] = useState<Record<string, RouteProps>>(() => {\n return Object.fromEntries(componentIds.map((id) => [id, route]));\n });\n const cachedRef = useRef(cached);\n useEffect(() => {\n cachedRef.current = cached;\n }, [cached]);\n\n const changeRoute: ChangeRoute = useCallback(\n (route, options) => {\n const { checkCache, skipRefetch } = options || {};\n startTransition(() => {\n setRoute(route);\n });\n const componentIds = getComponentIds(route.path);\n if (\n checkCache &&\n componentIds.every((id) => {\n const cachedLoc = cachedRef.current[id];\n return cachedLoc && equalRouteProps(cachedLoc, route);\n })\n ) {\n return; // everything is cached\n }\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is skipped\n }\n const input = getInputString(route.path);\n if (!skipRefetch) {\n refetch(input, JSON.stringify({ query: route.query, skip }));\n }\n startTransition(() => {\n setCached((prev) => ({\n ...prev,\n ...Object.fromEntries(\n componentIds.flatMap((id) => (skip.includes(id) ? [] : [[id, route]]))\n ),\n }));\n });\n },\n [refetch, routerData]\n );\n\n const prefetchRoute: PrefetchRoute = useCallback(\n (route) => {\n const componentIds = getComponentIds(route.path);\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is cached\n }\n const input = getInputString(route.path);\n prefetchRSC(input, JSON.stringify({ query: route.query, skip }));\n (globalThis as any).__EXPO_ROUTER_PREFETCH__?.(route.path);\n },\n [routerData]\n );\n\n useEffect(() => {\n const callback = () => {\n const route = parseRoute(new URL(getHref()));\n changeRoute(route, { checkCache: true });\n };\n if (window.addEventListener) {\n window.addEventListener('popstate', callback);\n return () => {\n window.removeEventListener('popstate', callback);\n };\n }\n return () => {};\n }, [changeRoute]);\n\n useEffect(() => {\n const callback = (pathname: string, searchParamsString: string) => {\n const url = new URL(getHref());\n url.pathname = pathname;\n url.search = searchParamsString;\n url.hash = '';\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url), { skipRefetch: true });\n };\n // eslint-disable-next-line no-multi-assign\n const listeners = (routerData[1] ||= new Set());\n listeners.add(callback);\n return () => {\n listeners.delete(callback);\n };\n }, [changeRoute, routerData]);\n\n useEffect(() => {\n const { hash } = window.location;\n const { state } = getHistory();\n const element = hash && document.getElementById(hash.slice(1));\n if (window.scrollTo) {\n window.scrollTo({\n left: 0,\n top: element ? element.getBoundingClientRect().top + window.scrollY : 0,\n behavior: state?.expo_new_path ? 'instant' : 'auto',\n });\n } else {\n // TODO: Native\n // console.log('window.scrollTo is not available');\n }\n });\n\n const children = componentIds.reduceRight(\n (acc: ReactNode, id) =>\n createElement(RouterSlot, { route, routerData, cachedRef, id, fallback: acc }, acc),\n null\n );\n\n return createElement(\n RouterContext.Provider,\n { value: { route, changeRoute, prefetchRoute } },\n children\n );\n};\n\nfunction getHistory() {\n if (process.env.EXPO_OS === 'web') {\n return window.history;\n }\n // Native shim\n return {\n pushState: () => {},\n replaceState: () => {},\n back: () => {},\n forward: () => {},\n state: {},\n };\n}\n\nexport function useRouter_UNSTABLE(): ClassicExpoRouterType &\n RouteProps & {\n forward: () => void;\n prefetch: (href: Href) => void;\n } {\n const router = useContext(RouterContext);\n if (!router) {\n throw new Error('Missing Router');\n }\n const { route, changeRoute, prefetchRoute } = router;\n const push: ClassicExpoRouterType['push'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.push() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const replace: ClassicExpoRouterType['replace'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.replace() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().replaceState(getHistory().state, '', url);\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const reload = useCallback(() => {\n const url = new URL(getHref());\n changeRoute(parseRoute(url));\n }, [changeRoute]);\n const back = useCallback(() => {\n // FIXME is this correct?\n getHistory().back();\n }, []);\n const forward = useCallback(() => {\n // FIXME is this correct?\n getHistory().forward();\n }, []);\n const prefetch = useCallback(\n (href: Href) => {\n const url = new URL(resolveHref(href), getHref());\n prefetchRoute(parseRoute(url));\n },\n [prefetchRoute]\n );\n return {\n ...route,\n canDismiss() {\n throw new Error('router.canDismiss() is not supported in React Server Components yet');\n },\n canGoBack() {\n throw new Error('router.canGoBack() is not supported in React Server Components yet');\n },\n dismiss() {\n throw new Error('router.dismiss() is not supported in React Server Components yet');\n },\n dismissTo() {\n throw new Error('router.dismissTo() is not supported in React Server Components yet');\n },\n dismissAll() {\n throw new Error('router.dismissAll() is not supported in React Server Components yet');\n },\n setParams() {\n throw new Error('router.setParams() is not supported in React Server Components yet');\n },\n\n // TODO: The behavior here is not the same as before.\n navigate: push,\n push,\n replace,\n reload,\n back,\n forward,\n prefetch,\n };\n}\n\nconst RouterSlot = ({\n route,\n routerData,\n cachedRef,\n id,\n fallback,\n children,\n}: {\n route: RouteProps;\n routerData: RouterData;\n cachedRef: MutableRefObject<Record<string, RouteProps>>;\n id: string;\n fallback?: ReactNode;\n children?: ReactNode;\n}) => {\n // const unstable_shouldRenderPrev = (_err: unknown) => {\n // const shouldSkip = routerData[0];\n // const skip = getSkipList(shouldSkip, [id], route, cachedRef.current);\n // return skip.length > 0;\n // };\n return createElement(Slot, { id, fallback }, children);\n};\n\nconst getSkipList = (\n shouldSkip: ShouldSkip | undefined,\n componentIds: readonly string[],\n route: RouteProps,\n cached: Record<string, RouteProps>\n): string[] => {\n const shouldSkipObj = Object.fromEntries(shouldSkip || []);\n return componentIds.filter((id) => {\n const prevProps = cached[id];\n if (!prevProps) {\n return false;\n }\n const shouldCheck = shouldSkipObj[id];\n if (!shouldCheck) {\n return false;\n }\n if (shouldCheck[0] && route.path !== prevProps.path) {\n return false;\n }\n if (shouldCheck[0] && route.query !== prevProps.query) {\n return false;\n }\n return true;\n });\n};\n\n// TODO revisit shouldSkip API\ntype ShouldSkip = (readonly [\n string,\n readonly [\n boolean, // if we compare path\n string[], // searchParams keys to compare\n ],\n])[];\n\n// Note: The router data must be a stable mutable object (array).\ntype RouterData = [\n shouldSkip?: ShouldSkip,\n locationListeners?: Set<(path: string, query: string) => void>,\n];\n\nconst DEFAULT_ROUTER_DATA: RouterData = [];\n\nexport function Router({ routerData = DEFAULT_ROUTER_DATA }) {\n const route = parseRoute(new URL(getHref()));\n const initialInput = getInputString(route.path);\n const initialParams = JSON.stringify({ query: route.query });\n const unstable_onFetchData = () => {};\n return createElement(\n Root as FunctionComponent<Omit<ComponentProps<typeof Root>, 'children'>>,\n { initialInput, initialParams, unstable_onFetchData },\n createElement(InnerRouter, { routerData })\n );\n}\n\nconst notAvailableInServer = (name: string) => () => {\n throw new Error(`${name} is not in the server`);\n};\n/**\n * ServerRouter for SSR\n * This is not a public API.\n */\nexport function ServerRouter({ children, route }: { children: ReactNode; route: RouteProps }) {\n return createElement(\n Fragment,\n null,\n createElement(\n RouterContext.Provider,\n {\n value: {\n route,\n changeRoute: notAvailableInServer('changeRoute'),\n prefetchRoute: notAvailableInServer('prefetchRoute'),\n },\n },\n children\n )\n );\n}\n\nexport type LinkProps = ClassicLinkProps & {\n href: string;\n // pending?: ReactNode;\n // notPending?: ReactNode;\n\n // unstable_prefetchOnEnter?: boolean;\n // unstable_prefetchOnView?: boolean;\n} & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n\nexport const Link = forwardRef(ExpoRouterLink) as unknown as LinkComponent;\n\nLink.resolveHref = resolveHref;\n\nfunction ExpoRouterLink(\n {\n href,\n replace,\n push,\n // TODO: This does not prevent default on the anchor tag.\n relativeToDirectory,\n asChild,\n rel,\n target,\n download,\n // pending,\n // notPending,\n // unstable_prefetchOnEnter,\n // unstable_prefetchOnView,\n children,\n ...props\n }: LinkProps,\n ref: ForwardedRef<Text>\n) {\n // Mutate the style prop to add the className on web.\n const style = useInteropClassName(props);\n\n // If not passing asChild, we need to forward the props to the anchor tag using React Native Web's `hrefAttrs`.\n const hrefAttrs = useHrefAttrs({ asChild, rel, target, download });\n\n const resolvedHref = useMemo(() => {\n if (href == null) {\n throw new Error('Link: href is required');\n }\n return resolveHref(href);\n }, [href]);\n\n const router = useContext(RouterContext);\n const changeRoute = router\n ? router.changeRoute\n : () => {\n throw new Error('Missing Router');\n };\n const prefetchRoute = router\n ? router.prefetchRoute\n : () => {\n throw new Error('Missing Router');\n };\n // TODO: Implement support for pending states in the future.\n const [, startTransition] = useTransition();\n // const elementRef = useRef<HTMLAnchorElement>();\n\n // useEffect(() => {\n // if (unstable_prefetchOnView && process.env.EXPO_OS === 'web' && ref.current) {\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting) {\n // const url = new URL(resolvedHref, getHref());\n // if (router && url.href !== getHref()) {\n // const route = parseRoute(url);\n // router.prefetchRoute(route);\n // }\n // }\n // });\n // },\n // { threshold: 0.1 }\n // );\n\n // observer.observe(ref.current);\n\n // return () => {\n // observer.disconnect();\n // };\n // }\n // return () => {};\n // }, [unstable_prefetchOnView, router, resolvedHref]);\n\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const url = new URL(resolvedHref, getHref());\n // TODO: Use in-memory route for native platforms.\n // if (url.href !== getHref()) {\n const route = parseRoute(url);\n prefetchRoute(route);\n startTransition(() => {\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(route);\n });\n // }\n props.onClick?.(event);\n };\n // const onMouseEnter = unstable_prefetchOnEnter\n // ? (event: MouseEvent<HTMLAnchorElement>) => {\n // const url = new URL(to, getHref());\n // if (url.href !== getHref()) {\n // const route = parseRoute(url);\n // prefetchRoute(route);\n // }\n // props.onMouseEnter?.(event);\n // }\n // : props.onMouseEnter;\n\n const Element = asChild ? ReactSlot : Text;\n\n const ele = createElement(\n // @ts-expect-error\n Element,\n {\n ...hrefAttrs,\n ...props,\n style,\n href: resolvedHref,\n onPress: onClick,\n // onMouseEnter,\n ref,\n },\n children\n );\n // if (isPending && pending !== undefined) {\n // return createElement(Fragment, null, ele, pending);\n // }\n // if (!isPending && notPending !== undefined) {\n // return createElement(Fragment, null, ele, notPending);\n // }\n return ele;\n}\n"]}
|
|
@@ -25,7 +25,7 @@ type Elements = Promise<Record<string, ReactNode>> & {
|
|
|
25
25
|
* callServer callback
|
|
26
26
|
* This is not a public API.
|
|
27
27
|
*/
|
|
28
|
-
export declare const callServerRSC: (actionId: string, args?: unknown[], fetchCache?: FetchCache) => Promise<ReactNode>;
|
|
28
|
+
export declare const callServerRSC: (actionId: string, args?: unknown[], fetchCache?: FetchCache) => Promise<import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | (string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined)>;
|
|
29
29
|
export declare const fetchRSC: (input: string, params?: unknown, fetchCache?: FetchCache) => Elements;
|
|
30
30
|
export declare const prefetchRSC: (input: string, params?: unknown) => void;
|
|
31
31
|
export declare const Root: ({ initialInput, initialParams, fetchCache, unstable_onFetchData, children, }: {
|
|
@@ -34,14 +34,14 @@ export declare const Root: ({ initialInput, initialParams, fetchCache, unstable_
|
|
|
34
34
|
fetchCache?: FetchCache | undefined;
|
|
35
35
|
unstable_onFetchData?: ((data: unknown) => void) | undefined;
|
|
36
36
|
children: ReactNode;
|
|
37
|
-
}) => import("react").FunctionComponentElement<import("react").ProviderProps<(input: string, searchParams?: URLSearchParams) => void>>;
|
|
38
|
-
export declare const useRefetch: () =>
|
|
37
|
+
}) => import("react").FunctionComponentElement<import("react").ProviderProps<(input: string, searchParams?: URLSearchParams | string) => void>>;
|
|
38
|
+
export declare const useRefetch: () => (input: string, searchParams?: URLSearchParams | string) => void;
|
|
39
39
|
export declare const Slot: ({ id, children, fallback, }: {
|
|
40
40
|
id: string;
|
|
41
41
|
children?: ReactNode;
|
|
42
42
|
fallback?: ReactNode;
|
|
43
|
-
}) => string | number | true | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | import("react").FunctionComponentElement<import("react").ProviderProps<ReactNode>>;
|
|
44
|
-
export declare const Children: () =>
|
|
43
|
+
}) => string | number | bigint | true | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").FunctionComponentElement<import("react").ProviderProps<ReactNode>>;
|
|
44
|
+
export declare const Children: () => ReactNode;
|
|
45
45
|
/**
|
|
46
46
|
* ServerRoot for SSR
|
|
47
47
|
* This is not a public API.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/host.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/host.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAuEvC,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAC3C,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,CAAC;AAIhF,QAAA,MAAM,KAAK,MAAM,CAAC;AAClB,QAAA,MAAM,YAAY,MAAM,CAAC;AACzB,QAAA,MAAM,aAAa,MAAM,CAAC;AAE1B,KAAK,UAAU,GAAG;IAChB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC;IAC7B,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AA4DF,KAAK,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAC9C,CAAC;AAmCF;;;GAGG;AACH,eAAO,MAAM,aAAa,aACd,MAAM,SACT,OAAO,EAAE,kWAmBjB,CAAC;AAyBF,eAAO,MAAM,QAAQ,UACZ,MAAM,WACJ,OAAO,8BAEf,QA0CF,CAAC;AAqBF,eAAO,MAAM,WAAW,UAAW,MAAM,WAAW,OAAO,KAAG,IAQ7D,CAAC;AASF,eAAO,MAAM,IAAI;;oBASC,OAAO;;mCAEO,OAAO,KAAK,IAAI;cACpC,SAAS;qFAlBX,MAAM,iBAAiB,eAAe,GAAG,MAAM,KAAK,IAAI,EA2CjE,CAAC;AAEF,eAAO,MAAM,UAAU,gBA7Cb,MAAM,iBAAiB,eAAe,GAAG,MAAM,KAAK,IA6CX,CAAC;AAKpD,eAAO,MAAM,IAAI;QAKX,MAAM;eACC,SAAS;eACT,SAAS;+bAcrB,CAAC;AAEF,eAAO,MAAM,QAAQ,iBAA6B,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,UAAU;cAAwC,QAAQ;cAAY,SAAS;8FACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/rsc/router/host.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/client.ts#L1\n */\n\n//// <reference types=\"react/canary\" />\n'use client';\n\nimport Constants from 'expo-constants';\nimport {\n createContext,\n createElement,\n memo,\n useCallback,\n useState,\n startTransition,\n // @ts-expect-error\n use,\n useEffect,\n} from 'react';\nimport type { ReactNode } from 'react';\nimport RSDWClient from 'react-server-dom-webpack/client';\n\nimport { MetroServerError, ReactServerError } from './errors';\nimport { fetch } from './fetch';\nimport { encodeInput, encodeActionId } from './utils';\nimport { getDevServer } from '../../getDevServer';\nimport { getOriginFromConstants } from '../../head/url';\n\nconst { createFromFetch, encodeReply } = RSDWClient;\n\n// TODO: Maybe this could be a bundler global instead.\nconst IS_DOM =\n // @ts-expect-error: Added via react-native-webview\n typeof ReactNativeWebView !== 'undefined';\n\n// NOTE: Ensured to start with `/`.\nconst RSC_PATH = '/_flight/' + process.env.EXPO_OS; // process.env.EXPO_RSC_PATH;\n\n// Using base URL for remote hosts isn't currently supported in DOM components as we use it for offline assets.\nconst BASE_URL = IS_DOM ? '' : process.env.EXPO_BASE_URL;\n\nlet BASE_PATH = `${BASE_URL}${RSC_PATH}`;\n\nif (!BASE_PATH.startsWith('/')) {\n BASE_PATH = '/' + BASE_PATH;\n}\n\nif (!BASE_PATH.endsWith('/')) {\n BASE_PATH += '/';\n}\n\nif (BASE_PATH === '/') {\n throw new Error(\n `Invalid React Flight path \"${BASE_PATH}\". The path should not live at the project root, e.g. /_flight/. Dev server URL: ${\n getDevServer().fullBundleUrl\n }`\n );\n}\n\nif (process.env.EXPO_OS !== 'web' && !window.location?.href) {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const originFromConstants =\n manifest?.extra?.router?.origin ?? manifest?.extra?.router?.generatedOrigin;\n\n // In legacy cases, this can be extraneously set to false since it was the default before we had a production hosting solution for native servers.\n if (originFromConstants === false) {\n const isExpoGo = typeof expo !== 'undefined' && globalThis.expo?.modules?.ExpoGo;\n\n if (isExpoGo) {\n // Updating is a bit easier in Expo Go as you don't need a native rebuild.\n throw new Error(\n 'The \"origin\" property in the app config (app.json) cannot be false when React Server Components is enabled. https://docs.expo.dev/guides/server-components/'\n );\n }\n\n // Add more context about updating the app.json in development builds.\n throw new Error(\n 'The \"origin\" property in the app config (app.json) cannot be \"false\" when React Server Components is enabled. Remove the \"origin\" property from your Expo config and rebuild the native app to resolve. https://docs.expo.dev/guides/server-components/'\n );\n }\n\n // This can happen if the user attempts to use React Server Components without\n // enabling the flags in the app.json. This will set origin to false and prevent the expo/metro-runtime polyfill from running.\n throw new Error(\n 'window.location.href is not defined. This is required for React Server Components to work correctly. Ensure React Server Components is correctly enabled in your project and config. https://docs.expo.dev/guides/server-components/'\n );\n}\n\ntype OnFetchData = (data: unknown) => void;\ntype SetElements = (updater: Elements | ((prev: Elements) => Elements)) => void;\n\nconst RSC_CONTENT_TYPE = 'text/x-component';\n\nconst ENTRY = 'e';\nconst SET_ELEMENTS = 's';\nconst ON_FETCH_DATA = 'o';\n\ntype FetchCache = {\n [ENTRY]?: [input: string, params: unknown, elements: Elements];\n [SET_ELEMENTS]?: SetElements;\n [ON_FETCH_DATA]?: OnFetchData | undefined;\n};\n\nconst defaultFetchCache: FetchCache = {};\n\nconst NO_CACHE_HEADERS: Record<string, string> =\n process.env.EXPO_OS === 'web'\n ? {}\n : // These are needed for iOS + Prod to get updates after the first request.\n {\n 'Cache-Control': 'no-cache',\n Pragma: 'no-cache',\n Expires: '0',\n };\n\nconst ACTION_HEADERS = {\n ...NO_CACHE_HEADERS,\n accept: RSC_CONTENT_TYPE,\n 'expo-platform': process.env.EXPO_OS!,\n};\n\nconst checkStatus = async (responsePromise: Promise<Response>): Promise<Response> => {\n // TODO: Combine with metro async fetch logic.\n const response = await responsePromise;\n if (!response.ok) {\n // NOTE(EvanBacon): Transform the Metro development error into a JS error that can be used by LogBox.\n // This was tested against using a Class component in a server component.\n if (__DEV__ && (response.status === 500 || response.status === 404)) {\n const errorText = await response.text();\n let errorJson;\n try {\n errorJson = JSON.parse(errorText);\n } catch {\n // `Unable to resolve module` error should respond as JSON from the dev server and sent to the master red box, this can get corrupt when it's returned as the formatted string.\n if (errorText.startsWith('Unable to resolve module')) {\n console.error('Unexpected Metro error format from dev server');\n // This is an unexpected state that occurs when the dev server renderer does not throw Metro errors in the expected JSON format.\n throw new Error(errorJson);\n }\n throw new ReactServerError(errorText, response.url, response.status, response.headers);\n }\n\n throw new MetroServerError(errorJson, response.url);\n }\n\n let responseText;\n try {\n responseText = await response.text();\n } catch {\n throw new ReactServerError(\n response.statusText,\n response.url,\n response.status,\n response.headers\n );\n }\n throw new ReactServerError(responseText, response.url, response.status, response.headers);\n }\n return response;\n};\n\ntype Elements = Promise<Record<string, ReactNode>> & {\n prev?: Record<string, ReactNode> | undefined;\n};\nfunction getCached<T>(c: () => T, m: WeakMap<object, T>, k: object): T {\n return (m.has(k) ? m : m.set(k, c())).get(k) as T;\n}\n\nconst cache1 = new WeakMap();\nconst mergeElements = (a: Elements, b: Elements): Elements => {\n const getResult = () => {\n const promise: Elements = new Promise((resolve, reject) => {\n Promise.all([a, b])\n .then(([a, b]) => {\n const nextElements = { ...a, ...b };\n delete nextElements._value;\n promise.prev = a;\n resolve(nextElements);\n })\n .catch((e) => {\n a.then(\n (a) => {\n promise.prev = a;\n reject(e);\n },\n () => {\n promise.prev = a.prev;\n reject(e);\n }\n );\n });\n });\n return promise;\n };\n const cache2 = getCached(() => new WeakMap(), cache1, a);\n return getCached(getResult, cache2, b);\n};\n\n/**\n * callServer callback\n * This is not a public API.\n */\nexport const callServerRSC = async (\n actionId: string,\n args?: unknown[],\n fetchCache = defaultFetchCache\n) => {\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(encodeActionId(actionId)));\n const response =\n args === undefined\n ? fetch(url, { headers: ACTION_HEADERS })\n : encodeReply(args).then((body) =>\n fetch(url, { method: 'POST', body, headers: ACTION_HEADERS })\n );\n const data = createFromFetch<Awaited<Elements>>(checkStatus(response), {\n callServer: (actionId: string, args: unknown[]) => callServerRSC(actionId, args, fetchCache),\n });\n fetchCache[ON_FETCH_DATA]?.(data);\n startTransition(() => {\n // FIXME this causes rerenders even if data is empty\n fetchCache[SET_ELEMENTS]?.((prev) => mergeElements(prev, data));\n });\n return (await data)._value;\n};\n\nconst prefetchedParams = new WeakMap<Promise<unknown>, unknown>();\n\nconst fetchRSCInternal = (url: string, params: unknown) =>\n params === undefined\n ? fetch(url, {\n // Disable caching\n headers: {\n ...NO_CACHE_HEADERS,\n 'expo-platform': process.env.EXPO_OS!,\n },\n })\n : typeof params === 'string'\n ? fetch(url, {\n headers: {\n ...NO_CACHE_HEADERS,\n 'expo-platform': process.env.EXPO_OS!,\n 'X-Expo-Params': params,\n },\n })\n : encodeReply(params).then((body) =>\n fetch(url, { method: 'POST', headers: ACTION_HEADERS, body })\n );\n\nexport const fetchRSC = (\n input: string,\n params?: unknown,\n fetchCache = defaultFetchCache\n): Elements => {\n // TODO: strip when \"is exporting\".\n if (process.env.NODE_ENV === 'development') {\n const refetchRsc = () => {\n delete fetchCache[ENTRY];\n const data = fetchRSC(input, params, fetchCache);\n fetchCache[SET_ELEMENTS]?.(() => data);\n };\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__ ||= [];\n const index = globalThis.__EXPO_RSC_RELOAD_LISTENERS__.indexOf(globalThis.__EXPO_REFETCH_RSC__);\n if (index !== -1) {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.splice(index, 1, refetchRsc);\n } else {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.push(refetchRsc);\n }\n globalThis.__EXPO_REFETCH_RSC__ = refetchRsc;\n }\n\n const entry = fetchCache[ENTRY];\n if (entry && entry[0] === input && entry[1] === params) {\n return entry[2];\n }\n\n // eslint-disable-next-line no-multi-assign\n const prefetched = ((globalThis as any).__EXPO_PREFETCHED__ ||= {});\n // TODO: Load from on-disk on native when indicated.\n // const reqPath = fetchOptions?.remote ? getAdjustedRemoteFilePath(url) : getAdjustedRemoteFilePath(url);\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(input));\n const hasValidPrefetchedResponse =\n !!prefetched[url] &&\n // HACK .has() is for the initial hydration\n // It's limited and may result in a wrong result. FIXME\n (!prefetchedParams.has(prefetched[url]) || prefetchedParams.get(prefetched[url]) === params);\n const response = hasValidPrefetchedResponse ? prefetched[url] : fetchRSCInternal(url, params);\n delete prefetched[url];\n const data = createFromFetch<Awaited<Elements>>(checkStatus(response), {\n callServer: (actionId: string, args: unknown[]) => callServerRSC(actionId, args, fetchCache),\n });\n fetchCache[ON_FETCH_DATA]?.(data);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n fetchCache[ENTRY] = [input, params, data];\n return data;\n};\n\nfunction getAdjustedRemoteFilePath(path: string): string {\n if (IS_DOM && process.env.NODE_ENV === 'production') {\n const origin = getOriginFromConstants();\n if (!origin) {\n throw new Error(\n 'Expo RSC: Origin not found in Constants. This is required for production DOM components using server actions.'\n );\n }\n // DOM components in production need to use the same origin logic as native.\n return new URL(path, origin).toString();\n }\n\n if (!IS_DOM && process.env.EXPO_OS === 'web') {\n return path;\n }\n\n return new URL(path, window.location.href).toString();\n}\n\nexport const prefetchRSC = (input: string, params?: unknown): void => {\n // eslint-disable-next-line no-multi-assign\n const prefetched = ((globalThis as any).__EXPO_PREFETCHED__ ||= {});\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(input));\n if (!(url in prefetched)) {\n prefetched[url] = fetchRSCInternal(url, params);\n prefetchedParams.set(prefetched[url], params);\n }\n};\n\nconst RefetchContext = createContext<(input: string, searchParams?: URLSearchParams) => void>(\n () => {\n throw new Error('Missing Root component');\n }\n);\nconst ElementsContext = createContext<Elements | null>(null);\n\nexport const Root = ({\n initialInput,\n initialParams,\n fetchCache = defaultFetchCache,\n\n unstable_onFetchData,\n children,\n}: {\n initialInput?: string;\n initialParams?: unknown;\n fetchCache?: FetchCache;\n unstable_onFetchData?: (data: unknown) => void;\n children: ReactNode;\n}) => {\n fetchCache[ON_FETCH_DATA] = unstable_onFetchData;\n const [elements, setElements] = useState(() =>\n fetchRSC(initialInput || '', initialParams, fetchCache)\n );\n useEffect(() => {\n fetchCache[SET_ELEMENTS] = setElements;\n }, [fetchCache, setElements]);\n const refetch = useCallback(\n (input: string, params?: unknown) => {\n // clear cache entry before fetching\n delete fetchCache[ENTRY];\n const data = fetchRSC(input, params, fetchCache);\n startTransition(() => {\n setElements((prev) => mergeElements(prev, data));\n });\n },\n [fetchCache]\n );\n return createElement(\n RefetchContext.Provider,\n { value: refetch },\n createElement(ElementsContext.Provider, { value: elements }, children)\n );\n};\n\nexport const useRefetch = () => use(RefetchContext);\n\nconst ChildrenContext = createContext<ReactNode>(undefined);\nconst ChildrenContextProvider = memo(ChildrenContext.Provider);\n\nexport const Slot = ({\n id,\n children,\n fallback,\n}: {\n id: string;\n children?: ReactNode;\n fallback?: ReactNode;\n}) => {\n const elementsPromise = use(ElementsContext);\n if (!elementsPromise) {\n throw new Error('Missing Root component');\n }\n const elements = use(elementsPromise);\n if (!(id in elements)) {\n if (fallback) {\n return fallback;\n }\n throw new Error('Not found: ' + id + '. Expected: ' + Object.keys(elements).join(', '));\n }\n return createElement(ChildrenContextProvider, { value: children }, elements[id]);\n};\n\nexport const Children = () => use(ChildrenContext);\n\n/**\n * ServerRoot for SSR\n * This is not a public API.\n */\nexport const ServerRoot = ({ elements, children }: { elements: Elements; children: ReactNode }) =>\n createElement(ElementsContext.Provider, { value: elements }, children);\n"]}
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/rsc/router/host.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uCAAuC;AACvC,YAAY,CAAC;;;;;;;AAEb,oEAAuC;AACvC,iCASe;AAEf,6EAAyD;AAEzD,qCAA8D;AAC9D,mCAAgC;AAChC,mCAAsD;AACtD,qDAAkD;AAClD,wCAAwD;AAExD,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,gBAAU,CAAC;AAEpD,sDAAsD;AACtD,MAAM,MAAM;AACV,mDAAmD;AACnD,OAAO,kBAAkB,KAAK,WAAW,CAAC;AAE5C,mCAAmC;AACnC,MAAM,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,6BAA6B;AAEjF,+GAA+G;AAC/G,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAEzD,IAAI,SAAS,GAAG,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAEzC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;IAC9B,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;CAC7B;AAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC5B,SAAS,IAAI,GAAG,CAAC;CAClB;AAED,IAAI,SAAS,KAAK,GAAG,EAAE;IACrB,MAAM,IAAI,KAAK,CACb,8BAA8B,SAAS,oFACrC,IAAA,2BAAY,GAAE,CAAC,aACjB,EAAE,CACH,CAAC;CACH;AAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE;IAC3D,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,wBAAS,CAAC,UAAU,CAAC;IAEtC,MAAM,mBAAmB,GACvB,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC;IAE9E,kJAAkJ;IAClJ,IAAI,mBAAmB,KAAK,KAAK,EAAE;QACjC,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;QAEjF,IAAI,QAAQ,EAAE;YACZ,0EAA0E;YAC1E,MAAM,IAAI,KAAK,CACb,6JAA6J,CAC9J,CAAC;SACH;QAED,sEAAsE;QACtE,MAAM,IAAI,KAAK,CACb,yPAAyP,CAC1P,CAAC;KACH;IAED,8EAA8E;IAC9E,8HAA8H;IAC9H,MAAM,IAAI,KAAK,CACb,sOAAsO,CACvO,CAAC;CACH;AAKD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,aAAa,GAAG,GAAG,CAAC;AAQ1B,MAAM,iBAAiB,GAAe,EAAE,CAAC;AAEzC,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK;IAC3B,CAAC,CAAC,EAAE;IACJ,CAAC,CAAC,0EAA0E;QAC1E;YACE,eAAe,EAAE,UAAU;YAC3B,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,GAAG;SACb,CAAC;AAER,MAAM,cAAc,GAAG;IACrB,GAAG,gBAAgB;IACnB,MAAM,EAAE,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,OAAQ;CACtC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,eAAkC,EAAqB,EAAE;IAClF,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,qGAAqG;QACrG,yEAAyE;QACzE,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE;YACnE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC;YACd,IAAI;gBACF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;aACnC;YAAC,MAAM;gBACN,+KAA+K;gBAC/K,IAAI,SAAS,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE;oBACpD,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;oBAC/D,gIAAgI;oBAChI,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;iBAC5B;gBACD,MAAM,IAAI,yBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;aACxF;YAED,MAAM,IAAI,yBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;SACrD;QAED,IAAI,YAAY,CAAC;QACjB,IAAI;YACF,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SACtC;QAAC,MAAM;YACN,MAAM,IAAI,yBAAgB,CACxB,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,OAAO,CACjB,CAAC;SACH;QACD,MAAM,IAAI,yBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC3F;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAKF,SAAS,SAAS,CAAI,CAAU,EAAE,CAAqB,EAAE,CAAS;IAChE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,CAAC;AACpD,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B,MAAM,aAAa,GAAG,CAAC,CAAW,EAAE,CAAW,EAAY,EAAE;IAC3D,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,OAAO,GAAa,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAChB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBACf,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,YAAY,CAAC,MAAM,CAAC;gBAC3B,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;gBACjB,OAAO,CAAC,YAAY,CAAC,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE,EAAE;oBACJ,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;oBACjB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,EACD,GAAG,EAAE;oBACH,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;oBACtB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,aAAa,GAAG,KAAK,EAChC,QAAgB,EAChB,IAAgB,EAChB,UAAU,GAAG,iBAAiB,EAC9B,EAAE;IACF,MAAM,GAAG,GAAG,yBAAyB,CAAC,SAAS,GAAG,IAAA,mBAAW,EAAC,IAAA,sBAAc,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,QAAQ,GACZ,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,IAAA,aAAK,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,IAAA,aAAK,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAC9D,CAAC;IACR,MAAM,IAAI,GAAG,eAAe,CAAoB,WAAW,CAAC,QAAQ,CAAC,EAAE;QACrE,UAAU,EAAE,CAAC,QAAgB,EAAE,IAAe,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;KAC7F,CAAC,CAAC;IACH,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,oDAAoD;QACpD,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;AAC7B,CAAC,CAAC;AArBW,QAAA,aAAa,iBAqBxB;AAEF,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAA6B,CAAC;AAElE,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,MAAe,EAAE,EAAE,CACxD,MAAM,KAAK,SAAS;IAClB,CAAC,CAAC,IAAA,aAAK,EAAC,GAAG,EAAE;QACT,kBAAkB;QAClB,OAAO,EAAE;YACP,GAAG,gBAAgB;YACnB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,OAAQ;SACtC;KACF,CAAC;IACJ,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,CAAC,IAAA,aAAK,EAAC,GAAG,EAAE;YACT,OAAO,EAAE;gBACP,GAAG,gBAAgB;gBACnB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,OAAQ;gBACrC,eAAe,EAAE,MAAM;aACxB;SACF,CAAC;QACJ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,IAAA,aAAK,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAC9D,CAAC;AAEH,MAAM,QAAQ,GAAG,CACtB,KAAa,EACb,MAAgB,EAChB,UAAU,GAAG,iBAAiB,EACpB,EAAE;IACZ,mCAAmC;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC1C,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QACF,UAAU,CAAC,6BAA6B,KAAK,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAChG,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;SACvE;aAAM;YACL,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3D;QACD,UAAU,CAAC,oBAAoB,GAAG,UAAU,CAAC;KAC9C;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;QACtD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAE,UAAkB,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IACpE,oDAAoD;IACpD,0GAA0G;IAC1G,MAAM,GAAG,GAAG,yBAAyB,CAAC,SAAS,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,0BAA0B,GAC9B,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QACjB,2CAA2C;QAC3C,uDAAuD;QACvD,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9F,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,eAAe,CAAoB,WAAW,CAAC,QAAQ,CAAC,EAAE;QACrE,UAAU,EAAE,CAAC,QAAgB,EAAE,IAAe,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;KAC7F,CAAC,CAAC;IACH,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,mEAAmE;IACnE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA9CW,QAAA,QAAQ,YA8CnB;AAEF,SAAS,yBAAyB,CAAC,IAAY;IAC7C,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACnD,MAAM,MAAM,GAAG,IAAA,4BAAsB,GAAE,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;SACH;QACD,4EAA4E;QAC5E,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;KACzC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxD,CAAC;AAEM,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,MAAgB,EAAQ,EAAE;IACnE,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAE,UAAkB,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,yBAAyB,CAAC,SAAS,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE;QACxB,UAAU,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChD,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KAC/C;AACH,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB;AAEF,MAAM,cAAc,GAAG,IAAA,qBAAa,EAElC,GAAG,EAAE;IACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AACH,MAAM,eAAe,GAAG,IAAA,qBAAa,EAAkB,IAAI,CAAC,CAAC;AAEtD,MAAM,IAAI,GAAG,CAAC,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,GAAG,iBAAiB,EAE9B,oBAAoB,EACpB,QAAQ,GAOT,EAAE,EAAE;IACH,UAAU,CAAC,aAAa,CAAC,GAAG,oBAAoB,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAC5C,IAAA,gBAAQ,EAAC,YAAY,IAAI,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,CACxD,CAAC;IACF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,UAAU,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;IACzC,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAA,mBAAW,EACzB,CAAC,KAAa,EAAE,MAAgB,EAAE,EAAE;QAClC,oCAAoC;QACpC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,IAAA,uBAAe,EAAC,GAAG,EAAE;YACnB,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IACF,OAAO,IAAA,qBAAa,EAClB,cAAc,CAAC,QAAQ,EACvB,EAAE,KAAK,EAAE,OAAO,EAAE,EAClB,IAAA,qBAAa,EAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CACvE,CAAC;AACJ,CAAC,CAAC;AArCW,QAAA,IAAI,QAqCf;AAEK,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAA,WAAG,EAAC,cAAc,CAAC,CAAC;AAAvC,QAAA,UAAU,cAA6B;AAEpD,MAAM,eAAe,GAAG,IAAA,qBAAa,EAAY,SAAS,CAAC,CAAC;AAC5D,MAAM,uBAAuB,GAAG,IAAA,YAAI,EAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAExD,MAAM,IAAI,GAAG,CAAC,EACnB,EAAE,EACF,QAAQ,EACR,QAAQ,GAKT,EAAE,EAAE;IACH,MAAM,eAAe,GAAG,IAAA,WAAG,EAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,eAAe,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC3C;IACD,MAAM,QAAQ,GAAG,IAAA,WAAG,EAAC,eAAe,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE;QACrB,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,EAAE,GAAG,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACzF;IACD,OAAO,IAAA,qBAAa,EAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC,CAAC;AArBW,QAAA,IAAI,QAqBf;AAEK,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAA,WAAG,EAAC,eAAe,CAAC,CAAC;AAAtC,QAAA,QAAQ,YAA8B;AAEnD;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAA+C,EAAE,EAAE,CAChG,IAAA,qBAAa,EAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;AAD5D,QAAA,UAAU,cACkD","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/client.ts#L1\n */\n\n//// <reference types=\"react/canary\" />\n'use client';\n\nimport Constants from 'expo-constants';\nimport {\n createContext,\n createElement,\n memo,\n useCallback,\n useState,\n startTransition,\n use,\n useEffect,\n} from 'react';\nimport type { ReactNode } from 'react';\nimport RSDWClient from 'react-server-dom-webpack/client';\n\nimport { MetroServerError, ReactServerError } from './errors';\nimport { fetch } from './fetch';\nimport { encodeInput, encodeActionId } from './utils';\nimport { getDevServer } from '../../getDevServer';\nimport { getOriginFromConstants } from '../../head/url';\n\nconst { createFromFetch, encodeReply } = RSDWClient;\n\n// TODO: Maybe this could be a bundler global instead.\nconst IS_DOM =\n // @ts-expect-error: Added via react-native-webview\n typeof ReactNativeWebView !== 'undefined';\n\n// NOTE: Ensured to start with `/`.\nconst RSC_PATH = '/_flight/' + process.env.EXPO_OS; // process.env.EXPO_RSC_PATH;\n\n// Using base URL for remote hosts isn't currently supported in DOM components as we use it for offline assets.\nconst BASE_URL = IS_DOM ? '' : process.env.EXPO_BASE_URL;\n\nlet BASE_PATH = `${BASE_URL}${RSC_PATH}`;\n\nif (!BASE_PATH.startsWith('/')) {\n BASE_PATH = '/' + BASE_PATH;\n}\n\nif (!BASE_PATH.endsWith('/')) {\n BASE_PATH += '/';\n}\n\nif (BASE_PATH === '/') {\n throw new Error(\n `Invalid React Flight path \"${BASE_PATH}\". The path should not live at the project root, e.g. /_flight/. Dev server URL: ${\n getDevServer().fullBundleUrl\n }`\n );\n}\n\nif (process.env.EXPO_OS !== 'web' && !window.location?.href) {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const originFromConstants =\n manifest?.extra?.router?.origin ?? manifest?.extra?.router?.generatedOrigin;\n\n // In legacy cases, this can be extraneously set to false since it was the default before we had a production hosting solution for native servers.\n if (originFromConstants === false) {\n const isExpoGo = typeof expo !== 'undefined' && globalThis.expo?.modules?.ExpoGo;\n\n if (isExpoGo) {\n // Updating is a bit easier in Expo Go as you don't need a native rebuild.\n throw new Error(\n 'The \"origin\" property in the app config (app.json) cannot be false when React Server Components is enabled. https://docs.expo.dev/guides/server-components/'\n );\n }\n\n // Add more context about updating the app.json in development builds.\n throw new Error(\n 'The \"origin\" property in the app config (app.json) cannot be \"false\" when React Server Components is enabled. Remove the \"origin\" property from your Expo config and rebuild the native app to resolve. https://docs.expo.dev/guides/server-components/'\n );\n }\n\n // This can happen if the user attempts to use React Server Components without\n // enabling the flags in the app.json. This will set origin to false and prevent the expo/metro-runtime polyfill from running.\n throw new Error(\n 'window.location.href is not defined. This is required for React Server Components to work correctly. Ensure React Server Components is correctly enabled in your project and config. https://docs.expo.dev/guides/server-components/'\n );\n}\n\ntype OnFetchData = (data: unknown) => void;\ntype SetElements = (updater: Elements | ((prev: Elements) => Elements)) => void;\n\nconst RSC_CONTENT_TYPE = 'text/x-component';\n\nconst ENTRY = 'e';\nconst SET_ELEMENTS = 's';\nconst ON_FETCH_DATA = 'o';\n\ntype FetchCache = {\n [ENTRY]?: [input: string, params: unknown, elements: Elements];\n [SET_ELEMENTS]?: SetElements;\n [ON_FETCH_DATA]?: OnFetchData | undefined;\n};\n\nconst defaultFetchCache: FetchCache = {};\n\nconst NO_CACHE_HEADERS: Record<string, string> =\n process.env.EXPO_OS === 'web'\n ? {}\n : // These are needed for iOS + Prod to get updates after the first request.\n {\n 'Cache-Control': 'no-cache',\n Pragma: 'no-cache',\n Expires: '0',\n };\n\nconst ACTION_HEADERS = {\n ...NO_CACHE_HEADERS,\n accept: RSC_CONTENT_TYPE,\n 'expo-platform': process.env.EXPO_OS!,\n};\n\nconst checkStatus = async (responsePromise: Promise<Response>): Promise<Response> => {\n // TODO: Combine with metro async fetch logic.\n const response = await responsePromise;\n if (!response.ok) {\n // NOTE(EvanBacon): Transform the Metro development error into a JS error that can be used by LogBox.\n // This was tested against using a Class component in a server component.\n if (__DEV__ && (response.status === 500 || response.status === 404)) {\n const errorText = await response.text();\n let errorJson;\n try {\n errorJson = JSON.parse(errorText);\n } catch {\n // `Unable to resolve module` error should respond as JSON from the dev server and sent to the master red box, this can get corrupt when it's returned as the formatted string.\n if (errorText.startsWith('Unable to resolve module')) {\n console.error('Unexpected Metro error format from dev server');\n // This is an unexpected state that occurs when the dev server renderer does not throw Metro errors in the expected JSON format.\n throw new Error(errorJson);\n }\n throw new ReactServerError(errorText, response.url, response.status, response.headers);\n }\n\n throw new MetroServerError(errorJson, response.url);\n }\n\n let responseText;\n try {\n responseText = await response.text();\n } catch {\n throw new ReactServerError(\n response.statusText,\n response.url,\n response.status,\n response.headers\n );\n }\n throw new ReactServerError(responseText, response.url, response.status, response.headers);\n }\n return response;\n};\n\ntype Elements = Promise<Record<string, ReactNode>> & {\n prev?: Record<string, ReactNode> | undefined;\n};\nfunction getCached<T>(c: () => T, m: WeakMap<object, T>, k: object): T {\n return (m.has(k) ? m : m.set(k, c())).get(k) as T;\n}\n\nconst cache1 = new WeakMap();\nconst mergeElements = (a: Elements, b: Elements): Elements => {\n const getResult = () => {\n const promise: Elements = new Promise((resolve, reject) => {\n Promise.all([a, b])\n .then(([a, b]) => {\n const nextElements = { ...a, ...b };\n delete nextElements._value;\n promise.prev = a;\n resolve(nextElements);\n })\n .catch((e) => {\n a.then(\n (a) => {\n promise.prev = a;\n reject(e);\n },\n () => {\n promise.prev = a.prev;\n reject(e);\n }\n );\n });\n });\n return promise;\n };\n const cache2 = getCached(() => new WeakMap(), cache1, a);\n return getCached(getResult, cache2, b);\n};\n\n/**\n * callServer callback\n * This is not a public API.\n */\nexport const callServerRSC = async (\n actionId: string,\n args?: unknown[],\n fetchCache = defaultFetchCache\n) => {\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(encodeActionId(actionId)));\n const response =\n args === undefined\n ? fetch(url, { headers: ACTION_HEADERS })\n : encodeReply(args).then((body) =>\n fetch(url, { method: 'POST', body, headers: ACTION_HEADERS })\n );\n const data = createFromFetch<Awaited<Elements>>(checkStatus(response), {\n callServer: (actionId: string, args: unknown[]) => callServerRSC(actionId, args, fetchCache),\n });\n fetchCache[ON_FETCH_DATA]?.(data);\n startTransition(() => {\n // FIXME this causes rerenders even if data is empty\n fetchCache[SET_ELEMENTS]?.((prev) => mergeElements(prev, data));\n });\n return (await data)._value;\n};\n\nconst prefetchedParams = new WeakMap<Promise<unknown>, unknown>();\n\nconst fetchRSCInternal = (url: string, params: unknown) =>\n params === undefined\n ? fetch(url, {\n // Disable caching\n headers: {\n ...NO_CACHE_HEADERS,\n 'expo-platform': process.env.EXPO_OS!,\n },\n })\n : typeof params === 'string'\n ? fetch(url, {\n headers: {\n ...NO_CACHE_HEADERS,\n 'expo-platform': process.env.EXPO_OS!,\n 'X-Expo-Params': params,\n },\n })\n : encodeReply(params).then((body) =>\n fetch(url, { method: 'POST', headers: ACTION_HEADERS, body })\n );\n\nexport const fetchRSC = (\n input: string,\n params?: unknown,\n fetchCache = defaultFetchCache\n): Elements => {\n // TODO: strip when \"is exporting\".\n if (process.env.NODE_ENV === 'development') {\n const refetchRsc = () => {\n delete fetchCache[ENTRY];\n const data = fetchRSC(input, params, fetchCache);\n fetchCache[SET_ELEMENTS]?.(() => data);\n };\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__ ||= [];\n const index = globalThis.__EXPO_RSC_RELOAD_LISTENERS__.indexOf(globalThis.__EXPO_REFETCH_RSC__);\n if (index !== -1) {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.splice(index, 1, refetchRsc);\n } else {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.push(refetchRsc);\n }\n globalThis.__EXPO_REFETCH_RSC__ = refetchRsc;\n }\n\n const entry = fetchCache[ENTRY];\n if (entry && entry[0] === input && entry[1] === params) {\n return entry[2];\n }\n\n // eslint-disable-next-line no-multi-assign\n const prefetched = ((globalThis as any).__EXPO_PREFETCHED__ ||= {});\n // TODO: Load from on-disk on native when indicated.\n // const reqPath = fetchOptions?.remote ? getAdjustedRemoteFilePath(url) : getAdjustedRemoteFilePath(url);\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(input));\n const hasValidPrefetchedResponse =\n !!prefetched[url] &&\n // HACK .has() is for the initial hydration\n // It's limited and may result in a wrong result. FIXME\n (!prefetchedParams.has(prefetched[url]) || prefetchedParams.get(prefetched[url]) === params);\n const response = hasValidPrefetchedResponse ? prefetched[url] : fetchRSCInternal(url, params);\n delete prefetched[url];\n const data = createFromFetch<Awaited<Elements>>(checkStatus(response), {\n callServer: (actionId: string, args: unknown[]) => callServerRSC(actionId, args, fetchCache),\n });\n fetchCache[ON_FETCH_DATA]?.(data);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n fetchCache[ENTRY] = [input, params, data];\n return data;\n};\n\nfunction getAdjustedRemoteFilePath(path: string): string {\n if (IS_DOM && process.env.NODE_ENV === 'production') {\n const origin = getOriginFromConstants();\n if (!origin) {\n throw new Error(\n 'Expo RSC: Origin not found in Constants. This is required for production DOM components using server actions.'\n );\n }\n // DOM components in production need to use the same origin logic as native.\n return new URL(path, origin).toString();\n }\n\n if (!IS_DOM && process.env.EXPO_OS === 'web') {\n return path;\n }\n\n return new URL(path, window.location.href).toString();\n}\n\nexport const prefetchRSC = (input: string, params?: unknown): void => {\n // eslint-disable-next-line no-multi-assign\n const prefetched = ((globalThis as any).__EXPO_PREFETCHED__ ||= {});\n const url = getAdjustedRemoteFilePath(BASE_PATH + encodeInput(input));\n if (!(url in prefetched)) {\n prefetched[url] = fetchRSCInternal(url, params);\n prefetchedParams.set(prefetched[url], params);\n }\n};\n\nconst RefetchContext = createContext<\n (input: string, searchParams?: URLSearchParams | string) => void\n>(() => {\n throw new Error('Missing Root component');\n});\nconst ElementsContext = createContext<Elements | null>(null);\n\nexport const Root = ({\n initialInput,\n initialParams,\n fetchCache = defaultFetchCache,\n\n unstable_onFetchData,\n children,\n}: {\n initialInput?: string;\n initialParams?: unknown;\n fetchCache?: FetchCache;\n unstable_onFetchData?: (data: unknown) => void;\n children: ReactNode;\n}) => {\n fetchCache[ON_FETCH_DATA] = unstable_onFetchData;\n const [elements, setElements] = useState(() =>\n fetchRSC(initialInput || '', initialParams, fetchCache)\n );\n useEffect(() => {\n fetchCache[SET_ELEMENTS] = setElements;\n }, [fetchCache, setElements]);\n const refetch = useCallback(\n (input: string, params?: unknown) => {\n // clear cache entry before fetching\n delete fetchCache[ENTRY];\n const data = fetchRSC(input, params, fetchCache);\n startTransition(() => {\n setElements((prev) => mergeElements(prev, data));\n });\n },\n [fetchCache]\n );\n return createElement(\n RefetchContext.Provider,\n { value: refetch },\n createElement(ElementsContext.Provider, { value: elements }, children)\n );\n};\n\nexport const useRefetch = () => use(RefetchContext);\n\nconst ChildrenContext = createContext<ReactNode>(undefined);\nconst ChildrenContextProvider = memo(ChildrenContext.Provider);\n\nexport const Slot = ({\n id,\n children,\n fallback,\n}: {\n id: string;\n children?: ReactNode;\n fallback?: ReactNode;\n}) => {\n const elementsPromise = use(ElementsContext);\n if (!elementsPromise) {\n throw new Error('Missing Root component');\n }\n const elements = use(elementsPromise);\n if (!(id in elements)) {\n if (fallback) {\n return fallback;\n }\n throw new Error('Not found: ' + id + '. Expected: ' + Object.keys(elements).join(', '));\n }\n return createElement(ChildrenContextProvider, { value: children }, elements[id]);\n};\n\nexport const Children = () => use(ChildrenContext);\n\n/**\n * ServerRoot for SSR\n * This is not a public API.\n */\nexport const ServerRoot = ({ elements, children }: { elements: Elements; children: ReactNode }) =>\n createElement(ElementsContext.Provider, { value: elements }, children);\n"]}
|
|
@@ -23,7 +23,7 @@ declare global {
|
|
|
23
23
|
toHavePathnameWithParams(pathname: string): R;
|
|
24
24
|
toHaveSegments(segments: string[]): R;
|
|
25
25
|
toHaveSearchParams(params: Record<string, string | string[]>): R;
|
|
26
|
-
toHaveRouterState(state:
|
|
26
|
+
toHaveRouterState(state: Record<string, unknown>): R;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAClB,OAAO,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAO,MAAM,EAAwB,MAAM,+BAA+B,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAKzD,cAAc,+BAA+B,CAAC;AAM9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG;IACxC,WAAW,IAAI,MAAM,CAAC;IACtB,qBAAqB,IAAI,MAAM,CAAC;IAChC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,cAAc,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YACpC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YAC9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YACjE,iBAAiB,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAClB,OAAO,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAO,MAAM,EAAwB,MAAM,+BAA+B,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAKzD,cAAc,+BAA+B,CAAC;AAM9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG;IACxC,WAAW,IAAI,MAAM,CAAC;IACtB,qBAAqB,IAAI,MAAM,CAAC;IAChC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,cAAc,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YACpC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YAC9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YACjE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACtD;KACF;CACF;AAED,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAE5D,wBAAgB,YAAY,CAC1B,OAAO,GAAE,iBAA2B,EACpC,EAAE,UAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAE,mBAAwB,GAClE,MAAM,CAqCR;AAED,eAAO,MAAM,UAAU;IACrB,yDAAyD;mBAC1C,MAAM;IAIrB,yDAAyD;eAC9C,MAAM;IAIjB,6DAA6D;kBAC/C,MAAM;IAIpB,oDAAoD;gBACxC,MAAM;IAOlB,qEAAqE;;IAIrE,wEAAwE;sBACtD,OAAO,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM;IAMvD,qEAAqE;;CAItE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oBAAkB;AAClB,mBAAiB;AAGjB,gEAAkF;AAClF,kDAA0B;AAE1B,+CAAiF;AAuCrD,8FAvCA,2BAAa,OAuCA;AAAE,+FAvCA,4BAAc,OAuCA;AAtCzD,0CAAuC;AACvC,+DAA4D;AAE5D,+DAAqD;AACrD,sDAA2C;AAE3C,uBAAuB;AACvB,gEAA8C;AAE9C,QAAQ,CAAC,GAAG,EAAE;IACZ,oBAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AA6BH,SAAgB,YAAY,CAC1B,UAA6B,OAAO,EACpC,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,KAA0B,EAAE;IAEnE,IAAI,CAAC,aAAa,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAA,qBAAM,EACnB,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAG,EAC1E,OAAO,CACR,CAAC;IAEF;;;;OAIG;IACH,oBAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,eAAe;YACb,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC1C,CAAC;QACD,qBAAqB;YACnB,OAAO,IAAA,mCAAgB,EAAC,oBAAK,CAAC,SAAU,EAAE,oBAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,cAAc;YACZ,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxCD,oCAwCC;AAEY,QAAA,UAAU,GAAG;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAY;QACnB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,yDAAyD;IACzD,IAAI,CAAC,IAAY;QACf,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,6DAA6D;IAC7D,OAAO,CAAC,IAAY;QAClB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAa;QAChB,MAAM,CAAC,uBAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,SAAS;QACP,OAAO,uBAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IACD,wEAAwE;IACxE,SAAS,CAAC,MAA8B,EAAE,IAAa;QACrD,uBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,UAAU;QACR,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAC","sourcesContent":["import './expect';\nimport './mocks';\n\nimport { NavigationState, PartialState } from '@react-navigation/native';\nimport { act, render, RenderResult, screen } from '@testing-library/react-native';\nimport React from 'react';\n\nimport { MockContextConfig, getMockConfig, getMockContext } from './mock-config';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { getPathFromState } from '../fork/getPathFromState';\nimport { ExpoLinkingOptions } from '../getLinkingConfig';\nimport { store } from '../global-state/router-store';\nimport { router } from '../imperative-api';\n\n// re-export everything\nexport * from '@testing-library/react-native';\n\nafterAll(() => {\n store.cleanup();\n});\n\nexport type RenderRouterOptions = Parameters<typeof render>[1] & {\n initialUrl?: any;\n linking?: Partial<ExpoLinkingOptions>;\n};\n\ntype Result = ReturnType<typeof render> & {\n getPathname(): string;\n getPathnameWithParams(): string;\n getSegments(): string[];\n getSearchParams(): Record<string, string | string[]>;\n getRouterState(): NavigationState<any> | PartialState<any>;\n};\n\ndeclare global {\n namespace jest {\n interface Matchers<R> {\n toHavePathname(pathname: string): R;\n toHavePathnameWithParams(pathname: string): R;\n toHaveSegments(segments: string[]): R;\n toHaveSearchParams(params: Record<string, string | string[]>): R;\n toHaveRouterState(state:
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oBAAkB;AAClB,mBAAiB;AAGjB,gEAAkF;AAClF,kDAA0B;AAE1B,+CAAiF;AAuCrD,8FAvCA,2BAAa,OAuCA;AAAE,+FAvCA,4BAAc,OAuCA;AAtCzD,0CAAuC;AACvC,+DAA4D;AAE5D,+DAAqD;AACrD,sDAA2C;AAE3C,uBAAuB;AACvB,gEAA8C;AAE9C,QAAQ,CAAC,GAAG,EAAE;IACZ,oBAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AA6BH,SAAgB,YAAY,CAC1B,UAA6B,OAAO,EACpC,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,KAA0B,EAAE;IAEnE,IAAI,CAAC,aAAa,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAA,qBAAM,EACnB,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAG,EAC1E,OAAO,CACR,CAAC;IAEF;;;;OAIG;IACH,oBAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,eAAe;YACb,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC1C,CAAC;QACD,qBAAqB;YACnB,OAAO,IAAA,mCAAgB,EAAC,oBAAK,CAAC,SAAU,EAAE,oBAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,cAAc;YACZ,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxCD,oCAwCC;AAEY,QAAA,UAAU,GAAG;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAY;QACnB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,yDAAyD;IACzD,IAAI,CAAC,IAAY;QACf,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,6DAA6D;IAC7D,OAAO,CAAC,IAAY;QAClB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAa;QAChB,MAAM,CAAC,uBAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,SAAS;QACP,OAAO,uBAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IACD,wEAAwE;IACxE,SAAS,CAAC,MAA8B,EAAE,IAAa;QACrD,uBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,UAAU;QACR,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAC","sourcesContent":["import './expect';\nimport './mocks';\n\nimport { NavigationState, PartialState } from '@react-navigation/native';\nimport { act, render, RenderResult, screen } from '@testing-library/react-native';\nimport React from 'react';\n\nimport { MockContextConfig, getMockConfig, getMockContext } from './mock-config';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { getPathFromState } from '../fork/getPathFromState';\nimport { ExpoLinkingOptions } from '../getLinkingConfig';\nimport { store } from '../global-state/router-store';\nimport { router } from '../imperative-api';\n\n// re-export everything\nexport * from '@testing-library/react-native';\n\nafterAll(() => {\n store.cleanup();\n});\n\nexport type RenderRouterOptions = Parameters<typeof render>[1] & {\n initialUrl?: any;\n linking?: Partial<ExpoLinkingOptions>;\n};\n\ntype Result = ReturnType<typeof render> & {\n getPathname(): string;\n getPathnameWithParams(): string;\n getSegments(): string[];\n getSearchParams(): Record<string, string | string[]>;\n getRouterState(): NavigationState<any> | PartialState<any>;\n};\n\ndeclare global {\n namespace jest {\n interface Matchers<R> {\n toHavePathname(pathname: string): R;\n toHavePathnameWithParams(pathname: string): R;\n toHaveSegments(segments: string[]): R;\n toHaveSearchParams(params: Record<string, string | string[]>): R;\n toHaveRouterState(state: Record<string, unknown>): R;\n }\n }\n}\n\nexport { MockContextConfig, getMockConfig, getMockContext };\n\nexport function renderRouter(\n context: MockContextConfig = './app',\n { initialUrl = '/', linking, ...options }: RenderRouterOptions = {}\n): Result {\n jest.useFakeTimers();\n\n const mockContext = getMockContext(context);\n\n // Force the render to be synchronous\n process.env.EXPO_ROUTER_IMPORT_MODE = 'sync';\n\n const result = render(\n <ExpoRoot context={mockContext} location={initialUrl} linking={linking} />,\n options\n );\n\n /**\n * This is a hack to ensure that React Navigation's state updates are processed before we run assertions.\n * Some updates are async and we need to wait for them to complete, otherwise will we get a false positive.\n * (that the app will briefly be in the right state, but then update to an invalid state)\n */\n store.subscribeToRootState(() => jest.runOnlyPendingTimers());\n\n return Object.assign(result, {\n getPathname(this: RenderResult): string {\n return store.routeInfoSnapshot().pathname;\n },\n getSegments(this: RenderResult): string[] {\n return store.routeInfoSnapshot().segments;\n },\n getSearchParams(this: RenderResult): Record<string, string | string[]> {\n return store.routeInfoSnapshot().params;\n },\n getPathnameWithParams(this: RenderResult): string {\n return getPathFromState(store.rootState!, store.linking!.config);\n },\n getRouterState(this: RenderResult) {\n return store.rootStateSnapshot();\n },\n });\n}\n\nexport const testRouter = {\n /** Navigate to the provided pathname and the pathname */\n navigate(path: string) {\n act(() => router.navigate(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Push the provided pathname and assert the pathname */\n push(path: string) {\n act(() => router.push(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Replace with provided pathname and assert the pathname */\n replace(path: string) {\n act(() => router.replace(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Go back in history and asset the new pathname */\n back(path?: string) {\n expect(router.canGoBack()).toBe(true);\n act(() => router.back());\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n canGoBack() {\n return router.canGoBack();\n },\n /** Update the current route query params and assert the new pathname */\n setParams(params: Record<string, string>, path?: string) {\n router.setParams(params);\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n dismissAll() {\n act(() => router.dismissAll());\n },\n};\n"]}
|