123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- "client";
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = AppRouter;
- exports.fetchServerResponse = fetchServerResponse;
- var _async_to_generator = require("@swc/helpers/lib/_async_to_generator.js").default;
- var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
- var _react = _interop_require_wildcard(require("react"));
- var _reactServerDomWebpack = require("next/dist/compiled/react-server-dom-webpack");
- var _appRouterContext = require("../../shared/lib/app-router-context");
- var _reducer = require("./reducer");
- var _hooksClientContext = require("./hooks-client-context");
- var _useReducerWithDevtools = require("./use-reducer-with-devtools");
- function AppRouter({ initialTree , initialCanonicalUrl , children , hotReloader }) {
- const initialState = (0, _react).useMemo(()=>{
- return {
- tree: initialTree,
- cache: {
- data: null,
- subTreeData: children,
- parallelRoutes: typeof window === 'undefined' ? new Map() : initialParallelRoutes
- },
- prefetchCache: new Map(),
- pushRef: {
- pendingPush: false,
- mpaNavigation: false
- },
- focusAndScrollRef: {
- apply: false
- },
- canonicalUrl: initialCanonicalUrl +
-
- (typeof window !== 'undefined' ? window.location.hash : '')
- };
- }, [
- children,
- initialCanonicalUrl,
- initialTree
- ]);
- const [{ tree , cache , prefetchCache , pushRef , focusAndScrollRef , canonicalUrl }, dispatch, sync, ] = (0, _useReducerWithDevtools).useReducerWithReduxDevtools(_reducer.reducer, initialState);
- (0, _react).useEffect(()=>{
-
- initialParallelRoutes = null;
- }, []);
-
- const { searchParams , pathname } = (0, _react).useMemo(()=>{
- const url = new URL(canonicalUrl, typeof window === 'undefined' ? 'http://n' : window.location.href);
-
- const searchParamsObj = {};
- url.searchParams.forEach((value, key)=>{
- searchParamsObj[key] = value;
- });
- return {
- searchParams: searchParamsObj,
- pathname: url.pathname
- };
- }, [
- canonicalUrl
- ]);
-
- const changeByServerResponse = (0, _react).useCallback((previousTree, flightData)=>{
- dispatch({
- type: _reducer.ACTION_SERVER_PATCH,
- flightData,
- previousTree,
- cache: {
- data: null,
- subTreeData: null,
- parallelRoutes: new Map()
- },
- mutable: {}
- });
- }, [
- dispatch
- ]);
-
- const appRouter = (0, _react).useMemo(()=>{
- const navigate = (href, navigateType, forceOptimisticNavigation)=>{
- return dispatch({
- type: _reducer.ACTION_NAVIGATE,
- url: new URL(href, location.origin),
- forceOptimisticNavigation,
- navigateType,
- cache: {
- data: null,
- subTreeData: null,
- parallelRoutes: new Map()
- },
- mutable: {}
- });
- };
- const routerInstance = {
-
- prefetch: _async_to_generator(function*(href) {
-
- if (prefetched.has(href)) {
- return;
- }
- prefetched.add(href);
- const url = new URL(href, location.origin);
- try {
- var
- ref;
-
- const r = fetchServerResponse(url, ((ref = window.history.state) == null ? void 0 : ref.tree) || initialTree, true);
- const [flightData] = yield r;
-
- _react.default.startTransition(()=>{
- dispatch({
- type: _reducer.ACTION_PREFETCH,
- url,
- flightData
- });
- });
- } catch (err) {
- console.error('PREFETCH ERROR', err);
- }
- }),
- replace: (href, options = {})=>{
-
- _react.default.startTransition(()=>{
- navigate(href, 'replace', Boolean(options.forceOptimisticNavigation));
- });
- },
- push: (href, options = {})=>{
-
- _react.default.startTransition(()=>{
- navigate(href, 'push', Boolean(options.forceOptimisticNavigation));
- });
- },
- reload: ()=>{
-
- _react.default.startTransition(()=>{
- dispatch({
- type: _reducer.ACTION_RELOAD,
-
- cache: {
- data: null,
- subTreeData: null,
- parallelRoutes: new Map()
- },
- mutable: {}
- });
- });
- }
- };
- return routerInstance;
- }, [
- dispatch,
- initialTree
- ]);
- (0, _react).useEffect(()=>{
-
- if (pushRef.mpaNavigation) {
- window.location.href = canonicalUrl;
- return;
- }
-
-
-
- const historyState = {
- __NA: true,
- tree
- };
- if (pushRef.pendingPush) {
-
- pushRef.pendingPush = false;
- window.history.pushState(historyState, '', canonicalUrl);
- } else {
- window.history.replaceState(historyState, '', canonicalUrl);
- }
- sync();
- }, [
- tree,
- pushRef,
- canonicalUrl,
- sync
- ]);
-
-
- if (typeof window !== 'undefined') {
-
- window.nd = {
- router: appRouter,
- cache,
- prefetchCache,
- tree
- };
- }
-
- const onPopState = (0, _react).useCallback(({ state })=>{
- if (!state) {
-
- return;
- }
-
-
- if (!state.__NA) {
- window.location.reload();
- return;
- }
-
-
-
- _react.default.startTransition(()=>{
- dispatch({
- type: _reducer.ACTION_RESTORE,
- url: new URL(window.location.href),
- tree: state.tree
- });
- });
- }, [
- dispatch
- ]);
-
- (0, _react).useEffect(()=>{
- window.addEventListener('popstate', onPopState);
- return ()=>{
- window.removeEventListener('popstate', onPopState);
- };
- }, [
- onPopState
- ]);
- return _react.default.createElement(_hooksClientContext.PathnameContext.Provider, {
- value: pathname
- }, _react.default.createElement(_hooksClientContext.SearchParamsContext.Provider, {
- value: searchParams
- }, _react.default.createElement(_appRouterContext.GlobalLayoutRouterContext.Provider, {
- value: {
- changeByServerResponse,
- tree,
- focusAndScrollRef
- }
- }, _react.default.createElement(_appRouterContext.AppRouterContext.Provider, {
- value: appRouter
- }, _react.default.createElement(_appRouterContext.LayoutRouterContext.Provider, {
- value: {
- childNodes: cache.parallelRoutes,
- tree: tree,
-
-
- url: canonicalUrl
- }
- }, _react.default.createElement(ErrorOverlay, null,
- cache.subTreeData),
- hotReloader)))));
- }
- 'client';
- function fetchServerResponse(url, flightRouterState, prefetch) {
- return _fetchServerResponse.apply(this, arguments);
- }
- function _fetchServerResponse() {
- _fetchServerResponse = _async_to_generator(function*(url, flightRouterState, prefetch) {
- const flightUrl = new URL(url);
- const searchParams = flightUrl.searchParams;
-
- searchParams.append('__flight__', '1');
-
- searchParams.append('__flight_router_state_tree__', JSON.stringify(flightRouterState));
- if (prefetch) {
- searchParams.append('__flight_prefetch__', '1');
- }
- const res = yield fetch(flightUrl.toString());
-
- const flightData = yield (0, _reactServerDomWebpack).createFromFetch(Promise.resolve(res));
- return [
- flightData
- ];
- });
- return _fetchServerResponse.apply(this, arguments);
- }
- function ErrorOverlay({ children }) {
- if (process.env.NODE_ENV === 'production') {
- return _react.default.createElement(_react.default.Fragment, null, children);
- } else {
- const { ReactDevOverlay , } = require('next/dist/compiled/@next/react-dev-overlay/dist/client');
- return _react.default.createElement(ReactDevOverlay, {
- globalOverlay: true
- }, children);
- }
- }
- let initialParallelRoutes = typeof window === 'undefined' ? null : new Map();
- const prefetched = new Set();
- if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
- Object.defineProperty(exports.default, '__esModule', { value: true });
- Object.assign(exports.default, exports);
- module.exports = exports.default;
- }
|