"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSearchParams = useSearchParams; exports.usePathname = usePathname; Object.defineProperty(exports, "ServerInsertedHTMLContext", { enumerable: true, get: function() { return _serverInsertedHtml.ServerInsertedHTMLContext; } }); Object.defineProperty(exports, "useServerInsertedHTML", { enumerable: true, get: function() { return _serverInsertedHtml.useServerInsertedHTML; } }); exports.useRouter = useRouter; exports.useSelectedLayoutSegments = useSelectedLayoutSegments; exports.useSelectedLayoutSegment = useSelectedLayoutSegment; Object.defineProperty(exports, "redirect", { enumerable: true, get: function() { return _redirect.redirect; } }); Object.defineProperty(exports, "notFound", { enumerable: true, get: function() { return _notFound.notFound; } }); var _react = require("react"); var _appRouterContext = require("../../shared/lib/app-router-context"); var _hooksClientContext = require("../../shared/lib/hooks-client-context"); var _bailoutToClientRendering = require("./bailout-to-client-rendering"); var _serverInsertedHtml = require("../../shared/lib/server-inserted-html"); var _redirect = require("./redirect"); var _notFound = require("./not-found"); const INTERNAL_URLSEARCHPARAMS_INSTANCE = Symbol('internal for urlsearchparams readonly'); function readonlyURLSearchParamsError() { return new Error('ReadonlyURLSearchParams cannot be modified'); } class ReadonlyURLSearchParams { [Symbol.iterator]() { return this[INTERNAL_URLSEARCHPARAMS_INSTANCE][Symbol.iterator](); } append() { throw readonlyURLSearchParamsError(); } delete() { throw readonlyURLSearchParamsError(); } set() { throw readonlyURLSearchParamsError(); } sort() { throw readonlyURLSearchParamsError(); } constructor(urlSearchParams){ // Since `new Headers` uses `this.append()` to fill the headers object ReadonlyHeaders can't extend from Headers directly as it would throw. this[INTERNAL_URLSEARCHPARAMS_INSTANCE] = urlSearchParams; this.entries = urlSearchParams.entries.bind(urlSearchParams); this.forEach = urlSearchParams.forEach.bind(urlSearchParams); this.get = urlSearchParams.get.bind(urlSearchParams); this.getAll = urlSearchParams.getAll.bind(urlSearchParams); this.has = urlSearchParams.has.bind(urlSearchParams); this.keys = urlSearchParams.keys.bind(urlSearchParams); this.values = urlSearchParams.values.bind(urlSearchParams); this.toString = urlSearchParams.toString.bind(urlSearchParams); } } function useSearchParams() { const searchParams = (0, _react).useContext(_hooksClientContext.SearchParamsContext); const readonlySearchParams = (0, _react).useMemo(()=>{ return new ReadonlyURLSearchParams(searchParams || new URLSearchParams()); }, [ searchParams ]); if ((0, _bailoutToClientRendering).bailoutToClientRendering()) { // TODO-APP: handle dynamic = 'force-static' here and on the client return readonlySearchParams; } if (!searchParams) { throw new Error('invariant expected search params to be mounted'); } return readonlySearchParams; } function usePathname() { return (0, _react).useContext(_hooksClientContext.PathnameContext); } function useRouter() { const router = (0, _react).useContext(_appRouterContext.AppRouterContext); if (router === null) { throw new Error('invariant expected app router to be mounted'); } return router; } // TODO-APP: handle parallel routes function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { let node; if (first) { // Use the provided parallel route key on the first parallel route node = tree[1][parallelRouteKey]; } else { // After first parallel route prefer children, if there's no children pick the first parallel route. const parallelRoutes = tree[1]; var _children; node = (_children = parallelRoutes.children) != null ? _children : Object.values(parallelRoutes)[0]; } if (!node) return segmentPath; const segment = node[0]; const segmentValue = Array.isArray(segment) ? segment[1] : segment; if (!segmentValue) return segmentPath; segmentPath.push(segmentValue); return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); } function useSelectedLayoutSegments(parallelRouteKey = 'children') { const { tree } = (0, _react).useContext(_appRouterContext.LayoutRouterContext); return getSelectedLayoutSegmentPath(tree, parallelRouteKey); } function useSelectedLayoutSegment(parallelRouteKey = 'children') { const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey); if (selectedLayoutSegments.length === 0) { return null; } return selectedLayoutSegments[0]; } 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; } //# sourceMappingURL=navigation.js.map