rari 0.14.7 → 0.14.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.mts +4 -42
- package/dist/client.mjs +1 -2
- package/dist/index.d.mts +1 -1
- package/dist/props-extractor-C8FRV5vW.mjs +1 -0
- package/dist/runtime/ErrorBoundaryWrapper.mjs +1 -1
- package/dist/runtime/entry-client.mjs +2 -7
- package/dist/runtime/rsc-client-runtime.mjs +2 -2
- package/dist/server-config-D_oeQzpc.d.mts +102 -0
- package/dist/{types-BWLVeCkK.d.mts → types-K8DF80Bq.d.mts} +11 -1
- package/dist/vite.d.mts +49 -3
- package/dist/vite.mjs +30 -108
- package/package.json +13 -9
- package/dist/runtime-client-DHeO6y_7.mjs +0 -6
- package/dist/server-config-CwWYmtA0.d.mts +0 -237
package/dist/client.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as ErrorProps, c as LayoutEntry, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-
|
|
1
|
+
import { a as ServerSidePropsResult, c as clearPropsCacheForComponent, d as extractServerPropsWithCache, f as extractStaticParams, i as MetadataResult, l as extractMetadata, o as StaticParamsResult, p as hasServerSideDataFetching, r as ServerConfig, s as clearPropsCache, t as ServerCSPConfig, u as extractServerProps } from "./server-config-D_oeQzpc.mjs";
|
|
2
|
+
import { a as ErrorProps, c as LayoutEntry, f as NotFoundEntry, g as TemplateEntry, h as RouteSegmentType, i as ErrorEntry, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-K8DF80Bq.mjs";
|
|
3
3
|
import * as React from "react";
|
|
4
|
-
import { Component, ErrorInfo, ReactNode } from "react";
|
|
5
4
|
|
|
6
5
|
//#region src/router/ClientRouter.d.ts
|
|
7
6
|
interface ClientRouterProps {
|
|
@@ -13,26 +12,7 @@ declare function ClientRouter({
|
|
|
13
12
|
children,
|
|
14
13
|
initialRoute,
|
|
15
14
|
staleWindowMs
|
|
16
|
-
}: ClientRouterProps): React.
|
|
17
|
-
//#endregion
|
|
18
|
-
//#region src/router/LayoutErrorBoundary.d.ts
|
|
19
|
-
interface LayoutErrorBoundaryProps {
|
|
20
|
-
children: ReactNode;
|
|
21
|
-
layoutPath: string;
|
|
22
|
-
fallback?: (error: Error, reset: () => void) => ReactNode;
|
|
23
|
-
onError?: (error: Error, errorInfo: ErrorInfo) => void;
|
|
24
|
-
}
|
|
25
|
-
interface LayoutErrorBoundaryState {
|
|
26
|
-
hasError: boolean;
|
|
27
|
-
error: Error | null;
|
|
28
|
-
}
|
|
29
|
-
declare class LayoutErrorBoundary extends Component<LayoutErrorBoundaryProps, LayoutErrorBoundaryState> {
|
|
30
|
-
constructor(props: LayoutErrorBoundaryProps);
|
|
31
|
-
static getDerivedStateFromError(error: Error): LayoutErrorBoundaryState;
|
|
32
|
-
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
33
|
-
reset: () => void;
|
|
34
|
-
render(): ReactNode;
|
|
35
|
-
}
|
|
15
|
+
}: ClientRouterProps): React.ReactNode;
|
|
36
16
|
//#endregion
|
|
37
17
|
//#region src/router/navigation-error-handler.d.ts
|
|
38
18
|
type NavigationErrorType = 'fetch-error' | 'timeout' | 'abort' | 'parse-error' | 'network-error' | 'not-found' | 'server-error';
|
|
@@ -63,24 +43,6 @@ declare class NavigationErrorHandler {
|
|
|
63
43
|
clearRetries(): void;
|
|
64
44
|
}
|
|
65
45
|
//#endregion
|
|
66
|
-
//#region src/router/NavigationErrorOverlay.d.ts
|
|
67
|
-
interface NavigationErrorOverlayProps {
|
|
68
|
-
error: NavigationError;
|
|
69
|
-
onRetry?: () => void;
|
|
70
|
-
onReload?: () => void;
|
|
71
|
-
onDismiss?: () => void;
|
|
72
|
-
retryCount?: number;
|
|
73
|
-
maxRetries?: number;
|
|
74
|
-
}
|
|
75
|
-
declare function NavigationErrorOverlay({
|
|
76
|
-
error,
|
|
77
|
-
onRetry,
|
|
78
|
-
onReload,
|
|
79
|
-
onDismiss,
|
|
80
|
-
retryCount,
|
|
81
|
-
maxRetries
|
|
82
|
-
}: NavigationErrorOverlayProps): import("react").JSX.Element;
|
|
83
|
-
//#endregion
|
|
84
46
|
//#region src/router/route-info-types.d.ts
|
|
85
47
|
interface RouteInfoRequest {
|
|
86
48
|
path: string;
|
|
@@ -139,4 +101,4 @@ declare class StatePreserver {
|
|
|
139
101
|
private restoreFocus;
|
|
140
102
|
}
|
|
141
103
|
//#endregion
|
|
142
|
-
export { type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, ClientRouter, type ClientRouterProps,
|
|
104
|
+
export { type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, ClientRouter, type ClientRouterProps, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, type LayoutEntry, type LoadingEntry, type MetadataResult, type NavigationError, NavigationErrorHandler, type NavigationErrorHandlerOptions, type NavigationErrorType, type NotFoundEntry, type PreservedState, type RouteInfoError, type RouteInfoRequest, type RouteInfoResponse, type RouteSegment, type RouteSegmentType, type ScrollPosition, type ServerCSPConfig, type ServerConfig, type ServerSidePropsResult, StatePreserver, type StatePreserverConfig, type StaticParamsResult, type TemplateEntry, clearPropsCache, clearPropsCacheForComponent, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, hasServerSideDataFetching };
|
package/dist/client.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{i as e,t}from"./navigate-DuyUa6qD.mjs";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _}from"./runtime-client-DHeO6y_7.mjs";import{Component as v,useEffect as y,useLayoutEffect as b,useRef as x,useState as S}from"react";import{Fragment as C,jsx as w,jsxs as T}from"react/jsx-runtime";function E(e,t,n={}){let r=null,i=0,a=0,o=null,s=null,{leading:c=!1,trailing:l=!0,maxWait:u}=n;function d(t){let n=o,r=s;return o=null,s=null,a=t,e.apply(r,n)}function f(e){let n=e-i,r=e-a;return i===0||n>=t||n<0||u!==void 0&&r>=u}function p(){let e=Date.now();if(f(e))return h(e);let n=e-i,o=e-a,s=t-n,c=u===void 0?1/0:u-o;r=setTimeout(p,Math.min(s,c))}function m(e){return a=e,r=setTimeout(p,t),c?d(e):void 0}function h(e){if(r=null,l&&o)return d(e);o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){return r===null?void 0:h(Date.now())}function v(){return r!==null}function y(...e){let n=Date.now(),a=f(n);if(o=e,s=this,i=n,a){if(r===null)return m(i);if(u!==void 0)return r=setTimeout(p,t),d(i)}r===null&&(r=setTimeout(p,t))}return y.cancel=g,y.flush=_,y.pending=v,y}const D=/fetch|networkerror|load failed/i;function O(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function k(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function A(e,t,n){if(t===404)return{type:`not-found`,message:`Page not found`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!1};if(t>=500)return{type:`server-error`,message:`Server error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!0};let r=t===408||t===429;return{type:`fetch-error`,message:`HTTP error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:r}}function j(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function M(e,t){return{type:`parse-error`,message:`Failed to parse server response`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function N(e,t){return{type:`fetch-error`,message:e instanceof Error?e.message:`Unknown error occurred`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function P(e,t){if(e instanceof Error&&e.name===`AbortError`)return O(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return k(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?A(e,n,t):N(e,t)}return e instanceof TypeError&&D.test(e.message)?j(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?M(e,t):N(e,t)}var F=class{options;retryCount;constructor(e={}){this.options={timeout:e.timeout??1e4,maxRetries:e.maxRetries??3,onError:e.onError??(()=>{}),onRetry:e.onRetry??(()=>{})},this.retryCount=new Map}handleError(e,t){let n=P(e,t);return this.options.onError(n),console.error(`[rari] Navigation:`,n.type,n.message,{url:n.url,statusCode:n.statusCode,retryable:n.retryable}),n}canRetry(e,t){return e.retryable?(this.retryCount.get(t)??0)<this.options.maxRetries:!1}incrementRetry(e){let t=(this.retryCount.get(e)??0)+1;return this.retryCount.set(e,t),this.options.onRetry(t,{type:`fetch-error`,message:`Retry attempt ${t}`,url:e,timestamp:Date.now(),retryable:!0}),t}resetRetry(e){this.retryCount.delete(e)}getRetryCount(e){return this.retryCount.get(e)??0}clearRetries(){this.retryCount.clear()}};function I(e){if(!e||e===`/`)return`/`;let t=e;for(;t.endsWith(`/`)&&t.length>1;)t=t.slice(0,-1);return t.startsWith(`/`)||(t=`/${t}`),t}function L(e,t){try{return new URL(e,t||window.location.origin).origin!==(t||window.location.origin)}catch{return!1}}function R(e){try{let t=new URL(e,window.location.origin);return t.pathname+t.hash}catch{return e}}function z({error:e,onRetry:t,onReload:n,onDismiss:r,retryCount:i=0,maxRetries:a=3}){let o=e.retryable&&i<a;return w(`div`,{style:{position:`fixed`,top:0,left:0,right:0,bottom:0,background:`rgba(0, 0, 0, 0.5)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:1e4,padding:`20px`},onClick:e=>{e.target===e.currentTarget&&r&&r()},children:T(`div`,{style:{background:`white`,borderRadius:`8px`,padding:`24px`,maxWidth:`500px`,width:`100%`,boxShadow:`0 4px 12px rgba(0, 0, 0, 0.15)`},onClick:e=>e.stopPropagation(),children:[T(`div`,{style:{display:`flex`,alignItems:`center`,gap:`12px`,marginBottom:`16px`},children:[w(`span`,{style:{fontSize:`32px`},children:(()=>{switch(e.type){case`timeout`:return`⏱️`;case`network-error`:return`📡`;case`not-found`:return`🔍`;case`server-error`:return`⚠️`;case`parse-error`:return`📄`;case`abort`:return`🚫`;default:return`❌`}})()}),w(`h2`,{style:{margin:0,fontSize:`20px`,fontWeight:`600`,color:`#1f2937`},children:`Navigation Error`})]}),w(`p`,{style:{margin:`0 0 16px 0`,fontSize:`15px`,lineHeight:`1.5`,color:`#4b5563`},children:(()=>{switch(e.type){case`timeout`:return`The page took too long to load. Please try again.`;case`network-error`:return`Unable to connect to the server. Please check your internet connection.`;case`not-found`:return`The page you're looking for doesn't exist.`;case`server-error`:return`The server encountered an error. Please try again in a moment.`;case`parse-error`:return`Unable to load the page content. Please try reloading.`;case`abort`:return`Navigation was cancelled.`;default:return e.message||`An unexpected error occurred.`}})()}),e.url&&T(`details`,{style:{marginBottom:`16px`,fontSize:`13px`,color:`#6b7280`},children:[w(`summary`,{style:{cursor:`pointer`,userSelect:`none`,marginBottom:`8px`},children:`Technical details`}),T(`div`,{style:{padding:`12px`,background:`#f9fafb`,borderRadius:`4px`,fontFamily:`monospace`,fontSize:`12px`,wordBreak:`break-all`},children:[T(`div`,{style:{marginBottom:`4px`},children:[w(`strong`,{children:`URL:`}),` `,e.url]}),e.statusCode&&T(`div`,{style:{marginBottom:`4px`},children:[w(`strong`,{children:`Status:`}),` `,e.statusCode]}),T(`div`,{style:{marginBottom:`4px`},children:[w(`strong`,{children:`Type:`}),` `,e.type]}),e.originalError&&T(`div`,{children:[w(`strong`,{children:`Error:`}),` `,e.originalError.message]})]})]}),o&&i>0&&T(`div`,{style:{marginBottom:`16px`,padding:`8px 12px`,background:`#fef3c7`,border:`1px solid #fbbf24`,borderRadius:`4px`,fontSize:`13px`,color:`#92400e`},children:[`Retry attempt`,` `,i,` `,`of`,` `,a]}),T(`div`,{style:{display:`flex`,gap:`8px`,flexWrap:`wrap`},children:[o&&t&&w(`button`,{onClick:t,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#3b82f6`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#2563eb`},onMouseLeave:e=>{e.currentTarget.style.background=`#3b82f6`},children:`Try Again`}),n&&w(`button`,{onClick:n,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#6b7280`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#4b5563`},onMouseLeave:e=>{e.currentTarget.style.background=`#6b7280`},children:`Reload Page`}),r&&w(`button`,{onClick:r,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`transparent`,color:`#6b7280`,border:`1px solid #d1d5db`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`all 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#f9fafb`,e.currentTarget.style.borderColor=`#9ca3af`},onMouseLeave:e=>{e.currentTarget.style.background=`transparent`,e.currentTarget.style.borderColor=`#d1d5db`},children:`Dismiss`})]}),w(`p`,{style:{marginTop:`16px`,marginBottom:0,fontSize:`12px`,color:`#9ca3af`,textAlign:`center`},children:`Your current page is still available below this message`})]})})}const B=new class{cache=new Map;pendingRequests=new Map;async get(e){let t=this.cache.get(e);if(t)return t;let n=this.pendingRequests.get(e);if(n)return n;let r=this.fetchRouteInfo(e);this.pendingRequests.set(e,r);try{let t=await r;return this.cache.set(e,t),t}finally{this.pendingRequests.delete(e)}}async fetchRouteInfo(e){let t=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e=null;try{e=await t.json()}catch{}throw e?.error?Error(e.error):Error(`Failed to fetch route info: ${t.status} ${t.statusText}`)}let n=t.clone();try{return await t.json()}catch(t){try{let e=await n.text();return JSON.parse(e)}catch(n){throw console.error(`[RouteInfo] Failed to parse response:`,{error:t,parseError:n,path:e}),Error(`Failed to parse route info response`)}}}clear(){this.cache.clear(),this.pendingRequests.clear()}invalidate(e){this.cache.delete(e)}};if(typeof window<`u`){let e=window[`~rari`]||{};window[`~rari`]||(window[`~rari`]=e),e.routeInfoCache=B}var V=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize||50,this.scrollableSelector=e.scrollableSelector||`[data-scrollable], .scrollable, [style*="overflow"]`}captureState(e){let t={scrollPositions:this.captureScrollPositions(),formData:this.captureFormData(),focusedElement:this.captureFocusedElement()};return this.storeState(e,t),t}captureScrollPositions(){let e=new Map;try{e.set(`window`,{x:window.scrollX,y:window.scrollY,element:`window`}),document.querySelectorAll(this.scrollableSelector).forEach((t,n)=>{if(t instanceof HTMLElement){let r=t.id||`scrollable-${n}`;(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&e.set(r,{x:t.scrollLeft,y:t.scrollTop,element:r})}})}catch{}return e}captureFormData(){let e=new Map;try{document.querySelectorAll(`form`).forEach((t,n)=>{let r=t.id||t.name||`form-${n}`,i=new FormData(t);i.entries().next().done||e.set(r,i)})}catch{}return e}captureFocusedElement(){try{let e=document.activeElement;if(e&&e!==document.body){if(e.id)return`#${e.id}`;if((e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.name)return`[name="${e.name}"]`}}catch{}return null}storeState(e,t){let n=this.routeAccessOrder.indexOf(e);for(n!==-1&&this.routeAccessOrder.splice(n,1),this.routeAccessOrder.push(e),this.stateHistory.set(e,t);this.routeAccessOrder.length>this.maxHistorySize;){let e=this.routeAccessOrder.shift();e&&this.stateHistory.delete(e)}}getHistorySize(){return this.stateHistory.size}hasState(e){return this.stateHistory.has(e)}getState(e){return this.stateHistory.get(e)}clearAll(){this.stateHistory.clear(),this.routeAccessOrder=[]}clearState(e){this.stateHistory.delete(e);let t=this.routeAccessOrder.indexOf(e);t!==-1&&this.routeAccessOrder.splice(t,1)}restoreState(e){let t=this.stateHistory.get(e);if(!t)return!1;let n=!0;return this.restoreScrollPositions(t.scrollPositions)||(n=!1),this.restoreFormData(t.formData)||(n=!1),t.focusedElement&&this.restoreFocus(t.focusedElement),n}restoreScrollPositions(e){let t=!0;try{e.forEach((e,n)=>{try{if(n===`window`)window.scrollTo(e.x,e.y);else{let r=document.getElementById(n)||document.querySelector(`[data-scrollable-id="${n}"]`);r instanceof HTMLElement?(r.scrollLeft=e.x,r.scrollTop=e.y):t=!1}}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore scroll positions:`,e),t=!1}return t}restoreFormData(e){let t=!0;try{e.forEach((e,n)=>{try{let r=document.getElementById(n)||document.querySelector(`form[name="${n}"]`)||document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];r instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=r.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:t.value=e)}):(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&(t instanceof HTMLInputElement&&(t.type===`checkbox`||t.type===`radio`)?t.checked=t.value===e:t.value=e)}catch{t=!1}}):t=!1}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore form data:`,e),t=!1}return t}restoreFocus(e){try{let t=document.querySelector(e);t instanceof HTMLElement&&requestAnimationFrame(()=>{try{t.focus()}catch{}})}catch{}}};function H(e,t){let n=document.querySelector(e);if(n)t.content&&n.setAttribute(`content`,t.content);else{n=document.createElement(`meta`);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);document.head.appendChild(n)}}function U(e){let t=document.querySelector(e);t&&t.remove()}function W(e){e.title&&(document.title=e.title),e.description?H(`meta[name="description"]`,{name:`description`,content:e.description}):U(`meta[name="description"]`),e.keywords&&e.keywords.length>0?H(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):U(`meta[name="keywords"]`),e.viewport&&H(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function G(e){let t=document.querySelector(`link[rel="canonical"]`);if(e===void 0){t&&t.remove();return}if(t)t.setAttribute(`href`,e);else{let t=document.createElement(`link`);t.setAttribute(`rel`,`canonical`),t.setAttribute(`href`,e),document.head.appendChild(t)}}function K(e){if(e===void 0){U(`meta[name="robots"]`);return}let t=[];e.index!==void 0&&t.push(e.index?`index`:`noindex`),e.follow!==void 0&&t.push(e.follow?`follow`:`nofollow`),e.nocache&&t.push(`nocache`),t.length>0?H(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):U(`meta[name="robots"]`)}function q(e){if(e===void 0){U(`meta[property="og:title"]`),U(`meta[property="og:description"]`),U(`meta[property="og:url"]`),U(`meta[property="og:site_name"]`),U(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());return}if(e.title?H(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):U(`meta[property="og:title"]`),e.description?H(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):U(`meta[property="og:description"]`),e.url?H(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):U(`meta[property="og:url"]`),e.siteName?H(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):U(`meta[property="og:site_name"]`),e.type?H(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):U(`meta[property="og:type"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`property`,`og:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove())}function J(e){if(e===void 0){U(`meta[name="twitter:card"]`),U(`meta[name="twitter:site"]`),U(`meta[name="twitter:creator"]`),U(`meta[name="twitter:title"]`),U(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());return}if(e.card?H(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):U(`meta[name="twitter:card"]`),e.site?H(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):U(`meta[name="twitter:site"]`),e.creator?H(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):U(`meta[name="twitter:creator"]`),e.title?H(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):U(`meta[name="twitter:title"]`),e.description?H(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):U(`meta[name="twitter:description"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`name`,`twitter:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove())}function Y(e){W(e),G(e.canonical),K(e.robots),q(e.openGraph),J(e.twitter)}function X({children:n,initialRoute:r,staleWindowMs:i=3e4}){let[a,o]=S(()=>({currentRoute:I(r),navigationId:0,error:null})),s=x(null),c=x(!0),l=x(I(r)),u=x(0),d=x(new F({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),f=x(new Map),p=x([]),m=x(new V({maxHistorySize:50})),h=x(null),g=x(i),_=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,v=()=>{s.current&&=(s.current.abort(),null)},D=()=>{for(let[,e]of f.current.entries())e.abortController.abort();f.current.clear()},O=(e,t)=>{f.current.delete(e),c.current&&a.navigationId===t&&o(e=>({...e}))},k=x(null),A=(e,t)=>{if(!t)return;let n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,`${e}#${t}`))},j=e=>{try{let t=e.headers.get(`x-rari-metadata`);t&&Y(JSON.parse(decodeURIComponent(t)))}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},M=(e,t,n,r,i,a)=>{u.current===r&&window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,abortSignal:a.signal,rscResponsePromise:e}}))},N=(e,t,n)=>{n.historyKey?requestAnimationFrame(()=>{m.current.restoreState(e)}):t&&requestAnimationFrame(()=>{let e=(n=0)=>{let r=document.getElementById(t);r?r.scrollIntoView({behavior:`smooth`,block:`start`}):n<10&&setTimeout(e,50,n+1)};e()})},P=(e,t,n,r)=>{c.current&&(l.current=e,o(t=>({...t,currentRoute:e,navigationId:r,error:null})),d.current.resetRetry(e),N(e,t,n))},H=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){O(t,n);return}let i=d.current.handleError(e,t);c.current&&(o(e=>({...e,error:i})),window.history.replaceState(window.history.state,``,r)),f.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),k.current?.()},U=async(e,t={})=>{if(!e||typeof e!=`string`)return;let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=I(n);if(i===l.current&&!t.replace){A(i,r);return}let a=f.current.get(i);if(a)return a.promise;D(),v();let o=new AbortController;s.current=o,u.current+=1;let c=u.current;window.dispatchEvent(new CustomEvent(`rari:navigation-start`,{detail:{navigationId:c,targetPath:i}}));let d=(async()=>{let e=l.current;try{t.historyKey||m.current.captureState(e);let n=t.historyKey||_(),a=window.location.origin+i,s=r?`${i}#${r}`:i,l={route:i,navigationId:c,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(l,``,s):window.history.pushState(l,``,s);let u=await fetch(a,{headers:{Accept:`text/x-component`},signal:o.signal}).then(e=>{if(!e.ok&&e.status!==404)throw Error(`Failed to fetch: ${e.status}`);return e});if(o.signal.aborted){O(i,c);return}let d=new URL(u.url).pathname;if(o.signal.aborted){O(i,c);return}if(d!==i){let e=r?`${d}#${r}`:d;window.history.replaceState({...l,route:d},``,e)}if(M(Promise.resolve(u),e,d,c,t,o),j(u),o.signal.aborted){O(i,c);return}P(d,r,t,c),f.current.delete(i),k.current?.()}catch(t){H(t,i,c,e)}})();return f.current.set(i,{targetPath:i,navigationId:c,promise:d,abortController:o}),d},W=async()=>{if(p.current.length===0)return;let e=p.current.at(-1);e&&(p.current=[],await U(e.path,e.options))},G=x(U);b(()=>(k.current=W,G.current=U,()=>{k.current=null,G.current=null}));let K=x(null);K.current||=E((e,t)=>{G.current?.(e,t)},50,{leading:!0,trailing:!0,maxWait:200});let q=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target;for(;t&&t.tagName!==`A`;)t=t.parentElement;if(!t||t.tagName!==`A`)return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(!r||L(r))return;if(r.startsWith(`#`)){e.preventDefault();let t=r.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,r));return}e.preventDefault();let i=R(r);K.current&&K.current(i,{replace:!1})},J=e=>{let t=window.location.pathname,n=e.state;G.current&&G.current(t,{replace:!0,scroll:!1,historyKey:n?.key})},X=()=>{if(a.error&&a.error.url){let e=a.error.url;d.current.incrementRetry(e),U(e,{replace:!1})}},Z=()=>{window.location.reload()},ee=()=>{o(e=>({...e,error:null}))};y(()=>{let e=window.history.state;if(!e||!e.key){let e={route:I(r),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:_()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[r]);let Q=e=>{if(e.persisted){let e=window.location.pathname;m.current.captureState(e)}},$=e=>{if(e.persisted){let e=window.location.pathname,t=window.history.state;requestAnimationFrame(()=>{m.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return y(()=>(document.addEventListener(`click`,q),window.addEventListener(`popstate`,J),window.addEventListener(`pagehide`,Q),window.addEventListener(`pageshow`,$),()=>{document.removeEventListener(`click`,q),window.removeEventListener(`popstate`,J),window.removeEventListener(`pagehide`,Q),window.removeEventListener(`pageshow`,$)}),[]),y(()=>{g.current=i;let e=()=>{document.hidden?h.current=Date.now():h.current!==null&&Date.now()-h.current>g.current&&B.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[i]),y(()=>(c.current=!0,e((e,t)=>G.current?.(e,t)??Promise.resolve()),()=>{c.current=!1,t(),v(),D(),K.current?.cancel&&K.current.cancel()}),[]),T(C,{children:[n,a.error&&w(z,{error:a.error,onRetry:X,onReload:Z,onDismiss:ee,retryCount:d.current.getRetryCount(a.error.url||``),maxRetries:3})]})}var Z=class extends v{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[rari] Layout: Error in layout "${this.props.layoutPath}":`,e,t),this.props.onError&&this.props.onError(e,t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:layout-error`,{detail:{layoutPath:this.props.layoutPath,error:e,errorInfo:t,timestamp:Date.now()}}))}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):T(`div`,{style:{padding:`16px`,margin:`16px 0`,background:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`},children:[w(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`},children:`Layout Error`}),T(`p`,{style:{margin:`0 0 8px 0`,fontSize:`14px`},children:[`An error occurred in layout:`,` `,w(`code`,{children:this.props.layoutPath})]}),T(`details`,{style:{fontSize:`12px`,marginBottom:`8px`},children:[w(`summary`,{style:{cursor:`pointer`},children:`Error details`}),T(`pre`,{style:{marginTop:`8px`,padding:`8px`,background:`#fff`,border:`1px solid #ddd`,borderRadius:`2px`,overflow:`auto`},children:[this.state.error.message,`
|
|
2
|
-
`,this.state.error.stack]})]}),w(`button`,{onClick:this.reset,type:`button`,style:{padding:`6px 12px`,background:`#c00`,color:`white`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Try Again`})]}):this.props.children}};export{X as ClientRouter,_ as DefaultError,f as DefaultLoading,h as ErrorBoundary,l as HttpRuntimeClient,Z as LayoutErrorBoundary,r as LoadingSpinner,F as NavigationErrorHandler,z as NavigationErrorOverlay,p as NotFound,V as StatePreserver,a as clearPropsCache,o as clearPropsCacheForComponent,g as createErrorBoundary,i as createHttpRuntimeClient,u as createLoadingBoundary,m as extractMetadata,d as extractServerProps,c as extractServerPropsWithCache,s as extractStaticParams,n as hasServerSideDataFetching};
|
|
1
|
+
import{i as e,t}from"./navigate-DuyUa6qD.mjs";import{a as n,i as r,n as i,o as a,r as o,s,t as c}from"./props-extractor-C8FRV5vW.mjs";import{useEffect as l,useLayoutEffect as u,useRef as d,useState as f}from"react";function p(e,t,n={}){let r=null,i=0,a=0,o=null,s=null,{leading:c=!1,trailing:l=!0,maxWait:u}=n;function d(t){let n=o,r=s;return o=null,s=null,a=t,e.apply(r,n)}function f(e){let n=e-i,r=e-a;return i===0||n>=t||n<0||u!==void 0&&r>=u}function p(){let e=Date.now();if(f(e))return h(e);let n=e-i,o=e-a,s=t-n,c=u===void 0?1/0:u-o;r=setTimeout(p,Math.min(s,c))}function m(e){return a=e,r=setTimeout(p,t),c?d(e):void 0}function h(e){if(r=null,l&&o)return d(e);o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){return r===null?void 0:h(Date.now())}function v(){return r!==null}function y(...e){let n=Date.now(),a=f(n);if(o=e,s=this,i=n,a){if(r===null)return m(i);if(u!==void 0)return r=setTimeout(p,t),d(i)}r===null&&(r=setTimeout(p,t))}return y.cancel=g,y.flush=_,y.pending=v,y}const m=/fetch|networkerror|load failed/i;function h(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function g(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function _(e,t,n){if(t===404)return{type:`not-found`,message:`Page not found`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!1};if(t>=500)return{type:`server-error`,message:`Server error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!0};let r=t===408||t===429;return{type:`fetch-error`,message:`HTTP error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:r}}function v(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function y(e,t){return{type:`parse-error`,message:`Failed to parse server response`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function b(e,t){return{type:`fetch-error`,message:e instanceof Error?e.message:`Unknown error occurred`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function x(e,t){if(e instanceof Error&&e.name===`AbortError`)return h(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return g(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?_(e,n,t):b(e,t)}return e instanceof TypeError&&m.test(e.message)?v(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?y(e,t):b(e,t)}var S=class{options;retryCount;constructor(e={}){this.options={timeout:e.timeout??1e4,maxRetries:e.maxRetries??3,onError:e.onError??(()=>{}),onRetry:e.onRetry??(()=>{})},this.retryCount=new Map}handleError(e,t){let n=x(e,t);return this.options.onError(n),console.error(`[rari] Navigation:`,n.type,n.message,{url:n.url,statusCode:n.statusCode,retryable:n.retryable}),n}canRetry(e,t){return e.retryable?(this.retryCount.get(t)??0)<this.options.maxRetries:!1}incrementRetry(e){let t=(this.retryCount.get(e)??0)+1;return this.retryCount.set(e,t),this.options.onRetry(t,{type:`fetch-error`,message:`Retry attempt ${t}`,url:e,timestamp:Date.now(),retryable:!0}),t}resetRetry(e){this.retryCount.delete(e)}getRetryCount(e){return this.retryCount.get(e)??0}clearRetries(){this.retryCount.clear()}};function C(e){if(!e||e===`/`)return`/`;let t=e;for(;t.endsWith(`/`)&&t.length>1;)t=t.slice(0,-1);return t.startsWith(`/`)||(t=`/${t}`),t}function w(e,t){try{return new URL(e,t||window.location.origin).origin!==(t||window.location.origin)}catch{return!1}}function T(e){try{let t=new URL(e,window.location.origin);return t.pathname+t.hash}catch{return e}}const E=new class{cache=new Map;pendingRequests=new Map;async get(e){let t=this.cache.get(e);if(t)return t;let n=this.pendingRequests.get(e);if(n)return n;let r=this.fetchRouteInfo(e);this.pendingRequests.set(e,r);try{let t=await r;return this.cache.set(e,t),t}finally{this.pendingRequests.delete(e)}}async fetchRouteInfo(e){let t=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e=null;try{e=await t.json()}catch{}throw e?.error?Error(e.error):Error(`Failed to fetch route info: ${t.status} ${t.statusText}`)}let n=t.clone();try{return await t.json()}catch(t){try{let e=await n.text();return JSON.parse(e)}catch(n){throw console.error(`[RouteInfo] Failed to parse response:`,{error:t,parseError:n,path:e}),Error(`Failed to parse route info response`)}}}clear(){this.cache.clear(),this.pendingRequests.clear()}invalidate(e){this.cache.delete(e)}};if(typeof window<`u`){let e=window[`~rari`]||{};window[`~rari`]||(window[`~rari`]=e),e.routeInfoCache=E}var D=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize||50,this.scrollableSelector=e.scrollableSelector||`[data-scrollable], .scrollable, [style*="overflow"]`}captureState(e){let t={scrollPositions:this.captureScrollPositions(),formData:this.captureFormData(),focusedElement:this.captureFocusedElement()};return this.storeState(e,t),t}captureScrollPositions(){let e=new Map;try{e.set(`window`,{x:window.scrollX,y:window.scrollY,element:`window`}),document.querySelectorAll(this.scrollableSelector).forEach((t,n)=>{if(t instanceof HTMLElement){let r=t.id||`scrollable-${n}`;(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&e.set(r,{x:t.scrollLeft,y:t.scrollTop,element:r})}})}catch{}return e}captureFormData(){let e=new Map;try{document.querySelectorAll(`form`).forEach((t,n)=>{let r=t.id||t.name||`form-${n}`,i=new FormData(t);i.entries().next().done||e.set(r,i)})}catch{}return e}captureFocusedElement(){try{let e=document.activeElement;if(e&&e!==document.body){if(e.id)return`#${e.id}`;if((e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.name)return`[name="${e.name}"]`}}catch{}return null}storeState(e,t){let n=this.routeAccessOrder.indexOf(e);for(n!==-1&&this.routeAccessOrder.splice(n,1),this.routeAccessOrder.push(e),this.stateHistory.set(e,t);this.routeAccessOrder.length>this.maxHistorySize;){let e=this.routeAccessOrder.shift();e&&this.stateHistory.delete(e)}}getHistorySize(){return this.stateHistory.size}hasState(e){return this.stateHistory.has(e)}getState(e){return this.stateHistory.get(e)}clearAll(){this.stateHistory.clear(),this.routeAccessOrder=[]}clearState(e){this.stateHistory.delete(e);let t=this.routeAccessOrder.indexOf(e);t!==-1&&this.routeAccessOrder.splice(t,1)}restoreState(e){let t=this.stateHistory.get(e);if(!t)return!1;let n=!0;return this.restoreScrollPositions(t.scrollPositions)||(n=!1),this.restoreFormData(t.formData)||(n=!1),t.focusedElement&&this.restoreFocus(t.focusedElement),n}restoreScrollPositions(e){let t=!0;try{e.forEach((e,n)=>{try{if(n===`window`)window.scrollTo(e.x,e.y);else{let r=document.getElementById(n)||document.querySelector(`[data-scrollable-id="${n}"]`);r instanceof HTMLElement?(r.scrollLeft=e.x,r.scrollTop=e.y):t=!1}}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore scroll positions:`,e),t=!1}return t}restoreFormData(e){let t=!0;try{e.forEach((e,n)=>{try{let r=document.getElementById(n)||document.querySelector(`form[name="${n}"]`)||document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];r instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=r.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:t.value=e)}):(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&(t instanceof HTMLInputElement&&(t.type===`checkbox`||t.type===`radio`)?t.checked=t.value===e:t.value=e)}catch{t=!1}}):t=!1}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore form data:`,e),t=!1}return t}restoreFocus(e){try{let t=document.querySelector(e);t instanceof HTMLElement&&requestAnimationFrame(()=>{try{t.focus()}catch{}})}catch{}}};function O(e,t){let n=document.querySelector(e);if(n)t.content&&n.setAttribute(`content`,t.content);else{n=document.createElement(`meta`);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);document.head.appendChild(n)}}function k(e){let t=document.querySelector(e);t&&t.remove()}function A(e){e.title&&(document.title=e.title),e.description?O(`meta[name="description"]`,{name:`description`,content:e.description}):k(`meta[name="description"]`),e.keywords&&e.keywords.length>0?O(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):k(`meta[name="keywords"]`),e.viewport&&O(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function j(e){let t=document.querySelector(`link[rel="canonical"]`);if(e===void 0){t&&t.remove();return}if(t)t.setAttribute(`href`,e);else{let t=document.createElement(`link`);t.setAttribute(`rel`,`canonical`),t.setAttribute(`href`,e),document.head.appendChild(t)}}function M(e){if(e===void 0){k(`meta[name="robots"]`);return}let t=[];e.index!==void 0&&t.push(e.index?`index`:`noindex`),e.follow!==void 0&&t.push(e.follow?`follow`:`nofollow`),e.nocache&&t.push(`nocache`),t.length>0?O(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):k(`meta[name="robots"]`)}function N(e){if(e===void 0){k(`meta[property="og:title"]`),k(`meta[property="og:description"]`),k(`meta[property="og:url"]`),k(`meta[property="og:site_name"]`),k(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());return}if(e.title?O(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):k(`meta[property="og:title"]`),e.description?O(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):k(`meta[property="og:description"]`),e.url?O(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):k(`meta[property="og:url"]`),e.siteName?O(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):k(`meta[property="og:site_name"]`),e.type?O(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):k(`meta[property="og:type"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`property`,`og:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove())}function P(e){if(e===void 0){k(`meta[name="twitter:card"]`),k(`meta[name="twitter:site"]`),k(`meta[name="twitter:creator"]`),k(`meta[name="twitter:title"]`),k(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());return}if(e.card?O(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):k(`meta[name="twitter:card"]`),e.site?O(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):k(`meta[name="twitter:site"]`),e.creator?O(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):k(`meta[name="twitter:creator"]`),e.title?O(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):k(`meta[name="twitter:title"]`),e.description?O(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):k(`meta[name="twitter:description"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`name`,`twitter:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove())}function F(e){A(e),j(e.canonical),M(e.robots),N(e.openGraph),P(e.twitter)}function I({children:n,initialRoute:r,staleWindowMs:i=3e4}){let[a,o]=f(()=>({currentRoute:C(r),navigationId:0,error:null})),s=d(null),c=d(!0),m=d(C(r)),h=d(0),g=d(new S({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),_=d(new Map),v=d([]),y=d(new D({maxHistorySize:50})),b=d(null),x=d(i),O=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,k=()=>{s.current&&=(s.current.abort(),null)},A=()=>{for(let[,e]of _.current.entries())e.abortController.abort();_.current.clear()},j=(e,t)=>{_.current.delete(e),c.current&&a.navigationId===t&&o(e=>({...e}))},M=d(null),N=(e,t)=>{if(!t)return;let n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,`${e}#${t}`))},P=e=>{try{let t=e.headers.get(`x-rari-metadata`);t&&F(JSON.parse(decodeURIComponent(t)))}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},I=(e,t,n,r,i,a)=>{h.current===r&&window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,abortSignal:a.signal,rscResponsePromise:e}}))},L=(e,t,n)=>{n.historyKey?requestAnimationFrame(()=>{y.current.restoreState(e)}):t&&requestAnimationFrame(()=>{let e=(n=0)=>{let r=document.getElementById(t);r?r.scrollIntoView({behavior:`smooth`,block:`start`}):n<10&&setTimeout(e,50,n+1)};e()})},R=(e,t,n,r)=>{c.current&&(m.current=e,o(t=>({...t,currentRoute:e,navigationId:r,error:null})),g.current.resetRetry(e),L(e,t,n))},z=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){j(t,n);return}let i=g.current.handleError(e,t);c.current&&(o(e=>({...e,error:i})),window.history.replaceState(window.history.state,``,r)),_.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),M.current?.()},B=async(e,t={})=>{if(!e||typeof e!=`string`)return;let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=C(n);if(i===m.current&&!t.replace){N(i,r);return}let a=_.current.get(i);if(a)return a.promise;A(),k();let o=new AbortController;s.current=o,h.current+=1;let c=h.current;window.dispatchEvent(new CustomEvent(`rari:navigation-start`,{detail:{navigationId:c,targetPath:i}}));let l=(async()=>{let e=m.current;try{t.historyKey||y.current.captureState(e);let n=t.historyKey||O(),a=window.location.origin+i,s=r?`${i}#${r}`:i,l={route:i,navigationId:c,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(l,``,s):window.history.pushState(l,``,s);let u=await fetch(a,{headers:{Accept:`text/x-component`},signal:o.signal}).then(e=>{if(!e.ok&&e.status!==404)throw Error(`Failed to fetch: ${e.status}`);return e});if(o.signal.aborted){j(i,c);return}let d=new URL(u.url).pathname;if(o.signal.aborted){j(i,c);return}if(d!==i){let e=r?`${d}#${r}`:d;window.history.replaceState({...l,route:d},``,e)}if(I(Promise.resolve(u),e,d,c,t,o),P(u),o.signal.aborted){j(i,c);return}R(d,r,t,c),_.current.delete(i),M.current?.()}catch(t){z(t,i,c,e)}})();return _.current.set(i,{targetPath:i,navigationId:c,promise:l,abortController:o}),l},V=async()=>{if(v.current.length===0)return;let e=v.current.at(-1);e&&(v.current=[],await B(e.path,e.options))},H=d(B);u(()=>(M.current=V,H.current=B,()=>{M.current=null,H.current=null}));let U=d(null);U.current||=p((e,t)=>{H.current?.(e,t)},50,{leading:!0,trailing:!0,maxWait:200});let W=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target;for(;t&&t.tagName!==`A`;)t=t.parentElement;if(!t||t.tagName!==`A`)return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(!r||w(r))return;if(r.startsWith(`#`)){e.preventDefault();let t=r.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,r));return}e.preventDefault();let i=T(r);U.current&&U.current(i,{replace:!1})},G=e=>{let t=window.location.pathname,n=e.state;H.current&&H.current(t,{replace:!0,scroll:!1,historyKey:n?.key})};l(()=>{let e=window.history.state;if(!e||!e.key){let e={route:C(r),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:O()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[r]);let K=e=>{if(e.persisted){let e=window.location.pathname;y.current.captureState(e)}},q=e=>{if(e.persisted){let e=window.location.pathname,t=window.history.state;requestAnimationFrame(()=>{y.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return l(()=>(document.addEventListener(`click`,W),window.addEventListener(`popstate`,G),window.addEventListener(`pagehide`,K),window.addEventListener(`pageshow`,q),()=>{document.removeEventListener(`click`,W),window.removeEventListener(`popstate`,G),window.removeEventListener(`pagehide`,K),window.removeEventListener(`pageshow`,q)}),[]),l(()=>{x.current=i;let e=()=>{document.hidden?b.current=Date.now():b.current!==null&&Date.now()-b.current>x.current&&E.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[i]),l(()=>(c.current=!0,e((e,t)=>H.current?.(e,t)??Promise.resolve()),()=>{c.current=!1,t(),k(),A(),U.current?.cancel&&U.current.cancel()}),[]),n}export{I as ClientRouter,S as NavigationErrorHandler,D as StatePreserver,c as clearPropsCache,i as clearPropsCacheForComponent,o as extractMetadata,r as extractServerProps,n as extractServerPropsWithCache,a as extractStaticParams,s as hasServerSideDataFetching};
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-
|
|
1
|
+
import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-K8DF80Bq.mjs";
|
|
2
2
|
import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-85WvBQcW.mjs";
|
|
3
3
|
import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-3dq9RGI5.mjs";
|
|
4
4
|
import { RariRequest } from "./proxy/RariRequest.mjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){e&&(e.notFound&&(t.notFound=!0),e.redirect&&(t.redirect=typeof e.redirect==`string`?e.redirect:e.redirect.destination),e.revalidate!==void 0&&(t.revalidate=e.revalidate),e.props&&(t.props={...t.props,...e.props}))}async function t(t,n,r,i){typeof t.getData==`function`&&e(await t.getData({params:n,searchParams:r}),i)}async function n(t,n,r,i){typeof t.getServerSideProps==`function`&&e(await t.getServerSideProps({params:n,searchParams:r}),i)}async function r(t,n,r){typeof t.getStaticProps==`function`&&e(await t.getStaticProps({params:n}),r)}async function i(e,i,a){try{let o=await import(e),s={props:{}};return await t(o,i,a,s),await n(o,i,a,s),await r(o,i,s),s}catch(t){return console.error(`[rari] Router: Failed to extract server props from ${e}:`,t),{props:{}}}}async function a(e,t,n){try{let r=await import(e);if(typeof r.generateMetadata==`function`){let e=await r.generateMetadata({params:t,searchParams:n});if(e&&typeof e==`object`)return e}return r.metadata&&typeof r.metadata==`object`?r.metadata:{}}catch(t){return console.error(`[rari] Router: Failed to extract metadata from ${e}:`,t),{}}}async function o(e){try{let t=await import(e);if(typeof t.generateStaticParams==`function`){let e=await t.generateStaticParams();if(Array.isArray(e))return e}return[]}catch(t){return console.error(`[rari] Router: Failed to extract static params from ${e}:`,t),[]}}async function s(e){try{let t=await import(e);return!!(t.getData||t.getServerSideProps||t.getStaticProps||t.generateMetadata||t.generateStaticParams)}catch{return!1}}const c=new Map;async function l(e,t,n,r=6e4){let a=`${e}:${JSON.stringify(t)}:${JSON.stringify(n)}`,o=c.get(a);if(o&&Date.now()-o.timestamp<r)return o.result;let s=await i(e,t,n);return c.set(a,{result:s,timestamp:Date.now()}),s}function u(){c.clear()}function d(e){for(let t of c.keys())t.startsWith(e)&&c.delete(t)}export{l as a,i,d as n,o,a as r,s,u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{t as e}from"../timer-utils-Duul5JHq.mjs";import{Component as t}from"react";import{jsx as n
|
|
1
|
+
"use client";import{t as e}from"../timer-utils-Duul5JHq.mjs";import{Component as t}from"react";import{jsx as n}from"react/jsx-runtime";var r=class extends t{_isMounted=!1;_pendingTimer=null;constructor(e){super(e),this.state={hasError:!1,error:null,ErrorComponent:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1,this._pendingTimer=e(this._pendingTimer)}componentDidCatch(e,t){console.error(`[rari] Error boundary caught error:`,e,t);let n=this.props.errorComponentId;if(n&&typeof window<`u`){let e=window[`~clientComponents`]?.[n];e&&(e.component&&typeof e.component==`function`?this.setState({ErrorComponent:e.component}):e.loader&&!e.loading&&(e.loading=!0,e.loader().then(t=>{let n=t.default||t;e.component=n,e.registered=!0,e.loading=!1,this.setState({ErrorComponent:n})}).catch(t=>{e.loading=!1,console.error(`[rari] Failed to load error component ${n}:`,t)})))}}reset=()=>{this._pendingTimer=e(this._pendingTimer),this._pendingTimer=setTimeout(()=>{this._isMounted&&this.setState({hasError:!1,error:null,ErrorComponent:null}),this._pendingTimer=null},50)};render(){if(this.state.hasError&&this.state.error){let{ErrorComponent:e}=this.state;return e?n(e,{error:this.state.error,reset:this.reset}):null}return this.props.children}};export{r as ErrorBoundaryWrapper};
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import{n as e,r as t,t as n}from"../get-client-component-B4Y2T40R.mjs";import{t as r}from"../preload-modules-xvnJ_8eh.mjs";import*as i from"react";import"react";import{ClientRouter as a}from"rari/client";import{RouterProvider as o}from"rari/router";import{createRoot as s}from"react-dom/client";import{AppRouterProvider as c}from"virtual:app-router-provider";import{createFromReadableStream as l}from"virtual:react-flight-client";import"virtual:rsc-integration.ts";const u=/^\$L?[0-9a-f]+$/i;function d(e,t){let n=e.get(t);if(n)return n;let r=t.startsWith(`$L`)?`$${t.slice(2)}`:`$L${t.slice(1)}`;return e.get(r)}function f(){return globalThis[`~rari`]}function p(){return globalThis}function m(){return window}f()===void 0&&(globalThis[`~rari`]={}),f().AppRouterProvider=c,f().ClientRouter=a,f().getClientComponent=n;async function h(t){try{await e(t)}catch(e){console.error(`[rari] Failed to preload component ${t}:`,e)}}
|
|
2
2
|
/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */
|
|
3
3
|
f().preloadClientComponent=h,p()[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),p()[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={});
|
|
4
4
|
/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */
|
|
5
|
-
function g(){f().hydrateClientComponents||(f().hydrateClientComponents=function(e,n,r){let a=m()[`~rari`].boundaryModules||new Map;function o(e){if(!e)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,n,r,s]=e,c=s?{...s}:{};if(s?.children&&(c.children=o(s.children)),c[`~boundaryId`]&&delete c[`~boundaryId`],typeof n==`string`){if(n.startsWith(`$`)&&u.test(n)){let e=d(a,n);if(e){let n=`${e.id}#${e.name||`default`}`,a=n.replace(/\\/g,`/`),o=e.id.replace(/\\/g,`/`),s=null,l=!e.name||e.name==="default",u=p()[`~clientComponents`][a]||p()[`~clientComponents`][n]||l&&(p()[`~clientComponents`][o]||p()[`~clientComponents`][e.id]);return u&&(u.component?s=t(u,e.name):u.loader&&!u.loading&&(u.loading=!0,u.loadPromise=u.loader().then(e=>(u.component=e,u.registered=!0,u.loading=!1,e)).catch(t=>{throw u.loading=!1,u.loadPromise=void 0,console.error(`[rari] Failed to load component ${e.id}:`,t),t})),u.loadPromise&&!u.component)?i.createElement(i.Suspense,{fallback:null},i.createElement(b,{key:r,componentInfo:u,exportName:e.name,childProps:c})):s?i.createElement(s,r?{...c,key:r}:c):c.children||null}return c.children||null}return i.createElement(n,r?{...c,key:r}:c)}return null}return e.map((e,t)=>{let n=null;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let t=e[2];(typeof t==`string`||typeof t==`number`)&&(n=String(t))}n||=`rsc-${t}-${typeof e==`string`?e:JSON.stringify(e).slice(0,20)}`;let r=o(e);return i.isValidElement(r)&&!r.key?i.createElement(i.Fragment,{key:n},r):r})}return e}try{let e=o(n);e&&(s(r).render(e),r.classList.add(`rari-boundary-hydrated`))}catch(e){console.error(`[rari] Failed to hydrate client components:`,e),console.error(`[rari] Error stack:`,e.stack)}})}function _(){let e=m()[`~rari`].pendingBoundaryHydrations;if(!(!e||e.size===0)){for(let[t,n]of e.entries())f().hydrateClientComponents&&f().hydrateClientComponents(t,n.content,n.element);e.clear()}}g();async function v(t){let n=[];for(let r of t){let t=e(r).catch(e=>{console.error(`[rari] Failed to preload component ${r}:`,e)});n.push(t)}n.length>0&&await Promise.all(n)}async function y(){let e=document.getElementById(`root`);if(!e){console.error(`[rari] Root element not found`);return}let t=document.getElementById(`__RARI_RSC_PAYLOAD__`),u=e.children.length>0,d=m()[`~rari`]?.streaming?.bufferedRows&&m()[`~rari`].streaming.bufferedRows.length>0;if(g(),u&&!t&&!d){let e=document.querySelectorAll(`[data-client-component]`);if(e.length>0){let t=new Set;e.forEach(e=>{let n=e.getAttribute(`data-client-component`);n&&t.add(n)}),await v(t),e.forEach(e=>{let t=e.getAttribute(`data-client-component`),r=e.getAttribute(`data-props`);if(t)try{let a=n(t);if(!a)return;let o=r?JSON.parse(r):{};requestAnimationFrame(()=>{try{document.contains(e)&&(e.replaceChildren(),s(e).render(i.createElement(a,o)))}catch(e){console.error(`[rari] Failed to hydrate client component ${t}:`,e)}})}catch(e){console.error(`[rari] Failed to hydrate client component ${t}:`,e)}})}return}if(u&&d&&!t&&document.querySelectorAll(`[data-boundary-id]`).length>0){m()[`~rari`].pendingBoundaryHydrations&&m()[`~rari`].pendingBoundaryHydrations.size>0&&_();return}try{let n;if(!t&&!d&&!u)try{let e=window.location.pathname+window.location.search,t=(import.meta.env.DEV?import.meta.env.RARI_SERVER_URL||`http://localhost:${import.meta.env.VITE_RSC_PORT||`3000`}`:window.location.origin)+e,r=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`});if(!r.ok&&r.status!==404)throw Error(`Failed to fetch RSC data: ${r.status}`);if(!r.body)throw Error(`RSC response has no body`);n=await l(r.body)}catch(e){if(e instanceof Promise)throw e;if(console.error(`[rari] Failed to fetch initial RSC data:`,e),e instanceof Error)console.error(`[rari] Error name:`,e.name),console.error(`[rari] Error message:`,e.message),e.stack&&console.error(`[rari] Error stack:`,e.stack);else if(typeof e==`string`)console.error(`[rari] Error details:`,e);else if(e&&typeof e==`object`)try{let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=e[n];console.error(`[rari] Error details:`,JSON.stringify(t,null,2))}catch{console.error(`[rari] Error details:`,String(e))}else console.error(`[rari] Error details:`,String(e));n=null}else if(t&&t.textContent)try{let e=t.textContent;await r(e);let i=m()[`~rari`]?.streaming?.bufferedRows&&m()[`~rari`].streaming.bufferedRows.length>0;n=m()[`~rari`]?.streaming?.complete===void 0||i?await l(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e));let n=e=>{let n=e;n.detail?.rscRow&&t.enqueue(new TextEncoder().encode(`\n${n.detail.rscRow}`))},r=()=>{t.close(),window.removeEventListener(`rari:html-stream-row`,n),window.removeEventListener(`rari:stream-complete`,r)};if(window.addEventListener(`rari:html-stream-row`,n),window.addEventListener(`rari:stream-complete`,r),m()[`~rari`]?.streaming?.bufferedRows){let e=[...m()[`~rari`].streaming.bufferedRows];for(let n of e)t.enqueue(new TextEncoder().encode(`\n${n}`));m()[`~rari`].streaming.bufferedRows=[]}m()[`~rari`]?.streaming?.complete&&r()}})):await l(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}))}catch(e){console.error(`[rari] Failed to parse embedded RSC payload:`,e),console.error(`[rari] Error stack:`,e instanceof Error?e.stack:`no stack`),n=null}else if(d)try{n=await l(new ReadableStream({start(e){let t=t=>{let n=t;n.detail?.rscRow&&e.enqueue(new TextEncoder().encode(`${n.detail.rscRow}\n`))},n=()=>{e.close(),window.removeEventListener(`rari:html-stream-row`,t),window.removeEventListener(`rari:stream-complete`,n)};if(window.addEventListener(`rari:html-stream-row`,t),window.addEventListener(`rari:stream-complete`,n),m()[`~rari`]?.streaming?.bufferedRows){let t=[...m()[`~rari`].streaming.bufferedRows];m()[`~rari`].streaming.bufferedRows=[];for(let n of t)e.enqueue(new TextEncoder().encode(`${n}\n`))}m()[`~rari`]?.streaming?.complete&&n()}}))}catch(e){console.error(`[rari] Failed to process streaming RSC payload:`,e),n=null}if(!n)throw Error(`No RSC data available for hydration`);let f;f=n;let p;p=i.createElement(c,{initialPayload:{element:n}},f),p=i.createElement(a,{initialRoute:window.location.pathname,children:p}),p=i.createElement(o,{initialPathname:window.location.pathname,children:p}),s(e).render(p)}catch(
|
|
6
|
-
<div style="padding: 20px; background: #fee; border: 2px solid #f00; margin: 20px;">
|
|
7
|
-
<h2>Error Loading App</h2>
|
|
8
|
-
<p></p>
|
|
9
|
-
</div>
|
|
10
|
-
`;let n=e.querySelector(`p`);n&&(n.textContent=t instanceof Error?t.message:String(t))}}function b({componentInfo:e,exportName:n,childProps:r}){if(!e.loadPromise)return null;if(i.use(e.loadPromise),e.component){let a=t(e,n);return a?i.createElement(a,r):null}return null}import.meta.hot&&import.meta.hot.data.hasRendered||(y().catch(e=>{console.error(`[rari] Fatal error:`,e)}),import.meta.hot&&(import.meta.hot.data.hasRendered=!0));export{h as preloadClientComponent,y as renderApp};
|
|
5
|
+
function g(){f().hydrateClientComponents||(f().hydrateClientComponents=function(e,n,r){let a=m()[`~rari`].boundaryModules||new Map;function o(e){if(!e)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,n,r,s]=e,c=s?{...s}:{};if(s?.children&&(c.children=o(s.children)),c[`~boundaryId`]&&delete c[`~boundaryId`],typeof n==`string`){if(n.startsWith(`$`)&&u.test(n)){let e=d(a,n);if(e){let n=`${e.id}#${e.name||`default`}`,a=n.replace(/\\/g,`/`),o=e.id.replace(/\\/g,`/`),s=null,l=!e.name||e.name==="default",u=p()[`~clientComponents`][a]||p()[`~clientComponents`][n]||l&&(p()[`~clientComponents`][o]||p()[`~clientComponents`][e.id]);return u&&(u.component?s=t(u,e.name):u.loader&&!u.loading&&(u.loading=!0,u.loadPromise=u.loader().then(e=>(u.component=e,u.registered=!0,u.loading=!1,e)).catch(t=>{throw u.loading=!1,u.loadPromise=void 0,console.error(`[rari] Failed to load component ${e.id}:`,t),t})),u.loadPromise&&!u.component)?i.createElement(i.Suspense,{fallback:null},i.createElement(b,{key:r,componentInfo:u,exportName:e.name,childProps:c})):s?i.createElement(s,r?{...c,key:r}:c):c.children||null}return c.children||null}return i.createElement(n,r?{...c,key:r}:c)}return null}return e.map((e,t)=>{let n=null;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let t=e[2];(typeof t==`string`||typeof t==`number`)&&(n=String(t))}n||=`rsc-${t}-${typeof e==`string`?e:JSON.stringify(e).slice(0,20)}`;let r=o(e);return i.isValidElement(r)&&!r.key?i.createElement(i.Fragment,{key:n},r):r})}return e}try{let e=o(n);e&&(s(r).render(e),r.classList.add(`rari-boundary-hydrated`))}catch(e){console.error(`[rari] Failed to hydrate client components:`,e),console.error(`[rari] Error stack:`,e.stack)}})}function _(){let e=m()[`~rari`].pendingBoundaryHydrations;if(!(!e||e.size===0)){for(let[t,n]of e.entries())f().hydrateClientComponents&&f().hydrateClientComponents(t,n.content,n.element);e.clear()}}g();async function v(t){let n=[];for(let r of t){let t=e(r).catch(e=>{console.error(`[rari] Failed to preload component ${r}:`,e)});n.push(t)}n.length>0&&await Promise.all(n)}async function y(){let e=document.getElementById(`root`);if(!e){console.error(`[rari] Root element not found`);return}let t=document.getElementById(`__RARI_RSC_PAYLOAD__`),u=e.children.length>0,d=m()[`~rari`]?.streaming?.bufferedRows&&m()[`~rari`].streaming.bufferedRows.length>0;if(g(),u&&!t&&!d){let e=document.querySelectorAll(`[data-client-component]`);if(e.length>0){let t=new Set;e.forEach(e=>{let n=e.getAttribute(`data-client-component`);n&&t.add(n)}),await v(t),e.forEach(e=>{let t=e.getAttribute(`data-client-component`),r=e.getAttribute(`data-props`);if(t)try{let a=n(t);if(!a)return;let o=r?JSON.parse(r):{};requestAnimationFrame(()=>{try{document.contains(e)&&(e.replaceChildren(),s(e).render(i.createElement(a,o)))}catch(e){console.error(`[rari] Failed to hydrate client component ${t}:`,e)}})}catch(e){console.error(`[rari] Failed to hydrate client component ${t}:`,e)}})}return}if(u&&d&&!t&&document.querySelectorAll(`[data-boundary-id]`).length>0){m()[`~rari`].pendingBoundaryHydrations&&m()[`~rari`].pendingBoundaryHydrations.size>0&&_();return}try{let n;if(!t&&!d&&!u)try{let e=window.location.pathname+window.location.search,t=(import.meta.env.DEV?import.meta.env.RARI_SERVER_URL||`http://localhost:${import.meta.env.VITE_RSC_PORT||`3000`}`:window.location.origin)+e,r=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`});if(!r.ok&&r.status!==404)throw Error(`Failed to fetch RSC data: ${r.status}`);if(!r.body)throw Error(`RSC response has no body`);n=await l(r.body)}catch(e){if(e instanceof Promise)throw e;if(console.error(`[rari] Failed to fetch initial RSC data:`,e),e instanceof Error)console.error(`[rari] Error name:`,e.name),console.error(`[rari] Error message:`,e.message),e.stack&&console.error(`[rari] Error stack:`,e.stack);else if(typeof e==`string`)console.error(`[rari] Error details:`,e);else if(e&&typeof e==`object`)try{let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=e[n];console.error(`[rari] Error details:`,JSON.stringify(t,null,2))}catch{console.error(`[rari] Error details:`,String(e))}else console.error(`[rari] Error details:`,String(e));n=null}else if(t&&t.textContent)try{let e=t.textContent;await r(e);let i=m()[`~rari`]?.streaming?.bufferedRows&&m()[`~rari`].streaming.bufferedRows.length>0;n=m()[`~rari`]?.streaming?.complete===void 0||i?await l(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e));let n=e=>{let n=e;n.detail?.rscRow&&t.enqueue(new TextEncoder().encode(`\n${n.detail.rscRow}`))},r=()=>{t.close(),window.removeEventListener(`rari:html-stream-row`,n),window.removeEventListener(`rari:stream-complete`,r)};if(window.addEventListener(`rari:html-stream-row`,n),window.addEventListener(`rari:stream-complete`,r),m()[`~rari`]?.streaming?.bufferedRows){let e=[...m()[`~rari`].streaming.bufferedRows];for(let n of e)t.enqueue(new TextEncoder().encode(`\n${n}`));m()[`~rari`].streaming.bufferedRows=[]}m()[`~rari`]?.streaming?.complete&&r()}})):await l(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}))}catch(e){console.error(`[rari] Failed to parse embedded RSC payload:`,e),console.error(`[rari] Error stack:`,e instanceof Error?e.stack:`no stack`),n=null}else if(d)try{n=await l(new ReadableStream({start(e){let t=t=>{let n=t;n.detail?.rscRow&&e.enqueue(new TextEncoder().encode(`${n.detail.rscRow}\n`))},n=()=>{e.close(),window.removeEventListener(`rari:html-stream-row`,t),window.removeEventListener(`rari:stream-complete`,n)};if(window.addEventListener(`rari:html-stream-row`,t),window.addEventListener(`rari:stream-complete`,n),m()[`~rari`]?.streaming?.bufferedRows){let t=[...m()[`~rari`].streaming.bufferedRows];m()[`~rari`].streaming.bufferedRows=[];for(let n of t)e.enqueue(new TextEncoder().encode(`${n}\n`))}m()[`~rari`]?.streaming?.complete&&n()}}))}catch(e){console.error(`[rari] Failed to process streaming RSC payload:`,e),n=null}if(!n)throw Error(`No RSC data available for hydration`);let f;f=n;let p;p=i.createElement(c,{initialPayload:{element:n}},f),p=i.createElement(a,{initialRoute:window.location.pathname,children:p}),p=i.createElement(o,{initialPathname:window.location.pathname,children:p}),s(e).render(p)}catch(e){console.error(`[rari] Error rendering app:`,e)}}function b({componentInfo:e,exportName:n,childProps:r}){if(!e.loadPromise)return null;if(i.use(e.loadPromise),e.component){let a=t(e,n);return a?i.createElement(a,r):null}return null}import.meta.hot&&import.meta.hot.data.hasRendered||(y().catch(e=>{console.error(`[rari] Fatal error:`,e)}),import.meta.hot&&(import.meta.hot.data.hasRendered=!0));export{h as preloadClientComponent,y as renderApp};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as e,f as t,h as n,l as r,n as i,p as a,s as o,u as s}from"../regex-constants-DQ2vkSU5.mjs";import{t as c}from"../get-client-component-B4Y2T40R.mjs";import{t as l}from"../suspense-CsIYuC_l.mjs";import{createFromFetch as u,createFromReadableStream as d}from"./vendor/react-flight-client/index.mjs";import*as f from"react";import{Suspense as p,cloneElement as m,createElement as h,isValidElement as g,use as _,useEffect as v,useState as y}from"react";import*as b from"react-dom/client";
|
|
2
|
-
`),i=r.slice(0,-1);C=r.at(-1)||``;for(let e of i)if(e.trim())try{let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),r=e.substring(t+1),i=S(r);if(i)u.set(`$L${n}`,i);else if(r.startsWith(`E{`))try{let e=JSON.parse(r.substring(1)),t=e?.error??e?.message??JSON.stringify(e);console.error(`RSC stream error:`,t)}catch(e){console.error(`Failed to parse error row:`,r,e)}else if(r.startsWith(`Symbol.for(`))continue;else if(r.startsWith(`[`)){let e=JSON.parse(r);if(Array.isArray(e)&&e.length>=4){let[t,r,i]=e,a=i?.[`~boundaryId`];if(t===`$`&&l(r)&&i&&a&&d.set(`$L${n}`,a),t===`$`&&i&&Object.hasOwn(i,`children`)&&typeof r==`string`&&r.startsWith(`$L`)){let e=d.get(r)||null;if(e){let t=f(i.children);b.set(e,t),T&&T.updateBoundary(e,t);continue}}}if(!_){let t=!0;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let n=e[1],r=e[3],i=r?.[`~boundaryId`];typeof n==`string`&&l(n)&&r&&i&&(t=!1)}t&&(_=f(e),T&&typeof T.updateRoot==`function`&&T.updateRoot())}}}catch(t){console.error(`Failed to parse stream line:`,e,t)}}}catch(e){console.error(`Error processing stream:`,e)}},D=()=>{let[,e]=y(0);v(()=>(T={updateBoundary:(t,n)=>{b.set(t,n),e(e=>e+1)},updateRoot:()=>{e(e=>e+1)}},()=>{T=null}),[e]);let t=e=>{if(!e)return null;if(g(e)){let n=e.props,r=n?.[`~boundaryId`];if(n&&r){let e=b.get(r);if(e)return e}if(n&&n.children){let r=t(n.children);if(r!==n.children){let t={...n};return e.key!==null&&e.key!==void 0&&(t.key=e.key),h(e.type,t,r)}}return e}return Array.isArray(e)?e.map(e=>t(e)):e};return t(_)};E();let O=Promise.resolve(h(D));return{"~isRscResponse":!0,"~rscPromise":O,readRoot(){return O}}}buildRequestHeaders(){return{Accept:`text/x-component`,"Cache-Control":`no-cache, no-transform`}}async fetchWithTimeout(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeout);try{let i=await fetch(e,{...t,signal:n.signal});return clearTimeout(r),i}catch(e){throw clearTimeout(r),e}}async processRscResponse(e){if(await k(),E)try{let t=E(Promise.resolve(e));return{"~isRscResponse":!0,"~rscPromise":t,readRoot(){return t}}}catch{throw Error(`React Server DOM client not available`)}else throw Error(`React Server DOM client not available`)}async processRscResponseManually(e){let t=await e.text();return this.parseRscResponse(t)}parseRscResponse(e){let t=e.trim().split(n),r=new Map,i=new Map,a=new Map,o=[];for(let e of t){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),s=e.substring(t+1);if(s)try{let t=S(s);if(t)r.set(`$L${n}`,t);else if(s.startsWith(`E{`)){let e=s.substring(1),t=JSON.parse(e),n=t?.error??t?.message??JSON.stringify(t);o.push(n),console.error(`RSC: Server error`,n)}else if(s.startsWith(`[`)){let e=JSON.parse(s);i.set(n,e)}else if(s.startsWith(`Symbol.for(`))continue;else if(s.startsWith(`"$S`)){let e=JSON.parse(s);typeof e==`string`&&a.set(`$${n}`,e)}else console.error(`Unknown RSC row format:`,e)}catch(t){console.error(`Failed to parse RSC row:`,e,t)}}if(o.length>0)throw Error(`RSC Server Error: ${o.map(e=>e?.error??e?.message??e).join(`, `)}`);let s=null,c=Array.from(i.keys()).sort((e,t)=>Number.parseInt(e,16)-Number.parseInt(t,16));for(let e of c){let t=i.get(e);if(Array.isArray(t)&&t.length>=2&&t[0]===`$`){let[,e,,n]=t,r=n?.[`~boundaryId`],i=typeof e==`string`&&e.startsWith(`$`)?a.get(e):void 0;if((l(e)||l(i))&&n&&r)continue;s=t;break}}return s?this.reconstructElementFromRscData(s,r,a):(console.error(`No valid root element found in RSC payload`,{elements:i,modules:r}),null)}reconstructElementFromRscData(e,t,n){if(e==null)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))if(e.length>=4&&e[0]===`$`){let[,r,i,a]=e,o=r;if(typeof r==`string`&&r.includes(`#`))o=w(r)||(({children:e,...t})=>h(`div`,{...t,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${r}`),e));else if(typeof r==`string`&&r.startsWith(`$L`)&&t.has(r)){let e=t.get(r);e&&(o=w(`${e.id}#${e.name}`)||(({children:t,...n})=>h(`div`,{...n,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${e.name} (${e.id})`),t)))}let s=a?this.processPropsRecursively(a,t,n):{},c=typeof r==`string`&&r.startsWith(`$`)&&!r.startsWith(`$L`)?n?.get(r):void 0;return(l(r)||l(c))&&(o=p),h(o,{key:i,...s})}else return e.map(e=>this.reconstructElementFromRscData(e,t,n));return typeof e==`object`?null:e}processPropsRecursively(e,t,n){if(!e||typeof e!=`object`)return e;let r={};for(let[i,a]of Object.entries(e))if(i===`children`)if(Array.isArray(a))if(a.length>=2&&a[0]===`$`)r[i]=this.reconstructElementFromRscData(a,t,n);else{let e=a.map(e=>this.reconstructElementFromRscData(e,t,n)).filter(e=>e!=null);e.length===0?r[i]=null:e.length===1?r[i]=e[0]:r[i]=e}else r[i]=this.reconstructElementFromRscData(a,t,n);else i===`dangerouslySetInnerHTML`?r[i]=a:r[i]=this.reconstructElementFromRscData(a,t,n);return r}};function M({error:e,details:t}){return h(`div`,{className:`rsc-error`,style:{padding:`16px`,backgroundColor:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`,margin:`8px 0`,fontFamily:`monospace`}},h(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`}},`RSC Error`),h(`p`,{style:{margin:`0 0 8px 0`}},e),t&&h(`details`,{style:{marginTop:`8px`}},h(`summary`,{style:{cursor:`pointer`}},`Error Details`),h(`pre`,{style:{fontSize:`12px`,overflow:`auto`,backgroundColor:`#f5f5f5`,padding:`8px`}},JSON.stringify(t,null,2))))}function N({rootPromise:e}){return _(e)}function P({componentId:e,props:t,fallback:n}){let r=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,i=`${e}:${JSON.stringify(t)}:hmr:${r}`;if(!A.has(i)){let n=j.fetchServerComponent(e,t).catch(e=>{throw A.delete(i),e});A.set(i,n)}let a=_(A.get(i));if(a?.[`~isRscResponse`]){let e=a.readRoot();return h(p,{fallback:n??null},h(N,{rootPromise:e}))}return a??null}var F=class extends f.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){e.mountKey!==this.props.mountKey&&this.state.hasError&&this.setState({hasError:!1,error:null})}componentDidCatch(e,t){console.error(`[rari] ServerComponentErrorBoundary: Error in component ${this.props.componentId}:`,e,t)}render(){return this.state.hasError?h(M,{error:this.state.error?.message||`Unknown error`,details:{componentId:this.props.componentId}}):this.props.children}};function I(e){let t=0;if(typeof window<`u`){let n=window;n[`~rari`].hmr||(n[`~rari`].hmr={refreshCounters:{}}),n[`~rari`].hmr.refreshCounters[e]===void 0&&(n[`~rari`].hmr.refreshCounters[e]=0),t=n[`~rari`].hmr.refreshCounters[e]}let n=n=>{let[r,i]=y(t);return v(()=>{let t=t=>{let n=t.detail;if(n&&n.filePath&&R(n.filePath)&&(j.clearCache(),typeof window<`u`)){let t=window;t[`~rari`].hmr||(t[`~rari`].hmr={refreshCounters:{}}),t[`~rari`].hmr.refreshCounters[e]=(t[`~rari`].hmr.refreshCounters[e]||0)+1,i(t[`~rari`].hmr.refreshCounters[e])}};return typeof window<`u`&&window.addEventListener(`rari:rsc-invalidate`,t),()=>{typeof window<`u`&&window.removeEventListener(`rari:rsc-invalidate`,t)}},[]),h(p,{fallback:null},h(F,{componentId:e,mountKey:r},h(P,{key:`${e}-${r}`,componentId:e,props:n,fallback:null})))};return n.displayName=`ServerComponent(${e})`,function(e){return h(n,e)}}function L(e,t){return j.fetchServerComponent(e,t)}function R(e){if(!e)return!1;try{return typeof globalThis<`u`&&globalThis[`~rari`].serverComponents?globalThis[`~rari`].serverComponents.has(e):!1}catch(e){return console.error(`Error checking if file is server component:`,e),!1}}if(import.meta.hot){let e=!1,t=[],n=new Map;function r(r,i){n.set(r,i),import.meta.hot.on(r,async n=>{if(!e){t.push({event:r,data:n});return}try{await i(n)}catch(e){console.error(`[rari] HMR: Error in handler for '${r}':`,e)}})}r(`rari:register-server-component`,e=>{e?.filePath&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,globalThis[`~rari`].serverComponents.add(e.filePath))}),r(`rari:server-components-registry`,e=>{e?.serverComponents&&Array.isArray(e.serverComponents)&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,e.serverComponents.forEach(e=>{globalThis[`~rari`].serverComponents?.add(e)}))}),r(`vite:beforeFullReload`,async e=>{e?.path&&R(e.path)&&await u({filePath:e.path,forceReload:!0})}),r(`rari:server-component-updated`,async e=>{let t=e?.id||e?.componentId,n=e?.t||e?.timestamp;if(t){if(typeof window<`u`){let r=new CustomEvent(`rari:rsc-invalidate`,{detail:{componentId:t,filePath:e.filePath||e.file,type:`server-component`,timestamp:n}});window.dispatchEvent(r)}}else e?.path&&R(e.path)&&await u({filePath:e.path,forceReload:!1})}),r(`rari:app-router-updated`,async e=>{try{if(!e||!e.routePath&&(!e.affectedRoutes||e.affectedRoutes.length===0))return;await i(e)}catch(e){console.error(`[rari] HMR: App router update failed:`,e)}}),r(`rari:server-action-updated`,async e=>{if(e?.filePath&&(j.clearCache(),typeof window<`u`)){let t=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:e.filePath,type:`server-action`}});window.dispatchEvent(t)}});async function i(e){let t=e.fileType,n=e.filePath,r=e.routePath,i=e.affectedRoutes,o=e.manifestUpdated,u=e.metadata;e.metadataChanged&&u&&a(u);try{let e=`${x()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`register`,file_path:n})});if(!t.ok){let e=await t.text(),n=`Component reload failed with status ${t.status}: ${e}`;throw console.error(`[rari] HMR:`,n),Error(n)}let r=await t.json();if(typeof r!=`object`||!r){let e=`Invalid reload response: null or non-object`;throw console.error(`[rari] HMR:`,e,r),Error(e)}if(r.success!==!0&&r.reloaded!==!0){let e=`Component reload unsuccessful: ${r.error||`unknown error`}`;throw console.error(`[rari] HMR:`,e,r),Error(e)}}catch(e){console.error(`[rari] HMR: Failed to reload component:`,e);return}let d=[r];switch(t){case`page`:d=[r];break;case`layout`:case`loading`:case`error`:case`not-found`:d=i;break;default:break}await s({routes:d,fileType:t,filePath:n,componentId:r}),o&&await l(),await c({routePath:r,affectedRoutes:i})}function a(e){if(!(typeof document>`u`)&&(e.title&&(document.title=e.title),e.description)){let t=document.querySelector(`meta[name="description"]`);t||(t=document.createElement(`meta`),t.setAttribute(`name`,`description`),document.head.appendChild(t)),t.setAttribute(`content`,e.description)}}function o(e){if(!e||e.length===0){j.clearCache();return}let t=[];for(let n of j.componentCache.keys())for(let r of e){if(n.includes(`route:${r}:`)||n.startsWith(`${r}:`)){t.push(n);break}if(r!==`/`&&n.includes(`route:${r}/`)){t.push(n);break}}for(let e of t)j.componentCache.delete(e),A.delete(e);let n=[];for(let t of A.keys())for(let r of e){if(t.includes(`route:${r}:`)||t.startsWith(`${r}:`)){n.push(t);break}if(r!==`/`&&t.includes(`route:${r}/`)){n.push(t);break}}for(let e of n)A.delete(e)}async function s(e){let t=e.routes||[],n=e.fileType,r=e.filePath,i=e.componentId;if(i||r)try{let e=`${x()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate`,componentId:i||r,filePath:r})}),n=await t.text();t.ok||console.error(`[rari] HMR: Server cache invalidation failed:`,t.status,n)}catch(e){console.error(`[rari] HMR: Failed to call server invalidation endpoint:`,e)}if(o(t),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{routes:t,fileType:n}});window.dispatchEvent(e)}}async function c(e){let t=e.routePath,n=e.affectedRoutes||[t];if(!(typeof window>`u`))try{let e=window.location.pathname,r=new CustomEvent(`rari:app-router-rerender`,{detail:{routePath:t,affectedRoutes:n,currentPath:e,preserveParams:!0}});window.dispatchEvent(r)}catch(e){throw console.error(`[rari] HMR: Failed to trigger re-render:`,e),e}}async function l(){typeof window<`u`&&window[`~rari`]?.routeInfoCache&&window[`~rari`].routeInfoCache.clear()}async function u(e){let t=e?.filePath||e;if(j.clearCache(),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:t}});window.dispatchEvent(e)}}t.length>0?(async()=>{try{for(;t.length>0;){let e=[...t];t.length=0;for(let{event:t,data:r}of e){let e=n.get(t);if(e)try{await e(r)}catch(e){console.error(`[rari] HMR: Error replaying buffered event '${t}':`,e)}}}}catch(e){console.error(`[rari] HMR: Error during event replay:`,e)}finally{e=!0}})():e=!0}var z=class{overlay;currentError;escapeKeyHandler;constructor(){this.overlay=null,this.currentError=null,this.escapeKeyHandler=null}show(e){this.currentError=e,this.overlay?this.updateOverlay(e):this.createOverlay(e)}hide(){this.overlay&&(this.overlay.remove(),this.overlay=null,this.currentError=null),this.escapeKeyHandler&&=(document.removeEventListener(`keydown`,this.escapeKeyHandler),null)}isVisible(){return this.overlay!==null}createOverlay(e){this.overlay=document.createElement(`div`),this.overlay.id=`rari-hmr-error-overlay`,this.updateOverlay(e),document.body.appendChild(this.overlay),this.escapeKeyHandler=e=>{e.key===`Escape`&&this.hide()},document.addEventListener(`keydown`,this.escapeKeyHandler)}updateOverlay(e){if(!this.overlay)return;this.overlay.replaceChildren();let t=document.createElement(`div`);t.style.cssText=`position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); z-index: 999999; display: flex; align-items: center; justify-content: center; padding: 2rem; backdrop-filter: blur(4px);`;let n=document.createElement(`div`);n.style.cssText=`background: #1e1e1e; color: #e0e0e0; border-radius: 0.5rem; padding: 2rem; max-width: 50rem; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4); border: 1px solid #ef4444;`;let r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem;`;let i=document.createElement(`div`);i.style.cssText=`display: flex; align-items: center; gap: 0.75rem;`;let a=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);a.style.cssText=`width: 2rem; height: 2rem; color: #ef4444;`,a.setAttribute(`fill`,`none`),a.setAttribute(`stroke`,`currentColor`),a.setAttribute(`viewBox`,`0 0 24 24`);let o=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);o.setAttribute(`stroke-linecap`,`round`),o.setAttribute(`stroke-linejoin`,`round`),o.setAttribute(`stroke-width`,`2`),o.setAttribute(`d`,`M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z`),a.appendChild(o);let s=document.createElement(`h1`);s.style.cssText=`margin: 0; font-size: 1.5rem; font-weight: 700; color: #ef4444;`,s.textContent=`Build Error`,i.appendChild(a),i.appendChild(s);let c=document.createElement(`button`);if(c.style.cssText=`background: transparent; border: none; color: #9ca3af; cursor: pointer; padding: 0.5rem; border-radius: 0.25rem; transition: all 0.2s; font-size: 1.5rem; line-height: 1; width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center;`,c.textContent=`×`,c.setAttribute(`aria-label`,`Close overlay`),c.onclick=()=>this.hide(),c.onmouseover=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onmouseout=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},c.onfocus=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onblur=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},r.appendChild(i),r.appendChild(c),n.appendChild(r),e.filePath){let t=document.createElement(`div`);t.style.cssText=`margin-bottom: 1rem; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; font-family: monospace; font-size: 0.875rem;`;let r=document.createElement(`strong`);r.textContent=`File: `,t.appendChild(r),t.appendChild(document.createTextNode(e.filePath)),n.appendChild(t)}let l=document.createElement(`div`);l.style.cssText=`margin-bottom: 1.5rem;`;let u=document.createElement(`h2`);u.style.cssText=`margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; color: #fca5a5;`,u.textContent=`Error Message:`;let d=document.createElement(`pre`);if(d.style.cssText=`margin: 0; padding: 1rem; background: rgba(239, 68, 68, 0.1); border-left: 4px solid #ef4444; border-radius: 0.375rem; overflow-x: auto; font-family: monospace; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word; color: #fca5a5;`,d.textContent=e.message??`An error occurred`,l.appendChild(u),l.appendChild(d),n.appendChild(l),e.stack){let t=document.createElement(`details`);t.style.cssText=`margin-top: 1rem; cursor: pointer;`;let r=document.createElement(`summary`);r.style.cssText=`font-weight: 600; margin-bottom: 0.5rem; user-select: none;`,r.textContent=`Stack Trace`;let i=document.createElement(`pre`);i.style.cssText=`margin: 0; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; overflow-x: auto; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word;`,i.textContent=e.stack,t.appendChild(r),t.appendChild(i),n.appendChild(t)}let f=document.createElement(`div`);f.style.cssText=`margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid #374151; display: flex; gap: 0.75rem; align-items: center;`;let p=document.createElement(`button`);p.style.cssText=`padding: 0.625rem 1.25rem; background: #ef4444; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,p.textContent=`Reload Page`,p.onclick=()=>window.location.reload(),p.onmouseover=()=>{p.style.background=`#dc2626`},p.onmouseout=()=>{p.style.background=`#ef4444`},p.onfocus=()=>{p.style.background=`#dc2626`},p.onblur=()=>{p.style.background=`#ef4444`};let m=document.createElement(`button`);m.style.cssText=`padding: 0.625rem 1.25rem; background: #374151; color: #e0e0e0; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,m.textContent=`Dismiss`,m.onclick=()=>this.hide(),m.onmouseover=()=>{m.style.background=`#4b5563`},m.onmouseout=()=>{m.style.background=`#374151`},m.onfocus=()=>{m.style.background=`#4b5563`},m.onblur=()=>{m.style.background=`#374151`};let h=document.createElement(`span`);h.style.cssText=`margin-left: auto; font-size: 0.75rem; color: #9ca3af;`;let g=new Date(e.timestamp);h.textContent=Number.isNaN(g.valueOf())?``:g.toLocaleTimeString(),f.appendChild(p),f.appendChild(m),f.appendChild(h),n.appendChild(f),t.appendChild(n),this.overlay.appendChild(t)}};let B=null;function V(){return B||=new z,B}if(import.meta.hot){let e=V();import.meta.hot.on(`rari:hmr-error`,t=>{let n=t.msg||t.message,r=t.file||t.filePath,i=t.t||t.timestamp,a=t.count||t.errorCount,o=t.max||t.maxErrors;console.error(`[rari] HMR: Build error:`,n),r&&console.error(`[rari] HMR: File:`,r),t.stack&&console.error(`[rari] HMR: Stack:`,t.stack),e.show({message:n,stack:t.stack,filePath:r,timestamp:i}),a&&o&&(a>=o?console.error(`[rari] HMR: Maximum error count (${o}) reached. Consider restarting the dev server if issues persist.`):a>=o-2&&console.warn(`[rari] HMR: Error count: ${a}/${o}. Approaching maximum error threshold.`))}),import.meta.hot.on(`rari:hmr-error-cleared`,()=>{e.hide()}),import.meta.hot.on(`vite:error`,t=>{e.show({message:t.err?.message||`Unknown Vite error`,stack:t.err?.stack,filePath:t.err?.file,timestamp:Date.now()})})}export{M as RscErrorComponent,T as createClientModuleMap,I as createServerComponentWrapper,L as fetchServerComponent,w as getClientComponent,C as registerClientComponent,j as rscClient};
|
|
1
|
+
import{d as e,f as t,h as n,l as r,n as i,p as a,s as o,u as s}from"../regex-constants-DQ2vkSU5.mjs";import{t as c}from"../get-client-component-B4Y2T40R.mjs";import{t as l}from"../suspense-CsIYuC_l.mjs";import{createFromFetch as u,createFromReadableStream as d}from"./vendor/react-flight-client/index.mjs";import*as f from"react";import{Suspense as p,cloneElement as m,createElement as h,isValidElement as g,use as _,useEffect as v,useState as y}from"react";import*as b from"react-dom/client";const x=new Set(`div,span,p,ul,ol,li,a,img,section,article,header,footer,nav,main,aside,strong,em,b,i,button,input,label,form,select,option,textarea,h1,h2,h3,h4,h5,h6,table,thead,tbody,tr,td,th,code,pre,blockquote,hr,br,small,mark,del,ins,sub,sup,abbr,time,figure,figcaption,details,summary,dialog,menu,menuitem,canvas,svg,path,circle,rect,line,polygon,polyline,ellipse,text,g,defs,use,symbol,clippath,mask,pattern,lineargradient,radialgradient,stop,image,video,audio,source,track,picture,dl,dt,dd,fieldset,legend`.split(`,`)),S=({children:e})=>e??null;function C(){return import.meta.env?.RARI_SERVER_URL?import.meta.env.RARI_SERVER_URL:typeof window<`u`?window.location.origin:`http://localhost:3000`}globalThis[`~rari`]===void 0&&(globalThis[`~rari`]={}),globalThis[`~rari`].isDevelopment=process.env.NODE_ENV!==`production`,globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),globalThis[`~clientComponentNames`]===void 0&&(globalThis[`~clientComponentNames`]={}),globalThis[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={}),typeof window<`u`&&(window[`~rari`]||(window[`~rari`]=globalThis[`~rari`]),window[`~rari`].streaming||(window[`~rari`].streaming={bufferedRows:[],bufferedEvents:[]}),window[`~rari`].streaming.bufferedEvents||(window[`~rari`].streaming.bufferedEvents=[]),window[`~rari`].boundaryModules||(window[`~rari`].boundaryModules=new Map),window[`~rari`].pendingBoundaryHydrations||(window[`~rari`].pendingBoundaryHydrations=new Map));function w(e){if(!e.startsWith(`I{`))return null;try{let t=JSON.parse(e.substring(1));if(typeof t==`object`&&t&&!Array.isArray(t)){if(typeof t.id!=`string`)return console.error(`[rari] Invalid import data: id must be a string:`,t),null;let e;if(typeof t.chunks==`string`)e=[t.chunks];else if(Array.isArray(t.chunks))e=t.chunks.filter(e=>typeof e==`string`);else return console.error(`[rari] Invalid import data: chunks must be a string or array:`,t),null;return e.length===0?(console.error(`[rari] Invalid import data: chunks array is empty:`,t),null):{id:t.id,chunks:e,name:t.name||`default`}}console.error(`[rari] Invalid import data format, expected object:`,t)}catch(t){console.error(`[rari] Failed to parse import row:`,e,t)}return null}if(typeof window<`u`){globalThis[`~rari`].processBoundaryUpdate=function(n,o,c){let l=document.querySelector(`[data-boundary-id="${n}"]`);if(l)try{let u=o.indexOf(`:`);if(u===-1){console.warn(`[rari] Invalid RSC row format (no colon):`,o);return}let d=o.substring(0,u),f=o.substring(u+1),p=w(f);if(p){let e=`$L${d}`;window[`~rari`].boundaryModules?.set(e,p);return}let m;try{m=JSON.parse(f)}catch(e){console.error(`[rari] Failed to parse RSC content:`,f,e);return}function h(e){if(!e)return!1;if(typeof e==`string`)return e.startsWith(`$L`);if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t]=e;if(typeof t==`string`&&t.startsWith(`$L`))return!0;let n=e[3];if(n&&n.children)return h(n.children)}return e.some(e=>h(e))}return!1}if(h(m)){if(window[`~rari`].pendingBoundaryHydrations?.set(n,{content:m,element:l,rowId:c}),globalThis[`~rari`].hydrateClientComponents){let e=globalThis[`~rari`].hydrateClientComponents;e(n,m,l)}return}function g(n){let o=n=>n.replace(r,`&`).replace(t,`<`).replace(e,`>`).replace(a,`"`).replace(s,`'`);if(!n)return``;if(typeof n==`string`||typeof n==`number`)return o(String(n));if(Array.isArray(n)){if(n.length>=4&&n[0]===`$`){let[,e,,t]=n,r=typeof e==`string`&&x.has(e.toLowerCase())?e.toLowerCase():`div`,a=null,s=``,c=``;if(t){for(let[e,n]of Object.entries(t))if(e===`dangerouslySetInnerHTML`&&n&&typeof n==`object`&&`__html`in n)a=n.__html;else if(e!==`children`&&e!==`~boundaryId`){let t=e===`className`?`class`:e;if(e===`style`&&typeof n==`object`&&n){let e=Object.entries(n).map(([e,t])=>`${e.replace(i,`$1-$2`).toLowerCase()}:${String(t)}`).join(`;`);c+=` style="${o(e)}"`}else typeof n==`string`||typeof n==`number`?c+=` ${t}="${o(String(n))}"`:typeof n==`boolean`&&n&&(c+=` ${t}`)}a===null&&t.children&&(s=g(t.children))}return`<${r}${c}>${a===null?s:a}</${r}>`}return n.map(g).join(``)}return``}let _=g(m);if(_){let e=document.contains(l);e&&(l.innerHTML=_,l.classList.add(`rari-boundary-resolved`)),window.dispatchEvent(new CustomEvent(`rari:boundary-resolved`,{detail:{boundaryId:n,rscRow:o,rowId:c,element:l,wasAttached:e}}))}}catch(e){console.error(`[rari] Error processing boundary update:`,e)}};let n=window,o=globalThis;n[`~rari`].streaming?.bufferedEvents&&n[`~rari`].streaming.bufferedEvents.length>0&&(n[`~rari`].streaming.bufferedEvents.forEach(e=>{let{boundaryId:t,rscRow:n,rowId:r}=e;o[`~rari`].processBoundaryUpdate?.(t,n,r)}),n[`~rari`].streaming.bufferedEvents=[]),window.addEventListener(`rari:boundary-update`,e=>{let{boundaryId:t,rscRow:n,rowId:r}=e.detail;o[`~rari`].processBoundaryUpdate&&o[`~rari`].processBoundaryUpdate(t,n,r)})}function T(e,t,n){let r=n==="default"?e.name||t.split(`/`).pop()?.replace(o,``)||`DefaultComponent`:n,i=r,a={id:i,path:t,type:`client`,component:e,registered:!0};globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={});let s=`${t}#${n}`;globalThis[`~clientComponents`][i]=a,globalThis[`~clientComponents`][t]=a,globalThis[`~clientComponents`][s]=a,globalThis[`~clientComponentPaths`][t]=i,globalThis[`~clientComponentNames`][r]=i,e&&(e[`~isClientComponent`]=!0,e[`~clientComponentId`]=i),typeof window<`u`&&fetch(`/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:i,file_path:t,export_name:n})}).catch(e=>{console.error(`[rari] Failed to register client component with server:`,e)})}function E(e){return c(e)}function D(){let e={};for(let[t,n]of Object.entries(globalThis[`~clientComponents`]))e[t]={id:t,chunks:[n.path],name:t,async:!1,default:n.component};return e}let O=u,k=d,A=null;async function j(){return A||(A=(async()=>{try{return O=u,k=d,typeof k!=`function`&&(k=null),typeof O!=`function`&&(O=null),b}catch(e){return console.error(`Failed to load react-dom/client RSC functions:`,e),O=null,k=null,null}})(),A)}const M=new Map,N=new class{componentCache;moduleCache;inflightRequests;config;constructor(){this.componentCache=new Map,this.moduleCache=new Map,this.inflightRequests=new Map,this.config={maxRetries:5,retryDelay:500,timeout:1e4}}configure(e){this.config={...this.config,...e}}clearCache(){this.componentCache.clear(),this.moduleCache.clear(),M.clear()}async fetchServerComponent(e,t={}){let n=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,r=`${e}:${JSON.stringify(t)}:hmr:${n}`;if(this.componentCache.has(r))return this.componentCache.get(r);if(this.inflightRequests.has(r))return this.inflightRequests.get(r);let i=this.fetchServerComponentStream(e,t);this.inflightRequests.set(r,i);try{let e=await i;return this.componentCache.set(r,e),e}finally{this.inflightRequests.delete(r)}}async fetchServerComponentStream(e,t={}){await j();let n=(()=>{let e=[`/_rari/stream`];try{if(typeof window<`u`&&(window.location.hostname===`localhost`||window.location.hostname===`127.0.0.1`)){let t=C();t&&e.push(`${t}/_rari/stream`)}}catch{}return e})(),r=null,i=null,a=async()=>{for(let r of n)try{let n=await this.fetchWithTimeout(r,{method:`POST`,headers:{"Content-Type":`application/json`,...this.buildRequestHeaders()},body:JSON.stringify({component_id:e,props:t})});if(n.ok)return n;i=Error(`HTTP ${n.status}: ${await n.text()}`)}catch(e){i=e}return null};if(r=await a(),r||=(await new Promise(e=>setTimeout(e,this.config.retryDelay)),await a()),!r)throw i||Error(`Failed to reach stream endpoint`);if(!r.ok){let e=await r.text();throw Error(`Server responded with ${r.status}: ${e}`)}let o=r.body;if(!o)throw Error(`No ReadableStream from stream response`);let s=o.getReader(),c=new TextDecoder,u=new Map,d=new Map,f=e=>{if(!h)return console.error(`React not available for RSC conversion`),null;if(!e)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t,n,r]=e;if(l(t))return h(p,{fallback:r?.fallback?f(r.fallback):null},r?.children?f(r.children):null);let i=r?{...r}:{};if(r?.children){let e=f(r.children);Array.isArray(e)?i.children=e.map((e,t)=>g(e)&&e.key==null?m(e,{key:t}):e):i.children=e}if(typeof t==`string`){if(t.startsWith(`$L`)){let e=u.get(t);if(e){let t=E(`${e.id}#${e.name||`default`}`);if(t)return h(t,n?{...i,key:n}:i)}return i&&i.children?i.children:null}if(t.includes(`.tsx#`)||t.includes(`.jsx#`)){let e=E(t);return e?h(e,n?{...i,key:n}:i):(console.error(`Failed to resolve client component:`,t),null)}else return i&&Object.hasOwn(i,`~boundaryId`)&&(i={...i},delete i[`~boundaryId`]),h(t,n?{...i,key:n}:i)}else console.error(`Unknown RSC element type:`,t)}return e.map(e=>f(e))}return typeof e==`object`?(console.error(`Unexpected object in RSC conversion:`,e),null):e},_=null,b=new Map,x=``,S=null,T=async()=>{try{for(;;){let{value:e,done:t}=await s.read();if(t)break;let n=c.decode(e,{stream:!0});x+=n;let r=x.split(`
|
|
2
|
+
`),i=r.slice(0,-1);x=r.at(-1)||``;for(let e of i)if(e.trim())try{let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),r=e.substring(t+1),i=w(r);if(i)u.set(`$L${n}`,i);else if(r.startsWith(`E{`))try{let e=JSON.parse(r.substring(1)),t=e?.error??e?.message??JSON.stringify(e);console.error(`RSC stream error:`,t)}catch(e){console.error(`Failed to parse error row:`,r,e)}else if(r.startsWith(`Symbol.for(`))continue;else if(r.startsWith(`[`)){let e=JSON.parse(r);if(Array.isArray(e)&&e.length>=4){let[t,r,i]=e,a=i?.[`~boundaryId`];if(t===`$`&&l(r)&&i&&a&&d.set(`$L${n}`,a),t===`$`&&i&&Object.hasOwn(i,`children`)&&typeof r==`string`&&r.startsWith(`$L`)){let e=d.get(r)||null;if(e){let t=f(i.children);b.set(e,t),S&&S.updateBoundary(e,t);continue}}}if(!_){let t=!0;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let n=e[1],r=e[3],i=r?.[`~boundaryId`];typeof n==`string`&&l(n)&&r&&i&&(t=!1)}t&&(_=f(e),S&&typeof S.updateRoot==`function`&&S.updateRoot())}}}catch(t){console.error(`Failed to parse stream line:`,e,t)}}}catch(e){console.error(`Error processing stream:`,e)}},D=()=>{let[,e]=y(0);v(()=>(S={updateBoundary:(t,n)=>{b.set(t,n),e(e=>e+1)},updateRoot:()=>{e(e=>e+1)}},()=>{S=null}),[e]);let t=e=>{if(!e)return null;if(g(e)){let n=e.props,r=n?.[`~boundaryId`];if(n&&r){let e=b.get(r);if(e)return e}if(n&&n.children){let r=t(n.children);if(r!==n.children){let t={...n};return e.key!==null&&e.key!==void 0&&(t.key=e.key),h(e.type,t,r)}}return e}return Array.isArray(e)?e.map(e=>t(e)):e};return t(_)};T();let O=Promise.resolve(h(D));return{"~isRscResponse":!0,"~rscPromise":O,readRoot(){return O}}}buildRequestHeaders(){return{Accept:`text/x-component`,"Cache-Control":`no-cache, no-transform`}}async fetchWithTimeout(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeout);try{let i=await fetch(e,{...t,signal:n.signal});return clearTimeout(r),i}catch(e){throw clearTimeout(r),e}}async processRscResponse(e){if(await j(),O)try{let t=O(Promise.resolve(e));return{"~isRscResponse":!0,"~rscPromise":t,readRoot(){return t}}}catch{throw Error(`React Server DOM client not available`)}else throw Error(`React Server DOM client not available`)}async processRscResponseManually(e){let t=await e.text();return this.parseRscResponse(t)}parseRscResponse(e){let t=e.trim().split(n),r=new Map,i=new Map,a=new Map,o=[];for(let e of t){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),s=e.substring(t+1);if(s)try{let t=w(s);if(t)r.set(`$L${n}`,t);else if(s.startsWith(`E{`)){let e=s.substring(1),t=JSON.parse(e),n=t?.error??t?.message??JSON.stringify(t);o.push(n),console.error(`RSC: Server error`,n)}else if(s.startsWith(`[`)){let e=JSON.parse(s);i.set(n,e)}else if(s.startsWith(`Symbol.for(`))continue;else if(s.startsWith(`"$S`)){let e=JSON.parse(s);typeof e==`string`&&a.set(`$${n}`,e)}else console.error(`Unknown RSC row format:`,e)}catch(t){console.error(`Failed to parse RSC row:`,e,t)}}if(o.length>0)throw Error(`RSC Server Error: ${o.map(e=>e?.error??e?.message??e).join(`, `)}`);let s=null,c=Array.from(i.keys()).sort((e,t)=>Number.parseInt(e,16)-Number.parseInt(t,16));for(let e of c){let t=i.get(e);if(Array.isArray(t)&&t.length>=2&&t[0]===`$`){let[,e,,n]=t,r=n?.[`~boundaryId`],i=typeof e==`string`&&e.startsWith(`$`)?a.get(e):void 0;if((l(e)||l(i))&&n&&r)continue;s=t;break}}return s?this.reconstructElementFromRscData(s,r,a):(console.error(`No valid root element found in RSC payload`,{elements:i,modules:r}),null)}reconstructElementFromRscData(e,t,n){if(e==null)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))if(e.length>=4&&e[0]===`$`){let[,r,i,a]=e,o=r;if(typeof r==`string`&&r.includes(`#`)){let e=E(r);e?o=e:(process.env.NODE_ENV!==`production`&&console.warn(`[rari] Missing client component: ${r}`),o=S)}else if(typeof r==`string`&&r.startsWith(`$L`)&&t.has(r)){let e=t.get(r);if(e){let t=E(`${e.id}#${e.name}`);t?o=t:(process.env.NODE_ENV!==`production`&&console.warn(`[rari] Missing client component: ${e.name} (${e.id})`),o=S)}}let s=a?this.processPropsRecursively(a,t,n):{},c=typeof r==`string`&&r.startsWith(`$`)&&!r.startsWith(`$L`)?n?.get(r):void 0;return(l(r)||l(c))&&(o=p),h(o,{key:i,...s})}else return e.map(e=>this.reconstructElementFromRscData(e,t,n));return typeof e==`object`?null:e}processPropsRecursively(e,t,n){if(!e||typeof e!=`object`)return e;let r={};for(let[i,a]of Object.entries(e))if(i===`children`)if(Array.isArray(a))if(a.length>=2&&a[0]===`$`)r[i]=this.reconstructElementFromRscData(a,t,n);else{let e=a.map(e=>this.reconstructElementFromRscData(e,t,n)).filter(e=>e!=null);e.length===0?r[i]=null:e.length===1?r[i]=e[0]:r[i]=e}else r[i]=this.reconstructElementFromRscData(a,t,n);else i===`dangerouslySetInnerHTML`?r[i]=a:r[i]=this.reconstructElementFromRscData(a,t,n);return r}};function P({error:e,details:t}){return process.env.NODE_ENV===`production`?null:h(`div`,{"data-rsc-error":``},h(`p`,null,e),t&&h(`pre`,null,JSON.stringify(t,null,2)))}function F({rootPromise:e}){return _(e)}function I({componentId:e,props:t,fallback:n}){let r=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,i=`${e}:${JSON.stringify(t)}:hmr:${r}`;if(!M.has(i)){let n=N.fetchServerComponent(e,t).catch(e=>{throw M.delete(i),e});M.set(i,n)}let a=_(M.get(i));if(a?.[`~isRscResponse`]){let e=a.readRoot();return h(p,{fallback:n??null},h(F,{rootPromise:e}))}return a??null}var L=class extends f.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){e.mountKey!==this.props.mountKey&&this.state.hasError&&this.setState({hasError:!1,error:null})}componentDidCatch(e,t){console.error(`[rari] ServerComponentErrorBoundary: Error in component ${this.props.componentId}:`,e,t)}render(){return this.state.hasError?h(P,{error:this.state.error?.message||`Unknown error`,details:{componentId:this.props.componentId}}):this.props.children}};function R(e){let t=0;if(typeof window<`u`){let n=window;n[`~rari`].hmr||(n[`~rari`].hmr={refreshCounters:{}}),n[`~rari`].hmr.refreshCounters[e]===void 0&&(n[`~rari`].hmr.refreshCounters[e]=0),t=n[`~rari`].hmr.refreshCounters[e]}let n=n=>{let[r,i]=y(t);return v(()=>{let t=t=>{let n=t.detail;if(n&&n.filePath&&B(n.filePath)&&(N.clearCache(),typeof window<`u`)){let t=window;t[`~rari`].hmr||(t[`~rari`].hmr={refreshCounters:{}}),t[`~rari`].hmr.refreshCounters[e]=(t[`~rari`].hmr.refreshCounters[e]||0)+1,i(t[`~rari`].hmr.refreshCounters[e])}};return typeof window<`u`&&window.addEventListener(`rari:rsc-invalidate`,t),()=>{typeof window<`u`&&window.removeEventListener(`rari:rsc-invalidate`,t)}},[]),h(p,{fallback:null},h(L,{componentId:e,mountKey:r},h(I,{key:`${e}-${r}`,componentId:e,props:n,fallback:null})))};return n.displayName=`ServerComponent(${e})`,function(e){return h(n,e)}}function z(e,t){return N.fetchServerComponent(e,t)}function B(e){if(!e)return!1;try{return typeof globalThis<`u`&&globalThis[`~rari`].serverComponents?globalThis[`~rari`].serverComponents.has(e):!1}catch(e){return console.error(`Error checking if file is server component:`,e),!1}}if(import.meta.hot){let e=!1,t=[],n=new Map;function r(r,i){n.set(r,i),import.meta.hot.on(r,async n=>{if(!e){t.push({event:r,data:n});return}try{await i(n)}catch(e){console.error(`[rari] HMR: Error in handler for '${r}':`,e)}})}r(`rari:register-server-component`,e=>{e?.filePath&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,globalThis[`~rari`].serverComponents.add(e.filePath))}),r(`rari:server-components-registry`,e=>{e?.serverComponents&&Array.isArray(e.serverComponents)&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,e.serverComponents.forEach(e=>{globalThis[`~rari`].serverComponents?.add(e)}))}),r(`vite:beforeFullReload`,async e=>{e?.path&&B(e.path)&&await u({filePath:e.path,forceReload:!0})}),r(`rari:server-component-updated`,async e=>{let t=e?.id||e?.componentId,n=e?.t||e?.timestamp;if(t){if(typeof window<`u`){let r=new CustomEvent(`rari:rsc-invalidate`,{detail:{componentId:t,filePath:e.filePath||e.file,type:`server-component`,timestamp:n}});window.dispatchEvent(r)}}else e?.path&&B(e.path)&&await u({filePath:e.path,forceReload:!1})}),r(`rari:app-router-updated`,async e=>{try{if(!e||!e.routePath&&(!e.affectedRoutes||e.affectedRoutes.length===0))return;await i(e)}catch(e){console.error(`[rari] HMR: App router update failed:`,e)}}),r(`rari:server-action-updated`,async e=>{if(e?.filePath&&(N.clearCache(),typeof window<`u`)){let t=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:e.filePath,type:`server-action`}});window.dispatchEvent(t)}});async function i(e){let t=e.fileType,n=e.filePath,r=e.routePath,i=e.affectedRoutes,o=e.manifestUpdated,u=e.metadata;e.metadataChanged&&u&&a(u);try{let e=`${C()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`register`,file_path:n})});if(!t.ok){let e=await t.text(),n=`Component reload failed with status ${t.status}: ${e}`;throw console.error(`[rari] HMR:`,n),Error(n)}let r=await t.json();if(typeof r!=`object`||!r){let e=`Invalid reload response: null or non-object`;throw console.error(`[rari] HMR:`,e,r),Error(e)}if(r.success!==!0&&r.reloaded!==!0){let e=`Component reload unsuccessful: ${r.error||`unknown error`}`;throw console.error(`[rari] HMR:`,e,r),Error(e)}}catch(e){console.error(`[rari] HMR: Failed to reload component:`,e);return}let d=[r];switch(t){case`page`:d=[r];break;case`layout`:case`template`:case`loading`:case`error`:case`not-found`:d=i;break;default:break}await s({routes:d,fileType:t,filePath:n,componentId:r}),o&&await l(),await c({routePath:r,affectedRoutes:i})}function a(e){if(!(typeof document>`u`)&&(e.title&&(document.title=e.title),e.description)){let t=document.querySelector(`meta[name="description"]`);t||(t=document.createElement(`meta`),t.setAttribute(`name`,`description`),document.head.appendChild(t)),t.setAttribute(`content`,e.description)}}function o(e){if(!e||e.length===0){N.clearCache();return}let t=[];for(let n of N.componentCache.keys())for(let r of e){if(n.includes(`route:${r}:`)||n.startsWith(`${r}:`)){t.push(n);break}if(r!==`/`&&n.includes(`route:${r}/`)){t.push(n);break}}for(let e of t)N.componentCache.delete(e),M.delete(e);let n=[];for(let t of M.keys())for(let r of e){if(t.includes(`route:${r}:`)||t.startsWith(`${r}:`)){n.push(t);break}if(r!==`/`&&t.includes(`route:${r}/`)){n.push(t);break}}for(let e of n)M.delete(e)}async function s(e){let t=e.routes||[],n=e.fileType,r=e.filePath,i=e.componentId;if(i||r)try{let e=`${C()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate`,componentId:i||r,filePath:r})}),n=await t.text();t.ok||console.error(`[rari] HMR: Server cache invalidation failed:`,t.status,n)}catch(e){console.error(`[rari] HMR: Failed to call server invalidation endpoint:`,e)}if(o(t),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{routes:t,fileType:n}});window.dispatchEvent(e)}}async function c(e){let t=e.routePath,n=e.affectedRoutes||[t];if(!(typeof window>`u`))try{let e=window.location.pathname,r=new CustomEvent(`rari:app-router-rerender`,{detail:{routePath:t,affectedRoutes:n,currentPath:e,preserveParams:!0}});window.dispatchEvent(r)}catch(e){throw console.error(`[rari] HMR: Failed to trigger re-render:`,e),e}}async function l(){typeof window<`u`&&window[`~rari`]?.routeInfoCache&&window[`~rari`].routeInfoCache.clear()}async function u(e){let t=e?.filePath||e;if(N.clearCache(),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:t}});window.dispatchEvent(e)}}t.length>0?(async()=>{try{for(;t.length>0;){let e=[...t];t.length=0;for(let{event:t,data:r}of e){let e=n.get(t);if(e)try{await e(r)}catch(e){console.error(`[rari] HMR: Error replaying buffered event '${t}':`,e)}}}}catch(e){console.error(`[rari] HMR: Error during event replay:`,e)}finally{e=!0}})():e=!0}var V=class{overlay;currentError;escapeKeyHandler;constructor(){this.overlay=null,this.currentError=null,this.escapeKeyHandler=null}show(e){this.currentError=e,this.overlay?this.updateOverlay(e):this.createOverlay(e)}hide(){this.overlay&&(this.overlay.remove(),this.overlay=null,this.currentError=null),this.escapeKeyHandler&&=(document.removeEventListener(`keydown`,this.escapeKeyHandler),null)}isVisible(){return this.overlay!==null}createOverlay(e){this.overlay=document.createElement(`div`),this.overlay.id=`rari-hmr-error-overlay`,this.updateOverlay(e),document.body.appendChild(this.overlay),this.escapeKeyHandler=e=>{e.key===`Escape`&&this.hide()},document.addEventListener(`keydown`,this.escapeKeyHandler)}updateOverlay(e){if(!this.overlay)return;this.overlay.replaceChildren();let t=document.createElement(`div`);t.style.cssText=`position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); z-index: 999999; display: flex; align-items: center; justify-content: center; padding: 2rem; backdrop-filter: blur(4px);`;let n=document.createElement(`div`);n.style.cssText=`background: #1e1e1e; color: #e0e0e0; border-radius: 0.5rem; padding: 2rem; max-width: 50rem; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4); border: 1px solid #ef4444;`;let r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem;`;let i=document.createElement(`div`);i.style.cssText=`display: flex; align-items: center; gap: 0.75rem;`;let a=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);a.style.cssText=`width: 2rem; height: 2rem; color: #ef4444;`,a.setAttribute(`fill`,`none`),a.setAttribute(`stroke`,`currentColor`),a.setAttribute(`viewBox`,`0 0 24 24`);let o=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);o.setAttribute(`stroke-linecap`,`round`),o.setAttribute(`stroke-linejoin`,`round`),o.setAttribute(`stroke-width`,`2`),o.setAttribute(`d`,`M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z`),a.appendChild(o);let s=document.createElement(`h1`);s.style.cssText=`margin: 0; font-size: 1.5rem; font-weight: 700; color: #ef4444;`,s.textContent=`Build Error`,i.appendChild(a),i.appendChild(s);let c=document.createElement(`button`);if(c.style.cssText=`background: transparent; border: none; color: #9ca3af; cursor: pointer; padding: 0.5rem; border-radius: 0.25rem; transition: all 0.2s; font-size: 1.5rem; line-height: 1; width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center;`,c.textContent=`×`,c.setAttribute(`aria-label`,`Close overlay`),c.onclick=()=>this.hide(),c.onmouseover=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onmouseout=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},c.onfocus=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onblur=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},r.appendChild(i),r.appendChild(c),n.appendChild(r),e.filePath){let t=document.createElement(`div`);t.style.cssText=`margin-bottom: 1rem; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; font-family: monospace; font-size: 0.875rem;`;let r=document.createElement(`strong`);r.textContent=`File: `,t.appendChild(r),t.appendChild(document.createTextNode(e.filePath)),n.appendChild(t)}let l=document.createElement(`div`);l.style.cssText=`margin-bottom: 1.5rem;`;let u=document.createElement(`h2`);u.style.cssText=`margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; color: #fca5a5;`,u.textContent=`Error Message:`;let d=document.createElement(`pre`);if(d.style.cssText=`margin: 0; padding: 1rem; background: rgba(239, 68, 68, 0.1); border-left: 4px solid #ef4444; border-radius: 0.375rem; overflow-x: auto; font-family: monospace; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word; color: #fca5a5;`,d.textContent=e.message??`An error occurred`,l.appendChild(u),l.appendChild(d),n.appendChild(l),e.stack){let t=document.createElement(`details`);t.style.cssText=`margin-top: 1rem; cursor: pointer;`;let r=document.createElement(`summary`);r.style.cssText=`font-weight: 600; margin-bottom: 0.5rem; user-select: none;`,r.textContent=`Stack Trace`;let i=document.createElement(`pre`);i.style.cssText=`margin: 0; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; overflow-x: auto; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word;`,i.textContent=e.stack,t.appendChild(r),t.appendChild(i),n.appendChild(t)}let f=document.createElement(`div`);f.style.cssText=`margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid #374151; display: flex; gap: 0.75rem; align-items: center;`;let p=document.createElement(`button`);p.style.cssText=`padding: 0.625rem 1.25rem; background: #ef4444; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,p.textContent=`Reload Page`,p.onclick=()=>window.location.reload(),p.onmouseover=()=>{p.style.background=`#dc2626`},p.onmouseout=()=>{p.style.background=`#ef4444`},p.onfocus=()=>{p.style.background=`#dc2626`},p.onblur=()=>{p.style.background=`#ef4444`};let m=document.createElement(`button`);m.style.cssText=`padding: 0.625rem 1.25rem; background: #374151; color: #e0e0e0; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,m.textContent=`Dismiss`,m.onclick=()=>this.hide(),m.onmouseover=()=>{m.style.background=`#4b5563`},m.onmouseout=()=>{m.style.background=`#374151`},m.onfocus=()=>{m.style.background=`#4b5563`},m.onblur=()=>{m.style.background=`#374151`};let h=document.createElement(`span`);h.style.cssText=`margin-left: auto; font-size: 0.75rem; color: #9ca3af;`;let g=new Date(e.timestamp);h.textContent=Number.isNaN(g.valueOf())?``:g.toLocaleTimeString(),f.appendChild(p),f.appendChild(m),f.appendChild(h),n.appendChild(f),t.appendChild(n),this.overlay.appendChild(t)}};let H=null;function U(){return H||=new V,H}if(import.meta.hot){let e=U();import.meta.hot.on(`rari:hmr-error`,t=>{let n=t.msg||t.message,r=t.file||t.filePath,i=t.t||t.timestamp,a=t.count||t.errorCount,o=t.max||t.maxErrors;console.error(`[rari] HMR: Build error:`,n),r&&console.error(`[rari] HMR: File:`,r),t.stack&&console.error(`[rari] HMR: Stack:`,t.stack),e.show({message:n,stack:t.stack,filePath:r,timestamp:i}),a&&o&&(a>=o?console.error(`[rari] HMR: Maximum error count (${o}) reached. Consider restarting the dev server if issues persist.`):a>=o-2&&console.warn(`[rari] HMR: Error count: ${a}/${o}. Approaching maximum error threshold.`))}),import.meta.hot.on(`rari:hmr-error-cleared`,()=>{e.hide()}),import.meta.hot.on(`vite:error`,t=>{e.show({message:t.err?.message||`Unknown Vite error`,stack:t.err?.stack,filePath:t.err?.file,timestamp:Date.now()})})}export{P as RscErrorComponent,D as createClientModuleMap,R as createServerComponentWrapper,z as fetchServerComponent,E as getClientComponent,T as registerClientComponent,N as rscClient};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
//#region src/router/props-extractor.d.ts
|
|
2
|
+
interface ServerSidePropsResult {
|
|
3
|
+
props: Record<string, any>;
|
|
4
|
+
revalidate?: number;
|
|
5
|
+
notFound?: boolean;
|
|
6
|
+
redirect?: string;
|
|
7
|
+
}
|
|
8
|
+
interface MetadataResult {
|
|
9
|
+
title?: string | {
|
|
10
|
+
default?: string;
|
|
11
|
+
template?: string;
|
|
12
|
+
absolute?: string;
|
|
13
|
+
};
|
|
14
|
+
description?: string;
|
|
15
|
+
keywords?: string[];
|
|
16
|
+
openGraph?: {
|
|
17
|
+
title?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
url?: string;
|
|
20
|
+
siteName?: string;
|
|
21
|
+
images?: Array<string | {
|
|
22
|
+
url: string;
|
|
23
|
+
width?: number;
|
|
24
|
+
height?: number;
|
|
25
|
+
alt?: string;
|
|
26
|
+
}>;
|
|
27
|
+
type?: string;
|
|
28
|
+
};
|
|
29
|
+
twitter?: {
|
|
30
|
+
card?: 'summary' | 'summary_large_image' | 'app' | 'player';
|
|
31
|
+
site?: string;
|
|
32
|
+
creator?: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
images?: string[];
|
|
36
|
+
};
|
|
37
|
+
robots?: {
|
|
38
|
+
index?: boolean;
|
|
39
|
+
follow?: boolean;
|
|
40
|
+
nocache?: boolean;
|
|
41
|
+
};
|
|
42
|
+
icons?: {
|
|
43
|
+
icon?: Array<{
|
|
44
|
+
url: string;
|
|
45
|
+
type?: string;
|
|
46
|
+
sizes?: string;
|
|
47
|
+
rel?: string;
|
|
48
|
+
}> | string | string[];
|
|
49
|
+
apple?: Array<{
|
|
50
|
+
url: string;
|
|
51
|
+
sizes?: string;
|
|
52
|
+
rel?: string;
|
|
53
|
+
}> | string | string[];
|
|
54
|
+
other?: Array<{
|
|
55
|
+
url: string;
|
|
56
|
+
rel?: string;
|
|
57
|
+
type?: string;
|
|
58
|
+
sizes?: string;
|
|
59
|
+
color?: string;
|
|
60
|
+
}>;
|
|
61
|
+
};
|
|
62
|
+
manifest?: string;
|
|
63
|
+
themeColor?: string | Array<{
|
|
64
|
+
color: string;
|
|
65
|
+
media?: string;
|
|
66
|
+
}>;
|
|
67
|
+
appleWebApp?: {
|
|
68
|
+
title?: string;
|
|
69
|
+
statusBarStyle?: 'default' | 'black' | 'black-translucent';
|
|
70
|
+
capable?: boolean;
|
|
71
|
+
};
|
|
72
|
+
viewport?: string;
|
|
73
|
+
canonical?: string;
|
|
74
|
+
}
|
|
75
|
+
type StaticParamsResult = Array<Record<string, string | string[]>>;
|
|
76
|
+
declare function extractServerProps(componentPath: string, params: Record<string, string>, searchParams: Record<string, string>): Promise<ServerSidePropsResult>;
|
|
77
|
+
declare function extractMetadata(componentPath: string, params: Record<string, string>, searchParams: Record<string, string>): Promise<MetadataResult>;
|
|
78
|
+
declare function extractStaticParams(componentPath: string): Promise<StaticParamsResult>;
|
|
79
|
+
declare function hasServerSideDataFetching(componentPath: string): Promise<boolean>;
|
|
80
|
+
declare function extractServerPropsWithCache(componentPath: string, params: Record<string, string>, searchParams: Record<string, string>, cacheTime?: number): Promise<ServerSidePropsResult>;
|
|
81
|
+
declare function clearPropsCache(): void;
|
|
82
|
+
declare function clearPropsCacheForComponent(componentPath: string): void;
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/types/server-config.d.ts
|
|
85
|
+
interface ServerCSPConfig {
|
|
86
|
+
scriptSrc?: string[];
|
|
87
|
+
styleSrc?: string[];
|
|
88
|
+
imgSrc?: string[];
|
|
89
|
+
fontSrc?: string[];
|
|
90
|
+
connectSrc?: string[];
|
|
91
|
+
defaultSrc?: string[];
|
|
92
|
+
workerSrc?: string[];
|
|
93
|
+
}
|
|
94
|
+
interface ServerCacheControlConfig {
|
|
95
|
+
routes: Record<string, string>;
|
|
96
|
+
}
|
|
97
|
+
interface ServerConfig {
|
|
98
|
+
csp?: ServerCSPConfig;
|
|
99
|
+
cacheControl?: ServerCacheControlConfig;
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { ServerSidePropsResult as a, clearPropsCacheForComponent as c, extractServerPropsWithCache as d, extractStaticParams as f, MetadataResult as i, extractMetadata as l, ServerCacheControlConfig as n, StaticParamsResult as o, hasServerSideDataFetching as p, ServerConfig as r, clearPropsCache as s, ServerCSPConfig as t, extractServerProps as u };
|
|
@@ -63,12 +63,21 @@ interface ApiRouteEntry {
|
|
|
63
63
|
isDynamic: boolean;
|
|
64
64
|
methods: string[];
|
|
65
65
|
}
|
|
66
|
+
interface TemplateEntry {
|
|
67
|
+
path: string;
|
|
68
|
+
filePath: string;
|
|
69
|
+
css?: string[];
|
|
70
|
+
componentId?: string;
|
|
71
|
+
parentPath?: string;
|
|
72
|
+
additionalPaths?: string[];
|
|
73
|
+
}
|
|
66
74
|
interface AppRouteManifest {
|
|
67
75
|
routes: AppRouteEntry[];
|
|
68
76
|
layouts: LayoutEntry[];
|
|
69
77
|
loading: LoadingEntry[];
|
|
70
78
|
errors: ErrorEntry[];
|
|
71
79
|
notFound: NotFoundEntry[];
|
|
80
|
+
templates: TemplateEntry[];
|
|
72
81
|
apiRoutes: ApiRouteEntry[];
|
|
73
82
|
ogImages: OgImageEntry[];
|
|
74
83
|
generated: string;
|
|
@@ -170,6 +179,7 @@ interface AppRouteMatch {
|
|
|
170
179
|
layouts: LayoutEntry[];
|
|
171
180
|
loading?: LoadingEntry;
|
|
172
181
|
error?: ErrorEntry;
|
|
182
|
+
templates: TemplateEntry[];
|
|
173
183
|
pathname: string;
|
|
174
184
|
}
|
|
175
185
|
type GenerateMetadata<TParams extends RouteParams = RouteParams, TSearchParams extends SearchParams = SearchParams> = (props: {
|
|
@@ -178,4 +188,4 @@ type GenerateMetadata<TParams extends RouteParams = RouteParams, TSearchParams e
|
|
|
178
188
|
}) => RouteMetadata | Promise<RouteMetadata>;
|
|
179
189
|
type GenerateStaticParams<TParams extends RouteParams = RouteParams> = () => TParams[] | Promise<TParams[]>;
|
|
180
190
|
//#endregion
|
|
181
|
-
export { ErrorProps as a, LayoutEntry as c, Metadata as d, NotFoundEntry as f, RouteSegmentType as h, ErrorEntry as i, LayoutProps as l, RouteSegment as m, AppRouteManifest as n, GenerateMetadata as o, PageProps as p, AppRouteMatch as r, GenerateStaticParams as s, AppRouteEntry as t, LoadingEntry as u };
|
|
191
|
+
export { ErrorProps as a, LayoutEntry as c, Metadata as d, NotFoundEntry as f, TemplateEntry as g, RouteSegmentType as h, ErrorEntry as i, LayoutProps as l, RouteSegment as m, AppRouteManifest as n, GenerateMetadata as o, PageProps as p, AppRouteMatch as r, GenerateStaticParams as s, AppRouteEntry as t, LoadingEntry as u };
|
package/dist/vite.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as ErrorProps, c as LayoutEntry, d as Metadata, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, l as LayoutProps, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, p as PageProps, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-
|
|
1
|
+
import { a as ServerSidePropsResult, c as clearPropsCacheForComponent, d as extractServerPropsWithCache, f as extractStaticParams, i as MetadataResult, l as extractMetadata, n as ServerCacheControlConfig, o as StaticParamsResult, p as hasServerSideDataFetching, r as ServerConfig, s as clearPropsCache, t as ServerCSPConfig, u as extractServerProps } from "./server-config-D_oeQzpc.mjs";
|
|
2
|
+
import { a as ErrorProps, c as LayoutEntry, d as Metadata, f as NotFoundEntry, g as TemplateEntry, h as RouteSegmentType, i as ErrorEntry, l as LayoutProps, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, p as PageProps, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-K8DF80Bq.mjs";
|
|
3
3
|
import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-85WvBQcW.mjs";
|
|
4
4
|
import { a as ProxyModule, c as RariURL, i as ProxyMatcher, l as RequestCookies, n as ProxyConfig, o as ProxyResult, r as ProxyFunction, s as RariFetchEvent, t as CookieOptions, u as ResponseCookies } from "./types-3dq9RGI5.mjs";
|
|
5
5
|
import { RariRequest } from "./proxy/RariRequest.mjs";
|
|
@@ -98,6 +98,52 @@ declare class ApiResponse extends Response {
|
|
|
98
98
|
static noContent(init?: ResponseInit): Response;
|
|
99
99
|
}
|
|
100
100
|
//#endregion
|
|
101
|
+
//#region src/http-runtime-client.d.ts
|
|
102
|
+
interface RuntimeClient {
|
|
103
|
+
initialize: () => Promise<void>;
|
|
104
|
+
registerComponent: (componentId: string, componentCode: string) => Promise<void>;
|
|
105
|
+
renderToStreamCallbacks: (componentId: string, props?: string) => Promise<any>;
|
|
106
|
+
registerClientComponent: (componentId: string, filePath: string, exportName: string) => void;
|
|
107
|
+
registerClientReference: (referenceId: string, filePath: string, exportName: string) => void;
|
|
108
|
+
listComponents: () => string[];
|
|
109
|
+
shutdown: () => Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
interface HealthResponse {
|
|
112
|
+
status: string;
|
|
113
|
+
timestamp: string;
|
|
114
|
+
}
|
|
115
|
+
declare class HttpRuntimeClient implements RuntimeClient {
|
|
116
|
+
private baseUrl;
|
|
117
|
+
private timeout;
|
|
118
|
+
private components;
|
|
119
|
+
private initialized;
|
|
120
|
+
constructor(options?: {
|
|
121
|
+
host?: string;
|
|
122
|
+
port?: number;
|
|
123
|
+
timeout?: number;
|
|
124
|
+
ssl?: boolean;
|
|
125
|
+
});
|
|
126
|
+
private assertInitialized;
|
|
127
|
+
private request;
|
|
128
|
+
initialize(): Promise<void>;
|
|
129
|
+
registerComponent(componentId: string, componentCode: string): Promise<void>;
|
|
130
|
+
renderToStreamCallbacks(componentId: string, props?: string): Promise<any>;
|
|
131
|
+
registerClientComponent(componentId: string, filePath: string, exportName: string): void;
|
|
132
|
+
private queueClientComponentRegistration;
|
|
133
|
+
registerClientReference(referenceId: string, filePath: string, exportName: string): void;
|
|
134
|
+
listComponents(): string[];
|
|
135
|
+
shutdown(): Promise<void>;
|
|
136
|
+
checkHealth(): Promise<HealthResponse>;
|
|
137
|
+
isInitialized(): boolean;
|
|
138
|
+
getBaseUrl(): string;
|
|
139
|
+
}
|
|
140
|
+
declare function createHttpRuntimeClient(options?: {
|
|
141
|
+
host?: string;
|
|
142
|
+
port?: number;
|
|
143
|
+
timeout?: number;
|
|
144
|
+
ssl?: boolean;
|
|
145
|
+
}): RuntimeClient;
|
|
146
|
+
//#endregion
|
|
101
147
|
//#region src/router/routes.d.ts
|
|
102
148
|
interface AppRouteGeneratorOptions {
|
|
103
149
|
appDir: string;
|
|
@@ -119,4 +165,4 @@ type Request$1 = globalThis.Request;
|
|
|
119
165
|
type Response$1 = globalThis.Response;
|
|
120
166
|
declare function rari(options?: Parameters<typeof rari$1>[0]): any[];
|
|
121
167
|
//#endregion
|
|
122
|
-
export { ApiResponse, type ApiRouteHandlers, type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, type CookieOptions, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, type LayoutProps, type LoadingEntry, type Metadata, type MetadataResult, type NotFoundEntry, type PageProps, type ProxyConfig, type ProxyFunction, type ProxyMatcher, type ProxyModule, type ProxyPluginOptions, type ProxyResult, type RariFetchEvent, RariRequest, RariResponse, type RariURL, Request$1 as Request, type RequestCookies, Response$1 as Response, type ResponseCookies, type Robots, type RobotsRule, type RouteContext, type RouteHandler, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ServerCSPConfig, type ServerConfig, type ServerSidePropsResult, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo, type StaticParamsResult, clearPropsCache, clearPropsCacheForComponent, createHttpRuntimeClient, defineRariConfig, defineRariOptions, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, generateAppRouteManifest, hasServerSideDataFetching, rari, rariProxy, rariRouter };
|
|
168
|
+
export { ApiResponse, type ApiRouteHandlers, type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, type CookieOptions, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, type LayoutProps, type LoadingEntry, type Metadata, type MetadataResult, type NotFoundEntry, type PageProps, type ProxyConfig, type ProxyFunction, type ProxyMatcher, type ProxyModule, type ProxyPluginOptions, type ProxyResult, type RariFetchEvent, RariRequest, RariResponse, type RariURL, Request$1 as Request, type RequestCookies, Response$1 as Response, type ResponseCookies, type Robots, type RobotsRule, type RouteContext, type RouteHandler, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ServerCSPConfig, type ServerConfig, type ServerSidePropsResult, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo, type StaticParamsResult, type TemplateEntry, clearPropsCache, clearPropsCacheForComponent, createHttpRuntimeClient, defineRariConfig, defineRariOptions, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, generateAppRouteManifest, hasServerSideDataFetching, rari, rariProxy, rariRouter };
|