vuer 0.0.67__py3-none-any.whl → 0.0.68__py3-none-any.whl
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.
Potentially problematic release.
This version of vuer might be problematic. Click here for more details.
- vuer/__pycache__/events.cpython-311.pyc +0 -0
- vuer/__pycache__/server.cpython-311.pyc +0 -0
- vuer/client_build/404.html +4 -4
- vuer/client_build/assets/chunks/chunk-BAlAa4Lb.js +3 -0
- vuer/client_build/assets/chunks/chunk-BAlAa4Lb.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-BPjIPZ-5.js +11201 -0
- vuer/client_build/assets/chunks/chunk-BPjIPZ-5.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-BUjbjpZo.js +3 -0
- vuer/client_build/assets/chunks/chunk-BUjbjpZo.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-BhBOHBDA.js +281 -0
- vuer/client_build/assets/chunks/chunk-BhBOHBDA.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-CKREfZ-q.js +8555 -0
- vuer/client_build/assets/chunks/chunk-CKREfZ-q.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-CQIL0Xd9.js +53 -0
- vuer/client_build/assets/chunks/chunk-CQIL0Xd9.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-CcVTpo0V.js +14934 -0
- vuer/client_build/assets/chunks/chunk-CcVTpo0V.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-CxXHyfhp.js +2 -0
- vuer/client_build/assets/chunks/chunk-CxXHyfhp.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-CyJGVc6_.js +2 -0
- vuer/client_build/assets/chunks/chunk-CyJGVc6_.js.map +1 -0
- vuer/client_build/assets/chunks/chunk-rdAuxDM1.js +102 -0
- vuer/client_build/assets/chunks/chunk-rdAuxDM1.js.map +1 -0
- vuer/client_build/assets/entries/entry-client-routing.BSaUS4Zk.js +5 -0
- vuer/client_build/assets/entries/entry-client-routing.BSaUS4Zk.js.map +1 -0
- vuer/client_build/assets/entries/pages_editor.C0a9TsP6.js +2 -0
- vuer/client_build/assets/entries/pages_editor.C0a9TsP6.js.map +1 -0
- vuer/client_build/assets/entries/pages_error.CI4fTdMq.js +2 -0
- vuer/client_build/assets/entries/pages_error.CI4fTdMq.js.map +1 -0
- vuer/client_build/assets/entries/pages_index.BasHwMRM.js +2 -0
- vuer/client_build/assets/entries/pages_index.BasHwMRM.js.map +1 -0
- vuer/client_build/assets/entries/pages_simple.BMpy5Em5.js +2 -0
- vuer/client_build/assets/entries/pages_simple.BMpy5Em5.js.map +1 -0
- vuer/client_build/assets/entries/pages_studio.qAQVW6ug.js +150 -0
- vuer/client_build/assets/entries/pages_studio.qAQVW6ug.js.map +1 -0
- vuer/client_build/assets/static/onRenderClient.BJHLNmZB.css +1 -0
- vuer/client_build/editor/index.html +6 -6
- vuer/client_build/index.html +6 -6
- vuer/client_build/pages/editor/icons/cursor.d.ts +2 -0
- vuer/client_build/simple/index.html +5 -5
- vuer/client_build/src/components/ControlLayout/ControlLayout.d.ts +1 -0
- vuer/client_build/src/components/ControlLayout/LayoutBottom/LayoutBottom.d.ts +1 -0
- vuer/client_build/src/components/ControlLayout/LayoutLeft/LayoutLeft.d.ts +1 -0
- vuer/client_build/src/components/ControlLayout/LayoutRight/LayoutRight.d.ts +1 -0
- vuer/client_build/src/components/ControlLayout/LayoutTop/LayoutTop.d.ts +1 -0
- vuer/client_build/studio/index.html +6 -6
- vuer/schemas/__pycache__/__init__.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/html_components.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/material_components.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/scene_components.cpython-311.pyc +0 -0
- vuer/schemas/scene_components.py +39 -0
- vuer/server.py +12 -5
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/METADATA +1 -1
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/RECORD +58 -19
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/WHEEL +0 -0
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/entry_points.txt +0 -0
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/licenses/LICENSE +0 -0
- {vuer-0.0.67.dist-info → vuer-0.0.68.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":["unique","arr","PROJECT_VERSION","projectInfo","projectKey","getGlobalObject","key","defaultValue","globalObjects","getGlobalObjects","pc","_","p","s","globalObject","clientRuntimesClonflict","clientNotSingleInstance","assertSingleInstance","versions","assertUsage","assertWarning","assertSingleInstance_onClientEntryClientRouting","isProduction","assertSingleInstance_onAssertModuleLoad","condition","errorMessage","errMsg","onlyOnce","showStackTrace","msg","alreadyLogged","isNodeJS","createErrorWithCleanStackTrace","numberOfStackTraceLinesToRemove","err","clean","errStack","stackLines","splitByLine","linesRemoved","line","isStackTraceLine","str","isObject","value","logType","projectTag","projectTagWithVersion","assert","debugInfo","debugStr","debugInfoSerialized","addWhitespace","addPrefixAssertType","addPrefixProjctName","internalError","usageError","getProjectError","assertInfo","tag","prefix","color","showProjectVersion","isBrowser","state","assertClientRouting","assertNoContradiction","checkIfClientRouting","noContradiction","slice","thing","from","to","sliceArray","list","listSlice","start","end","el","parseUrl","url","baseServer","isUrl","urlWithoutHash","hashList","hashOriginal","hash","decodeSafe","urlWithoutHashNorSearch","searchList","searchOriginal","search","searchAll","val","protocol","origin","pathnameAbsoluteWithBase","getPathnameAbsoluteWithBase","pathnameOriginal","assertUrlComponents","pathname","hasBaseServer","removeBaseServer","href","createUrlFromComponents","host","hostname","port","parseHost","decodePathname","urlComponent","urlPathname","dir","parseOrigin","baseURI","_a","base","resolveUrlPathnameRelative","isUrlWithProtocol","uriWithoutProtocol","parseProtocol","rest","ret","portStr","uri","SEP","before","after","SEP2","isUrlProtocol","pathnameRelative","stack","parts","baseRestoreTrailingSlash","i","pathnameAbsolute","isBaseServer","baseServerNormalized","urlRecreated","isUrlPathnameRelative","isUrlRedirectTarget","isUri","c","isUrlExternal","assertUsageUrlPathnameAbsolute","errPrefix","assertUsageUrl","allowRelative","isRedirectTarget","objectAssign","obj","objAddendum","isCallable","higherFirst","getValue","element1","element2","val1","val2","lowerFirst","makeFirst","makeLast","element","isArray","isArrayOfStrings","v","isObjectOfStrings","hasProp","prop","type","propValue","isPlainObject","compareString","str1","str2","isNotNullish","stringifyStringArray","stringList","assertPosixPath","path","isPropertyGetter","descriptor","isPromise","getValuePrintable","escapeRegex","changeEnumerable","enumerable","objectDefineProperty","get","args","enforceTrue","assertExportValues","pageFile","exportName","explainer","forbiddenDefaultExports","assertDefaultExports","defaultExportName","filePath","determinePageIdOld","pageSuffix","pageId","assertPageFilePath","getErrorPageId","pageFilesAll","pageConfigs","errorPageConfigs","errorPageIds","isErrorPageId","errorPageId","_isV1Design","isErrorPage","pageConfig","extJavaScript","extJsx","extTemplates","scriptFileExtensionList","isScriptFile","yes","ext","isJavaScriptFile","yes1","yes2","isTemplateFile","fileTypes","determineFileType","suffix1","suffix2","getPageFileObject","isRelevant","isRendererFilePath","isAncestorDefaultPage","fileType","env","isDefaultFilePath","defaultPageFilePath","defaultPageDir","filePathSegment","getExportPath","fileExportPathToShowToUser","configName","exportObjectPath","suffix","getConfigDefinedAt","sentenceBegin","definedAtData","begin","getDefinedAtString","getConfigDefinedAtOptional","files","source","filePathToShowToUser","exportPath","types","pattern","flags","serializer","deserializer","parse","parseTransform","reviver","match","deserialize","EXPORTS_IGNORE","TOLERATE_SIDE_EXPORTS","assertPlusFileExport","fileExports","exportNames","isValid","exportNamesValid","exportNamesInvalid","e","exportDefault","exportNamed","exportInvalid","parseConfigValuesSerialized","configValuesSerialized","parseConfigValuesSerialized_tmp","parsePageConfigs","pageConfigsSerialized","pageConfigGlobalSerialized","pageConfigSerialized","configValues","routeFilesystem","loadConfigValuesAll","assertRouteConfigValue","pageConfigGlobal","configValue","configValueType","configDefinedAt","configValueSeriliazed","valueSerialized","common","valueSerializedElement","sideExports","parseValueSerialized","definedAtFile","addSideExports","sideExport","getDefinedAtFile","exportValues","valueWasFound","exportValue","parseGlobResults","pageFilesExports","assertPageConfigsSerialized","assertPageConfigGlobalSerialized","pageFilesMap","parseGlobResult","globValue","loadModule","assertLoadModule","moduleExports","pageFiles","globObject","globFiles","setPageFiles","getPageFilesAll","isClientSide","allPageIds","getAllPageIds","allPageFiles","fileIds","isDefaultPageFile","allPageIds2","getPageFilesClientSide","determine","getPageFilesServerSide","envIsClient","pageFilesRelevant","getPageFilesSorter","getPageIdFile","iso","pageIdFile","pageIdFileEnv","pageIdFileIso","getRendererFile","rendererFileEnv","rendererFileIso","defaultFilesNonRenderer","e1First","e2First","noOrder","e1","e2","e1_isRenderer","e2_isRenderer","e1_distance","getPathDistance","e2_distance","pathA","pathB","idx","pathAWithoutCommon","pathBWithoutCommon","distanceA","distanceB","getPageConfig","getConfigValueFilePathToShowToUser","getHookFilePathToShowToUser","getPageContextExports","configEntries","config","exportsAll","getExportValues","isFromDefaultExport","sources","addSrc","src","configValueFilePathToShowToUser","definedAt","pageExports","createObjectWithDeprecationWarning","exports","values","_fileType","_isFromDefaultExport","defaultExportValue","assertIsBrowser","onLoad","humanizeTime","milliseconds","seconds","round","plural","minutes","n","rounded","executeHook","hookFnCaller","hook","pageContext","hookName","hookFilePath","timeoutErr","timeoutWarn","resolve","reject","promise","resolve_","reject_","clearTimeouts","currentTimeoutWarn","currentTimeoutErr","isNotDisabled","providePageContext","timeout","getCurrentUrl","options","urlCurrent","getPropAccessNotation","isKeyDotNotationCompatible","isReact","isReact1","_b","isReact2","_d","_c","isReact3","isSameErrorMessage","err1","err2","redirectHard","sleep","r","throttle","func","waitTime","isQueued","onPageHide","listener","onPageShow","augmentType","clone","initHistoryState","hasModifications","getTimestamp","getScrollPosition","assertState","replaceHistoryState","getHistoryState","saveScrollPosition","scrollPosition","pushHistory","overwriteLastHistoryEntry","timestamp","pushHistoryState","url_","monkeyPatchHistoryPushState","pushStateOriginal","stateOriginal","stateEnhanced","isVikeEnhanced","getPageContextSerializedInHtml","id","elem","pageContextJson","pageContextSerializedInHtml","analyzePageServerSide","pageFilesServerSideOnly","getConfigValueTyped","assertConfigValueType","getConfigValueRuntime","typeActual","valuePrintable","problem","getHook","hooksTimeout","hookTimeout","getHookTimeout","hookFn","file","assertHookFn","getHookFromPageConfigGlobal","getHookTimeoutDefault","assertHook","hooksTimeoutProvidedByUser","hooksTimeoutProvidedbyUserNormalized","getHooksTimeoutProvidedByUserNormalized","providedbyUser","hooksTimeoutProvidedByUserNormalized","hookTimeoutProvidedbyUser","error","warning","timeoutName","timeoutVal","sortPageContext","descriptors","key1","key2","addIs404ToPageProps","assertIs404","addIs404","pageProps","notSerializable","getPageContextProxyForUser","propName","passToClientHint","handleVueReactivity","isWhitelisted","WHITELIST","preparePageContextForUserConsumptionClientSide","isClientRouting","pageContextTyped","Page","resolveGetters","pageContextForUserConsumption","BUILT_IN_CLIENT_ROUTER","BUILT_IN_CLIENT","removeBuiltInOverrides","urlToFile","fileExtension","doNotCreateExtraDirectory","hasTrailingSlash","pathnameModified","pageContextJsonFileExtension","getPageContextRequestUrl","assertPageContextProvidedByUser","pageContextProvidedByUser","assertHookReturnedObject","keysExpected","keysUnknown","keys","assertOnBeforeRenderHookReturn","hookReturnValue","isObjectWithKeys","joinEnglish","conjunction","colorizer","firsts","last","errIntro","executeGuardHook","prepareForUserConsumption","findPageGuard","guard","res","hookResult","pageRouteFile","AbortRender","pageContextAbort","stamp","isAbortError","isAbortPageContext","getPageContextFromAllRewrites","pageContextsFromRewrite","assertNoInfiniteLoop","pageContextFromAllRewrites","pageContextFromRewrite","urlRewrites","urlRewrite","loop","assertNoInfiniteAbortLoop","rewriteCount","redirectCount","abortCalls","pageContextInitIsPassedToClient","isServerSideError","getPageContextFromHooks_serialized","pageContextSerialized","processPageContextFromServer","getPageContextFromHooks_isHydration","hookClientOnlyExists","pageContextFromHook","executeHookClientSide","getPageContextFromHooks_isNotHydration","hasPageContextFromServer","hasPageContextServer","fetchPageContextFromServer","pageContextFromServer","pageContextFromOnBeforeRender","pageContextFromData","setPageContextInitIsPassedToClient","hookServerOnlyExists","hookEnv","hasOnBeforeRenderServerSideOnlyHook","pageContextUrl","response","contentType","contentTypeCorrect","isCorrect","responseText","getPageContextUrlComputed","assertPageContextUrlComputed","pageContextUrlComputed","urlPathnameGetter","urlGetter","urlParsedGetter","getUrlParsed","urlResolved","baseToBeRemoved","urlHandler","urlParsed","hashIsAvailable","warnHashNotAvailable","urlParsedEnhanced","assertPageContextUrl","deduceRouteStringFromFilesystemPath","filesystemRoots","fsBase","filesystemRoot","filesystemRoute","urlRoot","resolveRouteFunction","routeFunction","routeDefinedAtString","result","assertSyncRouting","precedence","assertRouteParams","routeParams","warnDeprecatedAllowKey","allowKey","loadPageRoutes","onBeforeRouteHook","getGlobalHooks","getPageRoutes","pageRoutes","comesFromV1PageConfig","pageRoute","route","definedAtString","routeString","definedBy","onBeforeRoute","dirname","paths","dirPath","getBaseServer","createPageContext","urlOriginal","findPageConfig","loadConfigValues","isDev","configValuesLoaded","loadUserFilesClientSide","pageFilesClientSide","pageConfigLoaded","isFetchError","pageContextExports","pageContextAddendum","isErrorFetchingStaticAssets","skipLink","linkTag","isHashUrl","isNewTabLink","isVikeLink","isDisableAutomaticLinkInterception","target","rel","removeHash","getPrefetchSettings","getPrefetchStaticAssets","prefetchAttribute","getPrefetchAttribute","prefetchStaticAssets","wrongUsageMsg","when","correctValue","attr","attrOld","deprecationNotice","linkAlreadyPrefetched","isAlreadyPrefetched","getUrlPathname","markAsAlreadyPrefetched","getExportNames","analyzeExports","pageFilesServerSide","isHtmlOnly","assertClientSideRenderHook","hasClientSideRenderHook","determineClientEntry","clientEntries","clientDependencies","clientEntry","getVikeClientEntry","analyzePageClientSide","removeOverridenPageFiles","analyzePageClientSideInit","sharedPageFilesAlreadyLoaded","pageFilesClientSide_","analyzeClientSide","isClientSideRoutable","clientEntryLoaded","PARAM_TOKEN_NEW","PARAM_TOKEN_OLD","assertRouteString","errPrefix2","highlight","resolveRouteString","segments","parseRouteString","routeRegexStrInner","segment","routeRegex","routeRegexMatch","segmentsValue","globIdx","hasMultipleGlobs","param","pushStatic","segmentLast","isParam","analyzeRouteString","countStaticParts","numberOfStaticPartsBeginning","numberOfStaticParts","sum","a","numberOfParams","numberOfGlobs","routeSegment","isStaticRouteString","resolvePrecendence","routeMatches","sortMatches","routeMatch","routeMatch1","routeMatch2","precedence1","precedence2","executeOnBeforeRouteHook","pageContextFromOnBeforeRouteHook","getPageContextFromHook","hookReturn","deprecatedReturn","pageContextAddendumHook","_debug","debug","pageContextFromRoute","routeType","winner","prefetchAssets","disableClientRouting","addLinkPrefetchHandlers","prefetchIfPossible","observer","entries","entry","executeOnRenderClientHook","renderHook","urlToShowToUser","getUrlToShowToUser","pageClientsFilesLoaded","setScrollPosition","scrollTarget","setScroll","scrollToTopOrHash","getUrlHash","hashTarget","scroll","done","autoSaveScrollPosition","getState","onBrowserHistoryNavigation","currentState","isUserLandPushStateNavigation","isHashNavigation","isBackwardNavigation","renderPageClientSide","updateState","setupNativeScrollRestoration","browserNativeScrollRestoration_enable","browserNativeScrollRestoration_disable","setInitialRenderIsDone","renderArgs","isClientSideNavigation","isRenderOutdated","setHydrationCanBeAborted","isFirstRender","getIsRenderOutdated","renderPageNominal","onError","renderErrorPage","getPageContextBegin","previousPageContext","onPageTransitionStartHook","pageContextRouted","isClientRoutable","isSamePage","handleErrorFetchingStaticAssets","pageContextAugmented","renderPageView","urlRedirect","changeUrl","onRenderClientError","log","renderNumber","hydrationCanBeAborted","isRenderCleanup","getRenderCount","onLinkClick","handler","ev","isNormalLeftClick","findLinkTag","parentNode","installClientRouter","initHistoryAndScroll","renderPromise","render"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122],"sources":["../../../../node_modules/vike/dist/esm/utils/unique.js","../../../../node_modules/vike/dist/esm/utils/PROJECT_VERSION.js","../../../../node_modules/vike/dist/esm/utils/projectInfo.js","../../../../node_modules/vike/dist/esm/utils/getGlobalObject.js","../../../../node_modules/@brillout/picocolors/dist/esm/picocolors.browser.js","../../../../node_modules/vike/dist/esm/utils/assertSingleInstance.js","../../../../node_modules/vike/dist/esm/utils/isNodeJS.js","../../../../node_modules/vike/dist/esm/utils/createErrorWithCleanStackTrace.js","../../../../node_modules/vike/dist/esm/utils/isObject.js","../../../../node_modules/vike/dist/esm/utils/assert.js","../../../../node_modules/vike/dist/esm/utils/isBrowser.js","../../../../node_modules/vike/dist/esm/utils/assertRoutingType.js","../../../../node_modules/vike/dist/esm/utils/slice.js","../../../../node_modules/vike/dist/esm/utils/parseUrl.js","../../../../node_modules/vike/dist/esm/utils/objectAssign.js","../../../../node_modules/vike/dist/esm/utils/isCallable.js","../../../../node_modules/vike/dist/esm/utils/sorter.js","../../../../node_modules/vike/dist/esm/utils/isArray.js","../../../../node_modules/vike/dist/esm/utils/isArrayOfStrings.js","../../../../node_modules/vike/dist/esm/utils/isObjectOfStrings.js","../../../../node_modules/vike/dist/esm/utils/hasProp.js","../../../../node_modules/vike/dist/esm/utils/isPlainObject.js","../../../../node_modules/vike/dist/esm/utils/compareString.js","../../../../node_modules/vike/dist/esm/utils/isNotNullish.js","../../../../node_modules/vike/dist/esm/utils/stringifyStringArray.js","../../../../node_modules/vike/dist/esm/utils/filesystemPathHandling.js","../../../../node_modules/vike/dist/esm/utils/isPropertyGetter.js","../../../../node_modules/vike/dist/esm/utils/isPromise.js","../../../../node_modules/vike/dist/esm/utils/getValuePrintable.js","../../../../node_modules/vike/dist/esm/utils/escapeRegex.js","../../../../node_modules/vike/dist/esm/utils/changeEnumerable.js","../../../../node_modules/vike/dist/esm/utils/objectDefineProperty.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/assert_exports_old_design.js","../../../../node_modules/vike/dist/esm/shared/determinePageIdOld.js","../../../../node_modules/vike/dist/esm/shared/assertPageFilePath.js","../../../../node_modules/vike/dist/esm/shared/error-page.js","../../../../node_modules/vike/dist/esm/utils/isScriptFile.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/fileTypes.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/getPageFileObject.js","../../../../node_modules/vike/dist/esm/shared/page-configs/getExportPath.js","../../../../node_modules/vike/dist/esm/shared/page-configs/getConfigDefinedAt.js","../../../../node_modules/@brillout/json-serializer/dist/esm/types.js","../../../../node_modules/@brillout/json-serializer/dist/esm/parse.js","../../../../node_modules/vike/dist/esm/shared/page-configs/assertPlusFileExport.js","../../../../node_modules/vike/dist/esm/shared/page-configs/serialize/parsePageConfigs.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/parseGlobResults.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/setPageFiles.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/getAllPageIdFiles.js","../../../../node_modules/vike/dist/esm/shared/page-configs/helpers.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/getExports.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/pageFiles.js","../../../../node_modules/vike/dist/esm/utils/assertIsBrowser.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/onLoad.js","../../../../node_modules/vike/dist/esm/client/server-routing-runtime/onLoad.js","../../../../node_modules/vike/dist/esm/utils/humanizeTime.js","../../../../node_modules/vike/dist/esm/shared/hooks/executeHook.js","../../../../node_modules/vike/dist/esm/utils/getCurrentUrl.js","../../../../node_modules/vike/dist/esm/utils/getPropAccessNotation.js","../../../../node_modules/vike/dist/esm/client/server-routing-runtime/utils.js","../../../../node_modules/vike/dist/esm/utils/isReact.js","../../../../node_modules/vike/dist/esm/utils/isSameErrorMessage.js","../../../../node_modules/vike/dist/esm/utils/redirectHard.js","../../../../node_modules/vike/dist/esm/utils/sleep.js","../../../../node_modules/vike/dist/esm/utils/throttle.js","../../../../node_modules/vike/dist/esm/utils/onPageVisibilityChange.js","../../../../node_modules/vike/dist/esm/utils/augmentType.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/utils.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/history.js","../../../../node_modules/vike/dist/esm/client/shared/getPageContextSerializedInHtml.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzePageServerSide.js","../../../../node_modules/vike/dist/esm/shared/page-configs/getConfigValue.js","../../../../node_modules/vike/dist/esm/shared/hooks/getHook.js","../../../../node_modules/vike/dist/esm/shared/sortPageContext.js","../../../../node_modules/vike/dist/esm/shared/addIs404ToPageProps.js","../../../../node_modules/vike/dist/esm/shared/notSerializable.js","../../../../node_modules/vike/dist/esm/client/shared/getPageContextProxyForUser.js","../../../../node_modules/vike/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/getPageContext/removeBuiltInOverrides.js","../../../../node_modules/vike/dist/esm/utils/urlToFile.js","../../../../node_modules/vike/dist/esm/shared/getPageContextRequestUrl.js","../../../../node_modules/vike/dist/esm/shared/assertPageContextProvidedByUser.js","../../../../node_modules/vike/dist/esm/shared/assertHookReturnedObject.js","../../../../node_modules/vike/dist/esm/shared/assertOnBeforeRenderHookReturn.js","../../../../node_modules/vike/dist/esm/utils/isObjectWithKeys.js","../../../../node_modules/vike/dist/esm/utils/joinEnglish.js","../../../../node_modules/vike/dist/esm/shared/route/utils.js","../../../../node_modules/vike/dist/esm/shared/route/executeGuardHook.js","../../../../node_modules/vike/dist/esm/shared/route/abort.js","../../../../node_modules/vike/dist/esm/shared/misc/pageContextInitIsPassedToClient.js","../../../../node_modules/vike/dist/esm/shared/misc/isServerSideError.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js","../../../../node_modules/vike/dist/esm/shared/getPageContextUrlComputed.js","../../../../node_modules/vike/dist/esm/shared/route/deduceRouteStringFromFilesystemPath.js","../../../../node_modules/vike/dist/esm/shared/route/resolveRouteFunction.js","../../../../node_modules/vike/dist/esm/shared/route/loadPageRoutes.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/getBaseServer.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/createPageContext.js","../../../../node_modules/vike/dist/esm/shared/page-configs/findPageConfig.js","../../../../node_modules/vike/dist/esm/shared/page-configs/loadConfigValues.js","../../../../node_modules/vike/dist/esm/client/shared/loadUserFilesClientSide.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/skipLink.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/prefetch/alreadyPrefetched.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzePageClientSide/getExportNames.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzePageClientSide/analyzeExports.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzePageClientSide/determineClientEntry.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzePageClientSide.js","../../../../node_modules/vike/dist/esm/shared/getPageFiles/analyzeClientSide.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/isClientSideRoutable.js","../../../../node_modules/vike/dist/esm/shared/route/resolveRouteString.js","../../../../node_modules/vike/dist/esm/shared/route/resolvePrecedence.js","../../../../node_modules/vike/dist/esm/shared/route/executeOnBeforeRouteHook.js","../../../../node_modules/vike/dist/esm/shared/route/debug.js","../../../../node_modules/vike/dist/esm/shared/route/index.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/prefetch.js","../../../../node_modules/vike/dist/esm/client/shared/executeOnRenderClientHook.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/setScrollPosition.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/onBrowserHistoryNavigation.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/scrollRestoration.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/renderPageClientSide.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/onLinkClick.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/installClientRouter.js","../../../../node_modules/vike/dist/esm/client/client-routing-runtime/entry.js"],"sourcesContent":["export { unique };\nfunction unique(arr) {\n return Array.from(new Set(arr));\n}\n","// Automatically updated by @brillout/release-me\nexport const PROJECT_VERSION = '0.4.183';\n","import { PROJECT_VERSION } from './PROJECT_VERSION.js';\nexport const projectInfo = {\n projectName: 'Vike',\n projectVersion: PROJECT_VERSION\n};\n","export { getGlobalObject };\nexport { assertIsSingleModuleInstance };\nimport { assert } from './assert.js';\nimport { projectInfo } from './projectInfo.js';\nconst projectKey = `_${projectInfo.projectName.toLowerCase()}`;\n/** Share information across module instances. */\nfunction getGlobalObject(\n// We use the filename (or file path) as key. There should be only one getGlobalObject() usage per file. Thus the key should be unique, assuming the filename (or file path) is unique.\nkey, defaultValue) {\n const globalObjects = getGlobalObjects();\n const globalObject = (globalObjects[key] = globalObjects[key] || defaultValue);\n return globalObject;\n}\n/** Assert that the module is instantiated only once. */\nfunction assertIsSingleModuleInstance(\n// We use the filename (or file path) as key.\nkey) {\n const globalObjects = getGlobalObjects();\n assert(!(key in globalObjects));\n}\nfunction getGlobalObjects() {\n // @ts-ignore\n const globalObjects = (globalThis[projectKey] = globalThis[projectKey] || {});\n return globalObjects;\n}\n","export default new Proxy({}, {\n get: (_, p) => (s) => {\n if (p === 'code')\n return `\\`${s}\\``;\n if (p === 'string')\n return `'${s}'`;\n return s;\n }\n});\n","export { assertSingleInstance_onClientEntryServerRouting };\nexport { assertSingleInstance_onClientEntryClientRouting };\nexport { assertSingleInstance_onAssertModuleLoad };\n// - Throw error if there are two different versions of vike loaded\n// - Show warning if entry of Client Routing and entry of Server Routing are both loaded\n// - Show warning if vike is loaded twice\nimport { unique } from './unique.js';\nimport { getGlobalObject } from './getGlobalObject.js';\nimport { projectInfo } from './projectInfo.js';\nimport pc from '@brillout/picocolors';\n/* Use original assertUsage() & assertWarning() after all CJS is removed from node_modules/vike/dist/\nimport { assertUsage, assertWarning } from './assert.js'\n*/\nconst globalObject = getGlobalObject('assertSingleInstance.ts', {\n instances: [],\n alreadyLogged: new Set()\n});\nconst clientRuntimesClonflict = 'Client runtime of both Server Routing and Client Routing loaded https://vike.dev/client-runtimes-conflict';\nconst clientNotSingleInstance = 'Client runtime loaded twice https://vike.dev/client-runtime-duplicated';\nfunction assertSingleInstance() {\n {\n const versions = unique(globalObject.instances);\n assertUsage(versions.length <= 1, \n // DO *NOT* patch vike to remove this error: because of multiple conflicting versions, you *will* eventually encounter insidious issues that hard to debug and potentially a security hazard, see for example https://github.com/vikejs/vike/issues/1108\n `vike@${pc.bold(versions[0])} and vike@${pc.bold(versions[1])} loaded but only one version should be loaded`);\n }\n if (globalObject.checkSingleInstance && globalObject.instances.length > 1) {\n /*/ Not sure whether circular dependency can cause problems? In principle not since client-side code is ESM.\n console.warn(clientNotSingleInstance)\n /*/\n assertWarning(false, clientNotSingleInstance, { onlyOnce: true, showStackTrace: true });\n //*/\n }\n}\nfunction assertSingleInstance_onClientEntryServerRouting(isProduction) {\n assertWarning(globalObject.isClientRouting !== true, clientRuntimesClonflict, {\n onlyOnce: true,\n showStackTrace: true\n });\n assertWarning(globalObject.isClientRouting === undefined, clientNotSingleInstance, {\n onlyOnce: true,\n showStackTrace: true\n });\n globalObject.isClientRouting = false;\n if (isProduction)\n globalObject.checkSingleInstance = true;\n assertSingleInstance();\n}\nfunction assertSingleInstance_onClientEntryClientRouting(isProduction) {\n assertWarning(globalObject.isClientRouting !== false, clientRuntimesClonflict, {\n onlyOnce: true,\n showStackTrace: true\n });\n assertWarning(globalObject.isClientRouting === undefined, clientNotSingleInstance, {\n onlyOnce: true,\n showStackTrace: true\n });\n globalObject.isClientRouting = true;\n if (isProduction)\n globalObject.checkSingleInstance = true;\n assertSingleInstance();\n}\n// Called by utils/assert.ts which is (most certainly) loaded by all entries. That way we don't have to call a callback for every entry. (There are a lot of entries: `client/router/`, `client/`, `node/runtime/`, `node/plugin/`, `node/cli`.)\nfunction assertSingleInstance_onAssertModuleLoad() {\n globalObject.instances.push(projectInfo.projectVersion);\n assertSingleInstance();\n}\nfunction assertUsage(condition, errorMessage) {\n if (condition) {\n return;\n }\n const errMsg = `[vike][Wrong Usage] ${errorMessage}`;\n throw new Error(errMsg);\n}\nfunction assertWarning(condition, errorMessage, { onlyOnce, showStackTrace }) {\n if (condition) {\n return;\n }\n const msg = `[vike][Warning] ${errorMessage}`;\n if (onlyOnce) {\n const { alreadyLogged } = globalObject;\n const key = onlyOnce === true ? msg : onlyOnce;\n if (alreadyLogged.has(key)) {\n return;\n }\n else {\n alreadyLogged.add(key);\n }\n }\n if (showStackTrace) {\n console.warn(new Error(msg));\n }\n else {\n console.warn(msg);\n }\n}\n","export function isNodeJS() {\n if (typeof process === 'undefined')\n return false;\n if (!process.cwd)\n return false;\n // https://stackoverflow.com/questions/4224606/how-to-check-whether-a-script-is-running-under-node-js/35813135#35813135\n if (!process.versions || typeof process.versions.node === 'undefined')\n return false;\n // https://stackoverflow.com/questions/4224606/how-to-check-whether-a-script-is-running-under-node-js/35813135#comment92529277_35813135\n if (!process.release || process.release.name !== 'node')\n return false;\n return true;\n}\n","export { createErrorWithCleanStackTrace };\nimport { isNodeJS } from './isNodeJS.js';\nfunction createErrorWithCleanStackTrace(errorMessage, numberOfStackTraceLinesToRemove) {\n const err = new Error(errorMessage);\n if (isNodeJS()) {\n err.stack = clean(err.stack, numberOfStackTraceLinesToRemove);\n }\n return err;\n}\nfunction clean(errStack, numberOfStackTraceLinesToRemove) {\n if (!errStack) {\n return errStack;\n }\n const stackLines = splitByLine(errStack);\n let linesRemoved = 0;\n const stackLine__cleaned = stackLines\n .filter((line) => {\n // Remove internal stack traces\n if (line.includes(' (internal/') || line.includes(' (node:internal')) {\n return false;\n }\n if (linesRemoved < numberOfStackTraceLinesToRemove && isStackTraceLine(line)) {\n linesRemoved++;\n return false;\n }\n return true;\n })\n .join('\\n');\n return stackLine__cleaned;\n}\nfunction isStackTraceLine(line) {\n return line.startsWith(' at ');\n}\nfunction splitByLine(str) {\n // https://stackoverflow.com/questions/21895233/how-in-node-to-split-string-by-newline-n\n return str.split(/\\r?\\n/);\n}\n","export function isObject(value) {\n return typeof value === 'object' && value !== null;\n}\n","export { assert };\nexport { assertUsage };\nexport { assertWarning };\nexport { assertInfo };\nexport { getProjectError };\nexport { addOnBeforeLogHook };\nexport { getAssertErrMsg };\nexport { overwriteAssertProductionLogger };\nexport { isBug };\nexport { setAlwaysShowStackTrace };\nimport { assertSingleInstance_onAssertModuleLoad } from './assertSingleInstance.js';\nimport { createErrorWithCleanStackTrace } from './createErrorWithCleanStackTrace.js';\nimport { getGlobalObject } from './getGlobalObject.js';\nimport { isObject } from './isObject.js';\nimport { projectInfo } from './projectInfo.js';\nimport pc from '@brillout/picocolors';\nconst globalObject = getGlobalObject('utils/assert.ts', {\n alreadyLogged: new Set(),\n // Production logger. Overwritten by loggerNotProd.ts in non-production environments.\n logger(msg, logType) {\n if (logType === 'info') {\n console.log(msg);\n }\n else {\n console.warn(msg);\n }\n },\n showStackTraceList: new WeakSet()\n});\nassertSingleInstance_onAssertModuleLoad();\nconst projectTag = `[vike]`;\nconst projectTagWithVersion = `[vike@${projectInfo.projectVersion}]`;\nconst numberOfStackTraceLinesToRemove = 2;\nfunction assert(condition, debugInfo) {\n if (condition)\n return;\n const debugStr = (() => {\n if (!debugInfo) {\n return null;\n }\n const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : JSON.stringify(debugInfo);\n return pc.dim(`Debug info (for Vike maintainers; you can ignore this): ${debugInfoSerialized}`);\n })();\n const link = pc.blue('https://github.com/vikejs/vike/issues/new');\n let errMsg = [\n `You stumbled upon a Vike bug. Go to ${link} and copy-paste this error. A maintainer will fix the bug (usually under 24 hours).`,\n debugStr\n ]\n .filter(Boolean)\n .join(' ');\n errMsg = addWhitespace(errMsg);\n errMsg = addPrefixAssertType(errMsg, 'Bug');\n errMsg = addPrefixProjctName(errMsg, true);\n const internalError = createErrorWithCleanStackTrace(errMsg, numberOfStackTraceLinesToRemove);\n globalObject.onBeforeLog?.();\n throw internalError;\n}\nfunction assertUsage(condition, errMsg, { showStackTrace } = {}) {\n if (condition)\n return;\n showStackTrace = showStackTrace || globalObject.alwaysShowStackTrace;\n errMsg = addWhitespace(errMsg);\n errMsg = addPrefixAssertType(errMsg, 'Wrong Usage');\n errMsg = addPrefixProjctName(errMsg);\n const usageError = createErrorWithCleanStackTrace(errMsg, numberOfStackTraceLinesToRemove);\n if (showStackTrace) {\n globalObject.showStackTraceList.add(usageError);\n }\n globalObject.onBeforeLog?.();\n throw usageError;\n}\nfunction getProjectError(errMsg) {\n errMsg = addWhitespace(errMsg);\n errMsg = addPrefixAssertType(errMsg, 'Error');\n errMsg = addPrefixProjctName(errMsg);\n const projectError = createErrorWithCleanStackTrace(errMsg, numberOfStackTraceLinesToRemove);\n return projectError;\n}\nfunction assertWarning(condition, msg, { onlyOnce, showStackTrace }) {\n if (condition)\n return;\n showStackTrace = showStackTrace || globalObject.alwaysShowStackTrace;\n msg = addWhitespace(msg);\n msg = addPrefixAssertType(msg, 'Warning');\n msg = addPrefixProjctName(msg);\n if (onlyOnce) {\n const { alreadyLogged } = globalObject;\n const key = onlyOnce === true ? msg : onlyOnce;\n if (alreadyLogged.has(key)) {\n return;\n }\n else {\n alreadyLogged.add(key);\n }\n }\n globalObject.onBeforeLog?.();\n if (showStackTrace) {\n const err = createErrorWithCleanStackTrace(msg, numberOfStackTraceLinesToRemove);\n globalObject.showStackTraceList.add(err);\n globalObject.logger(err, 'warn');\n }\n else {\n globalObject.logger(msg, 'warn');\n }\n}\nfunction assertInfo(condition, msg, { onlyOnce }) {\n if (condition) {\n return;\n }\n msg = addWhitespace(msg);\n msg = addPrefixProjctName(msg);\n if (onlyOnce) {\n const { alreadyLogged } = globalObject;\n const key = msg;\n if (alreadyLogged.has(key)) {\n return;\n }\n else {\n alreadyLogged.add(key);\n }\n }\n globalObject.onBeforeLog?.();\n globalObject.logger(msg, 'info');\n}\nfunction addOnBeforeLogHook(onBeforeLog) {\n globalObject.onBeforeLog = onBeforeLog;\n}\nfunction addPrefixAssertType(msg, tag) {\n let prefix = `[${tag}]`;\n const color = tag === 'Warning' ? 'yellow' : 'red';\n prefix = pc.bold(pc[color](prefix));\n return `${prefix}${msg}`;\n}\nfunction addWhitespace(msg) {\n if (msg.startsWith('[')) {\n return msg;\n }\n else {\n return ` ${msg}`;\n }\n}\nfunction addPrefixProjctName(msg, showProjectVersion = false) {\n const prefix = showProjectVersion ? projectTagWithVersion : projectTag;\n return `${prefix}${msg}`;\n}\nfunction getAssertErrMsg(thing) {\n let errMsg;\n let errStack = null;\n if (typeof thing === 'string') {\n errMsg = thing;\n }\n else if (isObject(thing) && typeof thing.message === 'string' && typeof thing.stack === 'string') {\n errMsg = thing.message;\n errStack = thing.stack;\n }\n else {\n return null;\n }\n let assertMsg;\n let isBug;\n if (errMsg.startsWith(projectTag)) {\n assertMsg = errMsg.slice(projectTag.length);\n isBug = false;\n }\n else if (errMsg.startsWith(projectTagWithVersion)) {\n assertMsg = errMsg.slice(projectTagWithVersion.length);\n isBug = true;\n }\n else {\n return null;\n }\n // Append stack trace\n if (errStack && (isBug || globalObject.showStackTraceList.has(thing))) {\n assertMsg = `${assertMsg}\\n${removeErrMsg(errStack)}`;\n }\n const showVikeVersion = isBug;\n return { assertMsg, showVikeVersion };\n}\nfunction removeErrMsg(stack) {\n if (typeof stack !== 'string')\n return String(stack);\n const [firstLine, ...stackLines] = stack.split('\\n');\n if (!firstLine.startsWith('Error: '))\n return stack;\n return stackLines.join('\\n');\n}\nfunction overwriteAssertProductionLogger(logger) {\n globalObject.logger = logger;\n}\nfunction isBug(err) {\n return !String(err).includes('[Bug]');\n}\nfunction setAlwaysShowStackTrace() {\n globalObject.alwaysShowStackTrace = true;\n}\n","export function isBrowser() {\n // Using `typeof window !== 'undefined'` alone is not enough because some users use https://www.npmjs.com/package/ssr-window\n return typeof window !== 'undefined' && typeof window.scrollY === 'number';\n // Alternatively, test whether environment is a *real* browser: https://github.com/brillout/picocolors/blob/d59a33a0fd52a8a33e4158884069192a89ce0113/picocolors.js#L87-L89\n}\n","export { assertClientRouting };\nexport { assertServerRouting };\nexport { checkIfClientRouting };\nimport { assertUsage, assertWarning } from './assert.js';\nimport { getGlobalObject } from './getGlobalObject.js';\nimport { isBrowser } from './isBrowser.js';\nimport pc from '@brillout/picocolors';\nconst state = getGlobalObject('utils/assertRouterType.ts', {});\nfunction assertClientRouting() {\n assertNoContradiction(checkIfClientRouting());\n state.isClientRouting = true;\n}\nfunction checkIfClientRouting() {\n return state.isClientRouting !== false;\n}\nfunction assertServerRouting() {\n assertNoContradiction(state.isClientRouting !== true);\n state.isClientRouting = false;\n}\nfunction assertNoContradiction(noContradiction) {\n // If an assertion fails because of a wrong usage, then we assume that the user is trying to import from 'vike/client/router' while not setting `clientRouting` to `true`. Note that 'vike/client' only exports the type `PageContextBuiltInClient` and that the package.json#exports entry 'vike/client' will eventually be removed.\n assertUsage(isBrowser(), `${pc.cyan(\"import { something } from 'vike/client/router'\")} is forbidden on the server-side`, { showStackTrace: true });\n assertWarning(noContradiction, \"You shouldn't `import { something } from 'vike/client/router'` when using Server Routing. The 'vike/client/router' utilities work only with Client Routing. In particular, don't `import { navigate }` nor `import { prefetch }` as they unnecessarily bloat your client-side bundle sizes.\", { showStackTrace: true, onlyOnce: true });\n}\n","import { assert } from './assert.js';\nexport { slice };\nfunction slice(thing, from, to) {\n if (typeof thing === 'string') {\n return sliceArray(thing.split(''), from, to).join('');\n }\n else {\n return sliceArray(thing, from, to);\n }\n}\nfunction sliceArray(list, from, to) {\n const listSlice = [];\n let start = from >= 0 ? from : list.length + from;\n assert(start >= 0 && start <= list.length);\n let end = to >= 0 ? to : list.length + to;\n assert(end >= 0 && end <= list.length);\n while (true) {\n if (start === end) {\n break;\n }\n if (start === list.length) {\n start = 0;\n }\n if (start === end) {\n break;\n }\n const el = list[start];\n assert(el !== undefined);\n listSlice.push(el);\n start++;\n }\n return listSlice;\n}\n","// We don't use new URL() as it doesn't exactly do what we need, for example:\n// - It loses the original URL parts (which we need to manipulate and recreate URLs)\n// - It doesn't support the tauri:// protocol\n// Unit tests at ./parseUrl.spec.ts\nexport { parseUrl };\nexport { assertUsageUrlPathname };\nexport { assertUsageUrlPathnameAbsolute };\nexport { assertUsageUrlRedirectTarget };\nexport { isUrl };\nexport { isUri };\nexport { isUrlRedirectTarget };\nexport { isUrlExternal };\nexport { isBaseServer };\nexport { assertUrlComponents };\nexport { createUrlFromComponents };\nimport { slice } from './slice.js';\nimport { assert, assertUsage } from './assert.js';\nimport pc from '@brillout/picocolors';\nfunction parseUrl(url, baseServer) {\n assert(isUrl(url), url);\n assert(baseServer.startsWith('/'));\n // Hash\n const [urlWithoutHash, ...hashList] = url.split('#');\n assert(urlWithoutHash !== undefined);\n const hashOriginal = ['', ...hashList].join('#') || null;\n assert(hashOriginal === null || hashOriginal.startsWith('#'));\n const hash = hashOriginal === null ? '' : decodeSafe(hashOriginal.slice(1));\n // Search\n const [urlWithoutHashNorSearch, ...searchList] = urlWithoutHash.split('?');\n assert(urlWithoutHashNorSearch !== undefined);\n const searchOriginal = ['', ...searchList].join('?') || null;\n assert(searchOriginal === null || searchOriginal.startsWith('?'));\n const search = {};\n const searchAll = {};\n Array.from(new URLSearchParams(searchOriginal || '')).forEach(([key, val]) => {\n search[key] = val;\n searchAll[key] = [...(searchAll.hasOwnProperty(key) ? searchAll[key] : []), val];\n });\n // Origin + pathname\n let { protocol, origin, pathnameAbsoluteWithBase } = getPathnameAbsoluteWithBase(urlWithoutHashNorSearch, baseServer);\n const pathnameOriginal = urlWithoutHashNorSearch.slice((origin || '').length);\n assertUrlComponents(url, origin, pathnameOriginal, searchOriginal, hashOriginal);\n // Base URL\n let { pathname, hasBaseServer } = removeBaseServer(pathnameAbsoluteWithBase, baseServer);\n // pageContext.urlParsed.href\n const href = createUrlFromComponents(origin, pathname, searchOriginal, hashOriginal);\n // pageContext.urlParsed.{hostname, port}\n const host = !origin ? null : origin.slice(protocol.length);\n const { hostname, port } = parseHost(host, url);\n // decode after setting href\n pathname = decodePathname(pathname);\n assert(pathname.startsWith('/'));\n return {\n href,\n protocol,\n hostname,\n port,\n origin,\n pathname,\n pathnameOriginal: pathnameOriginal,\n hasBaseServer,\n search,\n searchAll,\n searchOriginal,\n hash,\n hashOriginal\n };\n}\nfunction decodeSafe(urlComponent) {\n try {\n return decodeURIComponent(urlComponent);\n }\n catch { }\n try {\n return decodeURI(urlComponent);\n }\n catch { }\n return urlComponent;\n}\nfunction decodePathname(urlPathname) {\n urlPathname = urlPathname.replace(/\\s+$/, '');\n urlPathname = urlPathname\n .split('/')\n .map((dir) => decodeSafe(dir).split('/').join('%2F'))\n .join('/');\n return urlPathname;\n}\nfunction getPathnameAbsoluteWithBase(url, baseServer) {\n // Search and hash already extracted\n assert(!url.includes('?') && !url.includes('#'));\n // url has origin\n {\n const { protocol, origin, pathname } = parseOrigin(url);\n if (origin) {\n return { protocol, origin, pathnameAbsoluteWithBase: pathname };\n }\n assert(pathname === url);\n }\n // url doesn't have origin\n if (url.startsWith('/')) {\n return { protocol: null, origin: null, pathnameAbsoluteWithBase: url };\n }\n else {\n // url is a relative path\n // In the browser, this is the Base URL of the current URL.\n // Safe access `window?.document?.baseURI` for users who shim `window` in Node.js\n const baseURI = typeof window !== 'undefined' ? window?.document?.baseURI : undefined;\n let base;\n if (baseURI) {\n const baseURIPathaname = parseOrigin(baseURI.split('?')[0]).pathname;\n base = baseURIPathaname;\n }\n else {\n base = baseServer;\n }\n const pathnameAbsoluteWithBase = resolveUrlPathnameRelative(url, base);\n return { protocol: null, origin: null, pathnameAbsoluteWithBase: pathnameAbsoluteWithBase };\n }\n}\nfunction parseOrigin(url) {\n if (!isUrlWithProtocol(url)) {\n return { pathname: url, origin: null, protocol: null };\n }\n else {\n const { protocol, uriWithoutProtocol } = parseProtocol(url);\n assert(protocol);\n const [host, ...rest] = uriWithoutProtocol.split('/');\n const origin = protocol + host;\n const pathname = '/' + rest.join('/');\n return { pathname, origin, protocol };\n }\n}\nfunction parseHost(host, url) {\n const ret = { hostname: null, port: null };\n if (!host)\n return ret;\n // hostname\n const [hostname, ...rest] = host.split(':');\n ret.hostname = hostname;\n // port\n if (rest.length > 0) {\n assert(rest.length === 1, url);\n const portStr = rest[0];\n const port = parseInt(portStr, 10);\n assert(port || port === 0, url);\n ret.port = port;\n }\n return ret;\n}\nfunction parseProtocol(uri) {\n const SEP = ':';\n const [before, ...after] = uri.split(SEP);\n if (after.length === 0 ||\n // https://github.com/vikejs/vike/commit/886a99ff21e86a8ca699a25cee7edc184aa058e4#r143308934\n // https://en.wikipedia.org/wiki/List_of_URI_schemes\n // https://www.rfc-editor.org/rfc/rfc7595\n !/^[a-z][a-z0-9\\+\\-]*$/i.test(before)) {\n return { protocol: null, uriWithoutProtocol: uri };\n }\n let protocol = before + SEP;\n let uriWithoutProtocol = after.join(SEP);\n const SEP2 = '//';\n if (uriWithoutProtocol.startsWith(SEP2)) {\n protocol = protocol + SEP2;\n uriWithoutProtocol = uriWithoutProtocol.slice(SEP2.length);\n }\n return { protocol, uriWithoutProtocol };\n}\nfunction isUrlProtocol(protocol) {\n // Is there an altenrative to having a blacklist?\n // - If the blacklist becomes too big, maybe use a whitelist instead ['tauri://', 'file://', 'capacitor://', 'http://', 'https://']\n const blacklist = [\n // https://docs.ipfs.tech/how-to/address-ipfs-on-web\n 'ipfs://',\n 'ipns://'\n ];\n if (blacklist.includes(protocol))\n return false;\n return protocol.endsWith('://');\n}\n// Adapted from https://stackoverflow.com/questions/14780350/convert-relative-path-to-absolute-using-javascript/14780463#14780463\nfunction resolveUrlPathnameRelative(pathnameRelative, base) {\n const stack = base.split('/');\n const parts = pathnameRelative.split('/');\n let baseRestoreTrailingSlash = base.endsWith('/');\n if (pathnameRelative.startsWith('.')) {\n // remove current file name\n stack.pop();\n }\n for (const i in parts) {\n const p = parts[i];\n if (p == '' && i === '0')\n continue;\n if (p == '.')\n continue;\n if (p == '..')\n stack.pop();\n else {\n baseRestoreTrailingSlash = false;\n stack.push(p);\n }\n }\n let pathnameAbsolute = stack.join('/');\n if (baseRestoreTrailingSlash && !pathnameAbsolute.endsWith('/'))\n pathnameAbsolute += '/';\n if (!pathnameAbsolute.startsWith('/'))\n pathnameAbsolute = '/' + pathnameAbsolute;\n return pathnameAbsolute;\n}\nfunction removeBaseServer(pathnameAbsoluteWithBase, baseServer) {\n assert(pathnameAbsoluteWithBase.startsWith('/'));\n assert(isBaseServer(baseServer));\n // Mutable\n let urlPathname = pathnameAbsoluteWithBase;\n assert(urlPathname.startsWith('/'));\n assert(baseServer.startsWith('/'));\n if (baseServer === '/') {\n const pathname = pathnameAbsoluteWithBase;\n return { pathname, hasBaseServer: true };\n }\n // Support `url === '/some-base-url' && baseServer === '/some-base-url/'`\n let baseServerNormalized = baseServer;\n if (baseServer.endsWith('/') && urlPathname === slice(baseServer, 0, -1)) {\n baseServerNormalized = slice(baseServer, 0, -1);\n assert(urlPathname === baseServerNormalized);\n }\n if (!urlPathname.startsWith(baseServerNormalized)) {\n const pathname = pathnameAbsoluteWithBase;\n return { pathname, hasBaseServer: false };\n }\n assert(urlPathname.startsWith('/') || urlPathname.startsWith('http'));\n assert(urlPathname.startsWith(baseServerNormalized));\n urlPathname = urlPathname.slice(baseServerNormalized.length);\n if (!urlPathname.startsWith('/'))\n urlPathname = '/' + urlPathname;\n assert(urlPathname.startsWith('/'));\n return { pathname: urlPathname, hasBaseServer: true };\n}\nfunction isBaseServer(baseServer) {\n return baseServer.startsWith('/');\n}\nfunction assertUrlComponents(url, origin, pathnameOriginal, searchOriginal, hashOriginal) {\n const urlRecreated = createUrlFromComponents(origin, pathnameOriginal, searchOriginal, hashOriginal);\n assert(url === urlRecreated);\n}\nfunction createUrlFromComponents(origin, pathname, search, hash) {\n const urlRecreated = `${origin || ''}${pathname}${search || ''}${hash || ''}`;\n return urlRecreated;\n}\nfunction isUrl(url) {\n // parseUrl() works with these URLs\n return isUrlWithProtocol(url) || url.startsWith('/') || isUrlPathnameRelative(url);\n}\nfunction isUrlRedirectTarget(url) {\n return url.startsWith('/') || isUri(url) || isUrlWithProtocol(url);\n}\nfunction isUrlPathnameRelative(url) {\n return ['.', '?', '#'].some((c) => url.startsWith(c)) || url === '';\n}\nfunction isUrlExternal(url) {\n return !url.startsWith('/') && !isUrlPathnameRelative(url);\n}\n/*\nURL with protocol.\n\n http://example.com\n https://exmaple.com\n tauri://localhost\n file://example.com\n capacitor://localhost/assets/chunks/chunk-DJBYDrsP.js\n\n[Tauri](https://github.com/vikejs/vike/issues/808)\n[Electron (`file://`)](https://github.com/vikejs/vike/issues/1557)\n[Capacitor](https://github.com/vikejs/vike/issues/1706)\n */\nfunction isUrlWithProtocol(url) {\n const { protocol } = parseProtocol(url);\n return !!protocol && isUrlProtocol(protocol);\n}\n/*\nURIs that aren't URLs.\n\n mailto:john@example.com\n\n ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html\n\n magnet:?xt=urn:btih:3a15e1ac49683d91b20c2ffc252ea612a6c01bd7&dn=The.Empire.Strikes.Back.1980.Remastered.1080p.BluRay.DDP.7.1.x265-EDGE2020.mkv&xl=3225443573&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://tracker.torrent.eu.org:451&tr=udp://open.stealth.si:80/announce&tr=udp://tracker.openbittorrent.com:6969&tr=udp://tracker.tiny-vps.com:6969/announce&tr=udp://open.demonii.com:1337\n\nWe need to treat URIs differently than URLs.\n - For example, we cannot parse URIs (their structure is unknown e.g. a `magnet:` URI is completely different than a `http://` URL).\n - The protocols tauri:// file:// capacitor:// follow the same structure as http:// and https:// URLs.\n - Thus we can parse them like http:// and https:// URLs.\n*/\nfunction isUri(uri) {\n const { protocol } = parseProtocol(uri);\n return !!protocol && !isUrlProtocol(uri);\n}\nfunction assertUsageUrlPathname(url, errPrefix) {\n assertUsageUrl(url, errPrefix, { allowRelative: true });\n}\nfunction assertUsageUrlPathnameAbsolute(url, errPrefix) {\n assertUsageUrl(url, errPrefix);\n}\nfunction assertUsageUrlRedirectTarget(url, errPrefix, isUnresolved) {\n assertUsageUrl(url, errPrefix, { isRedirectTarget: isUnresolved ? 'unresolved' : true });\n}\nfunction assertUsageUrl(url, errPrefix, { allowRelative, isRedirectTarget } = {}) {\n if (url.startsWith('/'))\n return;\n let errMsg = `${errPrefix} is ${pc.string(url)} but it should start with ${pc.string('/')}`;\n if (isRedirectTarget) {\n if (isUrlRedirectTarget(url))\n return;\n errMsg += ` or a protocol (${pc.string('http://')}, ${pc.string('mailto:')}, ...)`;\n if (isRedirectTarget === 'unresolved') {\n if (url === '*')\n return;\n errMsg += `, or be ${pc.string('*')}`;\n }\n }\n if (allowRelative) {\n if (isUrlPathnameRelative(url))\n return;\n errMsg += ', or be a relative URL';\n }\n assertUsage(false, errMsg);\n}\n","export { objectAssign };\nimport { assert } from './assert.js';\n// Same as Object.assign() but:\n// - With type inference\n// - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()\nfunction objectAssign(obj, objAddendum) {\n if (objAddendum) {\n assert(!('_isPageContextObject' in objAddendum));\n Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));\n }\n}\n","export function isCallable(thing) {\n return thing instanceof Function || typeof thing === 'function';\n}\n","import { assert } from './assert.js';\nexport { higherFirst };\nexport { lowerFirst };\nexport { makeFirst };\nexport { makeLast };\nexport { reverse };\n// -1 => element1 first (i.e. `indexOf(element1) < indexOf(element2)`)\n// +1 => element2 first (i.e. `indexOf(element2) < indexOf(element1)`)\n// 0 => keep original order of element1 and element2\n/**\n * ```js\n * let arr = [\n * { price: 10 },\n * { price: 1000 },\n * { price: 100 }\n * ]\n * arr = arr.sort(higherFirst(el => el.price))\n * isEqual(arr, [\n * { price: 1000 },\n * { price: 100 },\n * { price: 10 }\n * ])\n * ```\n */\nfunction higherFirst(getValue) {\n return (element1, element2) => {\n const val1 = getValue(element1);\n const val2 = getValue(element2);\n if (val1 === val2) {\n return 0;\n }\n return val1 > val2 ? -1 : 1;\n };\n}\n/**\n * ```js\n * let arr = [\n * { price: 10 },\n * { price: 1000 },\n * { price: 100 }\n * ]\n * arr = arr.sort(lowerFirst(el => el.price))\n * isEqual(arr, [\n * { price: 10 },\n * { price: 100 },\n * { price: 1000 }\n * ])\n * ```\n */\nfunction lowerFirst(getValue) {\n return (element1, element2) => {\n const val1 = getValue(element1);\n const val2 = getValue(element2);\n if (val1 === val2) {\n return 0;\n }\n return val1 < val2 ? -1 : 1;\n };\n}\n/**\n * ```js\n * let arr = [\n * { name: 'iphone', isRocket: false },\n * { name: 'starship', isRocket: true }\n * ]\n * arr = arr.sort(makeFirst(el => el.isRocket))\n * isEqual(arr, [\n * { name: 'starship', isRocket: true },\n * { name: 'iphone', isRocket: false }\n * ])\n * ```\n */\nfunction makeFirst(getValue) {\n return (element1, element2) => {\n const val1 = getValue(element1);\n const val2 = getValue(element2);\n assert([true, false, null].includes(val1));\n assert([true, false, null].includes(val2));\n if (val1 === val2) {\n return 0;\n }\n if (val1 === true || val2 === false) {\n return -1;\n }\n if (val2 === true || val1 === false) {\n return 1;\n }\n assert(false);\n };\n}\n/**\n * ```js\n * let arr = [\n * { name: 'starship', isRocket: true },\n * { name: 'iphone', isRocket: false }\n * ]\n * arr = arr.sort(makeLast(el => el.isRocket))\n * isEqual(arr, [\n * { name: 'iphone', isRocket: false },\n * { name: 'starship', isRocket: true }\n * ])\n * ```\n */\nfunction makeLast(getValue) {\n return makeFirst((element) => {\n const val = getValue(element);\n if (val === null) {\n return null;\n }\n else {\n return !val;\n }\n });\n}\n/** Reverse order result. */\nfunction reverse(sortKey) {\n return (-1 * sortKey);\n}\n","// Typesafe Array.isArray() — asserting unknown[] instead of any[]\nexport function isArray(value) {\n return Array.isArray(value);\n}\n","export { isArrayOfStrings };\nimport { isArray } from './isArray.js';\nfunction isArrayOfStrings(val) {\n return isArray(val) && val.every((v) => typeof v === 'string');\n}\n","export { isObjectOfStrings };\nimport { isObject } from './isObject.js';\nfunction isObjectOfStrings(val) {\n return isObject(val) && Object.values(val).every((v) => typeof v === 'string');\n}\n","export { hasProp };\nimport { isCallable } from './isCallable.js';\nimport { isObject } from './isObject.js';\nimport { isArrayOfStrings } from './isArrayOfStrings.js';\nimport { isObjectOfStrings } from './isObjectOfStrings.js';\nimport { isArray } from './isArray.js';\nfunction hasProp(obj, prop, type) {\n if (!isObject(obj))\n return false;\n if (!(prop in obj)) {\n return type === 'undefined';\n }\n if (type === undefined) {\n return true;\n }\n const propValue = obj[prop];\n if (type === 'undefined') {\n return propValue === undefined;\n }\n if (type === 'array') {\n return isArray(propValue);\n }\n if (type === 'object') {\n return isObject(propValue);\n }\n if (type === 'string[]') {\n return isArrayOfStrings(propValue);\n }\n if (type === 'string{}') {\n return isObjectOfStrings(propValue);\n }\n if (type === 'function') {\n return isCallable(propValue);\n }\n if (isArray(type)) {\n return typeof propValue === 'string' && type.includes(propValue);\n }\n if (type === 'null') {\n return propValue === null;\n }\n if (type === 'true') {\n return propValue === true;\n }\n if (type === 'false') {\n return propValue === false;\n }\n return typeof propValue === type;\n}\n","export function isPlainObject(value) {\n // Is object?\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // Support `Object.create(null)`\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n // Is plain object?\n return (\n /* Doesn't work in Cloudflare Pages workers\n value.constructor === Object\n */\n value.constructor.name === 'Object');\n}\n","export { compareString };\nfunction compareString(str1, str2) {\n if (str1.toLowerCase() < str2.toLowerCase())\n return -1;\n if (str1.toLowerCase() > str2.toLowerCase())\n return 1;\n return 0;\n}\n","export const isNotNullish = (p) => p !== null && p !== undefined;\n","export { stringifyStringArray };\nfunction stringifyStringArray(stringList) {\n return '[' + stringList.map((str) => \"'\" + str + \"'\").join(', ') + ']';\n}\n","export { toPosixPath };\nexport { assertPosixPath };\nimport { assert } from './assert.js';\nfunction toPosixPath(path) {\n const pathPosix = path.split('\\\\').join('/');\n assertPosixPath(pathPosix);\n return pathPosix;\n}\nfunction assertPosixPath(path) {\n const errMsg = (msg) => `Not a posix path: ${msg}`;\n assert(path !== null, errMsg('null'));\n assert(typeof path === 'string', errMsg(`typeof path === ${JSON.stringify(typeof path)}`));\n assert(path !== '', errMsg('(empty string)'));\n assert(path);\n assert(!path.includes('\\\\'), errMsg(path));\n}\n","export function isPropertyGetter(obj, prop) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!descriptor && !('value' in descriptor) && !!descriptor.get;\n}\n","import { isCallable } from './isCallable.js';\nexport function isPromise(val) {\n return typeof val === 'object' && val !== null && 'then' in val && isCallable(val.then);\n}\n","export function getValuePrintable(value) {\n if ([null, undefined].includes(value))\n return String(value);\n if (['boolean', 'number', 'string'].includes(typeof value))\n return JSON.stringify(value);\n return null;\n}\n","export function escapeRegex(str) {\n // https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript/3561711#3561711\n return str.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","/** Change enumerability of an object property. */\nexport function changeEnumerable(obj, prop, enumerable) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n Object.defineProperty(obj, prop, { ...descriptor, enumerable });\n}\n","/** Like Object.defineProperty() but with type inference */\nexport function objectDefineProperty(obj, prop, { get, ...args }) {\n Object.defineProperty(obj, prop, { ...args, get });\n}\n","// TODO/v1-release: remove this\nexport { assertDefaultExports };\nexport { assertExportValues };\nexport { forbiddenDefaultExports };\nimport { assert, assertUsage } from '../utils.js';\nconst enforceTrue = ['clientRouting'];\nfunction assertExportValues(pageFile) {\n enforceTrue.forEach((exportName) => {\n assert(pageFile.fileExports);\n if (!(exportName in pageFile.fileExports))\n return;\n const explainer = `The value of \\`${exportName}\\` is only allowed to be \\`true\\`.`;\n assertUsage(pageFile.fileExports[exportName] !== false, `${pageFile.filePath} has \\`export { ${exportName} }\\` with the value \\`false\\` which is prohibited: remove \\`export { ${exportName} }\\` instead. (${explainer})`);\n assertUsage(pageFile.fileExports[exportName] === true, `${pageFile.filePath} has \\`export { ${exportName} }\\` with a forbidden value. ${explainer}`);\n });\n}\n// Forbid exports such as `export default { render }`, because only `export { render }` can be statically analyzed by `es-module-lexer`.\nconst forbiddenDefaultExports = ['render', 'clientRouting', 'prerender', 'doNotPrerender'];\nfunction assertDefaultExports(defaultExportName, filePath) {\n assertUsage(!forbiddenDefaultExports.includes(defaultExportName), `${filePath} has \\`export default { ${defaultExportName} }\\` which is prohibited, use \\`export { ${defaultExportName} }\\` instead.`);\n}\n","export { determinePageIdOld };\nimport { slice, assert } from './utils.js';\n// TODO/v1-release: remove\nfunction determinePageIdOld(filePath) {\n const pageSuffix = '.page.';\n const pageId = slice(filePath.split(pageSuffix), 0, -1).join(pageSuffix);\n assert(!pageId.includes('\\\\'));\n return pageId;\n}\n","// TODO/v1-release: remove\nexport { assertPageFilePath };\nimport { assertPosixPath } from './utils.js';\nfunction assertPageFilePath(filePath) {\n assertPosixPath(filePath);\n /* This assert() is skipped to reduce client-side bundle size\n assert(filePath.startsWith('/') || isNpmPackageImport(filePath), { filePath })\n */\n}\n","export { getErrorPageId };\nexport { isErrorPageId };\nexport { isErrorPage };\n// TODO/v1-release: consider loading this file only for Client Routing\nimport { assert, assertUsage, unique } from './utils.js';\nfunction getErrorPageId(pageFilesAll, pageConfigs) {\n if (pageConfigs.length > 0) {\n const errorPageConfigs = pageConfigs.filter((p) => p.isErrorPage);\n if (errorPageConfigs.length === 0)\n return null;\n assertUsage(errorPageConfigs.length === 1, 'Only one error page can be defined');\n return errorPageConfigs[0].pageId;\n }\n // TODO/v1-release: remove\n const errorPageIds = unique(pageFilesAll.map(({ pageId }) => pageId).filter((pageId) => isErrorPageId(pageId, false)));\n assertUsage(errorPageIds.length <= 1, `Only one _error.page.js is allowed, but found several: ${errorPageIds.join(' ')}`);\n if (errorPageIds.length > 0) {\n const errorPageId = errorPageIds[0];\n assert(errorPageId);\n return errorPageId;\n }\n return null;\n}\n// TODO/v1-release: remove\nfunction isErrorPageId(pageId, _isV1Design) {\n assert(!pageId.includes('\\\\'));\n return pageId.includes('/_error');\n}\nfunction isErrorPage(pageId, pageConfigs) {\n if (pageConfigs.length > 0) {\n const pageConfig = pageConfigs.find((p) => p.pageId === pageId);\n assert(pageConfig);\n return !!pageConfig.isErrorPage;\n }\n else {\n return isErrorPageId(pageId, false);\n }\n}\n","export { isScriptFile };\nexport { isJavaScriptFile };\nexport { isTemplateFile };\nexport { scriptFileExtensions };\nexport { scriptFileExtensionList };\nimport { assert } from './assert.js';\n// We can't use a RegExp:\n// - Needs to work with Micromatch: https://github.com/micromatch/micromatch because:\n// - Vite's `import.meta.glob()` uses Micromatch\n// - We need this to be a whitelist because:\n// - A pattern `*([a-zA-Z0-9]` doesn't work.\n// - Because of ReScript: `.res` are ReScript source files which need to be ignored. (The ReScript compiler generates `.js` files alongside `.res` files.)\n// - Black listing doesn't work.\n// - We cannot implement a blacklist with a glob pattern.\n// - A post `import.meta.glob()` blacklist filtering doesn't work because Vite would still process the files (e.g. including them in the bundle).\n// prettier-ignore\n// biome-ignore format:\nconst extJavaScript = [\n 'js',\n 'ts',\n 'cjs',\n 'cts',\n 'mjs',\n 'mts',\n];\n// prettier-ignore\n// biome-ignore format:\nconst extJsx = [\n 'jsx',\n 'tsx',\n 'cjsx',\n 'ctsx',\n 'mjsx',\n 'mtsx',\n];\n// prettier-ignore\n// biome-ignore format:\nconst extTemplates = [\n 'vue',\n 'svelte',\n 'marko',\n 'md',\n 'mdx'\n];\nconst scriptFileExtensionList = [...extJavaScript, ...extJsx, ...extTemplates];\nconst scriptFileExtensions = '(' + scriptFileExtensionList.join('|') + ')';\nfunction isScriptFile(filePath) {\n const yes = scriptFileExtensionList.some((ext) => filePath.endsWith('.' + ext));\n if (isJavaScriptFile(filePath))\n assert(yes);\n return yes;\n}\nfunction isJavaScriptFile(filePath) {\n const yes1 = /\\.(c|m)?(j|t)s$/.test(filePath);\n const yes2 = extJavaScript.some((ext) => filePath.endsWith('.' + ext));\n assert(yes1 === yes2);\n return yes1;\n}\nfunction isTemplateFile(filePath) {\n return extTemplates.some((ext) => filePath.endsWith('.' + ext));\n}\n","// TODO/v1-release: remove\nexport { fileTypes };\nexport { isValidFileType };\nexport { determineFileType };\nimport { assert, assertPosixPath } from '../utils.js';\nimport { isScriptFile } from '../../utils/isScriptFile.js';\nconst fileTypes = [\n '.page',\n '.page.server',\n '.page.route',\n '.page.client',\n // New type `.page.css`/`.page.server.css`/`.page.client.css` for `extensions[number].pageFileDist`.\n // - Extensions using `pageFileDist` are expected to use a bundler that generates a `.css` colocated next to the original `.page.js` file (e.g. `/renderer/_default.page.server.css` for `/renderer/_default.page.server.js`.\n // - Since these `.page.css` files Bundlers We can therefore expect that there isn't any `.page.server.sass`/...\n '.css'\n];\nfunction isValidFileType(filePath) {\n return ['.js', '.mjs', '.cjs', '.css'].some((ext) => filePath.endsWith(ext));\n}\nfunction determineFileType(filePath) {\n assertPosixPath(filePath);\n {\n const isCSS = filePath.endsWith('.css');\n if (isCSS) {\n /* This assert() is skipped to reduce client-side bundle size\n assert(isNpmPackageImport(filePath), filePath) // `.css` page files are only supported for npm packages\n */\n return '.css';\n }\n }\n assert(isScriptFile(filePath), filePath);\n const fileName = filePath.split('/').slice(-1)[0];\n const parts = fileName.split('.');\n const suffix1 = parts.slice(-3)[0];\n const suffix2 = parts.slice(-2)[0];\n if (suffix2 === 'page') {\n return '.page';\n }\n assert(suffix1 === 'page', filePath);\n if (suffix2 === 'server') {\n return '.page.server';\n }\n if (suffix2 === 'client') {\n return '.page.client';\n }\n if (suffix2 === 'route') {\n return '.page.route';\n }\n assert(false, filePath);\n}\n","// TODO/v1-release: remove\nexport { getPageFileObject };\nimport { determinePageIdOld } from '../determinePageIdOld.js';\nimport { assertPageFilePath } from '../assertPageFilePath.js';\nimport { isErrorPageId } from '../error-page.js';\nimport { assert, slice } from '../utils.js';\nimport { determineFileType } from './fileTypes.js';\nfunction getPageFileObject(filePath) {\n const isRelevant = (pageId) => pageFile.pageId === pageId ||\n (pageFile.isDefaultPageFile &&\n (isRendererFilePath(pageFile.filePath) || isAncestorDefaultPage(pageId, pageFile.filePath)));\n const fileType = determineFileType(filePath);\n const isEnv = (env) => {\n assert(fileType !== '.page.route'); // We can't determine `.page.route.js`\n if (env === 'CLIENT_ONLY') {\n return fileType === '.page.client' || fileType === '.css';\n }\n if (env === 'SERVER_ONLY') {\n return fileType === '.page.server';\n }\n if (env === 'CLIENT_AND_SERVER') {\n return fileType === '.page';\n }\n assert(false);\n };\n const pageFile = {\n filePath,\n fileType,\n isEnv,\n isRelevant,\n isDefaultPageFile: isDefaultFilePath(filePath),\n isRendererPageFile: fileType !== '.css' && isDefaultFilePath(filePath) && isRendererFilePath(filePath),\n isErrorPageFile: isErrorPageId(filePath, false),\n pageId: determinePageIdOld(filePath)\n };\n return pageFile;\n}\nfunction isDefaultFilePath(filePath) {\n assertPageFilePath(filePath);\n if (isErrorPageId(filePath, false)) {\n return false;\n }\n return filePath.includes('/_default');\n}\nfunction isRendererFilePath(filePath) {\n assertPageFilePath(filePath);\n return filePath.includes('/renderer/');\n}\nfunction isAncestorDefaultPage(pageId, defaultPageFilePath) {\n assertPageFilePath(pageId);\n assertPageFilePath(defaultPageFilePath);\n assert(!pageId.endsWith('/'));\n assert(!defaultPageFilePath.endsWith('/'));\n assert(isDefaultFilePath(defaultPageFilePath));\n const defaultPageDir = slice(defaultPageFilePath.split('/'), 0, -1)\n .filter((filePathSegment) => filePathSegment !== '_default')\n .join('/');\n return pageId.startsWith(defaultPageDir);\n}\n","export { getExportPath };\nimport { assert } from '../utils.js';\nfunction getExportPath(fileExportPathToShowToUser, configName) {\n if (!fileExportPathToShowToUser)\n return null;\n let [exportName, ...exportObjectPath] = fileExportPathToShowToUser;\n if (!exportName)\n return null;\n if (exportObjectPath.length === 0 && ['*', 'default', configName].includes(exportName))\n return null;\n assert(exportName !== '*');\n let prefix = '';\n let suffix = '';\n if (exportName === 'default') {\n prefix = 'export default';\n }\n else {\n prefix = 'export';\n exportObjectPath = [exportName, ...exportObjectPath];\n }\n exportObjectPath.forEach((prop) => {\n prefix = `${prefix} { ${prop}`;\n suffix = ` }${suffix}`;\n });\n const exportPath = prefix + suffix;\n return exportPath;\n}\n","export { getConfigDefinedAt };\nexport { getConfigDefinedAtOptional };\nexport { getDefinedAtString };\nimport { assert, isArray } from '../utils.js';\nimport pc from '@brillout/picocolors';\nimport { getExportPath } from './getExportPath.js';\nfunction getConfigDefinedAt(sentenceBegin, configName, definedAtData) {\n return `${begin(sentenceBegin, configName)} at ${getDefinedAtString(definedAtData, configName)}`;\n}\nfunction getConfigDefinedAtOptional(sentenceBegin, configName, definedAtData) {\n if (!definedAtData) {\n return `${begin(sentenceBegin, configName)} internally`;\n }\n else {\n return `${begin(sentenceBegin, configName)} at ${getDefinedAtString(definedAtData, configName)}`;\n }\n}\nfunction begin(sentenceBegin, configName) {\n return `${sentenceBegin} ${pc.cyan(configName)} defined`;\n}\nfunction getDefinedAtString(definedAtData, configName) {\n let files;\n if (isArray(definedAtData)) {\n files = definedAtData;\n }\n else {\n files = [definedAtData];\n }\n assert(files.length >= 1);\n const definedAtString = files\n .map((source) => {\n const { filePathToShowToUser, fileExportPathToShowToUser } = source;\n let s = filePathToShowToUser;\n const exportPath = getExportPath(fileExportPathToShowToUser, configName);\n if (exportPath) {\n s = `${s} > ${pc.cyan(exportPath)}`;\n }\n return s;\n })\n .join(' / ');\n return definedAtString;\n}\n","export { types };\nconst types = [\n ts({\n is: (val) => val === undefined,\n match: (str) => str === '!undefined',\n serialize: () => '!undefined',\n deserialize: () => undefined,\n }),\n ts({\n is: (val) => val === Infinity,\n match: (str) => str === '!Infinity',\n serialize: () => '!Infinity',\n deserialize: () => Infinity,\n }),\n ts({\n is: (val) => val === -Infinity,\n match: (str) => str === '!-Infinity',\n serialize: () => '!-Infinity',\n deserialize: () => -Infinity,\n }),\n ts({\n is: (val) => typeof val === 'number' && isNaN(val),\n match: (str) => str === '!NaN',\n serialize: () => '!NaN',\n deserialize: () => NaN,\n }),\n ts({\n is: (val) => val instanceof Date,\n match: (str) => str.startsWith('!Date:'),\n serialize: (val) => '!Date:' + val.toISOString(),\n deserialize: (str) => new Date(str.slice('!Date:'.length)),\n }),\n ts({\n is: (val) => typeof val === 'bigint',\n match: (str) => str.startsWith('!BigInt:'),\n serialize: (val) => '!BigInt:' + val.toString(),\n deserialize: (str) => {\n if (typeof BigInt === 'undefined') {\n throw new Error('Your JavaScript environement does not support BigInt. Consider adding a polyfill.');\n }\n return BigInt(str.slice('!BigInt:'.length));\n },\n }),\n ts({\n is: (val) => val instanceof RegExp,\n match: (str) => str.startsWith('!RegExp:'),\n serialize: (val) => '!RegExp:' + val.toString(),\n deserialize: (str) => {\n str = str.slice('!RegExp:'.length);\n // const args: string[] = str.match(/\\/(.*?)\\/([gimy])?$/)!\n const args = str.match(/\\/(.*)\\/(.*)?/);\n const pattern = args[1];\n const flags = args[2];\n return new RegExp(pattern, flags);\n },\n }),\n ts({\n is: (val) => val instanceof Map,\n match: (str) => str.startsWith('!Map:'),\n serialize: (val, serializer) => '!Map:' + serializer(Array.from(val.entries())),\n deserialize: (str, deserializer) => new Map(deserializer(str.slice('!Map:'.length))),\n }),\n ts({\n is: (val) => val instanceof Set,\n match: (str) => str.startsWith('!Set:'),\n serialize: (val, serializer) => '!Set:' + serializer(Array.from(val.values())),\n deserialize: (str, deserializer) => new Set(deserializer(str.slice('!Set:'.length))),\n }),\n // Avoid collisions with the special strings defined above\n ts({\n is: (val) => typeof val === 'string' && val.startsWith('!'),\n match: (str) => str.startsWith('!'),\n serialize: (val) => '!' + val,\n deserialize: (str) => str.slice(1),\n }),\n];\n// Type check\nfunction ts(t) {\n return t;\n}\n","export { parse };\n// Used by Vike: https://github.com/vikejs/vike/blob/b4ba6b70e6bdc2e1f460c0d2e4c3faae5d0a733c/vike/shared/page-configs/serialize/parseConfigValuesSerialized.ts#L13\nexport { parseTransform };\nimport { types } from './types';\nfunction parse(str) {\n // We don't use the reviver option in `JSON.parse(str, reviver)` because it doesn't support `undefined` values\n const value = JSON.parse(str);\n return parseTransform(value);\n}\nfunction parseTransform(value) {\n if (typeof value === 'string') {\n return reviver(value);\n }\n if (\n // Also matches arrays\n typeof value === 'object' &&\n value !== null) {\n Object.entries(value).forEach(([key, val]) => {\n ;\n value[key] = parseTransform(val);\n });\n }\n return value;\n}\nfunction reviver(value) {\n for (const { match, deserialize } of types) {\n if (match(value)) {\n return deserialize(value, parse);\n }\n }\n return value;\n}\n","export { assertPlusFileExport };\nimport { assert, assertUsage, assertWarning } from '../utils.js';\nimport pc from '@brillout/picocolors';\nconst EXPORTS_IGNORE = [\n // vite-plugin-solid adds `export { $$registrations }`\n '$$registrations',\n // @vitejs/plugin-vue adds `export { _rerender_only }`\n '_rerender_only'\n];\n// Tolerate `export { frontmatter }` in .mdx files\nconst TOLERATE_SIDE_EXPORTS = ['.md', '.mdx'];\nfunction assertPlusFileExport(fileExports, filePathToShowToUser, configName) {\n const exportNames = Object.keys(fileExports).filter((exportName) => !EXPORTS_IGNORE.includes(exportName));\n const isValid = (exportName) => exportName === 'default' || exportName === configName;\n const exportNamesValid = exportNames.filter(isValid);\n const exportNamesInvalid = exportNames.filter((e) => !isValid(e));\n if (exportNamesValid.length === 1 && exportNamesInvalid.length === 0) {\n return;\n }\n const exportDefault = pc.code('export default');\n const exportNamed = pc.code(`export { ${configName} }`);\n if (exportNamesValid.length === 0) {\n assertUsage(false, `${filePathToShowToUser} should have a ${exportNamed} or ${exportDefault}`);\n }\n if (exportNamesValid.length === 2) {\n assertWarning(false, `${filePathToShowToUser} is ambiguous: remove ${exportDefault} or ${exportNamed}`, {\n onlyOnce: true\n });\n }\n assert(exportNamesValid.length === 1);\n assert(exportNamesInvalid.length > 0);\n if (!TOLERATE_SIDE_EXPORTS.some((ext) => filePathToShowToUser.endsWith(ext))) {\n exportNamesInvalid.forEach((exportInvalid) => {\n assertWarning(false, `${filePathToShowToUser} unexpected ${pc.cyan(`export { ${exportInvalid} }`)}`, {\n onlyOnce: true\n });\n });\n }\n}\n","export { parsePageConfigs };\nexport { parseConfigValuesSerialized };\nimport { assert, assertUsage, isCallable } from '../../utils.js';\nimport { getConfigDefinedAt } from '../getConfigDefinedAt.js';\nimport { parseTransform } from '@brillout/json-serializer/parse';\nimport { assertPlusFileExport } from '../assertPlusFileExport.js';\nfunction parseConfigValuesSerialized(configValuesSerialized) {\n const configValues = parseConfigValuesSerialized_tmp(configValuesSerialized);\n return configValues;\n}\nfunction parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {\n // pageConfigs\n const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {\n const configValues = parseConfigValuesSerialized(pageConfigSerialized.configValuesSerialized);\n const { pageId, isErrorPage, routeFilesystem, loadConfigValuesAll } = pageConfigSerialized;\n assertRouteConfigValue(configValues);\n return {\n pageId,\n isErrorPage,\n routeFilesystem,\n configValues,\n loadConfigValuesAll\n };\n });\n // pageConfigsGlobal\n const pageConfigGlobal = { configValues: {} };\n {\n const configValues = parseConfigValuesSerialized(pageConfigGlobalSerialized.configValuesSerialized);\n Object.assign(pageConfigGlobal.configValues, configValues);\n }\n return { pageConfigs, pageConfigGlobal };\n}\nfunction assertRouteConfigValue(configValues) {\n const configName = 'route';\n const configValue = configValues[configName];\n if (!configValue)\n return;\n const { value, definedAtData } = configValue;\n const configValueType = typeof value;\n assert(definedAtData);\n const configDefinedAt = getConfigDefinedAt('Config', configName, definedAtData);\n assertUsage(configValueType === 'string' || isCallable(value), `${configDefinedAt} has an invalid type '${configValueType}': it should be a string or a function instead, see https://vike.dev/route`);\n /* We don't use assertRouteString() in order to avoid unnecessarily bloating the client-side bundle when using Server Routing:\n * - When using Server Routing, this file is loaded => loading assertRouteString() would bloat the client bundle.\n * - assertRouteString() is already called on the server-side\n * - When using Server Routing, client-side validation is superfluous as Route Strings only need to be validated on the server-side\n if (typeof configValue === 'string') {\n assertRouteString(configValue, `${configElement.configDefinedAt} defines an`)\n }\n */\n}\nfunction parseConfigValuesSerialized_tmp(configValuesSerialized) {\n const configValues = {};\n Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {\n let configValue;\n if (configValueSeriliazed.type === 'cumulative') {\n const { valueSerialized, ...common } = configValueSeriliazed;\n const value = valueSerialized.map((valueSerializedElement, i) => {\n const { value, sideExports } = parseValueSerialized(valueSerializedElement, configName, () => {\n const definedAtFile = configValueSeriliazed.definedAtData[i];\n assert(definedAtFile);\n return definedAtFile;\n });\n addSideExports(sideExports);\n return value;\n });\n configValue = { value, ...common };\n }\n else {\n const { valueSerialized, ...common } = configValueSeriliazed;\n const { value, sideExports } = parseValueSerialized(valueSerialized, configName, () => {\n assert(configValueSeriliazed.type !== 'computed');\n return configValueSeriliazed.definedAtData;\n });\n addSideExports(sideExports);\n configValue = { value, ...common };\n }\n configValues[configName] = configValue;\n });\n return configValues;\n function addSideExports(sideExports) {\n sideExports.forEach((sideExport) => {\n const { configName, configValue } = sideExport;\n if (!configValues[configName]) {\n configValues[configName] = configValue;\n }\n else {\n // Side-exports have lower precedence.\n // We can't avoid side-export conflicts upstream. (We cannot know about side-exports at build-time.)\n }\n });\n }\n}\nfunction parseValueSerialized(valueSerialized, configName, getDefinedAtFile) {\n if (valueSerialized.type === 'js-serialized') {\n let { value } = valueSerialized;\n value = parseTransform(value);\n return { value, sideExports: [] };\n }\n if (valueSerialized.type === 'pointer-import') {\n const { value } = valueSerialized;\n return { value, sideExports: [] };\n }\n if (valueSerialized.type === 'plus-file') {\n const definedAtFile = getDefinedAtFile();\n const { exportValues } = valueSerialized;\n assertPlusFileExport(exportValues, definedAtFile.filePathToShowToUser, configName);\n let value;\n let valueWasFound = false;\n const sideExports = [];\n Object.entries(exportValues).forEach(([exportName, exportValue]) => {\n const isSideExport = exportName !== 'default' && exportName !== configName;\n if (!isSideExport) {\n value = exportValue;\n assert(!valueWasFound);\n valueWasFound = true;\n }\n else {\n sideExports.push({\n configName: exportName,\n configValue: {\n type: 'standard', // We don't support side exports for cumulative values. We could support it but it isn't trivial.\n value: exportValue,\n definedAtData: {\n filePathToShowToUser: definedAtFile.filePathToShowToUser,\n fileExportPathToShowToUser: [exportName]\n }\n }\n });\n }\n });\n // Already validated by assertPlusFileExport() call above.\n assert(valueWasFound);\n return { value, sideExports };\n }\n assert(false);\n}\n/* [NULL_HANDLING] Do we really need this?\nfunction assertIsNotNull(configValue: unknown, configName: string, filePathToShowToUser: string) {\n assert(!filePathToShowToUser.includes('+config.'))\n // Re-use this for:\n // - upcoming config.requestPageContextOnNavigation\n // - for cumulative values in the future: we don't need this for now because, currently, cumulative values are never imported.\n assertUsage(\n configValue !== null,\n `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.js file instead of ${filePathToShowToUser}`\n )\n}\n*/\n","export { parseGlobResults };\n// TODO/v1-release: remove old design code, and remove all assertions.\nimport { assert, hasProp, isCallable, isObject, cast, isArray } from '../utils.js';\nimport { assertExportValues } from './assert_exports_old_design.js';\nimport { getPageFileObject } from './getPageFileObject.js';\nimport { fileTypes } from './fileTypes.js';\nimport { parsePageConfigs } from '../page-configs/serialize/parsePageConfigs.js';\nfunction parseGlobResults(pageFilesExports) {\n assert(hasProp(pageFilesExports, 'pageFilesLazy', 'object'));\n assert(hasProp(pageFilesExports, 'pageFilesEager', 'object'));\n assert(hasProp(pageFilesExports, 'pageFilesExportNamesLazy', 'object'));\n assert(hasProp(pageFilesExports, 'pageFilesExportNamesEager', 'object'));\n assert(hasProp(pageFilesExports.pageFilesLazy, '.page'));\n assert(hasProp(pageFilesExports.pageFilesLazy, '.page.client') || hasProp(pageFilesExports.pageFilesLazy, '.page.server'));\n assert(hasProp(pageFilesExports, 'pageFilesList', 'string[]'));\n assert(hasProp(pageFilesExports, 'pageConfigsSerialized'));\n assert(hasProp(pageFilesExports, 'pageConfigGlobalSerialized'));\n const { pageConfigsSerialized, pageConfigGlobalSerialized } = pageFilesExports;\n assertPageConfigsSerialized(pageConfigsSerialized);\n assertPageConfigGlobalSerialized(pageConfigGlobalSerialized);\n const { pageConfigs, pageConfigGlobal } = parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized);\n const pageFilesMap = {};\n parseGlobResult(pageFilesExports.pageFilesLazy).forEach(({ filePath, pageFile, globValue }) => {\n pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;\n const loadModule = globValue;\n assertLoadModule(loadModule);\n pageFile.loadFile = async () => {\n if (!('fileExports' in pageFile)) {\n pageFile.fileExports = await loadModule();\n assertExportValues(pageFile);\n }\n };\n });\n parseGlobResult(pageFilesExports.pageFilesExportNamesLazy).forEach(({ filePath, pageFile, globValue }) => {\n pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;\n const loadModule = globValue;\n assertLoadModule(loadModule);\n pageFile.loadExportNames = async () => {\n if (!('exportNames' in pageFile)) {\n const moduleExports = await loadModule();\n assert(hasProp(moduleExports, 'exportNames', 'string[]'), pageFile.filePath);\n pageFile.exportNames = moduleExports.exportNames;\n }\n };\n });\n // `pageFilesEager` contains `.page.route.js` files\n parseGlobResult(pageFilesExports.pageFilesEager).forEach(({ filePath, pageFile, globValue }) => {\n pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;\n const moduleExports = globValue;\n assert(isObject(moduleExports));\n pageFile.fileExports = moduleExports;\n });\n parseGlobResult(pageFilesExports.pageFilesExportNamesEager).forEach(({ filePath, pageFile, globValue }) => {\n pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;\n const moduleExports = globValue;\n assert(isObject(moduleExports));\n assert(hasProp(moduleExports, 'exportNames', 'string[]'), pageFile.filePath);\n pageFile.exportNames = moduleExports.exportNames;\n });\n pageFilesExports.pageFilesList.forEach((filePath) => {\n pageFilesMap[filePath] = pageFilesMap[filePath] ?? getPageFileObject(filePath);\n });\n const pageFiles = Object.values(pageFilesMap);\n pageFiles.forEach(({ filePath }) => {\n assert(!filePath.includes('\\\\'));\n });\n return { pageFiles, pageConfigs, pageConfigGlobal };\n}\nfunction parseGlobResult(globObject) {\n const ret = [];\n Object.entries(globObject).forEach(([fileType, globFiles]) => {\n cast(fileType);\n assert(fileTypes.includes(fileType));\n assert(isObject(globFiles));\n Object.entries(globFiles).forEach(([filePath, globValue]) => {\n const pageFile = getPageFileObject(filePath);\n assert(pageFile.fileType === fileType);\n ret.push({ filePath, pageFile, globValue });\n });\n });\n return ret;\n}\nfunction assertLoadModule(globValue) {\n assert(isCallable(globValue));\n}\nfunction assertPageConfigsSerialized(pageConfigsSerialized) {\n assert(isArray(pageConfigsSerialized));\n pageConfigsSerialized.forEach((pageConfigSerialized) => {\n assert(isObject(pageConfigSerialized));\n assert(hasProp(pageConfigSerialized, 'pageId', 'string'));\n assert(hasProp(pageConfigSerialized, 'routeFilesystem'));\n assert(hasProp(pageConfigSerialized, 'configValuesSerialized'));\n });\n}\nfunction assertPageConfigGlobalSerialized(pageConfigGlobalSerialized) {\n assert(hasProp(pageConfigGlobalSerialized, 'configValuesSerialized'));\n}\n","export { setPageFiles };\nexport { setPageFilesAsync };\nexport { getPageFilesAll };\nimport { assert, unique } from '../utils.js';\nimport { parseGlobResults } from './parseGlobResults.js';\nimport { getGlobalObject } from '../../utils/getGlobalObject.js';\nconst globalObject = getGlobalObject('setPageFiles.ts', {});\n// TODO:v1-design-release: rename setPageFiles() getPageFilesAll() parseGlobResult()\nfunction setPageFiles(pageFilesExports) {\n const { pageFiles, pageConfigs, pageConfigGlobal } = parseGlobResults(pageFilesExports);\n globalObject.pageFilesAll = pageFiles;\n globalObject.pageConfigs = pageConfigs;\n globalObject.pageConfigGlobal = pageConfigGlobal;\n}\nfunction setPageFilesAsync(getPageFilesExports) {\n globalObject.pageFilesGetter = async () => {\n setPageFiles(await getPageFilesExports());\n };\n}\nasync function getPageFilesAll(isClientSide, isProduction) {\n if (isClientSide) {\n assert(!globalObject.pageFilesGetter);\n assert(isProduction === undefined);\n }\n else {\n assert(globalObject.pageFilesGetter);\n assert(typeof isProduction === 'boolean');\n if (!globalObject.pageFilesAll ||\n // We reload all glob imports in dev to make auto-reload work\n !isProduction) {\n await globalObject.pageFilesGetter();\n }\n }\n const { pageFilesAll, pageConfigs, pageConfigGlobal } = globalObject;\n assert(pageFilesAll && pageConfigs && pageConfigGlobal);\n const allPageIds = getAllPageIds(pageFilesAll, pageConfigs);\n return { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal };\n}\nfunction getAllPageIds(allPageFiles, pageConfigs) {\n const fileIds = allPageFiles.filter(({ isDefaultPageFile }) => !isDefaultPageFile).map(({ pageId }) => pageId);\n const allPageIds = unique(fileIds);\n const allPageIds2 = pageConfigs.map((p) => p.pageId);\n return [...allPageIds, ...allPageIds2];\n}\n","// TODO:v1-release: remove this file\nexport { getPageFilesClientSide };\nexport { getPageFilesServerSide };\nimport { assert, assertUsage, isNotNullish } from '../utils.js';\nimport { assertPageFilePath } from '../assertPageFilePath.js';\nfunction getPageFilesClientSide(pageFilesAll, pageId) {\n return determine(pageFilesAll, pageId, true);\n}\nfunction getPageFilesServerSide(pageFilesAll, pageId) {\n return determine(pageFilesAll, pageId, false);\n}\nfunction determine(pageFilesAll, pageId, envIsClient) {\n const env = envIsClient ? 'CLIENT_ONLY' : 'SERVER_ONLY';\n const pageFilesRelevant = pageFilesAll\n .filter((p) => p.isRelevant(pageId) && p.fileType !== '.page.route')\n .sort(getPageFilesSorter(envIsClient, pageId));\n // Load the `.page.js` files specific to `pageId`\n const getPageIdFile = (iso) => {\n const files = pageFilesRelevant.filter((p) => p.pageId === pageId && p.isEnv(iso ? 'CLIENT_AND_SERVER' : env));\n assertUsage(files.length <= 1, `Merge the following files into a single file: ${files.map((p) => p.filePath).join(' ')}`);\n const pageIdFile = files[0];\n assert(pageIdFile === undefined || !pageIdFile.isDefaultPageFile);\n return pageIdFile;\n };\n const pageIdFileEnv = getPageIdFile(false);\n const pageIdFileIso = getPageIdFile(true);\n // A page can have only one renderer. In other words: Multiple `renderer/` overwrite each other.\n // Load only load renderer (`/renderer/_default.*`)\n const getRendererFile = (iso) => pageFilesRelevant.filter((p) => p.isRendererPageFile && p.isEnv(iso ? 'CLIENT_AND_SERVER' : env))[0];\n const rendererFileEnv = getRendererFile(false);\n const rendererFileIso = getRendererFile(true);\n // A page can load multiple `_defaut.page.*` files of the same `fileType`. In other words: non-renderer `_default.page.*` files are cumulative.\n // The exception being HTML-only pages because we pick a single page file as client entry. We handle that use case at `renderPage()`.\n const defaultFilesNonRenderer = pageFilesRelevant.filter((p) => p.isDefaultPageFile && !p.isRendererPageFile && (p.isEnv(env) || p.isEnv('CLIENT_AND_SERVER')));\n // Ordered by `pageContext.exports` precendence\n const pageFiles = [pageIdFileEnv, pageIdFileIso, ...defaultFilesNonRenderer, rendererFileEnv, rendererFileIso].filter(isNotNullish);\n return pageFiles;\n}\nfunction getPageFilesSorter(envIsClient, pageId) {\n const env = envIsClient ? 'CLIENT_ONLY' : 'SERVER_ONLY';\n const e1First = -1;\n const e2First = +1;\n const noOrder = 0;\n return (e1, e2) => {\n // `.page.js` files specific to `pageId` first\n if (!e1.isDefaultPageFile && e2.isDefaultPageFile) {\n return e1First;\n }\n if (!e2.isDefaultPageFile && e1.isDefaultPageFile) {\n return e2First;\n }\n // Non-renderer `_default.page.*` before `renderer/**/_default.page.*`\n {\n const e1_isRenderer = e1.isRendererPageFile;\n const e2_isRenderer = e2.isRendererPageFile;\n if (!e1_isRenderer && e2_isRenderer) {\n return e1First;\n }\n if (!e2_isRenderer && e1_isRenderer) {\n return e2First;\n }\n assert(e1_isRenderer === e2_isRenderer);\n }\n // Filesystem nearest first\n {\n const e1_distance = getPathDistance(pageId, e1.filePath);\n const e2_distance = getPathDistance(pageId, e2.filePath);\n if (e1_distance < e2_distance) {\n return e1First;\n }\n if (e2_distance < e1_distance) {\n return e2First;\n }\n assert(e1_distance === e2_distance);\n }\n // `.page.server.js`/`.page.client.js` before `.page.js`\n {\n if (e1.isEnv(env) && e2.isEnv('CLIENT_AND_SERVER')) {\n return e1First;\n }\n if (e2.isEnv(env) && e1.isEnv('CLIENT_AND_SERVER')) {\n return e2First;\n }\n }\n return noOrder;\n };\n}\nfunction getPathDistance(pathA, pathB) {\n assertPageFilePath(pathA);\n assertPageFilePath(pathB);\n // Index of first different character\n let idx = 0;\n for (; idx < pathA.length && idx < pathB.length; idx++) {\n if (pathA[idx] !== pathB[idx])\n break;\n }\n const pathAWithoutCommon = pathA.slice(idx);\n const pathBWithoutCommon = pathB.slice(idx);\n const distanceA = pathAWithoutCommon.split('/').length;\n const distanceB = pathBWithoutCommon.split('/').length;\n const distance = distanceA + distanceB;\n return distance;\n}\n","export { getPageConfig };\nexport { getConfigValueFilePathToShowToUser };\nexport { getHookFilePathToShowToUser };\nimport { assert, isArray } from '../utils.js';\nfunction getPageConfig(pageId, pageConfigs) {\n const pageConfig = pageConfigs.find((p) => p.pageId === pageId);\n assert(pageConfigs.length > 0);\n assert(pageConfig);\n return pageConfig;\n}\nfunction getConfigValueFilePathToShowToUser(definedAtData) {\n // A unique file path only exists if the config value isn't cumulative nor computed:\n // - cumulative config values have multiple file paths\n // - computed values don't have any file path\n if (!definedAtData || isArray(definedAtData))\n return null;\n const { filePathToShowToUser } = definedAtData;\n assert(filePathToShowToUser);\n return filePathToShowToUser;\n}\nfunction getHookFilePathToShowToUser(definedAtData) {\n const filePathToShowToUser = getConfigValueFilePathToShowToUser(definedAtData);\n assert(filePathToShowToUser);\n return filePathToShowToUser;\n}\n","export { getPageContextExports };\nimport { isScriptFile, isTemplateFile } from '../../utils/isScriptFile.js';\nimport { assert, isObject, assertWarning, assertUsage, makeLast, isBrowser } from '../utils.js';\nimport { assertDefaultExports, forbiddenDefaultExports } from './assert_exports_old_design.js';\nimport { getConfigDefinedAtOptional, getDefinedAtString } from '../page-configs/getConfigDefinedAt.js';\nimport { getConfigValueFilePathToShowToUser } from '../page-configs/helpers.js';\nimport pc from '@brillout/picocolors';\nfunction getPageContextExports(pageFiles, pageConfig) {\n const configEntries = {};\n const config = {};\n const exportsAll = {};\n // V0.4 design\n // TODO/v1-release: remove\n pageFiles.forEach((pageFile) => {\n const exportValues = getExportValues(pageFile);\n exportValues.forEach(({ exportName, exportValue, isFromDefaultExport }) => {\n assert(exportName !== 'default');\n exportsAll[exportName] = exportsAll[exportName] ?? [];\n exportsAll[exportName].push({\n exportValue,\n exportSource: `${pageFile.filePath} > ${isFromDefaultExport ? `\\`export default { ${exportName} }\\`` : `\\`export { ${exportName} }\\``}`,\n filePath: pageFile.filePath,\n _filePath: pageFile.filePath, // TODO/next-major-release: remove\n _fileType: pageFile.fileType,\n _isFromDefaultExport: isFromDefaultExport\n });\n });\n });\n // V1 design\n const source = {};\n const sources = {};\n const addSrc = (src, configName) => {\n source[configName] = src;\n sources[configName] ?? (sources[configName] = []);\n sources[configName].push(src);\n };\n const from = {\n configsStandard: {},\n configsCumulative: {},\n configsComputed: {}\n };\n if (pageConfig) {\n Object.entries(pageConfig.configValues).forEach(([configName, configValue]) => {\n const { value } = configValue;\n const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);\n const configDefinedAt = getConfigDefinedAtOptional('Config', configName, configValue.definedAtData);\n config[configName] = config[configName] ?? value;\n configEntries[configName] = configEntries[configName] ?? [];\n // Currently each configName has only one entry. Adding an entry for each overriden config value isn't implemented yet. (This is an isomorphic file and it isn't clear whether this can/should be implemented on the client-side. We should load a minimum amount of code on the client-side.)\n assert(configEntries[configName].length === 0);\n configEntries[configName].push({\n configValue: value,\n configDefinedAt,\n configDefinedByFile: configValueFilePathToShowToUser\n });\n if (configValue.type === 'standard') {\n const src = {\n type: 'configsStandard',\n value: configValue.value,\n definedAt: getDefinedAtString(configValue.definedAtData, configName)\n };\n addSrc(src, configName);\n from.configsStandard[configName] = src;\n }\n if (configValue.type === 'cumulative') {\n const src = {\n type: 'configsCumulative',\n values: configValue.value.map((value, i) => {\n const definedAtFile = configValue.definedAtData[i];\n assert(definedAtFile);\n const definedAt = getDefinedAtString(definedAtFile, configName);\n return {\n value,\n definedAt\n };\n })\n };\n addSrc(src, configName);\n from.configsCumulative[configName] = src;\n }\n if (configValue.type === 'computed') {\n const src = {\n type: 'configsComputed',\n value: configValue.value\n };\n addSrc(src, configName);\n from.configsComputed[configName] = src;\n }\n // TODO/v1-release: remove\n const exportName = configName;\n exportsAll[exportName] = exportsAll[exportName] ?? [];\n exportsAll[exportName].push({\n exportValue: value,\n exportSource: configDefinedAt,\n filePath: configValueFilePathToShowToUser,\n _filePath: configValueFilePathToShowToUser,\n _fileType: null,\n _isFromDefaultExport: null\n });\n });\n }\n const pageExports = createObjectWithDeprecationWarning();\n const exports = {};\n Object.entries(exportsAll).forEach(([exportName, values]) => {\n values.forEach(({ exportValue, _fileType, _isFromDefaultExport }) => {\n exports[exportName] = exports[exportName] ?? exportValue;\n // Legacy pageContext.pageExports\n if (_fileType === '.page' && !_isFromDefaultExport) {\n if (!(exportName in pageExports)) {\n pageExports[exportName] = exportValue;\n }\n }\n });\n });\n assert(!('default' in exports));\n assert(!('default' in exportsAll));\n const pageContextExports = {\n from,\n source,\n sources,\n // TODO/eventually: deprecate/remove every prop below\n config,\n configEntries,\n exports,\n exportsAll,\n pageExports\n };\n return pageContextExports;\n}\nfunction getExportValues(pageFile) {\n const { filePath, fileExports } = pageFile;\n assert(fileExports); // assume pageFile.loadFile() was called\n assert(isScriptFile(filePath));\n const exportValues = [];\n Object.entries(fileExports)\n .sort(makeLast(([exportName]) => exportName === 'default')) // `export { bla }` should override `export default { bla }`\n .forEach(([exportName, exportValue]) => {\n let isFromDefaultExport = exportName === 'default';\n if (isFromDefaultExport) {\n if (isTemplateFile(filePath)) {\n exportName = 'Page';\n }\n else {\n assertUsage(isObject(exportValue), `The ${pc.cyan('export default')} of ${filePath} should be an object.`);\n Object.entries(exportValue).forEach(([defaultExportName, defaultExportValue]) => {\n assertDefaultExports(defaultExportName, filePath);\n exportValues.push({\n exportName: defaultExportName,\n exportValue: defaultExportValue,\n isFromDefaultExport\n });\n });\n return;\n }\n }\n exportValues.push({\n exportName,\n exportValue,\n isFromDefaultExport\n });\n });\n exportValues.forEach(({ exportName, isFromDefaultExport }) => {\n assert(!(isFromDefaultExport && forbiddenDefaultExports.includes(exportName)));\n });\n return exportValues;\n}\n// TODO/v1-release: remove\nfunction createObjectWithDeprecationWarning() {\n return new Proxy({}, {\n get(...args) {\n // We only show the warning in Node.js because when using Client Routing Vue integration uses `Object.assign(pageContextReactive, pageContext)` which will wrongully trigger the warning. There is no cross-browser way to catch whether the property accessor was initiated by an `Object.assign()` call.\n if (!isBrowser()) {\n assertWarning(false, '`pageContext.pageExports` is outdated. Use `pageContext.exports` instead, see https://vike.dev/exports', { onlyOnce: true, showStackTrace: true });\n }\n return Reflect.get(...args);\n }\n });\n}\n","import { setPageFiles } from '../../shared/getPageFiles.js';\n// @ts-ignore\nimport * as pageFilesExports from 'virtual:vike:importUserCode:client:client-routing';\nsetPageFiles(pageFilesExports);\n","export { assertIsBrowser };\nimport { isBrowser } from './isBrowser.js';\nimport { assert } from './assert.js';\nfunction assertIsBrowser() {\n assert(isBrowser());\n}\n","export { onLoad };\nimport { assertIsBrowser } from '../../utils/assertIsBrowser.js';\nimport { assertClientRouting } from '../../utils/assertRoutingType.js';\nfunction onLoad() {\n assertIsBrowser();\n // Ensure we don't bloat the Server Routing runtime with Client Routing utils\n assertClientRouting();\n}\n","export { onLoad };\nimport { assertIsBrowser } from '../../utils/assertIsBrowser.js';\nfunction onLoad() {\n assertIsBrowser();\n}\n","export { humanizeTime };\nfunction humanizeTime(milliseconds) {\n const seconds = milliseconds / 1000;\n if (seconds < 120) {\n const n = round(seconds);\n return `${n} second${plural(n)}`;\n }\n {\n const minutes = seconds / 60;\n const n = round(minutes);\n return `${n} minute${plural(n)}`;\n }\n}\nfunction round(n) {\n let rounded = n.toFixed(1);\n if (rounded.endsWith('.0'))\n rounded = rounded.slice(0, -2);\n return rounded;\n}\nfunction plural(n) {\n return n === '1' ? '' : 's';\n}\n","export { executeHook };\nexport { getPageContext };\nexport { isUserHookError };\nimport { getProjectError, assertWarning } from '../../utils/assert.js';\nimport { getGlobalObject } from '../../utils/getGlobalObject.js';\nimport { humanizeTime } from '../../utils/humanizeTime.js';\nimport { isObject } from '../../utils/isObject.js';\nconst globalObject = getGlobalObject('utils/executeHook.ts', {\n userHookErrors: new WeakMap(),\n pageContext: null\n});\nfunction isUserHookError(err) {\n if (!isObject(err))\n return false;\n return globalObject.userHookErrors.get(err) ?? false;\n}\nfunction executeHook(hookFnCaller, hook, pageContext) {\n const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn } } = hook;\n let resolve;\n let reject;\n const promise = new Promise((resolve_, reject_) => {\n resolve = (ret) => {\n clearTimeouts();\n resolve_(ret);\n };\n reject = (err) => {\n clearTimeouts();\n reject_(err);\n };\n });\n const clearTimeouts = () => {\n if (currentTimeoutWarn)\n clearTimeout(currentTimeoutWarn);\n if (currentTimeoutErr)\n clearTimeout(currentTimeoutErr);\n };\n const currentTimeoutWarn = isNotDisabled(timeoutWarn) &&\n setTimeout(() => {\n assertWarning(false, `The ${hookName}() hook defined by ${hookFilePath} is slow: it's taking more than ${humanizeTime(timeoutWarn)} (https://vike.dev/hooksTimeout)`, { onlyOnce: false });\n }, timeoutWarn);\n const currentTimeoutErr = isNotDisabled(timeoutErr) &&\n setTimeout(() => {\n const err = getProjectError(`The ${hookName}() hook defined by ${hookFilePath} timed out: it didn't finish after ${humanizeTime(timeoutErr)} (https://vike.dev/hooksTimeout)`);\n reject(err);\n }, timeoutErr);\n (async () => {\n try {\n providePageContext(pageContext);\n const ret = await hookFnCaller();\n resolve(ret);\n }\n catch (err) {\n if (isObject(err)) {\n globalObject.userHookErrors.set(err, { hookName, hookFilePath });\n }\n reject(err);\n }\n })();\n return promise;\n}\nfunction isNotDisabled(timeout) {\n return !!timeout && timeout !== Infinity;\n}\n/**\n * Access `pageContext` object inside Vike hooks, in order to create universal hooks.\n *\n * https://vike.dev/getPageContext\n */\nfunction getPageContext() {\n return globalObject.pageContext;\n}\nfunction providePageContext(pageContext) {\n globalObject.pageContext = pageContext;\n // Promise.resolve() is quicker than process.nextTick() and setImmediate()\n // https://stackoverflow.com/questions/67949576/process-nexttick-before-promise-resolve-then\n Promise.resolve().then(() => {\n globalObject.pageContext = null;\n });\n}\n","export { getCurrentUrl };\nimport { parseUrl } from './parseUrl.js';\nimport { assert } from './assert.js';\nfunction getCurrentUrl(options) {\n const url = window.location.href;\n const { searchOriginal, hashOriginal, pathname } = parseUrl(url, '/');\n let urlCurrent;\n if (options?.withoutHash) {\n urlCurrent = `${pathname}${searchOriginal || ''}`;\n }\n else {\n urlCurrent = `${pathname}${searchOriginal || ''}${hashOriginal || ''}`;\n }\n assert(urlCurrent.startsWith('/'));\n return urlCurrent;\n}\n","export function getPropAccessNotation(key) {\n return typeof key === 'string' && isKeyDotNotationCompatible(key) ? `.${key}` : `[${JSON.stringify(key)}]`;\n}\nfunction isKeyDotNotationCompatible(key) {\n return /^[a-z0-9\\$_]+$/i.test(key);\n}\n","// Utils needed by Server Routing.\n// We assume all runtime entries will load this utils.ts file\nimport { onLoad } from './onLoad.js';\nonLoad();\nexport * from '../../utils/assert.js';\nexport * from '../../utils/assertSingleInstance.js';\nexport * from '../../shared/hooks/executeHook.js';\nexport * from '../../utils/checkType.js'; // Only used by Server Routing (not needed for Client Routing)\nexport * from '../../utils/getCurrentUrl.js';\nexport * from '../../utils/getGlobalObject.js';\nexport * from '../../utils/hasProp.js';\nexport * from '../../utils/isCallable.js';\nexport * from '../../utils/isObject.js';\nexport * from '../../utils/objectAssign.js';\nexport * from '../../utils/parseUrl.js';\nexport * from '../../utils/slice.js';\nexport * from '../../utils/unique.js'; // Only used by Server Routing (not needed for Client Routing)\nexport * from '../../utils/getPropAccessNotation.js';\n","// There doesn't seem to be a reliable way to detect React:\n// - https://stackoverflow.com/questions/73156433/detect-with-javascript-whether-the-website-is-using-react\nexport function isReact() {\n // Heuristic using values set by React (Dev Tools)\n // - `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` is an internal API for React Dev Tools\n // - https://stackoverflow.com/questions/46807826/how-does-react-developer-tools-determine-that-the-webpage-is-using-react/46808361#46808361\n // - In principle, `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` should exist only if React Dev Tools is installed. (Although it seems that it's sometimes defined even when React Dev Tools isn't installed; I don't know why.)\n // - We use `isReact1`/`isReact2` merely to validate `isReact3` and `isReact4`. Because `isReact1`/`isReact2` can be false negatives:\n // - React populates `__REACT_DEVTOOLS_GLOBAL_HOOK__.renderers` fairly late => false negative early in the rendering phase\n // - `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` is `undefined` if React Dev Tools isn't installed => false negative\n const isReact1 = !!window.__REACT_DEVTOOLS_GLOBAL_HOOK__?.renderers?.size;\n const isReact2 = !!window.__REACT_DEVTOOLS_GLOBAL_HOOK__?.rendererInterfaces?.size;\n // Heuristic using values set by `@vitejs/plugin-react`\n const isReact3 = !!window.__vite_plugin_react_preamble_installed__;\n /* Also set by Preact Vite plugin `@preact/preset-vite`\n const isReact4 = !!(window as any).$RefreshReg$\n */\n // console.log({ isReact1, isReact2, isReact3 })\n return isReact1 || isReact2 || isReact3;\n}\n","import { isObject } from './isObject.js';\nexport { isSameErrorMessage };\nfunction isSameErrorMessage(err1, err2) {\n if (!isObject(err1) || !isObject(err2))\n return false;\n return err1.message === err2.message;\n}\n","export function redirectHard(url) {\n window.location.href = url;\n}\n","export function sleep(milliseconds) {\n return new Promise((r) => setTimeout(r, milliseconds));\n}\n","export { throttle };\nfunction throttle(func, waitTime) {\n let isQueued = false;\n return () => {\n if (!isQueued) {\n isQueued = true;\n setTimeout(() => {\n isQueued = false;\n func();\n }, waitTime);\n }\n };\n}\n","export { onPageHide };\nexport { onPageShow };\nfunction onPageHide(listener) {\n window.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n listener();\n }\n });\n}\nfunction onPageShow(listener) {\n window.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n listener();\n }\n });\n}\n","export { augmentType };\nimport { assert } from './assert.js';\n/** Help TypeScript augment the type of objects. */\nfunction augmentType(thing, clone) {\n // @ts-ignore\n assert(thing === clone);\n}\n","// Utils needed by Client Routing.\n// We assume all runtime entries will load this utils.ts file\nimport { onLoad } from './onLoad.js';\nonLoad();\n// We load the Server Routing utils: we tolerate the tiny amount of code that is only needed by Server Routing (only 1-2 lines).\n// We re-export some of the utils down below only to list the utils needed by Client Routing.\nexport * from '../server-routing-runtime/utils.js';\nexport * from '../../utils/assert.js';\nexport * from '../../utils/assertSingleInstance.js';\nexport * from '../../shared/hooks/executeHook.js';\nexport * from '../../utils/getCurrentUrl.js';\nexport * from '../../utils/getGlobalObject.js';\nexport * from '../../utils/hasProp.js';\nexport * from '../../utils/isBrowser.js';\nexport * from '../../utils/isCallable.js';\nexport * from '../../utils/isObject.js';\nexport * from '../../utils/isPlainObject.js';\nexport * from '../../utils/isReact.js';\nexport * from '../../utils/isSameErrorMessage.js';\nexport * from '../../utils/objectAssign.js';\nexport * from '../../utils/parseUrl.js';\nexport * from '../../utils/PromiseType.js';\nexport * from '../../utils/redirectHard.js';\nexport * from '../../utils/sleep.js';\nexport * from '../../utils/slice.js';\nexport * from '../../utils/throttle.js';\nexport * from '../../utils/assertRoutingType.js';\nexport * from '../../utils/onPageVisibilityChange.js';\nexport * from '../../utils/augmentType.js';\nexport * from '../../utils/PROJECT_VERSION.js';\n","export { initHistoryState, getHistoryState, pushHistory, saveScrollPosition, monkeyPatchHistoryPushState };\nimport { assert, assertUsage, hasProp, isObject } from './utils.js';\n// Fill missing state information:\n// - `history.state` can uninitialized (i.e. `null`):\n// - The very first render\n// - The user's code runs `location.hash = '#section'`\n// - The user clicks on an anchor link `<a href=\"#section\">Section</a>` (Vike's `onLinkClick()` handler skips hash links).\n// - State information may be incomplete if `history.state` is set by an old Vike version. (E.g. `state.timestamp` was introduced for `pageContext.isBackwardNavigation` in `0.4.19`.)\nfunction initHistoryState() {\n // No way found to add TypeScript types to `window.history.state`: https://github.com/microsoft/TypeScript/issues/36178\n let state = window.history.state;\n if (!state) {\n state = { _isVikeEnhanced: true };\n }\n let hasModifications = false;\n if (!('timestamp' in state)) {\n hasModifications = true;\n state.timestamp = getTimestamp();\n }\n if (!('scrollPosition' in state)) {\n hasModifications = true;\n state.scrollPosition = getScrollPosition();\n }\n if (!('triggeredBy' in state)) {\n state.triggeredBy = 'browser';\n }\n assertState(state);\n if (hasModifications) {\n replaceHistoryState(state);\n }\n}\nfunction getHistoryState() {\n const state = window.history.state || {};\n assertState(state);\n return state;\n}\nfunction getScrollPosition() {\n const scrollPosition = { x: window.scrollX, y: window.scrollY };\n return scrollPosition;\n}\nfunction getTimestamp() {\n return new Date().getTime();\n}\nfunction saveScrollPosition() {\n const scrollPosition = getScrollPosition();\n const state = getHistoryState();\n replaceHistoryState({ ...state, scrollPosition });\n}\nfunction pushHistory(url, overwriteLastHistoryEntry) {\n if (!overwriteLastHistoryEntry) {\n const timestamp = getTimestamp();\n pushHistoryState({ timestamp, scrollPosition: null, triggeredBy: 'vike', _isVikeEnhanced: true }, url);\n }\n else {\n replaceHistoryState(getHistoryState(), url);\n }\n}\nfunction assertState(state) {\n assert(isObject(state));\n if ('timestamp' in state) {\n const { timestamp } = state;\n assert(typeof timestamp === 'number');\n }\n if ('scrollPosition' in state) {\n const { scrollPosition } = state;\n if (scrollPosition !== null) {\n assert(hasProp(scrollPosition, 'x', 'number') && hasProp(scrollPosition, 'y', 'number'));\n }\n }\n}\nfunction replaceHistoryState(state, url) {\n const url_ = url ?? null; // Passing `undefined` chokes older Edge versions.\n window.history.replaceState(state, '', url_);\n}\nfunction pushHistoryState(state, url) {\n // Vike should call window.history.pushState() (and not the orignal `pushStateOriginal()`) so that other tools (e.g. user tracking) can listen to Vike's pushState() calls, see https://github.com/vikejs/vike/issues/1582.\n window.history.pushState(state, '', url);\n}\nfunction monkeyPatchHistoryPushState() {\n const pushStateOriginal = window.history.pushState.bind(window.history);\n window.history.pushState = (stateOriginal = {}, ...rest) => {\n assertUsage(stateOriginal === undefined || stateOriginal === null || isObject(stateOriginal), 'history.pushState(state) argument state must be an object');\n const stateEnhanced = isVikeEnhanced(stateOriginal)\n ? stateOriginal\n : {\n _isVikeEnhanced: true,\n scrollPosition: getScrollPosition(),\n timestamp: getTimestamp(),\n triggeredBy: 'user',\n ...stateOriginal\n };\n return pushStateOriginal(stateEnhanced, ...rest);\n };\n}\nfunction isVikeEnhanced(state) {\n return isObject(state) && '_isVikeEnhanced' in state;\n}\n","import { parse } from '@brillout/json-serializer/parse';\nimport { hasProp, assert, assertUsage } from '../server-routing-runtime/utils.js';\nexport { getPageContextSerializedInHtml };\nfunction getPageContextSerializedInHtml() {\n // elem should exist because:\n // 1. <script id=\"vike_pageContext\" type=\"application/json\"> appears before the <script> that loads Vike's client runtime (which includes this file)\n // 2. <script id=\"vike_pageContext\" type=\"application/json\"> is neither async nor defer\n // See https://github.com/vikejs/vike/pull/1271\n const id = 'vike_pageContext';\n const elem = document.getElementById(id);\n assertUsage(elem, \n // It seems like it can be missing because of malformed HTML: https://github.com/vikejs/vike/issues/913\n `Couldn't find #${id} (which Vike automatically injects in the HTML): make sure it exists (i.e. don't remove it and make sure your HTML isn't malformed)`);\n const pageContextJson = elem.textContent;\n assert(pageContextJson);\n const pageContextSerializedInHtml = parse(pageContextJson);\n assert(hasProp(pageContextSerializedInHtml, '_pageId', 'string'));\n assert(hasProp(pageContextSerializedInHtml, 'routeParams', 'string{}'));\n return pageContextSerializedInHtml;\n}\n","export { analyzePageServerSide };\nimport { assert } from '../utils.js';\nimport { getPageFilesServerSide } from './getAllPageIdFiles.js';\nasync function analyzePageServerSide(pageFilesAll, pageId) {\n const pageFilesServerSide = getPageFilesServerSide(pageFilesAll, pageId);\n const pageFilesServerSideOnly = pageFilesServerSide.filter((p) => p.fileType === '.page.server');\n await Promise.all(pageFilesServerSideOnly.map(async (p) => {\n // In production, `exportNames` are preload\n if (p.exportNames) {\n return;\n }\n assert(p.loadExportNames, pageId);\n await p.loadExportNames();\n }));\n const hasOnBeforeRenderServerSideOnlyHook = pageFilesServerSideOnly.some(({ exportNames }) => {\n assert(exportNames);\n return exportNames.includes('onBeforeRender');\n });\n return { hasOnBeforeRenderServerSideOnlyHook };\n}\n","export { getConfigValueRuntime };\nexport { getConfigValueTyped };\nimport { assert, assertUsage, getValuePrintable } from '../utils.js';\nimport pc from '@brillout/picocolors';\nimport { getConfigDefinedAtOptional } from './getConfigDefinedAt.js';\nfunction getConfigValueTyped(configValue, configName, type) {\n /* [NULL_HANDLING] Do we really need this? This doesn't seem to make sense, let's eventually (re)move this.\n // Enable users to suppress global config values by setting the local config value to null\n if (configValue.value === null) return null\n */\n const { value, definedAtData } = configValue;\n if (type)\n assertConfigValueType(value, type, configName, definedAtData);\n return configValue;\n}\nfunction getConfigValueRuntime(pageConfig, configName, type) {\n const configValue = pageConfig.configValues[configName];\n if (!configValue)\n return null;\n return getConfigValueTyped(configValue, configName, type);\n}\nfunction assertConfigValueType(value, type, configName, definedAtData) {\n assert(value !== null);\n const typeActual = typeof value;\n if (typeActual === type)\n return;\n const valuePrintable = getValuePrintable(value);\n const problem = valuePrintable !== null\n ? `value ${pc.cyan(valuePrintable)}`\n : `type ${pc.cyan(typeActual)}`;\n const configDefinedAt = getConfigDefinedAtOptional('Config', configName, definedAtData);\n const errMsg = `${configDefinedAt} has an invalid ${problem}: it should be a ${pc.cyan(type)} instead`;\n assertUsage(false, errMsg);\n}\n","export { getHook };\nexport { getHookFromPageConfig };\nexport { getHookFromPageConfigGlobal };\nexport { assertHook };\nexport { setIsPrerenderering };\n// TODO/v1-release: remove\n// We export for old V0.4 design which doesn't support configooksTimeout\nexport { getHookTimeoutDefault };\nimport { getGlobalObject } from '../../utils/getGlobalObject.js';\nimport { getHookFilePathToShowToUser } from '../page-configs/helpers.js';\nimport { getConfigValueRuntime } from '../page-configs/getConfigValue.js';\nimport { assert, assertUsage, checkType, isCallable, isObject } from '../utils.js';\nimport pc from '@brillout/picocolors';\nconst globalObject = getGlobalObject('getHook.ts', {\n isPrerendering: false\n});\nfunction getHook(pageContext, hookName) {\n if (!(hookName in pageContext.exports)) {\n return null;\n }\n const { hooksTimeout } = pageContext.config;\n const hookTimeout = getHookTimeout(hooksTimeout, hookName);\n const hookFn = pageContext.exports[hookName];\n const file = pageContext.exportsAll[hookName][0];\n assert(file.exportValue === hookFn);\n if (hookFn === null)\n return null;\n const hookFilePath = file.filePath;\n assert(hookFilePath);\n assert(!hookFilePath.endsWith(' '));\n assertHookFn(hookFn, { hookName, hookFilePath });\n return { hookFn, hookName, hookFilePath, hookTimeout };\n}\nfunction getHookFromPageConfig(pageConfig, hookName) {\n const configValue = getConfigValueRuntime(pageConfig, hookName);\n const hooksTimeout = getConfigValueRuntime(pageConfig, 'hooksTimeout')?.value;\n if (!configValue)\n return null;\n const hookFn = configValue.value;\n if (!hookFn)\n return null;\n const hookFilePath = getHookFilePathToShowToUser(configValue.definedAtData);\n // hook isn't a computed nor a cumulative config => hookFilePath should always be defined\n assert(hookFilePath);\n assertHookFn(hookFn, { hookName, hookFilePath });\n const hookTimeout = getHookTimeout(hooksTimeout, hookName);\n return { hookFn, hookName, hookFilePath, hookTimeout };\n}\nfunction getHookFromPageConfigGlobal(pageConfigGlobal, hookName) {\n const configValue = pageConfigGlobal.configValues[hookName];\n if (!configValue)\n return null;\n const hookFn = configValue.value;\n if (!hookFn)\n return null;\n const hookFilePath = getHookFilePathToShowToUser(configValue.definedAtData);\n // hook isn't a computed nor a cumulative config => hookFilePath should always be defined\n assert(hookFilePath);\n assertHookFn(hookFn, { hookName, hookFilePath });\n // We could use the global value of configooksTimeout but it requires some non-trivial refactoring\n const hookTimeout = getHookTimeoutDefault(hookName);\n return { hookFn, hookName, hookFilePath, hookTimeout };\n}\nfunction assertHook(pageContext, hookName) {\n getHook(pageContext, hookName);\n}\nfunction assertHookFn(hookFn, { hookName, hookFilePath }) {\n assert(hookName && hookFilePath);\n assert(!hookName.endsWith(')'));\n assertUsage(isCallable(hookFn), `Hook ${hookName}() defined by ${hookFilePath} should be a function`);\n checkType(hookFn);\n}\nfunction getHookTimeout(hooksTimeoutProvidedByUser, hookName) {\n const hooksTimeoutProvidedbyUserNormalized = getHooksTimeoutProvidedByUserNormalized(hooksTimeoutProvidedByUser);\n if (hooksTimeoutProvidedbyUserNormalized === false)\n return { error: false, warning: false };\n const providedbyUser = hooksTimeoutProvidedbyUserNormalized[hookName];\n const hookTimeout = getHookTimeoutDefault(hookName);\n if (providedbyUser?.error !== undefined)\n hookTimeout.error = providedbyUser.error;\n if (providedbyUser?.warning !== undefined)\n hookTimeout.warning = providedbyUser.warning;\n return hookTimeout;\n}\n// Ideally this should be called only once and at build-time (to avoid bloating the client-side bundle), but we didn't implement any mechanism to valide config values at build-time yet\nfunction getHooksTimeoutProvidedByUserNormalized(hooksTimeoutProvidedByUser) {\n if (hooksTimeoutProvidedByUser === undefined)\n return {};\n if (hooksTimeoutProvidedByUser === false)\n return false;\n assertUsage(isObject(hooksTimeoutProvidedByUser), `Setting ${pc.cyan('hooksTimeout')} should be ${pc.cyan('false')} or an object`);\n const hooksTimeoutProvidedByUserNormalized = {};\n Object.entries(hooksTimeoutProvidedByUser).forEach(([hookName, hookTimeoutProvidedbyUser]) => {\n if (hookTimeoutProvidedbyUser === false) {\n hooksTimeoutProvidedByUserNormalized[hookName] = { error: false, warning: false };\n return;\n }\n assertUsage(isObject(hookTimeoutProvidedbyUser), `Setting ${pc.cyan(`hooksTimeout.${hookName}`)} should be ${pc.cyan('false')} or an object`);\n const [error, warning] = ['error', 'warning'].map((timeoutName) => {\n const timeoutVal = hookTimeoutProvidedbyUser[timeoutName];\n if (timeoutVal === undefined || timeoutVal === false)\n return timeoutVal;\n const errPrefix = `Setting ${pc.cyan(`hooksTimeout.${hookName}.${timeoutName}`)} should be`;\n assertUsage(typeof timeoutVal === 'number', `${errPrefix} ${pc.cyan('false')} or a number`);\n assertUsage(timeoutVal > 0, `${errPrefix} a positive number`);\n return timeoutVal;\n });\n hooksTimeoutProvidedByUserNormalized[hookName] = { error, warning };\n });\n return hooksTimeoutProvidedByUserNormalized;\n}\nfunction getHookTimeoutDefault(hookName) {\n if (hookName === 'onBeforeRoute') {\n return {\n error: 5 * 1000,\n warning: 1 * 1000\n };\n }\n if (globalObject.isPrerendering) {\n return {\n error: 2 * 60 * 1000,\n warning: 30 * 1000\n };\n }\n else {\n assert(!hookName.toLowerCase().includes('prerender'));\n }\n return {\n error: 30 * 1000,\n warning: 4 * 1000\n };\n}\nfunction setIsPrerenderering() {\n globalObject.isPrerendering = true;\n}\n","import { compareString } from './utils.js';\nexport { sortPageContext };\n// Sort `pageContext` keys alphabetically, in order to make reading `console.log(pageContext)` easier\nfunction sortPageContext(pageContext) {\n let descriptors = Object.getOwnPropertyDescriptors(pageContext);\n for (const key of Object.keys(pageContext))\n delete pageContext[key];\n descriptors = Object.fromEntries(Object.entries(descriptors).sort(([key1], [key2]) => compareString(key1, key2)));\n Object.defineProperties(pageContext, descriptors);\n}\n","export { addIs404ToPageProps };\nimport { assert, assertWarning, hasProp, isObject } from './utils.js';\nimport { isErrorPage } from './error-page.js';\nfunction addIs404ToPageProps(pageContext) {\n assertIs404(pageContext);\n addIs404(pageContext);\n}\nfunction assertIs404(pageContext) {\n if (isErrorPage(pageContext._pageId, pageContext._pageConfigs)) {\n assert(hasProp(pageContext, 'is404', 'boolean'));\n }\n}\nfunction addIs404(pageContext) {\n if (pageContext.is404 === undefined || pageContext.is404 === null)\n return;\n const pageProps = pageContext.pageProps || {};\n if (!isObject(pageProps)) {\n assertWarning(false, 'pageContext.pageProps should be an object', { showStackTrace: true, onlyOnce: true });\n return;\n }\n pageProps.is404 = pageProps.is404 || pageContext.is404;\n pageContext.pageProps = pageProps;\n}\n","// TODO: move to ../node/runtime/html/notSerializable.ts once code is distributed as ESM\nexport const notSerializable = 'not-serializable';\n","export { getPageContextProxyForUser };\nimport { assert, assertUsage, assertWarning, getGlobalObject, getPropAccessNotation } from '../server-routing-runtime/utils.js';\nimport { notSerializable } from '../../shared/notSerializable.js';\nconst globalObject = getGlobalObject('getPageContextProxyForUser.ts', {});\n/**\n * Throw error when pageContext value isn't:\n * - serializable, or\n * - defined.\n */\nfunction getPageContextProxyForUser(pageContext) {\n assert([true, false].includes(pageContext._hasPageContextFromServer));\n assert([true, false].includes(pageContext._hasPageContextFromClient));\n return new Proxy(pageContext, {\n get(_, prop) {\n const val = pageContext[prop];\n const propName = getPropAccessNotation(prop);\n assertUsage(val !== notSerializable, `Can't access pageContext${propName} on the client side. Because it can't be serialized, see server logs.`);\n passToClientHint(pageContext, prop, propName);\n return val;\n }\n });\n}\nfunction passToClientHint(pageContext, prop, propName) {\n if (handleVueReactivity(prop))\n return;\n // `prop in pageContext` is the trick we use to know the passToClient value on the client-side, as we set a value to all passToClient props, even `undefined` ones:\n // ```html\n // <script id=\"vike_pageContext\" type=\"application/json\">{\"pageProps\":\"!undefined\"}</script>\n // ```\n if (prop in pageContext)\n return;\n if (isWhitelisted(prop))\n return;\n // The trick described above (`prop in pageContext`) doesn't work if Vike doesn't fetch any pageContext from the server.\n // - There would still be some value to show a warning, but it isn't worth it because of the confusion that the first recommendation (adding `prop` to `passToClient`) wouldn't actually remove the warning, and only the second recommendation (using `prop in pageContext` instead of `pageContext[prop]`) would work.\n if (!pageContext._hasPageContextFromServer)\n return;\n const errMsg = `pageContext${propName} isn't defined on the client-side, see https://vike.dev/passToClient#error`;\n if (\n // TODO/next-major-release always make it an error.\n // - Remove pageContext._hasPageContextFromClient logic (IIRC this is its only use case).\n pageContext._hasPageContextFromClient) {\n assertWarning(false, errMsg, { onlyOnce: false, showStackTrace: true });\n }\n else {\n assertUsage(false, errMsg);\n }\n}\nconst WHITELIST = [\n 'then',\n // Vue calls toJSON()\n 'toJSON'\n];\nfunction isWhitelisted(prop) {\n if (WHITELIST.includes(prop))\n return true;\n if (typeof prop === 'symbol')\n return true; // Vue tries to access some symbols\n if (typeof prop !== 'string')\n return true;\n if (prop.startsWith('__v_'))\n return true; // Vue internals upon `reactive(pageContext)`\n return false;\n}\n// Handle Vue's reactivity.\n// When changing a reactive object:\n// - Vue tries to read its old value first. This triggers a `assertIsDefined()` failure if e.g. `pageContextReactive.routeParams = pageContextNew.routeParams` and `pageContextReactive` has no `routeParams`.\n// - Vue seems to read __v_raw before reading the property.\nfunction handleVueReactivity(prop) {\n if (globalObject.prev === prop || globalObject.prev === '__v_raw')\n return true;\n globalObject.prev = prop;\n window.setTimeout(() => {\n globalObject.prev = undefined;\n }, 0);\n return false;\n}\n","export { preparePageContextForUserConsumptionClientSide };\nimport { assert, isObject, objectAssign } from '../server-routing-runtime/utils.js';\nimport { sortPageContext } from '../../shared/sortPageContext.js';\nimport { addIs404ToPageProps } from '../../shared/addIs404ToPageProps.js';\nimport { getPageContextProxyForUser } from './getPageContextProxyForUser.js';\n// Release `pageContext` for user consumption.\n//\n// This adds `assertPassToClient()`.\n//\n// With Vue support (when `pageContext` is made reactive with Vue).\n//\n// For Vue + Cient Routing, the `pageContext` needs to be made reactive:\n// ```js\n// import { reactive } from 'vue'\n// // See entire example at `/examples/vue-full/`\n// const pageContextReactive = reactive(pageContext)\n// ```\nfunction preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting) {\n if (isClientRouting) {\n const pageContextTyped = pageContext;\n assert([true, false].includes(pageContextTyped.isHydration));\n assert([true, false, null].includes(pageContextTyped.isBackwardNavigation));\n }\n else {\n const pageContextTyped = pageContext;\n assert(pageContextTyped.isHydration === true);\n assert(pageContextTyped.isBackwardNavigation === null);\n }\n assert('config' in pageContext);\n assert('configEntries' in pageContext);\n // TODO/v1-release: remove\n assert('exports' in pageContext);\n assert('exportsAll' in pageContext);\n assert('pageExports' in pageContext);\n assert(isObject(pageContext.pageExports));\n const Page = pageContext.exports.Page;\n objectAssign(pageContext, { Page });\n // For Vue's reactivity\n resolveGetters(pageContext);\n // For prettier `console.log(pageContext)`\n sortPageContext(pageContext);\n const pageContextForUserConsumption = getPageContextProxyForUser(pageContext);\n addIs404ToPageProps(pageContext);\n return pageContextForUserConsumption;\n}\n// Remove propery descriptor getters because they break Vue's reactivity.\n// E.g. resolve the `pageContext.urlPathname` getter.\nfunction resolveGetters(pageContext) {\n Object.entries(pageContext).forEach(([key, val]) => {\n delete pageContext[key];\n pageContext[key] = val;\n });\n}\n","export { removeBuiltInOverrides };\nimport { assert, assertWarning } from '../utils.js';\nconst BUILT_IN_CLIENT_ROUTER = ['urlPathname', 'urlParsed'];\nconst BUILT_IN_CLIENT = ['Page', 'pageExports', 'exports'];\nfunction removeBuiltInOverrides(pageContext) {\n const alreadySet = [...BUILT_IN_CLIENT, ...BUILT_IN_CLIENT_ROUTER];\n alreadySet.forEach((prop) => {\n if (prop in pageContext) {\n // We need to cast `BUILT_IN_CLIENT` to `string[]`\n // - https://stackoverflow.com/questions/56565528/typescript-const-assertions-how-to-use-array-prototype-includes\n // - https://stackoverflow.com/questions/57646355/check-if-string-is-included-in-readonlyarray-in-typescript\n if (BUILT_IN_CLIENT_ROUTER.includes(prop)) {\n assert(prop.startsWith('url'));\n assertWarning(false, `pageContext.${prop} is already available in the browser when using Client Routing; adding '${prop}' to passToClient has no effect`, { onlyOnce: true });\n }\n else {\n assertWarning(false, `pageContext.${prop} is a built-in that cannot be overriden; adding '${prop}' to passToClient has no effect`, { onlyOnce: true });\n }\n delete pageContext[prop];\n }\n });\n}\n","export { urlToFile };\nexport { baseServer };\nimport { assert } from './assert.js';\nimport { parseUrl } from './parseUrl.js';\nimport { slice } from './slice.js';\n// - When doing a `.pageContext.json` HTTP request, the base URL should be preserved. (The server-side will handle the base URL.)\n// - While pre-rendering there is no base URL\nconst baseServer = '/';\nfunction urlToFile(url, fileExtension, doNotCreateExtraDirectory) {\n const { pathnameOriginal, searchOriginal, hashOriginal } = parseUrl(url, baseServer);\n if (url.startsWith('/')) {\n assert(url === `${pathnameOriginal}${searchOriginal || ''}${hashOriginal || ''}`, { url });\n }\n const hasTrailingSlash = pathnameOriginal.endsWith('/');\n let pathnameModified;\n if (doNotCreateExtraDirectory && pathnameOriginal !== '/') {\n if (hasTrailingSlash) {\n pathnameModified = slice(pathnameOriginal, 0, -1);\n }\n else {\n pathnameModified = pathnameOriginal;\n }\n assert(!pathnameModified.endsWith('/'), { url });\n assert(pathnameModified !== '');\n }\n else {\n pathnameModified = pathnameOriginal + (hasTrailingSlash ? '' : '/') + 'index';\n }\n assert(pathnameModified);\n pathnameModified = pathnameModified + fileExtension;\n const fileUrl = `${pathnameModified}${searchOriginal || ''}${hashOriginal || ''}`;\n return fileUrl;\n}\n","export { getPageContextRequestUrl };\nexport { pageContextJsonFileExtension };\nexport { doNotCreateExtraDirectory };\n// This module isn't loaded by the client-side of Server Routing => we don't inlcude `urlToFile` to `./utils.ts`\nimport { urlToFile } from '../utils/urlToFile.js';\nconst pageContextJsonFileExtension = '.pageContext.json';\n// `/some-base-url/index.pageContext.json` instead of `/some-base-url.pageContext.json` in order to comply to common reverse proxy setups, see https://github.com/vikejs/vike/issues/443\nconst doNotCreateExtraDirectory = false;\n// See node/renderPage/handlePageContextRequestUrl.ts\nfunction getPageContextRequestUrl(url) {\n const pageContextRequestUrl = urlToFile(url, pageContextJsonFileExtension, doNotCreateExtraDirectory);\n return pageContextRequestUrl;\n}\n","export { assertPageContextProvidedByUser };\nimport { assert, assertUsage, assertWarning, isObject } from './utils.js';\nimport pc from '@brillout/picocolors';\nfunction assertPageContextProvidedByUser(pageContextProvidedByUser, { hookName, hookFilePath }) {\n if (pageContextProvidedByUser === undefined || pageContextProvidedByUser === null)\n return;\n assert(!hookName.endsWith(')'));\n const errPrefix = `The ${pc.cyan('pageContext')} object provided by the ${hookName}() hook defined by ${hookFilePath}`;\n assertUsage(isObject(pageContextProvidedByUser), `${errPrefix} should be an object (but it's ${pc.cyan(`typeof pageContext === ${JSON.stringify(typeof pageContextProvidedByUser)}`)} instead)`);\n assertUsage(!('_objectCreatedByVike' in pageContextProvidedByUser), `${errPrefix} shouldn't be the whole ${pc.cyan('pageContext')} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`);\n // In principle, it's possible to use onBeforeRoute()` to override and define the whole routing.\n // Is that a good idea to allow users to do this? Beyond deep integration with Vue Router or React Router, is there a use case for this?\n assertWarning(!('_pageId' in pageContextProvidedByUser), `${errPrefix} sets ${pc.cyan('pageContext._pageId')} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`, { onlyOnce: true });\n assertUsage(!('is404' in pageContextProvidedByUser), `${errPrefix} sets ${pc.cyan('pageContext.is404')} which is forbidden, use ${pc.cyan('throw render()')} instead, see https://vike.dev/render`);\n}\n","export { assertHookReturnedObject };\nimport { assert, assertUsage, stringifyStringArray } from './utils.js';\nfunction assertHookReturnedObject(obj, keysExpected, errPrefix) {\n assert(!errPrefix.endsWith(' '));\n const keysUnknown = [];\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (!keysExpected.includes(key)) {\n keysUnknown.push(key);\n }\n }\n assertUsage(keysUnknown.length === 0, [\n errPrefix,\n 'returned an object with following unknown keys:',\n stringifyStringArray(keysUnknown) + '.',\n 'Only following keys are allowed:',\n stringifyStringArray(keysExpected) + '.'\n ].join(' '));\n}\n","export { assertOnBeforeRenderHookReturn };\nimport { assertUsage, isPlainObject } from './utils.js';\nimport { assertPageContextProvidedByUser } from './assertPageContextProvidedByUser.js';\nimport { assertHookReturnedObject } from './assertHookReturnedObject.js';\nimport pc from '@brillout/picocolors';\nfunction assertOnBeforeRenderHookReturn(hookReturnValue, hookFilePath) {\n if (hookReturnValue === undefined || hookReturnValue === null) {\n return;\n }\n const errPrefix = `The onBeforeRender() hook defined by ${hookFilePath}`;\n assertUsage(isPlainObject(hookReturnValue), `${errPrefix} should return a plain JavaScript object, ${pc.cyan('undefined')}, or ${pc.cyan('null')}`);\n assertHookReturnedObject(hookReturnValue, ['pageContext'], errPrefix);\n if (hookReturnValue.pageContext) {\n assertPageContextProvidedByUser(hookReturnValue['pageContext'], { hookName: 'onBeforeRender', hookFilePath });\n }\n}\n","import { isPlainObject } from './isPlainObject.js';\nexport { isObjectWithKeys };\nfunction isObjectWithKeys(obj, keys) {\n if (!isPlainObject(obj)) {\n return false;\n }\n for (const key of Object.keys(obj)) {\n if (!keys.includes(key)) {\n return false;\n }\n }\n return true;\n}\n","export { joinEnglish };\nimport { assert } from './assert.js';\n// https://stackoverflow.com/questions/53879088/join-an-array-by-commas-and-and/53879103#53879103\nfunction joinEnglish(arr, conjunction, colorizer = (s) => s) {\n assert(arr.length > 0);\n if (arr.length === 1)\n return colorizer(arr[0]);\n const firsts = arr.slice(0, arr.length - 1);\n const last = arr[arr.length - 1];\n return firsts.map(colorizer).join(', ') + `, ${conjunction} ` + colorizer(last);\n}\n","// Utils needed by:\n// - runtime of server\n// - runtime of client (Client Routing)\n// Ensure we don't bloat runtime of Server Routing with the utils down below\nimport { assertClientRouting } from '../../utils/assertRoutingType.js';\nimport { isBrowser } from '../../utils/isBrowser.js';\nif (isBrowser()) {\n assertClientRouting();\n}\nexport * from '../../utils/assert.js';\nexport * from '../../utils/hasProp.js';\nexport * from '../../utils/isObjectWithKeys.js';\nexport * from '../../utils/sorter.js';\nexport * from '../../utils/isPromise.js';\nexport * from '../../utils/isPlainObject.js';\nexport * from '../../utils/objectAssign.js';\nexport * from '../../utils/slice.js';\nexport * from '../../utils/unique.js';\nexport * from '../../utils/isBrowser.js';\nexport * from '../../utils/parseUrl.js';\nexport * from '../../utils/checkType.js';\nexport * from '../../utils/joinEnglish.js';\nexport * from '../../utils/truncateString.js';\nexport * from '../../utils/isCallable.js';\n","export { executeGuardHook };\nimport { getHook, getHookTimeoutDefault } from '../hooks/getHook.js';\nimport { assert, assertUsage, isCallable } from './utils.js';\nimport { executeHook } from '../hooks/executeHook.js';\nconst errIntro = 'The guard() hook defined by';\nasync function executeGuardHook(pageContext, prepareForUserConsumption) {\n let hook;\n if (pageContext._pageFilesAll.length > 0) {\n // V0.4 design\n assert(pageContext._pageConfigs.length === 0);\n hook = findPageGuard(pageContext._pageId, pageContext._pageFilesAll);\n }\n else {\n // V1 design\n hook = getHook(pageContext, 'guard');\n }\n if (!hook)\n return;\n const guard = hook.hookFn;\n let pageContextForUserConsumption = pageContext;\n const res = prepareForUserConsumption(pageContext);\n if (res)\n pageContextForUserConsumption = res;\n const hookResult = await executeHook(() => guard(pageContextForUserConsumption), hook, pageContext);\n assertUsage(hookResult === undefined, `${errIntro} ${hook.hookFilePath} returns a value, but guard() shouldn't return any value`);\n}\nfunction findPageGuard(pageId, pageFilesAll) {\n const pageRouteFile = pageFilesAll.find((p) => p.pageId === pageId && p.fileType === '.page.route');\n if (!pageRouteFile)\n return null;\n const { filePath, fileExports } = pageRouteFile;\n assert(fileExports); // loadPageRoutes() should already have been called\n const hookFn = fileExports.guard;\n if (!hookFn)\n return null;\n const hookFilePath = filePath;\n const hookTimeout = getHookTimeoutDefault('guard');\n assertUsage(isCallable(hookFn), `${errIntro} ${hookFilePath} should be a function`);\n return { hookFn, hookName: 'guard', hookFilePath, hookTimeout };\n}\n","export { redirect };\nexport { render };\nexport { RenderErrorPage };\nexport { isAbortError };\nexport { isAbortPageContext };\nexport { logAbortErrorHandled };\nexport { getPageContextFromAllRewrites };\nexport { AbortRender };\nexport { assertNoInfiniteAbortLoop };\nimport { isUserHookError } from '../hooks/executeHook.js';\nimport { assert, assertInfo, assertUsage, assertUsageUrlPathnameAbsolute, assertUsageUrlRedirectTarget, assertWarning, checkType, hasProp, joinEnglish, objectAssign, truncateString } from './utils.js';\nimport pc from '@brillout/picocolors';\n/**\n * Abort the rendering of the current page, and redirect the user to another URL instead.\n *\n * https://vike.dev/redirect\n *\n * @param url The URL to redirect to.\n * @param statusCode By default a temporary redirection (`302`) is performed. For permanent redirections (`301`), use `config.redirects` https://vike.dev/redirects instead or, alternatively, set the `statusCode` argument to `301`.\n */\nfunction redirect(url, statusCode) {\n const abortCaller = 'throw redirect()';\n assertUsageUrlRedirectTarget(url, getErrPrefix(abortCaller));\n const args = [JSON.stringify(url)];\n if (!statusCode) {\n statusCode = 302;\n }\n else {\n assertStatusCode(statusCode, [301, 302], 'redirect');\n args.push(String(statusCode));\n }\n const pageContextAbort = {};\n objectAssign(pageContextAbort, {\n _abortCaller: abortCaller,\n _abortCall: `redirect(${args.join(', ')})`,\n _urlRedirect: {\n url,\n statusCode\n }\n });\n return AbortRender(pageContextAbort);\n}\nfunction render(urlOrStatusCode, abortReason) {\n const args = [typeof urlOrStatusCode === 'number' ? String(urlOrStatusCode) : JSON.stringify(urlOrStatusCode)];\n if (abortReason !== undefined)\n args.push(truncateString(JSON.stringify(abortReason), 30));\n const abortCaller = 'throw render()';\n const abortCall = `render(${args.join(', ')})`;\n return render_(urlOrStatusCode, abortReason, abortCall, abortCaller);\n}\nfunction render_(urlOrStatusCode, abortReason, abortCall, abortCaller, pageContextAddendum) {\n const pageContextAbort = {\n abortReason,\n _abortCaller: abortCaller,\n _abortCall: abortCall\n };\n if (pageContextAddendum) {\n assert(pageContextAddendum._isLegacyRenderErrorPage === true);\n objectAssign(pageContextAbort, pageContextAddendum);\n }\n if (typeof urlOrStatusCode === 'string') {\n const url = urlOrStatusCode;\n assertUsageUrlPathnameAbsolute(url, getErrPrefix(abortCaller));\n objectAssign(pageContextAbort, {\n _urlRewrite: url\n });\n return AbortRender(pageContextAbort);\n }\n else {\n const abortStatusCode = urlOrStatusCode;\n assertStatusCode(urlOrStatusCode, [401, 403, 404, 410, 429, 500, 503], 'render');\n objectAssign(pageContextAbort, {\n abortStatusCode,\n is404: abortStatusCode === 404\n });\n return AbortRender(pageContextAbort);\n }\n}\nfunction AbortRender(pageContextAbort) {\n const err = new Error('AbortRender');\n objectAssign(err, { _pageContextAbort: pageContextAbort, [stamp]: true });\n checkType(err);\n return err;\n}\n// TODO/v1-release: remove\n/**\n * @deprecated Use `throw render()` or `throw redirect()` instead, see https://vike.dev/render'\n */\nfunction RenderErrorPage({ pageContext = {} } = {}) {\n assertWarning(false, `${pc.cyan('throw RenderErrorPage()')} is deprecated and will be removed in the next major release. Use ${pc.cyan('throw render()')} or ${pc.cyan('throw redirect()')} instead, see https://vike.dev/render`, { onlyOnce: false });\n let abortStatusCode = 404;\n let abortReason = 'Page Not Found';\n if (pageContext.is404 === false || pageContext.pageProps?.is404 === false) {\n abortStatusCode = 500;\n abortReason = 'Something went wrong';\n }\n objectAssign(pageContext, { _isLegacyRenderErrorPage: true });\n return render_(abortStatusCode, abortReason, 'RenderErrorPage()', 'throw RenderErrorPage()', pageContext);\n}\nconst stamp = '_isAbortError';\nfunction isAbortError(thing) {\n return typeof thing === 'object' && thing !== null && stamp in thing;\n}\nfunction isAbortPageContext(pageContext) {\n if (!(pageContext._urlRewrite || pageContext._urlRedirect || pageContext.abortStatusCode)) {\n return false;\n }\n assert(hasProp(pageContext, '_abortCall', 'string'));\n /* Isn't needed and is missing on the client-side\n assert(hasProp(pageContext, '_abortCaller', 'string'))\n */\n checkType(pageContext);\n return true;\n}\nfunction logAbortErrorHandled(err, isProduction, pageContext) {\n if (isProduction)\n return;\n const urlCurrent = pageContext._urlRewrite ?? pageContext.urlOriginal;\n assert(urlCurrent);\n const abortCall = err._pageContextAbort._abortCall;\n assert(abortCall);\n const hookLoc = isUserHookError(err);\n let thrownBy = '';\n if (hookLoc) {\n thrownBy = ` by ${pc.cyan(`${hookLoc.hookName}()`)} hook defined at ${hookLoc.hookFilePath}`;\n }\n else {\n // hookLoc is missing when serializing abort errors from server to client\n }\n assertInfo(false, `${pc.cyan(abortCall)} thrown${thrownBy} while rendering ${pc.cyan(urlCurrent)}`, {\n onlyOnce: false\n });\n}\nfunction assertStatusCode(statusCode, expected, caller) {\n const expectedEnglish = joinEnglish(expected.map((s) => s.toString()), 'or');\n assertWarning(expected.includes(statusCode), `Unepexected status code ${statusCode} passed to ${caller}(), we recommend ${expectedEnglish} instead. (Or reach out at https://github.com/vikejs/vike/issues/1008 if you believe ${statusCode} should be added.)`, { onlyOnce: true });\n}\nfunction getPageContextFromAllRewrites(pageContextsFromRewrite) {\n assertNoInfiniteLoop(pageContextsFromRewrite);\n const pageContextFromAllRewrites = { _urlRewrite: null };\n pageContextsFromRewrite.forEach((pageContextFromRewrite) => {\n Object.assign(pageContextFromAllRewrites, pageContextFromRewrite);\n });\n return pageContextFromAllRewrites;\n}\nfunction assertNoInfiniteLoop(pageContextsFromRewrite) {\n const urlRewrites = [];\n pageContextsFromRewrite.forEach((pageContext) => {\n const urlRewrite = pageContext._urlRewrite;\n {\n const idx = urlRewrites.indexOf(urlRewrite);\n if (idx !== -1) {\n const loop = [...urlRewrites.slice(idx), urlRewrite].map((url) => `render('${url}')`).join(' => ');\n assertUsage(false, `Infinite loop of render() calls: ${loop}`);\n }\n }\n urlRewrites.push(urlRewrite);\n });\n}\nfunction assertNoInfiniteAbortLoop(rewriteCount, redirectCount) {\n const abortCalls = [\n // prettier-ignore\n // biome-ignore format:\n rewriteCount > 0 && pc.cyan(\"throw render('/some-url')\"),\n redirectCount > 0 && pc.cyan(\"throw redirect('/some-url')\")\n ]\n .filter(Boolean)\n .join(' and ');\n assertUsage(rewriteCount + redirectCount <= 7, `Maximum chain length of 7 ${abortCalls} exceeded. Did you define an infinite loop of ${abortCalls}?`);\n}\nfunction getErrPrefix(abortCaller) {\n return `URL passed to ${pc.code(abortCaller)}`;\n}\n","export const pageContextInitIsPassedToClient = '_pageContextInitIsPassedToClient';\n","export const isServerSideError = '_isServerSideError';\n","export { getPageContextFromHooks_isHydration };\nexport { getPageContextFromHooks_isNotHydration };\nexport { getPageContextFromHooks_serialized };\nimport { assert, assertUsage, hasProp, objectAssign, getProjectError, redirectHard, executeHook, isObject, getGlobalObject } from './utils.js';\nimport { parse } from '@brillout/json-serializer/parse';\nimport { getPageContextSerializedInHtml } from '../shared/getPageContextSerializedInHtml.js';\nimport { analyzePageServerSide } from '../../shared/getPageFiles/analyzePageServerSide.js';\nimport { getHook } from '../../shared/hooks/getHook.js';\nimport { preparePageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';\nimport { removeBuiltInOverrides } from './getPageContext/removeBuiltInOverrides.js';\nimport { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';\nimport { getPageConfig } from '../../shared/page-configs/helpers.js';\nimport { getConfigValueRuntime } from '../../shared/page-configs/getConfigValue.js';\nimport { assertOnBeforeRenderHookReturn } from '../../shared/assertOnBeforeRenderHookReturn.js';\nimport { executeGuardHook } from '../../shared/route/executeGuardHook.js';\nimport { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';\nimport { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';\nimport { isServerSideError } from '../../shared/misc/isServerSideError.js';\nconst globalObject = getGlobalObject('router/getPageContext.ts', {});\nfunction getPageContextFromHooks_serialized() {\n const pageContextSerialized = getPageContextSerializedInHtml();\n assertUsage(!('urlOriginal' in pageContextSerialized), \"Adding 'urlOriginal' to passToClient is forbidden\");\n processPageContextFromServer(pageContextSerialized);\n objectAssign(pageContextSerialized, {\n _hasPageContextFromServer: true\n });\n return pageContextSerialized;\n}\nasync function getPageContextFromHooks_isHydration(pageContext) {\n objectAssign(pageContext, {\n isHydration: true,\n _hasPageContextFromClient: false,\n _hasPageContextFromServer: true\n });\n for (const hookName of ['data', 'onBeforeRender']) {\n if (hookClientOnlyExists(hookName, pageContext)) {\n const pageContextFromHook = await executeHookClientSide(hookName, pageContext);\n if (pageContextFromHook)\n assert(!('urlOriginal' in pageContextFromHook));\n Object.assign(pageContext, pageContextFromHook);\n }\n }\n return pageContext;\n}\nasync function getPageContextFromHooks_isNotHydration(pageContext, isErrorPage) {\n objectAssign(pageContext, {\n isHydration: false,\n _hasPageContextFromClient: false\n });\n let hasPageContextFromServer = false;\n // If pageContextInit has some client data or if one of the hooks guard(), data() or onBeforeRender() is server-side\n // only, then we need to fetch pageContext from the server.\n // We do it before executing any client-side hook, because it contains pageContextInit which may be needed for guard() / data() / onBeforeRender(), for example pageContextInit.user is crucial for guard()\n if (\n // For the error page, we cannot fetch pageContext from the server because the pageContext JSON request is based on the URL\n !isErrorPage &&\n // true if pageContextInit has some client data or at least one of the data() and onBeforeRender() hooks is server-side only:\n (await hasPageContextServer(pageContext))) {\n const res = await fetchPageContextFromServer(pageContext);\n if ('is404ServerSideRouted' in res)\n return { is404ServerSideRouted: true };\n const { pageContextFromServer } = res;\n hasPageContextFromServer = true;\n // Already handled\n assert(!(isServerSideError in pageContextFromServer));\n assert(!('serverSideError' in pageContextFromServer));\n objectAssign(pageContext, pageContextFromServer);\n }\n objectAssign(pageContext, { _hasPageContextFromServer: hasPageContextFromServer });\n // At this point, we need to call the client-side guard(), data() and onBeforeRender() hooks, if they exist on client\n // env. However if we have fetched pageContext from the server, some of them might have run already on the\n // server-side, so we run only the client-only ones in this case.\n // Note: for the error page, we also execute the client-side data() and onBeforeRender() hooks, but maybe we\n // shouldn't? The server-side does it as well (but maybe it shouldn't).\n for (const hookName of ['guard', 'data', 'onBeforeRender']) {\n if (hookName === 'guard') {\n if (!isErrorPage &&\n // We don't need to call guard() on the client-side if we fetch pageContext from the server side. (Because the `${url}.pageContext.json` HTTP request will already trigger the routing and guard() hook on the server-side.)\n !hasPageContextFromServer) {\n // Should we really call the guard() hook on the client-side? Shouldn't we make the guard() hook a server-side\n // only hook? Or maybe make its env configurable like data() and onBeforeRender()?\n await executeGuardHook(pageContext, (pageContext) => preparePageContextForUserConsumptionClientSide(pageContext, true));\n }\n }\n else {\n assert(hookName === 'data' || hookName === 'onBeforeRender');\n if (hookClientOnlyExists(hookName, pageContext) || !hasPageContextFromServer) {\n // This won't do anything if no hook has been defined or if the hook's env.client is false.\n const pageContextFromHook = await executeHookClientSide(hookName, pageContext);\n if (pageContextFromHook)\n assert(!('urlOriginal' in pageContextFromHook));\n Object.assign(pageContext, pageContextFromHook);\n }\n else {\n assert(hasPageContextFromServer);\n }\n }\n }\n objectAssign(pageContext, {\n _hasPageContextFromServer: hasPageContextFromServer\n });\n return { pageContextAugmented: pageContext };\n}\nasync function executeHookClientSide(hookName, pageContext) {\n const hook = getHook(pageContext, hookName);\n if (!hook) {\n // No hook defined or hook's env.client is false\n return null;\n }\n const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, true);\n const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);\n const pageContextFromHook = {};\n if (hookName === 'onBeforeRender') {\n assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);\n // Note: hookResult looks like { pageContext: { ... } }\n const pageContextFromOnBeforeRender = hookResult?.pageContext;\n if (pageContextFromOnBeforeRender) {\n objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });\n objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);\n }\n }\n else {\n assert(hookName === 'data');\n // Note: hookResult can be anything (e.g. an object) and is to be assigned to pageContext.data\n const pageContextFromData = {\n data: hookResult\n };\n if (hookResult) {\n objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });\n }\n objectAssign(pageContextFromHook, pageContextFromData);\n }\n return pageContextFromHook;\n}\n// Workaround for the fact that the client-side cannot known whether a pageContext JSON request is needed in order to fetch pageContextInit data passed to the client.\n// - The workaround is reliable as long as the user sets additional pageContextInit to undefined instead of not defining the property:\n// ```diff\n// - // Breaks the workaround:\n// - const pageContextInit = { urlOriginal: req.url }\n// - if (user) pageContextInit.user = user\n// + // Makes the workaround reliable:\n// + const pageContextInit = { urlOriginal: req.url, user }\n// ```\n// - We can show a warning to users when the pageContextInit keys aren't always the same. (We didn't implement the waning yet because it would require a new doc page https://vike.dev/pageContextInit#avoid-conditional-properties\n// - Workaround cannot be made completely reliable because the workaround assumes that passToClient is always the same, but the user may set a different passToClient value for another page\n// - Alternatively, we could define a new config `alwaysFetchPageContextFromServer: boolean`\nfunction setPageContextInitIsPassedToClient(pageContext) {\n if (pageContext[pageContextInitIsPassedToClient]) {\n globalObject.pageContextInitIsPassedToClient = true;\n }\n}\n// TODO/v1-release: make it sync\nasync function hasPageContextServer(pageContext) {\n return (!!globalObject.pageContextInitIsPassedToClient ||\n (await hookServerOnlyExists('data', pageContext)) ||\n (await hookServerOnlyExists('onBeforeRender', pageContext)));\n}\n// TODO/v1-release: make it sync\n/**\n * @param hookName\n * @param pageContext\n * @returns `true` if the given page has a `hookName` hook defined with a server-only env.\n */\nasync function hookServerOnlyExists(hookName, pageContext) {\n if (pageContext._pageConfigs.length > 0) {\n // V1\n const pageConfig = getPageConfig(pageContext._pageId, pageContext._pageConfigs);\n const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};\n assert(isObject(hookEnv));\n return !!hookEnv.server && !hookEnv.client;\n }\n else {\n // TODO/v1-release: remove\n // V0.4\n // data() hooks didn't exist in the V0.4 design\n if (hookName === 'data')\n return false;\n assert(hookName === 'onBeforeRender');\n const { hasOnBeforeRenderServerSideOnlyHook } = await analyzePageServerSide(pageContext._pageFilesAll, pageContext._pageId);\n return hasOnBeforeRenderServerSideOnlyHook;\n }\n}\n/**\n * @param hookName\n * @param pageContext\n * @returns `true` if the given page has a `hookName` hook defined with a client-only env.\n */\nfunction hookClientOnlyExists(hookName, pageContext) {\n if (pageContext._pageConfigs.length > 0) {\n // V1\n const pageConfig = getPageConfig(pageContext._pageId, pageContext._pageConfigs);\n const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};\n assert(isObject(hookEnv));\n return !!hookEnv.client && !hookEnv.server;\n }\n else {\n // TODO/v1-release: remove\n // Client-only onBeforeRender() or data() hooks were never supported for the V0.4 design\n return false;\n }\n}\nasync function fetchPageContextFromServer(pageContext) {\n const pageContextUrl = getPageContextRequestUrl(pageContext._urlRewrite ?? pageContext.urlOriginal);\n const response = await fetch(pageContextUrl);\n {\n const contentType = response.headers.get('content-type');\n const contentTypeCorrect = 'application/json';\n const isCorrect = contentType && contentType.includes(contentTypeCorrect);\n // Static hosts + page doesn't exist\n if (!isCorrect && response.status === 404) {\n redirectHard(pageContext.urlOriginal);\n return { is404ServerSideRouted: true };\n }\n assertUsage(isCorrect, `Wrong Content-Type for ${pageContextUrl}: it should be ${contentTypeCorrect} but it's ${contentType} instead. Make sure to properly use pageContext.httpResponse.headers, see https://vike.dev/renderPage`);\n }\n const responseText = await response.text();\n const pageContextFromServer = parse(responseText);\n assert(isObject(pageContextFromServer));\n if (isAbortPageContext(pageContextFromServer)) {\n throw AbortRender(pageContextFromServer);\n }\n // Is there a reason for having two different properties? Can't we use only one property? I guess/think the isServerSideError property was an attempt (a bad idea really) for rendering the error page even though an error occured on the server-side (which is a bad idea because the added complexity is non-negligible while the added value is minuscule since the error page usually doesn't have any (meaningful / server-side) hooks).\n if ('serverSideError' in pageContextFromServer || isServerSideError in pageContextFromServer) {\n throw getProjectError(`pageContext couldn't be fetched because an error occurred on the server-side`);\n }\n assert(hasProp(pageContextFromServer, '_pageId', 'string'));\n processPageContextFromServer(pageContextFromServer);\n return { pageContextFromServer };\n}\nfunction processPageContextFromServer(pageContextFromServer) {\n setPageContextInitIsPassedToClient(pageContextFromServer);\n removeBuiltInOverrides(pageContextFromServer);\n}\n","export { getPageContextUrlComputed };\nexport { assertPageContextUrl };\n// =====================\n// File determining the URL logic.\n// URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.\n// =====================\nimport { objectDefineProperty } from '../utils/objectDefineProperty.js';\nimport { assert, parseUrl, assertWarning, isPlainObject, isPropertyGetter, isBrowser, changeEnumerable } from './utils.js';\nfunction getPageContextUrlComputed(pageContext) {\n assert(typeof pageContext.urlOriginal === 'string');\n assertPageContextUrlComputed(pageContext);\n const pageContextUrlComputed = {};\n objectDefineProperty(pageContextUrlComputed, 'urlPathname', {\n get: urlPathnameGetter,\n enumerable: true,\n configurable: true\n });\n objectDefineProperty(pageContextUrlComputed, 'url', {\n get: urlGetter,\n enumerable: false,\n configurable: true\n });\n objectDefineProperty(pageContextUrlComputed, 'urlParsed', {\n get: urlParsedGetter,\n enumerable: true,\n configurable: true\n });\n return pageContextUrlComputed;\n}\nfunction getUrlParsed(pageContext) {\n // Example of i18n app using `throw render()`:\n // 1. User goes to '/fr-FR/admin'.\n // 2. The first onBeforeRoute() call accesses pageContext.urlPathname (its value is '/fr-FR/admin': the pathname of pageContext.urlOriginal, since both pageContext.urlLogical and pageContext._urlRewrite are undefined) and sets pageContext.urlLogical to '/admin'.\n // 3. A guard() hooks accesses pageContext.urlPathname (its value is '/admin': the pathname of pageContext.urlLogical) and calls `throw render('/fr-FR/login')`\n // 4. Vike create a new pageContext object (pageContext.urlLogical is erased) and sets pageContext._urlRewrite to '/fr-FR/login'. (While pageContext.urlOriginal is still '/fr-FR/admin'.)\n // 5. The second onBeforeRoute() call accesses pageContext.urlPathname (its value is '/fr-FR/login': the pathname of pageContext._urlRewrite, since pageContext.urlLogical is undefined) and sets pageContext.urlLogical to '/login'.\n // 6. The value of pageContext.urlPathname is now '/login': the pathname of `pageContext.urlLogical`. (While pageContext.urlOriginal is still '/fr-FR/admin'.)\n // Reproduction: https://github.com/vikejs/vike/discussions/1436#discussioncomment-8142023\n // Determine logical URL\n let urlResolved;\n let baseToBeRemoved;\n if (pageContext.urlLogical) {\n // Set by onBeforeRoute()\n urlResolved = pageContext.urlLogical;\n baseToBeRemoved = false;\n }\n else if (pageContext._urlRewrite) {\n // Set by `throw render()`\n urlResolved = pageContext._urlRewrite;\n baseToBeRemoved = false;\n }\n else {\n // Set by renderPage()\n urlResolved = pageContext.urlOriginal;\n baseToBeRemoved = true;\n }\n assert(urlResolved && typeof urlResolved === 'string');\n // Remove .pageContext.json\n let urlHandler = pageContext._urlHandler;\n if (!urlHandler)\n urlHandler = (url) => url;\n urlResolved = urlHandler(urlResolved);\n // Remove Base URL.\n // - We assume there isn't any Base URL to the URLs set by the user at `throw render()` and onBeforeRoute()\n // - This makes sense because the Base URL is merely a setting: ideally the user should write code that doesn't know anything about it (so that the user can remove/add/change Base URL without having to modify any code).\n // - pageContext.urlOriginal is the URL of the HTTP request and thus contains the Base URL.\n const baseServer = !baseToBeRemoved ? '/' : pageContext._baseServer;\n // Parse URL\n return parseUrl(urlResolved, baseServer);\n}\nfunction urlPathnameGetter() {\n const { pathname } = getUrlParsed(this);\n const urlPathname = pathname;\n assert(urlPathname.startsWith('/'));\n return urlPathname;\n}\nfunction urlGetter() {\n // TODO/v1-release: remove\n assertWarning(false, '`pageContext.url` is outdated. Use `pageContext.urlPathname`, `pageContext.urlParsed`, or `pageContext.urlOriginal` instead. (See https://vike.dev/migration/0.4.23 for more information.)', { onlyOnce: true, showStackTrace: true });\n return urlPathnameGetter.call(this);\n}\nfunction urlParsedGetter() {\n const { \n // remove hasBaseServer as it isn't part of UrlPublic\n hasBaseServer: _, ...urlParsed } = getUrlParsed(this);\n const hashIsAvailable = isBrowser();\n const warnHashNotAvailable = (prop) => {\n assertWarning(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash)`, { onlyOnce: true, showStackTrace: true });\n };\n const urlParsedEnhanced = {\n ...urlParsed,\n get hash() {\n warnHashNotAvailable('hash');\n return urlParsed.hash;\n },\n get hashOriginal() {\n warnHashNotAvailable('hashOriginal');\n return urlParsed.hashOriginal;\n },\n // TODO/next-major-release: remove\n get hashString() {\n assertWarning(false, 'pageContext.urlParsed.hashString has been renamed to pageContext.urlParsed.hashOriginal', {\n onlyOnce: true,\n showStackTrace: true\n });\n warnHashNotAvailable('hashString');\n return urlParsed.hashOriginal;\n },\n // TODO/next-major-release: remove\n get searchString() {\n assertWarning(false, 'pageContext.urlParsed.searchString has been renamed to pageContext.urlParsed.searchOriginal', { onlyOnce: true, showStackTrace: true });\n return urlParsed.searchOriginal;\n }\n };\n changeEnumerable(urlParsedEnhanced, 'hashString', false);\n changeEnumerable(urlParsedEnhanced, 'searchString', false);\n if (!hashIsAvailable) {\n changeEnumerable(urlParsedEnhanced, 'hash', false);\n changeEnumerable(urlParsedEnhanced, 'hashOriginal', false);\n }\n return urlParsedEnhanced;\n}\nfunction assertPageContextUrl(pageContext) {\n assert(typeof pageContext.urlOriginal === 'string');\n assert(typeof pageContext.urlPathname === 'string');\n assert(isPlainObject(pageContext.urlParsed));\n assert(pageContext.urlPathname === pageContext.urlParsed.pathname);\n assertPageContextUrlComputed(pageContext);\n}\nfunction assertPageContextUrlComputed(pageContext) {\n /*\n If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:\n ```js\n const PageContextUrlComputed = getPageContextUrlComputed(pageContext)\n \n // ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname\n Object.assign(pageContext, pageContextUrlComputed)\n \n // ❌ Also breaks property descriptors/getters\n const pageContext = { ...pageContextUrlComputed }\n \n // ✅ Preserves property descriptors/getters (see objectAssign() implementation)\n objectAssign(pageContext, pageContextUrlComputed)\n ```\n */\n if ('urlPathname' in pageContext) {\n assert(typeof pageContext.urlPathname === 'string');\n assert(isPropertyGetter(pageContext, 'urlPathname'));\n assert(isPropertyGetter(pageContext, 'urlParsed'));\n assert(isPropertyGetter(pageContext, 'url'));\n }\n else {\n assert(!('urlParsed' in pageContext));\n assert(!('url' in pageContext));\n }\n}\n","// Unit tests at ./deduceRouteStringFromFilesystemPath.spec.ts\nimport { assert, higherFirst, slice } from './utils.js';\nexport { deduceRouteStringFromFilesystemPath };\n// TODO/next-major-update: remove this and whole filesystemRoot mechanism\nfunction deduceRouteStringFromFilesystemPath(pageId, filesystemRoots) {\n // Handle Filesystem Routing Root\n const filesystemRootsMatch = filesystemRoots\n .filter(({ filesystemRoot }) => pageId.startsWith(filesystemRoot))\n .sort(higherFirst(({ filesystemRoot }) => filesystemRoot.length));\n const fsBase = filesystemRootsMatch[0];\n let filesystemRoute;\n if (fsBase) {\n // Example values:\n // - `{\"pageId\":\"/pages/index\",\"filesystemRoot\":\"/\",\"urlRoot\":\"/client_portal\"}`\n const { filesystemRoot, urlRoot } = fsBase;\n const debugInfo = { pageId, filesystemRoot, urlRoot };\n assert(urlRoot.startsWith('/') && pageId.startsWith('/') && filesystemRoot.startsWith('/'), debugInfo);\n assert(pageId.startsWith(filesystemRoot), debugInfo);\n if (filesystemRoot !== '/') {\n assert(!filesystemRoot.endsWith('/'), debugInfo);\n filesystemRoute = slice(pageId, filesystemRoot.length, 0);\n }\n else {\n filesystemRoute = pageId;\n }\n assert(filesystemRoute.startsWith('/'), debugInfo);\n filesystemRoute = urlRoot + (urlRoot.endsWith('/') ? '' : '/') + slice(filesystemRoute, 1, 0);\n }\n else {\n filesystemRoute = pageId;\n }\n assert(filesystemRoute.startsWith('/'));\n // Remove `pages/`, `index/, and `src/`, directories\n filesystemRoute = filesystemRoute\n .split('/')\n .filter((dir) => dir !== 'pages' && dir !== 'src' && dir !== 'index')\n .join('/');\n // Hanlde `/index.page.*` suffix\n assert(!filesystemRoute.includes('.page.'));\n assert(!filesystemRoute.endsWith('.'));\n if (filesystemRoute.endsWith('/index')) {\n filesystemRoute = slice(filesystemRoute, 0, -'/index'.length);\n }\n if (filesystemRoute === '') {\n filesystemRoute = '/';\n }\n assert(filesystemRoute.startsWith('/'));\n assert(!filesystemRoute.endsWith('/') || filesystemRoute === '/');\n return filesystemRoute;\n}\n","export { resolveRouteFunction };\nexport { assertRouteParams };\nexport { assertSyncRouting };\nexport { warnDeprecatedAllowKey };\nimport { assertPageContextUrl } from '../getPageContextUrlComputed.js';\nimport { assert, assertUsage, assertWarning, hasProp, isPlainObject, isPromise } from './utils.js';\nimport pc from '@brillout/picocolors';\nasync function resolveRouteFunction(routeFunction, pageContext, routeDefinedAtString) {\n assertPageContextUrl(pageContext);\n let result = routeFunction(pageContext);\n assertSyncRouting(result, `The Route Function ${routeDefinedAtString}`);\n // TODO/v1-release: make resolveRouteFunction() and route() sync\n //* We disallow asynchronous routing, because we need to check whether a link is a Vike link in a synchronous fashion before calling ev.preventDefault() in the 'click' event listener\n result = await result;\n //*/\n if (result === false) {\n return null;\n }\n if (result === true) {\n result = {};\n }\n assertUsage(isPlainObject(result), `The Route Function ${routeDefinedAtString} should return a boolean or a plain JavaScript object (but it's ${pc.cyan(`typeof result === ${JSON.stringify(typeof result)}`)} instead)`);\n // AFAICT this return interface is superfluous. Should we soft-deprecate it and remove it?\n if ('match' in result) {\n const { match } = result;\n assertUsage(typeof match === 'boolean', `The ${pc.cyan('match')} value returned by the Route Function ${routeDefinedAtString} should be a boolean.`);\n if (!match) {\n return null;\n }\n }\n let precedence = null;\n if ('precedence' in result) {\n precedence = result.precedence;\n assertUsage(typeof precedence === 'number', `The ${pc.cyan('precedence')} value returned by the Route Function ${routeDefinedAtString} should be a number.`);\n }\n assertRouteParams(result, `The ${pc.cyan('routeParams')} object returned by the Route Function ${routeDefinedAtString} should`);\n const routeParams = result.routeParams || {};\n assertUsage(!('pageContext' in result), `Providing ${pc.cyan('pageContext')} in Route Functions is prohibited, see https://vike.dev/route-function#cannot-provide-pagecontext`);\n assert(isPlainObject(routeParams));\n Object.keys(result).forEach((key) => {\n assertUsage(key === 'match' || key === 'routeParams' || key === 'precedence', `The Route Function ${routeDefinedAtString} returned an object with an unknown property ${pc.cyan(key)} (the known properties are ${pc.cyan('match')}, ${pc.cyan('routeParams')}, and ${pc.cyan('precedence')})`);\n });\n return {\n precedence,\n routeParams\n };\n}\n// TODO/v1-release: remove, and make routing synchronous (enabling Vike to synchronously check whether a link is a Vike link before even calling ev.preventDefault())\nfunction assertSyncRouting(res, errPrefix) {\n assertWarning(!isPromise(res), `${errPrefix} returned a promise, but asynchronous routing is deprecated and will be removed in the next major release, see https://vike.dev/route-function#async`, { onlyOnce: true });\n}\n// TODO/v1-release: remove\nfunction warnDeprecatedAllowKey() {\n const allowKey = pc.cyan('iKnowThePerformanceRisksOfAsyncRouteFunctions');\n assertWarning(false, `${allowKey} is deprecated and will be removed in the next major release`, { onlyOnce: true });\n}\nfunction assertRouteParams(result, errPrefix) {\n assert(errPrefix.endsWith(' should'));\n if (!hasProp(result, 'routeParams')) {\n return;\n }\n assert(errPrefix.endsWith(' should'));\n assertUsage(hasProp(result, 'routeParams', 'string{}'), `${errPrefix} be an object holding string values.`);\n}\n","export { loadPageRoutes };\nimport { isErrorPageId } from '../error-page.js';\nimport { assert, assertUsage, hasProp, slice } from './utils.js';\nimport { deduceRouteStringFromFilesystemPath } from './deduceRouteStringFromFilesystemPath.js';\nimport { isCallable } from '../utils.js';\nimport { getConfigValueRuntime } from '../page-configs/getConfigValue.js';\nimport { getDefinedAtString } from '../page-configs/getConfigDefinedAt.js';\nimport { warnDeprecatedAllowKey } from './resolveRouteFunction.js';\nimport { getHookFromPageConfigGlobal, getHookTimeoutDefault } from '../hooks/getHook.js';\nasync function loadPageRoutes(\n// Remove all arguments and use GlobalContext instead?\npageFilesAll, pageConfigs, pageConfigGlobal, allPageIds) {\n await Promise.all(pageFilesAll.filter((p) => p.fileType === '.page.route').map((p) => p.loadFile?.()));\n const { onBeforeRouteHook, filesystemRoots } = getGlobalHooks(pageFilesAll, pageConfigs, pageConfigGlobal);\n const pageRoutes = getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds);\n return { pageRoutes, onBeforeRouteHook };\n}\nfunction getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {\n const pageRoutes = [];\n // V1 Design\n if (pageConfigs.length > 0) {\n assert(filesystemRoots === null);\n const comesFromV1PageConfig = true;\n pageConfigs\n .filter((p) => !p.isErrorPage)\n .forEach((pageConfig) => {\n const pageId = pageConfig.pageId;\n let pageRoute = null;\n {\n const configName = 'route';\n const configValue = getConfigValueRuntime(pageConfig, configName);\n if (configValue) {\n const route = configValue.value;\n assert(configValue.definedAtData);\n const definedAtString = getDefinedAtString(configValue.definedAtData, configName);\n if (typeof route === 'string') {\n pageRoute = {\n pageId,\n comesFromV1PageConfig,\n routeString: route,\n routeDefinedAtString: definedAtString,\n routeType: 'STRING'\n };\n }\n else {\n assert(isCallable(route));\n if (getConfigValueRuntime(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))\n warnDeprecatedAllowKey();\n pageRoute = {\n pageId,\n comesFromV1PageConfig,\n routeFunction: route,\n routeDefinedAtString: definedAtString,\n routeType: 'FUNCTION'\n };\n }\n }\n }\n if (!pageRoute) {\n const { routeFilesystem } = pageConfig;\n assert(routeFilesystem);\n const { routeString, definedBy } = routeFilesystem;\n assert(routeFilesystem.routeString.startsWith('/'));\n pageRoute = {\n pageId,\n routeFilesystemDefinedBy: definedBy,\n comesFromV1PageConfig,\n routeString,\n routeDefinedAtString: null,\n routeType: 'FILESYSTEM'\n };\n }\n assert(pageRoute);\n pageRoutes.push(pageRoute);\n });\n }\n // Old design\n // TODO/v1-release: remove\n if (pageConfigs.length === 0) {\n assert(filesystemRoots);\n const comesFromV1PageConfig = false;\n allPageIds\n .filter((pageId) => !isErrorPageId(pageId, false))\n .forEach((pageId) => {\n const pageRouteFile = pageFilesAll.find((p) => p.pageId === pageId && p.fileType === '.page.route');\n if (!pageRouteFile || !('default' in pageRouteFile.fileExports)) {\n const routeString = deduceRouteStringFromFilesystemPath(pageId, filesystemRoots);\n assert(routeString.startsWith('/'));\n assert(!routeString.endsWith('/') || routeString === '/');\n pageRoutes.push({\n pageId,\n comesFromV1PageConfig,\n routeString,\n routeDefinedAtString: null,\n routeFilesystemDefinedBy: `${pageId}.page.*`,\n routeType: 'FILESYSTEM'\n });\n }\n else {\n const { filePath, fileExports } = pageRouteFile;\n assert(fileExports.default);\n if (hasProp(fileExports, 'default', 'string')) {\n const routeString = fileExports.default;\n assertUsage(routeString.startsWith('/'), `A Route String should start with a leading slash '/' but ${filePath} has \\`export default '${routeString}'\\`. Make sure to \\`export default '/${routeString}'\\` instead.`);\n pageRoutes.push({\n pageId,\n comesFromV1PageConfig,\n routeString,\n routeDefinedAtString: filePath,\n routeType: 'STRING'\n });\n return;\n }\n if (hasProp(fileExports, 'default', 'function')) {\n const routeFunction = fileExports.default;\n {\n const allowKey = 'iKnowThePerformanceRisksOfAsyncRouteFunctions';\n if (allowKey in fileExports) {\n warnDeprecatedAllowKey();\n }\n }\n pageRoutes.push({\n pageId,\n comesFromV1PageConfig,\n routeFunction,\n routeDefinedAtString: filePath,\n routeType: 'FUNCTION'\n });\n return;\n }\n assertUsage(false, `The default export of ${filePath} should be a string or a function.`);\n }\n });\n }\n return pageRoutes;\n}\nfunction getGlobalHooks(pageFilesAll, pageConfigs, pageConfigGlobal) {\n // V1 Design\n if (pageConfigs.length > 0) {\n const hook = getHookFromPageConfigGlobal(pageConfigGlobal, 'onBeforeRoute');\n return { onBeforeRouteHook: hook, filesystemRoots: null };\n }\n // Old design\n // TODO/v1-release: remove\n let onBeforeRouteHook = null;\n const filesystemRoots = [];\n pageFilesAll\n .filter((p) => p.fileType === '.page.route' && p.isDefaultPageFile)\n .forEach(({ filePath, fileExports }) => {\n assert(fileExports);\n if ('onBeforeRoute' in fileExports) {\n assertUsage(hasProp(fileExports, 'onBeforeRoute', 'function'), `\\`export { onBeforeRoute }\\` of ${filePath} should be a function.`);\n const { onBeforeRoute } = fileExports;\n const hookName = 'onBeforeRoute';\n onBeforeRouteHook = {\n hookFilePath: filePath,\n hookFn: onBeforeRoute,\n hookName,\n hookTimeout: getHookTimeoutDefault(hookName)\n };\n }\n if ('filesystemRoutingRoot' in fileExports) {\n assertUsage(hasProp(fileExports, 'filesystemRoutingRoot', 'string'), `\\`export { filesystemRoutingRoot }\\` of ${filePath} should be a string.`);\n assertUsage(hasProp(fileExports, 'filesystemRoutingRoot', 'string'), `\\`export { filesystemRoutingRoot }\\` of ${filePath} is \\`'${fileExports.filesystemRoutingRoot}'\\` but it should start with a leading slash \\`/\\`.`);\n filesystemRoots.push({\n filesystemRoot: dirname(filePath),\n urlRoot: fileExports.filesystemRoutingRoot\n });\n }\n });\n return { onBeforeRouteHook, filesystemRoots };\n}\nfunction dirname(filePath) {\n assert(filePath.startsWith('/'));\n assert(!filePath.endsWith('/'));\n const paths = filePath.split('/');\n const dirPath = slice(paths, 0, -1).join('/') || '/';\n assert(dirPath.startsWith('/'));\n assert(!dirPath.endsWith('/') || dirPath === '/');\n return dirPath;\n}\n","export { getBaseServer };\nimport { assert } from '../server-routing-runtime/utils.js';\nfunction getBaseServer() {\n // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.\n const baseServer = import.meta.env.BASE_SERVER;\n assert(isBaseServer(baseServer));\n return baseServer;\n}\n// We don't use isBaseServer() defined in utils/parseUrl.ts to avoid loading the whole file in the browser\nfunction isBaseServer(baseServer) {\n return baseServer.startsWith('/');\n}\n","export { createPageContext };\nimport { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';\nimport { getPageFilesAll } from '../../shared/getPageFiles.js';\nimport { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';\nimport { getBaseServer } from './getBaseServer.js';\nimport { assert, isBaseServer, getGlobalObject, objectAssign } from './utils.js';\nconst globalObject = getGlobalObject('createPageContext.ts', {});\nasync function createPageContext(urlOriginal) {\n if (!globalObject.pageFilesData) {\n globalObject.pageFilesData = await getPageFilesAll(true);\n }\n const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = globalObject.pageFilesData;\n const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);\n const baseServer = getBaseServer();\n assert(isBaseServer(baseServer));\n const pageContext = {\n urlOriginal,\n _objectCreatedByVike: true,\n _urlHandler: null,\n _urlRewrite: null,\n _baseServer: baseServer,\n _pageFilesAll: pageFilesAll,\n _pageConfigs: pageConfigs,\n _pageConfigGlobal: pageConfigGlobal,\n _allPageIds: allPageIds,\n _pageRoutes: pageRoutes,\n _onBeforeRouteHook: onBeforeRouteHook,\n _isPageContextObject: true\n };\n const pageContextUrlComputed = getPageContextUrlComputed(pageContext);\n objectAssign(pageContext, pageContextUrlComputed);\n return pageContext;\n}\n","export { findPageConfig };\nimport { assert } from '../utils.js';\nfunction findPageConfig(pageConfigs, pageId) {\n const result = pageConfigs.filter((p) => p.pageId === pageId);\n assert(result.length <= 1);\n const pageConfig = result[0] ?? null;\n return pageConfig;\n}\n","export { loadConfigValues };\nimport { objectAssign } from '../utils.js';\nimport { parseConfigValuesSerialized } from './serialize/parsePageConfigs.js';\nasync function loadConfigValues(pageConfig, isDev) {\n if ('isAllLoaded' in pageConfig &&\n // We don't need to cache in dev, since Vite already caches the virtual module\n !isDev) {\n return pageConfig;\n }\n const configValuesLoaded = await pageConfig.loadConfigValuesAll();\n const configValues = parseConfigValuesSerialized(configValuesLoaded.configValuesSerialized);\n Object.assign(pageConfig.configValues, configValues);\n objectAssign(pageConfig, { isAllLoaded: true });\n return pageConfig;\n}\n","export { loadUserFilesClientSide };\nexport { isErrorFetchingStaticAssets };\nimport { getPageFilesClientSide, getPageContextExports } from '../../shared/getPageFiles.js';\nimport { findPageConfig } from '../../shared/page-configs/findPageConfig.js';\nimport { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';\nimport { objectAssign } from '../server-routing-runtime/utils.js';\nconst stamp = '__whileFetchingAssets';\nasync function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs) {\n const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);\n const pageConfig = findPageConfig(pageConfigs, pageId);\n let pageConfigLoaded;\n // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.\n const isDev = import.meta.env.DEV;\n try {\n // prettier-ignore\n // biome-ignore format:\n const result = await Promise.all([\n pageConfig && loadConfigValues(pageConfig, isDev),\n ...pageFilesClientSide.map((p) => p.loadFile?.()),\n ]);\n pageConfigLoaded = result[0];\n }\n catch (err) {\n if (isFetchError(err)) {\n Object.assign(err, { [stamp]: true });\n }\n else {\n // A user file has a syntax error\n }\n throw err;\n }\n const pageContextExports = getPageContextExports(pageFilesClientSide, pageConfigLoaded);\n const pageContextAddendum = {};\n objectAssign(pageContextAddendum, pageContextExports);\n objectAssign(pageContextAddendum, { _pageFilesLoaded: pageFilesClientSide });\n return pageContextAddendum;\n}\nfunction isErrorFetchingStaticAssets(err) {\n if (!err) {\n return false;\n }\n return err[stamp] === true;\n}\n// https://stackoverflow.com/questions/75928310/how-to-detect-that-import-some-url-failed-because-some-url-isnt-a-javasc\nfunction isFetchError(err) {\n if (!(err instanceof Error))\n return false;\n // https://github.com/stacks-network/clarity-js-sdk/blob/e757666b59af00b5db04dd1bf0df016e3a459ea2/packages/clarity/src/providers/registry.ts#L40-L45\n // https://github.com/modernweb-dev/web/blob/0a59b56e4c1b50af81fbf4588f36a1ceb71f3976/integration/test-runner/tests/test-failure/runTestFailureTest.ts#L11-L18\n const FAILED_TO_FETCH_MESSAGES = [\n // chromium\n 'Failed to fetch dynamically imported module',\n // firefox\n 'error loading dynamically imported module',\n // safari\n 'Importing a module script failed',\n // ??\n 'error resolving module specifier',\n // ??\n 'failed to resolve module'\n ];\n return FAILED_TO_FETCH_MESSAGES.some((s) => err.message.toLowerCase().includes(s.toLowerCase()));\n}\n","export { skipLink };\nimport { getBaseServer } from './getBaseServer.js';\nimport { assert, parseUrl, isBaseServer, isUrl, isUrlExternal } from './utils.js';\nfunction skipLink(linkTag) {\n const url = linkTag.getAttribute('href');\n return (url === null ||\n !isUrl(url) ||\n url === '' ||\n isUrlExternal(url) ||\n isHashUrl(url) ||\n isNewTabLink(linkTag) ||\n !hasBaseServer(url) ||\n // Purposely last because disableAutomaticLinkInterception will be removed in the next major release\n !isVikeLink(linkTag));\n}\n// TODO/next-major-release: remove this in favor of synchronously checking whether URL matches the route of a page (possible since Async Route Functions will be deprecated)\nfunction isVikeLink(linkTag) {\n const disableAutomaticLinkInterception = isDisableAutomaticLinkInterception();\n if (!disableAutomaticLinkInterception) {\n return true;\n }\n else {\n const target = linkTag.getAttribute('data-vike-link');\n return target !== null && target !== 'false';\n }\n}\nfunction isNewTabLink(linkTag) {\n const target = linkTag.getAttribute('target');\n const rel = linkTag.getAttribute('rel');\n return target === '_blank' || target === '_external' || rel === 'external' || linkTag.hasAttribute('download');\n}\nfunction isHashUrl(url) {\n if (url.startsWith('#')) {\n return true;\n }\n const removeHash = (url) => url.split('#')[0];\n if (url.includes('#') && removeHash(url) === removeHash(window.location.href)) {\n return true;\n }\n return false;\n}\nfunction hasBaseServer(url) {\n const baseServer = getBaseServer();\n assert(isBaseServer(baseServer));\n const { hasBaseServer } = parseUrl(url, baseServer);\n return hasBaseServer;\n}\nfunction isDisableAutomaticLinkInterception() {\n // @ts-ignore\n return !!window._disableAutomaticLinkInterception;\n /* globalObject should be used if we want to make disableAutomaticLinkInterception a page-by-page setting\n return globalObject.disableAutomaticLinkInterception ?? false\n */\n}\n","export { getPrefetchSettings };\nimport { assert, assertUsage, assertInfo, assertWarning, isPlainObject } from '../utils.js';\nfunction getPrefetchSettings(pageContext, linkTag) {\n let prefetchStaticAssets = getPrefetchStaticAssets(pageContext, linkTag);\n if (prefetchStaticAssets === 'viewport' && import.meta.env.DEV) {\n assertInfo(false, 'Viewport prefetching is disabled in development', { onlyOnce: true });\n prefetchStaticAssets = 'hover';\n }\n return {\n prefetchStaticAssets\n };\n}\nfunction getPrefetchStaticAssets(pageContext, linkTag) {\n {\n const prefetchAttribute = getPrefetchAttribute(linkTag);\n if (prefetchAttribute !== null)\n return prefetchAttribute;\n }\n // TODO/v1-release: remove\n if ('prefetchLinks' in pageContext.exports) {\n assertUsage(false, '`export { prefetchLinks }` is deprecated, use `export { prefetchStaticAssets }` instead.');\n }\n if ('prefetchStaticAssets' in pageContext.exports) {\n const { prefetchStaticAssets } = pageContext.exports;\n if (prefetchStaticAssets === false) {\n return false;\n }\n if (prefetchStaticAssets === 'hover') {\n return 'hover';\n }\n if (prefetchStaticAssets === 'viewport') {\n return 'viewport';\n }\n const wrongUsageMsg = \"prefetchStaticAssets value should be false, 'hover', or 'viewport'\";\n // TODO/v1-release: remove\n assertUsage(isPlainObject(prefetchStaticAssets), wrongUsageMsg);\n const keys = Object.keys(prefetchStaticAssets);\n assertUsage(keys.length === 1 && keys[0] === 'when', wrongUsageMsg);\n const { when } = prefetchStaticAssets;\n if (when === 'HOVER' || when === 'VIEWPORT') {\n const correctValue = when.toLowerCase();\n assertWarning(false, `prefetchStaticAssets value \\`{ when: '${when}' }\\` is outdated: set prefetchStaticAssets to '${correctValue}' instead`, { onlyOnce: true });\n return correctValue;\n }\n assertUsage(false, wrongUsageMsg);\n }\n return 'hover';\n}\nfunction getPrefetchAttribute(linkTag) {\n const attr = linkTag.getAttribute('data-prefetch-static-assets');\n const attrOld = linkTag.getAttribute('data-prefetch');\n if (attr === null && attrOld === null) {\n return null;\n }\n // TODO/v1-release: remove\n const deprecationNotice = 'The attribute data-prefetch is outdated, use data-prefetch-static-assets instead.';\n if (attr) {\n assertUsage(attrOld === null, deprecationNotice);\n if (attr === 'hover' || attr === 'viewport') {\n return attr;\n }\n if (attr === 'false') {\n return false;\n }\n assertUsage(false, `data-prefetch-static-assets has value \"${attr}\" but it should instead be \"false\", \"hover\", or \"viewport\"`);\n }\n // TODO/v1-release: remove\n if (attrOld) {\n assert(!attr);\n assertWarning(false, deprecationNotice, {\n onlyOnce: true\n });\n if (attrOld === 'true') {\n return 'viewport';\n }\n if (attrOld === 'false') {\n return 'hover';\n }\n assertUsage(false, `data-prefetch has value \"${attrOld}\" but it should instead be \"true\" or \"false\"`);\n }\n assert(false);\n}\n","export { isAlreadyPrefetched };\nexport { markAsAlreadyPrefetched };\nimport { parseUrl } from '../utils.js';\nconst linkAlreadyPrefetched = new Map();\nfunction isAlreadyPrefetched(url) {\n const urlPathname = getUrlPathname(url);\n return linkAlreadyPrefetched.has(urlPathname);\n}\nfunction markAsAlreadyPrefetched(url) {\n const urlPathname = getUrlPathname(url);\n linkAlreadyPrefetched.set(urlPathname, true);\n}\nfunction getUrlPathname(url) {\n const urlPathname = parseUrl(url, '/').pathname;\n return urlPathname;\n}\n","export { getExportNames };\nimport { assert } from '../../utils.js';\nfunction getExportNames(p) {\n if (p.fileType === '.css') {\n return [];\n }\n if (p.exportNames) {\n return p.exportNames;\n }\n assert(p.fileExports, p.filePath);\n const exportNames = Object.keys(p.fileExports);\n return exportNames;\n}\n","export { analyzeExports };\nimport { getExportNames } from './getExportNames.js';\nimport { assertUsage } from '../../utils.js';\n// TODO/v1-release: remove\nfunction analyzeExports({ pageFilesClientSide, pageFilesServerSide, pageId }) {\n return { isHtmlOnly: isHtmlOnly(), isClientRouting: isClientRouting() };\n function isHtmlOnly() {\n {\n const hasPageIdIsmrphFile = pageFilesServerSide.some((p) => p.pageId === pageId && p.fileType === '.page');\n if (hasPageIdIsmrphFile) {\n assertClientSideRenderHook();\n return false;\n }\n }\n {\n const hasPageIdServerFile = pageFilesServerSide.some((p) => p.pageId === pageId && p.fileType === '.page.server');\n if (!hasPageIdServerFile) {\n return false;\n }\n }\n {\n const definesClientRenderer = pageFilesClientSide.some((p) => p.pageId === pageId && p.fileType === '.page.client' && getExportNames(p).includes('render'));\n if (definesClientRenderer) {\n return false;\n }\n }\n return true;\n }\n function assertClientSideRenderHook() {\n const hasClientSideRenderHook = pageFilesClientSide.some((p) => {\n return getExportNames(p).includes('render');\n });\n assertUsage(hasClientSideRenderHook, [\n 'No client-side `render()` hook found.',\n 'See https://vike.dev/render-modes for more information.',\n [\n 'Loaded client-side page files (none of them `export { render }`):',\n ...pageFilesClientSide.map((p, i) => ` (${i + 1}): ${p.filePath}`)\n ].join('\\n')\n ].join(' '));\n }\n function isClientRouting() {\n const hasClientRoutingExport = pageFilesClientSide.some((p) => {\n return getExportNames(p).includes('clientRouting');\n });\n return hasClientRoutingExport;\n }\n}\n","// TODO/v1-release: remove\nexport { determineClientEntry };\nexport { getVikeClientEntry };\nfunction determineClientEntry({ pageFilesClientSide, pageFilesServerSide, isHtmlOnly, isClientRouting }) {\n let clientEntries = [];\n const pageFilesServerSideOnly = pageFilesServerSide.filter((p) => !pageFilesClientSide.includes(p));\n const clientDependencies = [];\n clientDependencies.push(...pageFilesClientSide.map((p) => ({ id: p.filePath, onlyAssets: false, eagerlyImported: false })));\n // CSS & assets\n clientDependencies.push(...pageFilesServerSideOnly.map((p) => ({ id: p.filePath, onlyAssets: true, eagerlyImported: false })));\n // Handle SPA & SSR pages.\n if (isHtmlOnly) {\n clientEntries = pageFilesClientSide.map((p) => p.filePath);\n }\n else {\n // Add the vike client entry\n const clientEntry = getVikeClientEntry(isClientRouting);\n clientDependencies.push({ id: clientEntry, onlyAssets: false, eagerlyImported: false });\n clientEntries = [clientEntry];\n }\n // console.log(pageFilesClientSide, pageFilesServerSide, clientDependencies, clientEntry)\n return { clientEntries, clientDependencies };\n}\nfunction getVikeClientEntry(isClientRouting) {\n return isClientRouting\n ? '@@vike/dist/esm/client/client-routing-runtime/entry.js'\n : '@@vike/dist/esm/client/server-routing-runtime/entry.js';\n}\n","export { analyzePageClientSide };\nexport { analyzePageClientSideInit };\nimport { analyzeExports } from './analyzePageClientSide/analyzeExports.js';\nimport { determineClientEntry } from './analyzePageClientSide/determineClientEntry.js';\nimport { getPageFilesClientSide } from './getAllPageIdFiles.js';\nimport { getPageFilesServerSide } from './getAllPageIdFiles.js';\nimport { assert } from '../utils.js';\nimport { getExportNames } from './analyzePageClientSide/getExportNames.js';\n// TODO/v1-release: remove analyzePageClientSide(), use analyzeClientSide() instead\nfunction analyzePageClientSide(pageFilesAll, pageId) {\n let pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);\n const pageFilesServerSide = getPageFilesServerSide(pageFilesAll, pageId);\n const { isHtmlOnly, isClientRouting } = analyzeExports({ pageFilesClientSide, pageFilesServerSide, pageId });\n if (isHtmlOnly) {\n // HTML-only pages don't need any client-side `render()` hook. For apps that have both HTML-only and SSR/SPA pages, we skip the `.page.client.js` file that defines `render()` for HTML-only pages.\n pageFilesClientSide = pageFilesClientSide.filter((p) => p.isEnv('CLIENT_ONLY') && !getExportNames(p).includes('render'));\n pageFilesClientSide = removeOverridenPageFiles(pageFilesClientSide);\n }\n const { clientEntries, clientDependencies } = determineClientEntry({\n pageFilesClientSide,\n pageFilesServerSide,\n isHtmlOnly,\n isClientRouting\n });\n return { isHtmlOnly, isClientRouting, clientEntries, clientDependencies, pageFilesClientSide, pageFilesServerSide };\n}\n// TODO:v1-release: remove\nasync function analyzePageClientSideInit(pageFilesAll, pageId, { sharedPageFilesAlreadyLoaded }) {\n const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);\n await Promise.all(pageFilesClientSide.map(async (p) => {\n assert(p.isEnv('CLIENT_ONLY') || p.isEnv('CLIENT_AND_SERVER'));\n if (sharedPageFilesAlreadyLoaded && p.isEnv('CLIENT_AND_SERVER')) {\n return;\n }\n // TODO: Is `loadExportNames()` cached ? Does it use filesExports if possible? HMR?\n await p.loadExportNames?.();\n /*\n if (pageFile.exportNames) {\n return pageFile.exportNames.includes(clientRouting)\n }\n if (pageFile.fileExports) {\n return Object.keys(pageFile.fileExports).includes(clientRouting)\n }\n */\n }));\n}\n// [WIP] Just an experiment needed by https://vike.dev/banner\n// - Not sure I want to make something like a public API: the CSS of `_default.page.server.js` are still loaded -> weird DX.\nfunction removeOverridenPageFiles(pageFilesClientSide) {\n const pageFilesClientSide_ = [];\n for (const p of pageFilesClientSide) {\n pageFilesClientSide_.push(p);\n if (getExportNames(p).includes('overrideDefaultPages')) {\n break;\n }\n }\n return pageFilesClientSide_;\n}\n","export { analyzeClientSide };\nimport { getConfigValueRuntime } from '../page-configs/getConfigValue.js';\nimport { analyzePageClientSide } from './analyzePageClientSide.js';\nfunction analyzeClientSide(pageConfig, pageFilesAll, pageId) {\n // V1 design\n if (pageConfig) {\n const isClientRouting = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;\n const clientEntryLoaded = getConfigValueRuntime(pageConfig, 'clientEntryLoaded', 'boolean')?.value ?? false;\n return { clientEntryLoaded, isClientRouting };\n }\n else {\n // TODO/v1-release: remove\n // V0.4 design\n const { isHtmlOnly, isClientRouting } = analyzePageClientSide(pageFilesAll, pageId);\n return { clientEntryLoaded: !isHtmlOnly, isClientRouting };\n }\n}\n","export { isClientSideRoutable };\nimport { analyzePageClientSideInit } from '../../shared/getPageFiles/analyzePageClientSide.js';\nimport { findPageConfig } from '../../shared/page-configs/findPageConfig.js';\nimport { analyzeClientSide } from '../../shared/getPageFiles/analyzeClientSide.js';\nasync function isClientSideRoutable(pageId, pageContext) {\n await analyzePageClientSideInit(pageContext._pageFilesAll, pageId, {\n sharedPageFilesAlreadyLoaded: false\n });\n const pageConfig = findPageConfig(pageContext._pageConfigs, pageId);\n const { clientEntryLoaded, isClientRouting } = analyzeClientSide(pageConfig, pageContext._pageFilesAll, pageId);\n return clientEntryLoaded && isClientRouting;\n}\n","export { resolveRouteString };\nexport { getUrlFromRouteString };\nexport { isStaticRouteString };\nexport { analyzeRouteString };\nexport { assertRouteString };\nexport { parseRouteString };\nimport { assertWarning, isBrowser, escapeRegex } from '../utils.js';\nimport { assert, assertUsage } from './utils.js';\nimport pc from '@brillout/picocolors';\nconst PARAM_TOKEN_NEW = '@';\n// TODO/v1-release: remove\nconst PARAM_TOKEN_OLD = ':';\nfunction assertRouteString(routeString, errPrefix = 'Invalid') {\n let errPrefix2 = `${errPrefix} Route String ${highlight(routeString)}`;\n assertUsage(routeString !== '', `${errPrefix2} (empty string): set it to ${highlight('/')} instead`);\n assertUsage(['/', '*'].includes(routeString[0]), `${errPrefix2}: it should start with ${highlight('/')} or ${highlight('*')}`);\n assertUsage(!routeString.includes('**'), `${errPrefix2}: set it to ${highlight(routeString.split('**').join('*'))} instead`);\n}\nfunction resolveRouteString(routeString, urlPathname) {\n assertRouteString(routeString);\n const segments = parseRouteString(routeString);\n const routeRegexStrInner = segments\n .map((segment) => {\n if (segment.param) {\n return '[^/]+';\n }\n if (segment.glob) {\n return '.*';\n }\n // segment.static\n return escapeRegex(segment.static);\n })\n .map((s) => `(${s})`)\n .join('');\n const routeRegex = new RegExp(`^${routeRegexStrInner}/?$`);\n const routeRegexMatch = urlPathname.match(routeRegex);\n /* DEBUG\n console.log()\n console.log('routeString', routeString)\n console.log('urlPathname', urlPathname)\n console.log('routeSegments', segments)\n console.log('routeRegex', routeRegex)\n console.log('routeRegexMatch', routeRegexMatch)\n //*/\n if (!routeRegexMatch)\n return null;\n const routeParams = {};\n const [_, ...segmentsValue] = routeRegexMatch;\n let globIdx = 0;\n const hasMultipleGlobs = segments.filter((segment) => segment.glob).length > 1;\n segments.forEach((segment, i) => {\n let val = segmentsValue[i];\n if (segment.param) {\n routeParams[segment.param] = val;\n }\n if (segment.glob) {\n const param = `*${hasMultipleGlobs ? ++globIdx : ''}`;\n routeParams[param] = val;\n }\n });\n return { routeParams };\n}\nfunction parseRouteString(routeString) {\n const segments = [];\n const pushStatic = (s) => {\n const segmentLast = segments[segments.length - 1];\n if (segmentLast?.static) {\n segmentLast.static += s;\n }\n else {\n segments.push({ static: s });\n }\n };\n const parts = routeString.split('/');\n parts.forEach((s, i) => {\n if (i !== 0)\n pushStatic('/');\n if (isParam(s)) {\n assertWarning(!s.startsWith(PARAM_TOKEN_OLD), `Outdated Route String ${highlight(routeString)}, use ${highlight(routeString.split(PARAM_TOKEN_OLD).join(PARAM_TOKEN_NEW))} instead`, { onlyOnce: true });\n segments.push({ param: s.slice(1) });\n }\n else {\n if (s === '*' && i === parts.length - 1 && routeString !== '*' && routeString !== '/*') {\n segments.push({ glob: true });\n }\n else {\n s.split('*').forEach((s, i) => {\n if (i !== 0)\n segments.push({ glob: true });\n if (s !== '') {\n pushStatic(s);\n }\n });\n }\n }\n });\n return segments;\n}\nfunction getUrlFromRouteString(routeString) {\n if (isStaticRouteString(routeString)) {\n const url = routeString;\n return url;\n }\n return null;\n}\nfunction analyzeRouteString(routeString) {\n const segments = parseRouteString(routeString);\n const countStaticParts = (s) => s?.split('/').filter(Boolean).length || 0;\n let numberOfStaticPartsBeginning = 0;\n for (const segment of segments) {\n if (!segment.static)\n break;\n numberOfStaticPartsBeginning += countStaticParts(segment.static);\n }\n const numberOfStaticParts = segments.map((s) => countStaticParts(s.static)).reduce((sum, a) => sum + a, 0);\n const numberOfParams = segments.filter((s) => s.param).length;\n const numberOfGlobs = segments.filter((s) => s.glob).length;\n return { numberOfStaticPartsBeginning, numberOfStaticParts, numberOfParams, numberOfGlobs };\n}\nfunction isParam(routeSegment) {\n return routeSegment.startsWith(PARAM_TOKEN_NEW) || routeSegment.startsWith(PARAM_TOKEN_OLD);\n}\nfunction isStaticRouteString(routeString) {\n const url = routeString;\n const match = resolveRouteString(routeString, url);\n assert(match);\n return Object.keys(match.routeParams).length === 0;\n}\nfunction highlight(routeString) {\n if (isBrowser()) {\n return `'${routeString}'`;\n }\n else {\n if (routeString === '') {\n routeString = \"''\";\n }\n return pc.cyan(routeString);\n }\n}\n","export { resolvePrecendence };\n// export type { RouteMatch }\nimport { analyzeRouteString } from './resolveRouteString.js';\nimport { higherFirst, lowerFirst } from './utils.js';\nimport { makeFirst } from './utils.js';\nimport { isStaticRouteString } from './resolveRouteString.js';\n// See https://vike.dev/route-function#precedence\nfunction resolvePrecendence(routeMatches) {\n // prettier-ignore\n // biome-ignore format:\n routeMatches\n .sort(sortMatches)\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'FUNCTION' && !!routeMatch.precedence && routeMatch.precedence < 0))\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'STRING' && isStaticRouteString(routeMatch.routeString) === false))\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'FUNCTION' && !routeMatch.precedence))\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'STRING' && isStaticRouteString(routeMatch.routeString) === true))\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'FILESYSTEM'))\n .sort(makeFirst((routeMatch) => routeMatch.routeType === 'FUNCTION' && !!routeMatch.precedence && routeMatch.precedence > 0));\n}\n// -1 => routeMatch1 higher precedence\n// +1 => routeMatch2 higher precedence\nfunction sortMatches(routeMatch1, routeMatch2) {\n {\n const precedence1 = routeMatch1.precedence ?? 0;\n const precedence2 = routeMatch2.precedence ?? 0;\n if (precedence1 !== precedence2) {\n return precedence1 > precedence2 ? -1 : 1;\n }\n }\n if (!routeMatch2.routeString) {\n return 0;\n }\n if (!routeMatch1.routeString) {\n return 0;\n }\n /* DEBUG\n console.log('routeMatch1.routeString', routeMatch1.routeString)\n console.log('routeMatch2.routeString', routeMatch2.routeString)\n console.log('parseRouteString(routeMatch1.routeString)', parseRouteString(routeMatch1.routeString))\n console.log('parseRouteString(routeMatch2.routeString)', parseRouteString(routeMatch2.routeString))\n //*/\n // Return route with highest number of static path segments at beginning first\n {\n const getValue = (routeString) => analyzeRouteString(routeString).numberOfStaticPartsBeginning;\n const result = higherFirst(getValue)(routeMatch1.routeString, routeMatch2.routeString);\n if (result !== 0) {\n /* DEBUG\n console.log('analyzeRouteString(routeMatch1.routeString).numberOfStaticPartsBeginning', getValue(routeMatch1.routeString))\n console.log('analyzeRouteString(routeMatch2.routeString).numberOfStaticPartsBeginning', getValue(routeMatch2.routeString))\n //*/\n return result;\n }\n }\n // Return route with highest number of static path segments in total first\n {\n const getValue = (routeString) => analyzeRouteString(routeString).numberOfStaticParts;\n const result = higherFirst(getValue)(routeMatch1.routeString, routeMatch2.routeString);\n if (result !== 0) {\n /* DEBUG\n console.log('analyzeRouteString(routeMatch1.routeString).numberOfStaticParts', getValue(routeMatch1.routeString))\n console.log('analyzeRouteString(routeMatch2.routeString).numberOfStaticParts', getValue(routeMatch2.routeString))\n //*/\n return result;\n }\n }\n // Return route with least amount of globs first\n {\n const getValue = (routeString) => analyzeRouteString(routeString).numberOfGlobs;\n const result = lowerFirst(getValue)(routeMatch1.routeString, routeMatch2.routeString);\n if (result !== 0) {\n /* DEBUG\n console.log('analyzeRouteString(routeMatch1.routeString).numberOfGlobs', getValue(routeMatch1.routeString))\n console.log('analyzeRouteString(routeMatch2.routeString).numberOfGlobs', getValue(routeMatch2.routeString))\n //*/\n return result;\n }\n }\n // Return route with highest number of parameters first\n {\n const getValue = (routeString) => analyzeRouteString(routeString).numberOfParams;\n const result = higherFirst(getValue)(routeMatch1.routeString, routeMatch2.routeString);\n if (result !== 0) {\n /* DEBUG\n console.log('analyzeRouteString(routeMatch1.routeString).numberOfParams', getValue(routeMatch1.routeString))\n console.log('analyzeRouteString(routeMatch2.routeString).numberOfParams', getValue(routeMatch2.routeString))\n //*/\n return result;\n }\n }\n return 0;\n}\n","export { executeOnBeforeRouteHook };\nimport { assertPageContextProvidedByUser } from '../assertPageContextProvidedByUser.js';\nimport { assertUsage, hasProp, isObjectWithKeys, objectAssign, assertWarning, assertUsageUrlPathnameAbsolute, joinEnglish, assert } from './utils.js';\nimport { assertRouteParams, assertSyncRouting } from './resolveRouteFunction.js';\nimport pc from '@brillout/picocolors';\nimport { executeHook } from '../hooks/executeHook.js';\nasync function executeOnBeforeRouteHook(pageContext) {\n const pageContextFromOnBeforeRouteHook = {};\n if (!pageContext._onBeforeRouteHook)\n return null;\n const pageContextFromHook = await getPageContextFromHook(pageContext._onBeforeRouteHook, pageContext);\n if (pageContextFromHook) {\n objectAssign(pageContextFromOnBeforeRouteHook, pageContextFromHook);\n if (hasProp(pageContextFromOnBeforeRouteHook, '_pageId', 'string') ||\n hasProp(pageContextFromOnBeforeRouteHook, '_pageId', 'null')) {\n // We bypass Vike's routing\n if (!hasProp(pageContextFromOnBeforeRouteHook, 'routeParams')) {\n objectAssign(pageContextFromOnBeforeRouteHook, { routeParams: {} });\n }\n else {\n assert(hasProp(pageContextFromOnBeforeRouteHook, 'routeParams', 'object'));\n }\n objectAssign(pageContextFromOnBeforeRouteHook, {\n _routingProvidedByOnBeforeRouteHook: true,\n _debugRouteMatches: 'CUSTOM_ROUTING'\n });\n return pageContextFromOnBeforeRouteHook;\n }\n }\n objectAssign(pageContextFromOnBeforeRouteHook, {\n _routingProvidedByOnBeforeRouteHook: false\n });\n return pageContextFromOnBeforeRouteHook;\n}\nasync function getPageContextFromHook(onBeforeRouteHook, pageContext) {\n let hookReturn = onBeforeRouteHook.hookFn(pageContext);\n assertSyncRouting(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);\n // TODO/v1-release: make executeOnBeforeRouteHook() and route() sync\n hookReturn = await executeHook(() => hookReturn, onBeforeRouteHook, pageContext);\n const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;\n assertUsage(hookReturn === null ||\n hookReturn === undefined ||\n (isObjectWithKeys(hookReturn, ['pageContext']) && hasProp(hookReturn, 'pageContext')), `${errPrefix} should return ${pc.cyan('null')}, ${pc.cyan('undefined')}, or a plain JavaScript object ${pc.cyan('{ pageContext: { /* ... */ } }')}`);\n if (hookReturn === null || hookReturn === undefined) {\n return null;\n }\n assertUsage(hasProp(hookReturn, 'pageContext', 'object'), `${errPrefix} returned ${pc.cyan('{ pageContext }')} but pageContext should be a plain JavaScript object.`);\n if (hasProp(hookReturn.pageContext, '_pageId') && !hasProp(hookReturn.pageContext, '_pageId', 'null')) {\n const errPrefix2 = `${errPrefix} returned ${pc.cyan('{ pageContext: { _pageId } }')} but ${pc.cyan('_pageId')} should be`;\n assertUsage(hasProp(hookReturn.pageContext, '_pageId', 'string'), `${errPrefix2} a string or null`);\n assertUsage(pageContext._allPageIds.includes(hookReturn.pageContext._pageId), `${errPrefix2} ${joinEnglish(pageContext._allPageIds.map((s) => pc.cyan(s)), 'or')}`);\n }\n if (hasProp(hookReturn.pageContext, 'routeParams')) {\n assertRouteParams(hookReturn.pageContext, `${errPrefix} returned ${pc.cyan('{ pageContext: { routeParams } }')} but routeParams should`);\n }\n const deprecatedReturn = (prop) => `${errPrefix} returned ${pc.cyan(`{ pageContext: { ${prop} } }`)} which is deprecated. Return ${pc.cyan('{ pageContext: { urlLogical } }')} instead.`;\n if (hasProp(hookReturn.pageContext, 'url')) {\n assertWarning(false, deprecatedReturn('url'), { onlyOnce: true });\n hookReturn.pageContext.urlLogical = hookReturn.pageContext.url;\n delete hookReturn.pageContext.url;\n }\n if (hasProp(hookReturn.pageContext, 'urlOriginal')) {\n assertWarning(false, deprecatedReturn('urlOriginal'), { onlyOnce: true });\n hookReturn.pageContext.urlLogical = hookReturn.pageContext.urlOriginal;\n delete hookReturn.pageContext.urlOriginal;\n }\n if (hasProp(hookReturn.pageContext, 'urlLogical')) {\n assertUsageUrlPathnameAbsolute(\n // We type-cast to string instead of assertUsage() in order to save client-side KBs\n hookReturn.pageContext.urlLogical, `${errPrefix} returned ${pc.cyan('{ pageContext: { urlLogical } }')} but ${pc.cyan('urlLogical')}`);\n }\n assertPageContextProvidedByUser(hookReturn.pageContext, {\n hookFilePath: onBeforeRouteHook.hookFilePath,\n hookName: 'onBeforeRoute'\n });\n const pageContextAddendumHook = {};\n objectAssign(pageContextAddendumHook, hookReturn.pageContext);\n return pageContextAddendumHook;\n}\n","export { debug };\nvar _debug;\nfunction debug(...args) {\n if (!_debug) {\n // We use this trick instead of `import { createDebugger } from '../../utils/debug` in order to ensure that the `debug` mechanism is only loaded on the server-side\n _debug = globalThis.__brillout_debug_createDebugger?.('vike:routing');\n }\n if (_debug) {\n _debug(...args);\n }\n}\n","export { route };\n// Ensure we don't bloat runtime of Server Routing\nimport { assertClientRouting } from '../../utils/assertRoutingType.js';\nimport { isBrowser } from '../../utils/isBrowser.js';\nif (isBrowser()) {\n assertClientRouting();\n}\nimport { assert, assertUsage, isPlainObject, objectAssign } from './utils.js';\nimport { assertPageContextUrl } from '../getPageContextUrlComputed.js';\nimport { resolvePrecendence } from './resolvePrecedence.js';\nimport { resolveRouteString } from './resolveRouteString.js';\nimport { resolveRouteFunction } from './resolveRouteFunction.js';\nimport { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';\nimport { debug } from './debug.js';\nimport pc from '@brillout/picocolors';\nasync function route(pageContext) {\n debug('Pages routes:', pageContext._pageRoutes);\n assertPageContextUrl(pageContext);\n const pageContextFromRoute = {};\n // onBeforeRoute()\n const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);\n if (pageContextFromOnBeforeRouteHook) {\n if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {\n assert(pageContextFromOnBeforeRouteHook._pageId);\n return pageContextFromOnBeforeRouteHook;\n }\n else {\n objectAssign(pageContextFromRoute, pageContextFromOnBeforeRouteHook);\n }\n }\n // We take into account pageContext.urlLogical set by onBeforeRoute()\n objectAssign(pageContext, pageContextFromOnBeforeRouteHook);\n // Vike's routing\n const allPageIds = pageContext._allPageIds;\n assertUsage(allPageIds.length > 0, 'No page found. You must create at least one page.');\n assert(pageContext._pageFilesAll.length > 0 || pageContext._pageConfigs.length > 0);\n const { urlPathname } = pageContext;\n assert(urlPathname.startsWith('/'));\n const routeMatches = [];\n await Promise.all(pageContext._pageRoutes.map(async (pageRoute) => {\n const { pageId, routeType } = pageRoute;\n // Filesytem Routing\n if (pageRoute.routeType === 'FILESYSTEM') {\n const { routeString } = pageRoute;\n const match = resolveRouteString(routeString, urlPathname);\n if (match) {\n const { routeParams } = match;\n routeMatches.push({ pageId, routeParams, routeString, routeType });\n }\n return;\n }\n // Route String defined in `.page.route.js`\n if (pageRoute.routeType === 'STRING') {\n const { routeString } = pageRoute;\n const match = resolveRouteString(routeString, urlPathname);\n if (match) {\n const { routeParams } = match;\n assert(routeType === 'STRING');\n routeMatches.push({\n pageId,\n routeString,\n routeParams,\n routeType\n });\n }\n return;\n }\n // Route Function defined in `.page.route.js`\n if (pageRoute.routeType === 'FUNCTION') {\n const { routeFunction, routeDefinedAtString } = pageRoute;\n const match = await resolveRouteFunction(routeFunction, pageContext, routeDefinedAtString);\n if (match) {\n const { routeParams, precedence } = match;\n routeMatches.push({ pageId, precedence, routeParams, routeType });\n }\n return;\n }\n assert(false);\n }));\n resolvePrecendence(routeMatches);\n const winner = routeMatches[0] ?? null;\n debug(`Route matches for URL ${pc.cyan(urlPathname)} (in precedence order):`, routeMatches);\n objectAssign(pageContextFromRoute, { _debugRouteMatches: routeMatches });\n // For vite-plugin-vercel https://github.com/magne4000/vite-plugin-vercel/blob/main/packages/vike-integration/vike.ts#L173\n objectAssign(pageContextFromRoute, { _routeMatch: winner });\n if (!winner) {\n objectAssign(pageContextFromRoute, {\n _pageId: null,\n routeParams: {}\n });\n return pageContextFromRoute;\n }\n {\n const { routeParams } = winner;\n assert(isPlainObject(routeParams));\n objectAssign(pageContextFromRoute, {\n _pageId: winner.pageId,\n routeParams: winner.routeParams\n });\n }\n return pageContextFromRoute;\n}\n","export { prefetch };\nexport { addLinkPrefetchHandlers };\nimport { assert, assertClientRouting, assertUsage, assertUsageUrlPathname, assertWarning, checkIfClientRouting, getGlobalObject } from './utils.js';\nimport { isErrorFetchingStaticAssets, loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';\nimport { skipLink } from './skipLink.js';\nimport { getPrefetchSettings } from './prefetch/getPrefetchSettings.js';\nimport { isAlreadyPrefetched, markAsAlreadyPrefetched } from './prefetch/alreadyPrefetched.js';\nimport { disableClientRouting } from './renderPageClientSide.js';\nimport { isClientSideRoutable } from './isClientSideRoutable.js';\nimport { createPageContext } from './createPageContext.js';\nimport { route } from '../../shared/route/index.js';\nimport { noRouteMatch } from '../../shared/route/noRouteMatch.js';\nimport pc from '@brillout/picocolors';\nassertClientRouting();\nconst globalObject = getGlobalObject('prefetch.ts', { linkPrefetchHandlerAdded: new WeakMap() });\nasync function prefetchAssets(pageId, pageContext) {\n try {\n await loadUserFilesClientSide(pageId, pageContext._pageFilesAll, pageContext._pageConfigs);\n }\n catch (err) {\n if (isErrorFetchingStaticAssets(err)) {\n disableClientRouting(err, true);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Programmatically prefetch client assets.\n *\n * https://vike.dev/prefetch\n *\n * @param url - The URL of the page you want to prefetch.\n */\nasync function prefetch(url) {\n assertUsage(checkIfClientRouting(), 'prefetch() only works with Client Routing, see https://vike.dev/prefetch', {\n showStackTrace: true\n });\n const errPrefix = '[prefetch(url)] url';\n assertUsageUrlPathname(url, errPrefix);\n if (isAlreadyPrefetched(url))\n return;\n markAsAlreadyPrefetched(url);\n const pageContext = await createPageContext(url);\n let pageContextFromRoute;\n try {\n pageContextFromRoute = await route(pageContext);\n }\n catch {\n // If a route() hook has a bug or `throw render()` / `throw redirect()`\n return;\n }\n const pageId = pageContextFromRoute._pageId;\n if (!pageId) {\n assertWarning(false, `${errPrefix} ${pc.string(url)} ${noRouteMatch}`, {\n showStackTrace: true,\n onlyOnce: false\n });\n return;\n }\n await prefetchAssets(pageId, pageContext);\n}\nfunction addLinkPrefetchHandlers(pageContext) {\n // Current URL is already prefetched\n markAsAlreadyPrefetched(pageContext.urlPathname);\n const linkTags = [...document.getElementsByTagName('A')];\n linkTags.forEach((linkTag) => {\n if (globalObject.linkPrefetchHandlerAdded.has(linkTag))\n return;\n globalObject.linkPrefetchHandlerAdded.set(linkTag, true);\n const url = linkTag.getAttribute('href');\n if (skipLink(linkTag))\n return;\n assert(url);\n if (isAlreadyPrefetched(url))\n return;\n const { prefetchStaticAssets } = getPrefetchSettings(pageContext, linkTag);\n if (!prefetchStaticAssets)\n return;\n if (prefetchStaticAssets === 'hover') {\n linkTag.addEventListener('mouseover', () => {\n prefetchIfPossible(url);\n });\n linkTag.addEventListener('touchstart', () => {\n prefetchIfPossible(url);\n }, { passive: true });\n }\n if (prefetchStaticAssets === 'viewport') {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n prefetchIfPossible(url);\n observer.disconnect();\n }\n });\n });\n observer.observe(linkTag);\n }\n });\n}\nasync function prefetchIfPossible(url) {\n const pageContext = await createPageContext(url);\n let pageContextFromRoute;\n try {\n pageContextFromRoute = await route(pageContext);\n }\n catch {\n // If a route() hook has a bug or `throw render()` / `throw redirect()`\n return;\n }\n if (!pageContextFromRoute?._pageId)\n return;\n if (!(await isClientSideRoutable(pageContextFromRoute._pageId, pageContext)))\n return;\n await prefetchAssets(pageContextFromRoute._pageId, pageContext);\n}\n","export { executeOnRenderClientHook };\nimport { assert, assertUsage, executeHook } from '../server-routing-runtime/utils.js';\nimport { getHook } from '../../shared/hooks/getHook.js';\nimport { preparePageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';\nasync function executeOnRenderClientHook(pageContext, isClientRouting) {\n const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting);\n let hook = null;\n let hookName;\n {\n const renderHook = getHook(pageContext, 'render');\n hook = renderHook;\n hookName = 'render';\n }\n {\n const renderHook = getHook(pageContext, 'onRenderClient');\n if (renderHook) {\n hook = renderHook;\n hookName = 'onRenderClient';\n }\n }\n if (!hook) {\n const urlToShowToUser = getUrlToShowToUser(pageContext);\n assert(urlToShowToUser);\n if (pageContext._pageConfigs.length > 0) {\n // V1 design\n assertUsage(false, `No onRenderClient() hook defined for URL '${urlToShowToUser}', but it's needed, see https://vike.dev/onRenderClient`);\n }\n else {\n // TODO/v1-release: remove\n // V0.4 design\n const pageClientsFilesLoaded = pageContext._pageFilesLoaded.filter((p) => p.fileType === '.page.client');\n let errMsg;\n if (pageClientsFilesLoaded.length === 0) {\n errMsg = 'No file `*.page.client.*` found for URL ' + urlToShowToUser;\n }\n else {\n errMsg =\n 'One of the following files should export a render() hook: ' +\n pageClientsFilesLoaded.map((p) => p.filePath).join(' ');\n }\n assertUsage(false, errMsg);\n }\n }\n assert(hook);\n const renderHook = hook.hookFn;\n assert(hookName);\n // We don't use a try-catch wrapper because rendering errors are usually handled by the UI framework. (E.g. React's Error Boundaries.)\n const hookResult = await executeHook(() => renderHook(pageContextForUserConsumption), hook, pageContext);\n assertUsage(hookResult === undefined, `The ${hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);\n}\nfunction getUrlToShowToUser(pageContext) {\n let url;\n // try/catch to avoid passToClient assertUsage() (although: this may not be needed anymore, since we're now accessing pageContext and not pageContextForUserConsumption)\n try {\n url =\n // Client Routing\n pageContext.urlPathname ??\n // Server Routing\n pageContext.urlOriginal;\n }\n catch { }\n url = url ?? window.location.href;\n return url;\n}\n","export { setScrollPosition };\nexport { autoSaveScrollPosition };\nimport { assert, onPageHide, sleep, throttle } from './utils.js';\nimport { saveScrollPosition } from './history.js';\nfunction setScrollPosition(scrollTarget) {\n if (scrollTarget && 'x' in scrollTarget) {\n setScroll(scrollTarget);\n return;\n }\n if (scrollTarget?.preserveScroll) {\n return;\n }\n scrollToTopOrHash();\n}\n// Replicates the browser's native behavior\nfunction scrollToTopOrHash() {\n const hash = getUrlHash();\n if (!hash || hash === 'top') {\n setScroll({ x: 0, y: 0 });\n }\n else {\n const hashTarget = document.getElementById(hash) || document.getElementsByName(hash)[0];\n if (hashTarget) {\n hashTarget.scrollIntoView();\n }\n }\n}\n/** Change the browser's scoll position, in a way that works during a repaint. */\nfunction setScroll(scrollPosition) {\n const scroll = () => window.scrollTo(scrollPosition.x, scrollPosition.y);\n const done = () => window.scrollX === scrollPosition.x && window.scrollY === scrollPosition.y;\n // In principle, this `done()` call should force the repaint to be finished. But that doesn't seem to be the case with `Firefox 97.0.1`.\n if (done())\n return;\n scroll();\n // Because `done()` doesn't seem to always force the repaint to be finished, we potentially need to retry again.\n if (done())\n return;\n requestAnimationFrame(() => {\n scroll();\n if (done())\n return;\n setTimeout(async () => {\n scroll();\n if (done())\n return;\n // In principle, `requestAnimationFrame() -> setTimeout(, 0)` should be enough.\n // - https://stackoverflow.com/questions/61281139/waiting-for-repaint-in-javascript\n // - But it's not enough for `Firefox 97.0.1`.\n // - The following strategy is very agressive. It doesn't need to be that aggressive for Firefox. But we do it to be safe.\n const start = new Date().getTime();\n while (true) {\n await sleep(10);\n scroll();\n if (done())\n return;\n const millisecondsElapsed = new Date().getTime() - start;\n if (millisecondsElapsed > 100)\n return;\n }\n }, 0);\n });\n}\nfunction getUrlHash() {\n let { hash } = window.location;\n if (hash === '')\n return null;\n assert(hash.startsWith('#'));\n hash = hash.slice(1);\n return hash;\n}\n// Save scroll position (needed for back-/forward navigation)\nfunction autoSaveScrollPosition() {\n // Safari cannot handle more than 100 `history.replaceState()` calls within 30 seconds (https://github.com/vikejs/vike/issues/46)\n window.addEventListener('scroll', throttle(saveScrollPosition, Math.ceil(1000 / 3)), { passive: true });\n onPageHide(saveScrollPosition);\n}\n","export { onBrowserHistoryNavigation };\nexport { updateState };\nimport { getCurrentUrl, getGlobalObject } from './utils.js';\nimport { initHistoryState, getHistoryState } from './history.js';\nimport { renderPageClientSide } from './renderPageClientSide.js';\nimport { setScrollPosition } from './setScrollPosition.js';\nconst globalObject = getGlobalObject('onBrowserHistoryNavigation.ts', { previousState: getState() });\nfunction onBrowserHistoryNavigation() {\n // - The popstate event is trigged upon:\n // - Back-/forward navigation.\n // - By user clicking on his browser's back-/forward navigation (or using a shortcut)\n // - By JavaScript: `history.back()` / `history.forward()`\n // - URL hash change.\n // - By user clicking on a hash link `<a href=\"#some-hash\" />`\n // - The popstate event is *only* triggered if `href` starts with '#' (even if `href` is '/#some-hash' while the current URL's pathname is '/' then the popstate still isn't triggered)\n // - By JavaScript: `location.hash = 'some-hash'`\n // - The `event` argument of `window.addEventListener('popstate', (event) => /*...*/)` is useless: the History API doesn't provide the previous state (the popped state), see https://stackoverflow.com/questions/48055323/is-history-state-always-the-same-as-popstate-event-state\n window.addEventListener('popstate', async () => {\n const currentState = getState();\n const scrollTarget = currentState.historyState.scrollPosition || undefined;\n const isUserLandPushStateNavigation = currentState.historyState.triggeredBy === 'user';\n const isHashNavigation = currentState.urlWithoutHash === globalObject.previousState.urlWithoutHash;\n const isBackwardNavigation = !currentState.historyState.timestamp || !globalObject.previousState.historyState.timestamp\n ? null\n : currentState.historyState.timestamp < globalObject.previousState.historyState.timestamp;\n globalObject.previousState = currentState;\n if (isHashNavigation && !isUserLandPushStateNavigation) {\n // - `history.state` is uninitialized (`null`) when:\n // - The user's code runs `window.location.hash = '#section'`.\n // - The user clicks on an anchor link `<a href=\"#section\">Section</a>` (because Vike's `onLinkClick()` handler skips hash links).\n // - `history.state` is `null` when uninitialized: https://developer.mozilla.org/en-US/docs/Web/API/History/state\n // - Alternatively, we completely take over hash navigation and reproduce the browser's native behavior upon hash navigation.\n // - Problem: we cannot intercept `window.location.hash = '#section'`. (Or maybe we can with the `hashchange` event?)\n // - Other potential problem: would there be a conflict when the user wants to override the browser's default behavior? E.g. for smooth scrolling, or when using hashes for saving states of some fancy animations.\n // - Another alternative: we use the browser's scroll restoration mechanism (see `browserNativeScrollRestoration_enable()` below).\n // - Problem: not clear when to call `browserNativeScrollRestoration_disable()`/`browserNativeScrollRestoration_enable()`\n // - Other potential problem are inconsistencies between browsers: specification says that setting `window.history.scrollRestoration` only affects the current entry in the session history. But this seems to contradict what folks saying.\n // - Specification: https://html.spec.whatwg.org/multipage/history.html#the-history-interface\n // - https://stackoverflow.com/questions/70188241/history-scrollrestoration-manual-doesnt-prevent-safari-from-restoring-scrol\n if (window.history.state === null) {\n // The browser already scrolled to `#${hash}` => the current scroll position is the right one => we save it with `initHistoryState()`.\n initHistoryState();\n globalObject.previousState = getState();\n }\n else {\n // If `history.state !== null` then it means that `popstate` was triggered by the user clicking on his browser's forward/backward history button.\n setScrollPosition(scrollTarget);\n }\n }\n else {\n await renderPageClientSide({ scrollTarget, isBackwardNavigation, isUserLandPushStateNavigation });\n }\n });\n}\nfunction getState() {\n return {\n urlWithoutHash: getCurrentUrl({ withoutHash: true }),\n historyState: getHistoryState()\n };\n}\nfunction updateState() {\n globalObject.previousState = getState();\n}\n","// Handle the browser's native scroll restoration mechanism\nexport { browserNativeScrollRestoration_disable };\nexport { setupNativeScrollRestoration };\nexport { setInitialRenderIsDone };\nimport { getGlobalObject, onPageHide, onPageShow } from './utils.js';\nconst globalObject = getGlobalObject('scrollRestoration.ts', {});\n// We use the browser's native scroll restoration mechanism only for the first render\nfunction setupNativeScrollRestoration() {\n browserNativeScrollRestoration_enable();\n onPageHide(browserNativeScrollRestoration_enable);\n onPageShow(() => globalObject.initialRenderIsDone && browserNativeScrollRestoration_disable());\n}\nfunction setInitialRenderIsDone() {\n globalObject.initialRenderIsDone = true;\n}\nfunction browserNativeScrollRestoration_disable() {\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n}\nfunction browserNativeScrollRestoration_enable() {\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'auto';\n }\n}\n","export { renderPageClientSide };\nexport { getRenderCount };\nexport { disableClientRouting };\nimport { assert, getCurrentUrl, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, executeHook, hasProp, augmentType } from './utils.js';\nimport { getPageContextFromHooks_isHydration, getPageContextFromHooks_isNotHydration, getPageContextFromHooks_serialized } from './getPageContextFromHooks.js';\nimport { createPageContext } from './createPageContext.js';\nimport { addLinkPrefetchHandlers } from './prefetch.js';\nimport { assertInfo, assertWarning, isReact } from './utils.js';\nimport { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';\nimport { assertHook, getHook } from '../../shared/hooks/getHook.js';\nimport { isErrorFetchingStaticAssets, loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';\nimport { pushHistory } from './history.js';\nimport { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';\nimport { route } from '../../shared/route/index.js';\nimport { isClientSideRoutable } from './isClientSideRoutable.js';\nimport { setScrollPosition } from './setScrollPosition.js';\nimport { updateState } from './onBrowserHistoryNavigation.js';\nimport { browserNativeScrollRestoration_disable, setInitialRenderIsDone } from './scrollRestoration.js';\nimport { getErrorPageId } from '../../shared/error-page.js';\nconst globalObject = getGlobalObject('renderPageClientSide.ts', { renderCounter: 0 });\nasync function renderPageClientSide(renderArgs) {\n const { scrollTarget, urlOriginal = getCurrentUrl(), overwriteLastHistoryEntry = false, isBackwardNavigation, pageContextsFromRewrite = [], redirectCount = 0, isUserLandPushStateNavigation, isClientSideNavigation = true } = renderArgs;\n const { isRenderOutdated, setHydrationCanBeAborted, isFirstRender } = getIsRenderOutdated();\n // Note that pageContext.isHydration isn't equivalent to isFirstRender\n // - Thus pageContext.isHydration isn't equivalent to !pageContext.isClientSideNavigation\n // - `pageContext.isHydration === !isFirstRender && !isErrorPage`\n assert(isClientSideNavigation === !isFirstRender);\n assertNoInfiniteAbortLoop(pageContextsFromRewrite.length, redirectCount);\n if (globalObject.clientRoutingIsDisabled) {\n redirectHard(urlOriginal);\n return;\n }\n await renderPageNominal();\n return;\n async function renderPageNominal() {\n const onError = async (err) => {\n await renderErrorPage({ err });\n };\n const pageContext = await getPageContextBegin();\n if (isRenderOutdated())\n return;\n // onPageTransitionStart()\n if (globalObject.isFirstRenderDone) {\n const { previousPageContext } = globalObject;\n assert(previousPageContext);\n // We use the hook of the previous page in order to be able to call onPageTransitionStart() before fetching the files of the next page.\n // https://github.com/vikejs/vike/issues/1560\n assertHook(previousPageContext, 'onPageTransitionStart');\n if (!globalObject.isTransitioning) {\n globalObject.isTransitioning = true;\n const onPageTransitionStartHook = getHook(previousPageContext, 'onPageTransitionStart');\n if (onPageTransitionStartHook) {\n const hook = onPageTransitionStartHook;\n const { hookFn } = hook;\n try {\n await executeHook(() => hookFn(pageContext), hook, pageContext);\n }\n catch (err) {\n await onError(err);\n return;\n }\n if (isRenderOutdated())\n return;\n }\n }\n }\n // Route\n let pageContextRouted;\n if (isFirstRender) {\n const pageContextSerialized = getPageContextFromHooks_serialized();\n pageContextRouted = pageContextSerialized;\n }\n else {\n let pageContextFromRoute;\n try {\n pageContextFromRoute = await route(pageContext);\n }\n catch (err) {\n await onError(err);\n return;\n }\n if (isRenderOutdated())\n return;\n let isClientRoutable;\n if (!pageContextFromRoute._pageId) {\n isClientRoutable = false;\n }\n else {\n isClientRoutable = await isClientSideRoutable(pageContextFromRoute._pageId, pageContext);\n if (isRenderOutdated())\n return;\n }\n if (!isClientRoutable) {\n redirectHard(urlOriginal);\n return;\n }\n assert(hasProp(pageContextFromRoute, '_pageId', 'string')); // Help TS\n const isSamePage = pageContextFromRoute._pageId &&\n globalObject.previousPageContext?._pageId &&\n pageContextFromRoute._pageId === globalObject.previousPageContext._pageId;\n if (isUserLandPushStateNavigation && isSamePage) {\n // Skip's Vike's rendering; let the user handle the navigation\n return;\n }\n pageContextRouted = pageContextFromRoute;\n }\n assert(!('urlOriginal' in pageContextRouted));\n objectAssign(pageContext, pageContextRouted);\n try {\n objectAssign(pageContext, await loadUserFilesClientSide(pageContext._pageId, pageContext._pageFilesAll, pageContext._pageConfigs));\n }\n catch (err) {\n if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {\n return;\n }\n else {\n // A user file has a syntax error\n await onError(err);\n return;\n }\n }\n if (isRenderOutdated())\n return;\n // Set global hydrationCanBeAborted\n if (pageContext.exports.hydrationCanBeAborted) {\n setHydrationCanBeAborted();\n }\n else {\n assertWarning(!isReact(), 'You seem to be using React; we recommend setting hydrationCanBeAborted to true, see https://vike.dev/hydrationCanBeAborted', { onlyOnce: true });\n }\n // There wasn't any `await` but result may change because we just called setHydrationCanBeAborted()\n if (isRenderOutdated())\n return;\n // Get pageContext from hooks (fetched from server, and/or directly called on the client-side)\n if (isFirstRender) {\n assert(hasProp(pageContext, '_hasPageContextFromServer', 'true'));\n let pageContextAugmented;\n try {\n pageContextAugmented = await getPageContextFromHooks_isHydration(pageContext);\n }\n catch (err) {\n await onError(err);\n return;\n }\n if (isRenderOutdated())\n return;\n augmentType(pageContext, pageContextAugmented);\n // Render page view\n await renderPageView(pageContext);\n }\n else {\n let res;\n try {\n res = await getPageContextFromHooks_isNotHydration(pageContext, false);\n }\n catch (err) {\n await onError(err);\n return;\n }\n if (isRenderOutdated())\n return;\n if ('is404ServerSideRouted' in res)\n return;\n augmentType(pageContext, res.pageContextAugmented);\n // Render page view\n await renderPageView(pageContext);\n }\n }\n async function getPageContextBegin() {\n const pageContext = await createPageContext(urlOriginal);\n objectAssign(pageContext, {\n isBackwardNavigation,\n isClientSideNavigation\n });\n {\n const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);\n assert(!('urlOriginal' in pageContextFromAllRewrites));\n objectAssign(pageContext, pageContextFromAllRewrites);\n }\n return pageContext;\n }\n async function renderErrorPage(args) {\n const onError = (err) => {\n if (!isSameErrorMessage(err, args.err)) {\n /* When we can't render the error page, we prefer showing a blank page over letting the server-side try because otherwise:\n - We risk running into an infinite loop of reloads which would overload the server.\n - An infinite reloading page is a even worse UX than a blank page.\n redirectHard(urlOriginal)\n */\n console.error(err);\n }\n };\n if ('err' in args) {\n const { err } = args;\n assert(err);\n if (!isAbortError(err)) {\n // We don't swallow 404 errors:\n // - On the server-side, Vike swallows / doesn't show any 404 error log because it's expected that a user may go to some random non-existent URL. (We don't want to flood the app's error tracking with 404 logs.)\n // - On the client-side, if the user navigates to a 404 then it means that the UI has a broken link. (It isn't expected that users can go to some random URL using the client-side router, as it would require, for example, the user to manually change the URL of a link by manually manipulating the DOM which highly unlikely.)\n console.error(err);\n }\n else {\n // We swallow throw redirect()/render() called by client-side hooks onBeforeRender()/data()/guard()\n // We handle the abort error down below.\n }\n }\n const pageContext = await getPageContextBegin();\n if (isRenderOutdated())\n return;\n if (args.pageContextError) {\n objectAssign(pageContext, args.pageContextError);\n }\n if ('err' in args) {\n const { err } = args;\n assert(!('errorWhileRendering' in pageContext));\n pageContext.errorWhileRendering = err;\n if (isAbortError(err)) {\n const errAbort = err;\n logAbortErrorHandled(err, !import.meta.env.DEV, pageContext);\n const pageContextAbort = errAbort._pageContextAbort;\n // throw render('/some-url')\n if (pageContextAbort._urlRewrite) {\n await renderPageClientSide({\n ...renderArgs,\n scrollTarget: undefined,\n pageContextsFromRewrite: [...pageContextsFromRewrite, pageContextAbort]\n });\n return;\n }\n // throw redirect('/some-url')\n if (pageContextAbort._urlRedirect) {\n const urlRedirect = pageContextAbort._urlRedirect.url;\n if (!urlRedirect.startsWith('/')) {\n // External redirection\n redirectHard(urlRedirect);\n return;\n }\n else {\n await renderPageClientSide({\n ...renderArgs,\n scrollTarget: undefined,\n urlOriginal: urlRedirect,\n overwriteLastHistoryEntry: false,\n isBackwardNavigation: false,\n redirectCount: redirectCount + 1\n });\n }\n return;\n }\n // throw render(statusCode)\n assert(pageContextAbort.abortStatusCode);\n assert(!('urlOriginal' in pageContextAbort));\n objectAssign(pageContext, pageContextAbort);\n if (pageContextAbort.abortStatusCode === 404) {\n objectAssign(pageContext, { is404: true });\n }\n }\n else {\n objectAssign(pageContext, { is404: false });\n }\n }\n const errorPageId = getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs);\n if (!errorPageId)\n throw new Error('No error page defined.');\n objectAssign(pageContext, {\n _pageId: errorPageId\n });\n try {\n objectAssign(pageContext, await loadUserFilesClientSide(pageContext._pageId, pageContext._pageFilesAll, pageContext._pageConfigs));\n }\n catch (err) {\n if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {\n return;\n }\n else {\n // A user file has a syntax error\n onError(err);\n return;\n }\n }\n if (isRenderOutdated())\n return;\n let res;\n try {\n res = await getPageContextFromHooks_isNotHydration(pageContext, true);\n }\n catch (err) {\n // - When user hasn't defined a `_error.page.js` file\n // - Some Vike unpexected internal error\n onError(err);\n return;\n }\n if (isRenderOutdated())\n return;\n if ('is404ServerSideRouted' in res)\n return;\n augmentType(pageContext, res.pageContextAugmented);\n await renderPageView(pageContext, args);\n }\n async function renderPageView(pageContext, isErrorPage) {\n const onError = async (err) => {\n if (!isErrorPage) {\n await renderErrorPage({ err });\n }\n else {\n if (!isSameErrorMessage(err, isErrorPage.err)) {\n console.error(err);\n }\n }\n };\n // We use globalObject.onRenderClientPromise in order to ensure that there is never two concurrent onRenderClient() calls\n if (globalObject.onRenderClientPromise) {\n // Make sure that the previous render has finished\n await globalObject.onRenderClientPromise;\n assert(globalObject.onRenderClientPromise === undefined);\n if (isRenderOutdated())\n return;\n }\n changeUrl(urlOriginal, overwriteLastHistoryEntry);\n globalObject.previousPageContext = pageContext;\n assert(globalObject.onRenderClientPromise === undefined);\n globalObject.onRenderClientPromise = (async () => {\n let onRenderClientError;\n try {\n await executeOnRenderClientHook(pageContext, true);\n }\n catch (err) {\n onRenderClientError = err;\n }\n globalObject.onRenderClientPromise = undefined;\n globalObject.isFirstRenderDone = true;\n return onRenderClientError;\n })();\n const onRenderClientError = await globalObject.onRenderClientPromise;\n assert(globalObject.onRenderClientPromise === undefined);\n if (onRenderClientError) {\n await onError(onRenderClientError);\n if (!isErrorPage)\n return;\n }\n /* We don't abort in order to ensure that onHydrationEnd() is called: we abort only after onHydrationEnd() is called.\n if (isRenderOutdated(true)) return\n */\n addLinkPrefetchHandlers(pageContext);\n // onHydrationEnd()\n if (isFirstRender && !onRenderClientError) {\n assertHook(pageContext, 'onHydrationEnd');\n const hook = getHook(pageContext, 'onHydrationEnd');\n if (hook) {\n const { hookFn } = hook;\n try {\n await executeHook(() => hookFn(pageContext), hook, pageContext);\n }\n catch (err) {\n await onError(err);\n if (!isErrorPage)\n return;\n }\n if (isRenderOutdated(true))\n return;\n }\n }\n // We purposely abort *after* onHydrationEnd() is called (see comment above).\n if (isRenderOutdated(true))\n return;\n // onPageTransitionEnd()\n if (globalObject.isTransitioning) {\n globalObject.isTransitioning = undefined;\n const { previousPageContext } = globalObject;\n assert(previousPageContext);\n assertHook(previousPageContext, 'onPageTransitionEnd');\n const hook = getHook(previousPageContext, 'onPageTransitionEnd');\n if (hook) {\n const { hookFn } = hook;\n try {\n await executeHook(() => hookFn(pageContext), hook, pageContext);\n }\n catch (err) {\n await onError(err);\n if (!isErrorPage)\n return;\n }\n if (isRenderOutdated(true))\n return;\n }\n }\n // Page scrolling\n setScrollPosition(scrollTarget);\n browserNativeScrollRestoration_disable();\n setInitialRenderIsDone();\n }\n}\nfunction changeUrl(url, overwriteLastHistoryEntry) {\n if (getCurrentUrl() === url)\n return;\n browserNativeScrollRestoration_disable();\n pushHistory(url, overwriteLastHistoryEntry);\n updateState();\n}\nfunction handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {\n if (!isErrorFetchingStaticAssets(err)) {\n return false;\n }\n if (isFirstRender) {\n disableClientRouting(err, false);\n // This may happen if the frontend was newly deployed during hydration.\n // Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)\n throw err;\n }\n else {\n disableClientRouting(err, true);\n }\n redirectHard(pageContext.urlOriginal);\n return true;\n}\nfunction disableClientRouting(err, log) {\n assert(isErrorFetchingStaticAssets(err));\n globalObject.clientRoutingIsDisabled = true;\n if (log) {\n // We don't use console.error() to avoid flooding error trackers such as Sentry\n console.log(err);\n }\n // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.\n const isProd = import.meta.env.PROD;\n assertInfo(false, [\n 'Failed to fetch static asset.',\n isProd ? 'This usually happens when a new frontend is deployed.' : null,\n 'Falling back to Server Routing.',\n '(The next page navigation will use Server Routing instead of Client Routing.)'\n ]\n .filter(Boolean)\n .join(' '), { onlyOnce: true });\n}\nfunction getIsRenderOutdated() {\n const renderNumber = ++globalObject.renderCounter;\n assert(renderNumber >= 1);\n let hydrationCanBeAborted = false;\n const setHydrationCanBeAborted = () => {\n hydrationCanBeAborted = true;\n };\n /** Whether the rendering should be aborted because a new rendering has started. We should call this after each `await`. */\n const isRenderOutdated = (isRenderCleanup) => {\n // Never abort first render if `hydrationCanBeAborted` isn't `true`\n {\n const isFirstRender = renderNumber === 1;\n if (isFirstRender && !hydrationCanBeAborted && !isRenderCleanup) {\n return false;\n }\n }\n // If there is a newer rendering, we should abort all previous renderings\n return renderNumber !== globalObject.renderCounter;\n };\n return {\n isRenderOutdated,\n setHydrationCanBeAborted,\n isFirstRender: renderNumber === 1\n };\n}\nfunction getRenderCount() {\n return globalObject.renderCounter;\n}\n","// Code adapted from https://github.com/HenrikJoreteg/internal-nav-helper/blob/5199ec5448d0b0db7ec63cf76d88fa6cad878b7d/src/index.js#L11-L29\nexport { onLinkClick };\nimport { assert } from './utils.js';\nimport { skipLink } from './skipLink.js';\nimport { renderPageClientSide } from './renderPageClientSide.js';\nfunction onLinkClick() {\n document.addEventListener('click', handler);\n}\nasync function handler(ev) {\n if (!isNormalLeftClick(ev))\n return;\n const linkTag = findLinkTag(ev.target);\n if (!linkTag)\n return;\n const url = linkTag.getAttribute('href');\n if (skipLink(linkTag))\n return;\n assert(url);\n ev.preventDefault();\n let scrollTarget;\n {\n const v = linkTag.getAttribute('keep-scroll-position');\n if (v !== null)\n scrollTarget = { preserveScroll: v === 'false' ? false : true };\n }\n await renderPageClientSide({\n scrollTarget,\n urlOriginal: url,\n isBackwardNavigation: false\n });\n}\nfunction isNormalLeftClick(ev) {\n return ev.button === 0 && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey;\n}\nfunction findLinkTag(target) {\n while (target.tagName !== 'A') {\n const { parentNode } = target;\n if (!parentNode) {\n return null;\n }\n target = parentNode;\n }\n return target;\n}\n","export { installClientRouter };\nimport { assert } from './utils.js';\nimport { initHistoryState, monkeyPatchHistoryPushState } from './history.js';\nimport { getRenderCount, renderPageClientSide } from './renderPageClientSide.js';\nimport { onBrowserHistoryNavigation } from './onBrowserHistoryNavigation.js';\nimport { onLinkClick } from './onLinkClick.js';\nimport { setupNativeScrollRestoration } from './scrollRestoration.js';\nimport { autoSaveScrollPosition } from './setScrollPosition.js';\nasync function installClientRouter() {\n // Init navigation history and scroll restoration\n initHistoryAndScroll();\n // Render initial page\n const renderPromise = render();\n // Intercept <a> clicks\n onLinkClick();\n // Preserve stack track\n await renderPromise;\n}\nfunction render() {\n assert(getRenderCount() === 0);\n const renderPromise = renderPageClientSide({\n scrollTarget: { preserveScroll: true },\n isBackwardNavigation: null,\n isClientSideNavigation: false\n });\n assert(getRenderCount() === 1);\n return renderPromise;\n}\nfunction initHistoryAndScroll() {\n setupNativeScrollRestoration();\n initHistoryState();\n autoSaveScrollPosition();\n monkeyPatchHistoryPushState();\n // Handle back-/forward navigation\n onBrowserHistoryNavigation();\n}\n","import { assertClientRouting } from '../../utils/assertRoutingType.js';\nassertClientRouting();\nimport './pageFiles';\nimport { installClientRouter } from './installClientRouter.js';\nimport { assertSingleInstance_onClientEntryClientRouting } from './utils.js';\nimport { removeFoucBuster } from '../shared/removeFoucBuster.js';\n// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.\nconst isProd = import.meta.env.PROD;\nassertSingleInstance_onClientEntryClientRouting(isProd);\nif (import.meta.env.DEV)\n removeFoucBuster();\ninstallClientRouter();\n"],"file":"assets/entries/entry-client-routing.BSaUS4Zk.js"}
|