rari 0.11.0 → 0.12.0
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/ReactFlightClientConfig-BZt6Cjql.d.mts +35 -0
- package/dist/client.d.mts +1 -1
- package/dist/client.mjs +2 -3
- package/dist/get-client-component-BjjGTgmG.mjs +1 -0
- package/dist/preload-modules-DcD-Wjko.mjs +2 -0
- package/dist/router.mjs +1 -1
- package/dist/runtime/AppRouterProvider.d.mts +2 -0
- package/dist/runtime/AppRouterProvider.mjs +6 -7
- package/dist/runtime/entry-client.mjs +4 -4
- package/dist/runtime/rsc-client-runtime.mjs +2 -2
- package/dist/runtime/vendor/react-flight-client/ReactFlightClient.d.mts +71 -0
- package/dist/runtime/vendor/react-flight-client/ReactFlightClient.mjs +2 -0
- package/dist/runtime/vendor/react-flight-client/ReactFlightClientConfig.d.mts +2 -0
- package/dist/runtime/vendor/react-flight-client/ReactFlightClientConfig.mjs +1 -0
- package/dist/runtime/vendor/react-flight-client/index.d.mts +12 -0
- package/dist/runtime/vendor/react-flight-client/index.mjs +1 -0
- package/dist/{runtime-client-yoJmu7vX.mjs → runtime-client-D57-4ZUQ.mjs} +2 -2
- package/dist/server-build-BbPvWrFq.mjs +175 -0
- package/dist/{server-config-Cf6g4PHZ.d.mts → server-config-DXVkrIkP.d.mts} +8 -2
- package/dist/vite.d.mts +1 -1
- package/dist/vite.mjs +8 -5
- package/package.json +16 -16
- package/dist/get-client-component-YrjzU6RI.mjs +0 -1
- package/dist/preload-components-Bp8OQWGz.mjs +0 -1
- package/dist/runtime/react-server-dom-rari-client.d.mts +0 -8
- package/dist/runtime/react-server-dom-rari-client.mjs +0 -3
- package/dist/server-build-CQUf5NnM.mjs +0 -175
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { i as StringDecoder, r as ServerConsumerModuleMap, t as ClientReference } from "../../../ReactFlightClientConfig-BZt6Cjql.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/vendor/react-flight-client/ReactFlightClient.d.ts
|
|
4
|
+
interface Thenable<T> extends Promise<T> {
|
|
5
|
+
status?: 'pending' | 'fulfilled' | 'rejected';
|
|
6
|
+
value?: T;
|
|
7
|
+
reason?: any;
|
|
8
|
+
}
|
|
9
|
+
type CallServerCallback = <A, T>(id: string, args: A) => Promise<T>;
|
|
10
|
+
type RowParserState = 0 | 1 | 2 | 3 | 4;
|
|
11
|
+
interface PendingChunk<T> {
|
|
12
|
+
status: 'pending';
|
|
13
|
+
value: null | Array<(value: T) => void>;
|
|
14
|
+
reason: null | Array<(error: any) => void>;
|
|
15
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
16
|
+
}
|
|
17
|
+
interface BlockedChunk<T> {
|
|
18
|
+
status: 'blocked';
|
|
19
|
+
value: null | Array<(value: T) => void>;
|
|
20
|
+
reason: null | Array<(error: any) => void>;
|
|
21
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
22
|
+
}
|
|
23
|
+
interface ResolvedModelChunk<T> {
|
|
24
|
+
status: 'resolved_model';
|
|
25
|
+
value: string;
|
|
26
|
+
reason: Response;
|
|
27
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
28
|
+
}
|
|
29
|
+
interface ResolvedModuleChunk<T> {
|
|
30
|
+
status: 'resolved_module';
|
|
31
|
+
value: ClientReference<T>;
|
|
32
|
+
reason: null;
|
|
33
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
34
|
+
}
|
|
35
|
+
interface InitializedChunk<T> {
|
|
36
|
+
status: 'fulfilled';
|
|
37
|
+
value: T;
|
|
38
|
+
reason: null;
|
|
39
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
40
|
+
}
|
|
41
|
+
interface ErroredChunk<T> {
|
|
42
|
+
status: 'rejected';
|
|
43
|
+
value: null;
|
|
44
|
+
reason: any;
|
|
45
|
+
then: (resolve: (value: T) => void, reject?: (error: any) => void) => void;
|
|
46
|
+
}
|
|
47
|
+
type SomeChunk<T> = PendingChunk<T> | BlockedChunk<T> | ResolvedModelChunk<T> | ResolvedModuleChunk<T> | InitializedChunk<T> | ErroredChunk<T>;
|
|
48
|
+
interface Response {
|
|
49
|
+
_bundlerConfig: ServerConsumerModuleMap;
|
|
50
|
+
_callServer: CallServerCallback;
|
|
51
|
+
_chunks: Map<number, SomeChunk<any>>;
|
|
52
|
+
_stringDecoder: StringDecoder;
|
|
53
|
+
_closed: boolean;
|
|
54
|
+
_closedReason: any;
|
|
55
|
+
}
|
|
56
|
+
interface StreamState {
|
|
57
|
+
_rowState: RowParserState;
|
|
58
|
+
_rowID: number;
|
|
59
|
+
_rowTag: number;
|
|
60
|
+
_rowLength: number;
|
|
61
|
+
_buffer: Array<Uint8Array>;
|
|
62
|
+
}
|
|
63
|
+
declare function getRoot<T>(response: Response): Thenable<T>;
|
|
64
|
+
declare function reportGlobalError(response: Response, error: Error): void;
|
|
65
|
+
declare function createResponse(bundlerConfig: ServerConsumerModuleMap, callServer: void | CallServerCallback): Response;
|
|
66
|
+
declare function createStreamState(): StreamState;
|
|
67
|
+
declare function processBinaryChunk(response: Response, streamState: StreamState, chunk: Uint8Array): void;
|
|
68
|
+
declare function processStringChunk(response: Response, streamState: StreamState, chunk: string): void;
|
|
69
|
+
declare function close(response: Response): void;
|
|
70
|
+
//#endregion
|
|
71
|
+
export { CallServerCallback, Response, StreamState, Thenable, close, createResponse, createStreamState, getRoot, processBinaryChunk, processStringChunk, reportGlobalError };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createStringDecoder as e,preloadModule as t,readFinalStringChunk as n,readPartialStringChunk as r,requireModule as i,resolveClientReference as a}from"./ReactFlightClientConfig.mjs";const o=Symbol.for(`react.transitional.element`)||Symbol.for(`react.element`),s=Symbol.for(`react.lazy`),c=`pending`,l=`blocked`,u=`resolved_model`,d=`resolved_module`,f=`fulfilled`,p=`rejected`;function m(e,t,n){this.status=e,this.value=t,this.reason=n}m.prototype=Object.create(Promise.prototype),m.prototype.then=function(e,t){let n=this;switch(n.status){case u:A(n);break;case d:j(n);break}switch(n.status){case f:e&&e(n.value);break;case c:case l:if(e){if(n.value===null&&(n.value=[]),!Array.isArray(n.value)){e(n.value);break}n.value.push(e)}if(t){if(n.reason===null&&(n.reason=[]),!Array.isArray(n.reason))break;n.reason.push(t)}break;default:t&&t(n.reason);break}};function h(e){switch(e.status){case u:A(e);break;case d:j(e);break}switch(e.status){case f:return e.value;case c:case l:throw e;default:throw Error(String(e.reason))}}function g(e){return N(e,0)}function _(){return new m(c,null,null)}function v(){return new m(l,null,null)}function y(e){return new m(p,null,e)}function b(e,t){for(let n=0;n<e.length;n++){let r=e[n];typeof r==`function`&&r(t)}}function x(e,t,n){switch(e.status){case f:b(t,e.value);break;case c:case l:if(e.value!==null&&!Array.isArray(e.value)){e.value=t;break}if(e.value)for(let n=0;n<t.length;n++)e.value.push(t[n]);else e.value=t;if(e.reason!==null&&!Array.isArray(e.reason)){e.reason=n;break}if(e.reason){if(n)for(let t=0;t<n.length;t++)e.reason.push(n[t])}else e.reason=n;break;case p:n&&b(n,e.reason);break}}function S(e,t){if(e.status!==c&&e.status!==l)return;let n=e.reason,r=e;if(r.status=p,r.reason=t,n!==null)for(let e=0;e<n.length;e++)n[e](t)}function C(e,t){return new m(u,t,e)}function w(e){return new m(d,e,null)}function T(e){return new m(f,e,null)}function E(e,t,n){if(t.status!==c&&t.status!==l)return;let r=Array.isArray(t.value)?t.value:null,i=Array.isArray(t.reason)?t.reason:null,a=t;a.status=u,a.value=n,a.reason=e,A(a),r!==null&&x(t,r,i)}function D(e,t,n){if(t.status!==c&&t.status!==l&&t.status!==p)return;let r=Array.isArray(t.value)?t.value:null,i=Array.isArray(t.reason)?t.reason:null,a=t;a.status=d,a.value=n,a.reason=null,j(a),r!==null&&x(t,r,i)}let O=null,k=null;function A(e){let t=O,n=k;O=null,k=null;let r=e.value,i=e.reason,a=e;a.status=l,a.value=null,a.reason=null,O=a;try{let t=V(i,r);if(k!==null){let e=k;if(e.errored)throw e.reason;if(e.deps>0){e.value=t,e.chunk=a;return}}let n=e;n.status=f,n.value=t,n.reason=null}catch(t){let n=e;n.status=p,n.reason=t}finally{O=t,k=n}}function j(e){try{let t=i(e.value),n=e;n.status=f,n.value=t,n.reason=null}catch(t){let n=e;n.status=p,n.reason=t}}function M(e,t){e._closed=!0,e._closedReason=t,e._chunks.forEach(e=>{e.status===c&&S(e,t)})}function N(e,t){let n=e._chunks,r=n.get(t);return r||(r=e._closed?y(e._closedReason):_(),n.set(t,r)),r}function P(e,t,n,r){r??={};let i={$$typeof:o,type:t,key:n,ref:null,props:r};if(k!==null){let e=k;if(k=e.parent,e.errored)return F(y(e.reason));if(e.deps>0){let t=v();return e.value=i,e.chunk=t,F(t)}}return i}function F(e){return{$$typeof:s,_payload:e,_init:h}}function I(e,t,n,r,i){let a=t.split(`:`),o=N(e,Number.parseInt(a[0],16));switch(o.status){case u:A(o);break;case d:j(o);break}switch(o.status){case f:{let e=o.value;for(let t=1;t<a.length;t++)e=e[a[t]];return i(e)}case c:case l:return F(o);default:return k?(k.errored=!0,k.reason=o.reason):k={parent:null,chunk:null,value:null,deps:0,errored:!0,reason:o.reason},null}}function L(e){return e}function R(e,t,n,r){if(r[0]===`$`){if(r===`$`)return k!==null&&n===`0`&&(k={parent:k,chunk:null,value:null,deps:0,errored:!1,reason:null}),o;switch(r[1]){case`$`:return r.slice(1);case`L`:return F(N(e,Number.parseInt(r.slice(2),16)));case`@`:return N(e,Number.parseInt(r.slice(2),16));case`S`:return Symbol.for(r.slice(2));case`F`:return I(e,r.slice(2),t,n,t=>W(e,t));case`Q`:return I(e,r.slice(2),t,n,H);case`W`:return I(e,r.slice(2),t,n,U);case`I`:return 1/0;case`-`:return r===`$-0`?-0:-1/0;case`N`:return NaN;case`u`:return;case`D`:return new Date(Date.parse(r.slice(2)));case`n`:return BigInt(r.slice(2));default:return I(e,r.slice(1),t,n,L)}}return r}function z(e,t){let n=t;return n[0]===o?P(e,n[1],n[2],n[3]):t}function B(e,t,n,r){if(typeof t==`string`)return t[0]===`$`?R(e,n,r,t):t;if(typeof t!=`object`||!t)return t;if(Array.isArray(t)){for(let n=0;n<t.length;n++)t[n]=B(e,t[n],t,`${n}`);return t[0]===o?z(e,t):t}for(let n in t)if(n===`__proto__`)delete t[n];else{let r=B(e,t[n],t,n);r===void 0?delete t[n]:t[n]=r}return t}function V(e,t){let n=JSON.parse(t);return B(e,n,{"":n},``)}function H(e){return new Map(e)}function U(e){return new Set(e)}function W(e,t){let n=e._callServer,r=t.id;return function(...e){return n(r,e)}}function G(){throw Error(`Trying to call a function from "use server" but the callServer option was not implemented in your router runtime.`)}function K(t,n){let r=new Map;this._bundlerConfig=t,this._callServer=n===void 0?G:n,this._chunks=r,this._stringDecoder=e(),this._closed=!1,this._closedReason=null}function q(e,t){return new K(e,t)}function J(){return{_rowState:0,_rowID:0,_rowTag:0,_rowLength:0,_buffer:[]}}function Y(e,t,n){let r=e._chunks,i=r.get(t);i?E(e,i,n):r.set(t,C(e,n))}function X(e,t,n){e._chunks.set(t,T(n))}function Z(e,n,r){let i=e._chunks,o=i.get(n),s=a(V(e,r)),c=t(s);if(c){let t;o?(t=o,t.status=l):(t=v(),i.set(n,t)),c.then(()=>D(e,t,s),e=>S(t,e))}else o?D(e,o,s):i.set(n,w(s))}function Q(e,t,n){let r=Error(`An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.`);r.digest=n;let i=e._chunks,a=i.get(t);a?S(a,r):i.set(t,y(r))}function $(e,t,n,r){switch(n){case 73:Z(e,t,r);return;case 69:Q(e,t,JSON.parse(r).digest);return;case 84:X(e,t,r);return;default:Y(e,t,r)}}function ee(e,t,i){let a=0,o=t._rowState,s=t._rowID,c=t._rowTag,l=t._rowLength,u=t._buffer,d=i.length;for(;a<d;){let t=-1;switch(o){case 0:{let e=i[a++];e===58?o=1:s=s<<4|(e>96?e-87:e-48);continue}case 1:{let e=i[a];e===84||e>64&&e<91?(c=e,o=3,a++):(c=0,o=3);continue}case 3:t=i.indexOf(10,a);break}let d=i.byteOffset+a;if(t>-1){let f=t-a,p=new Uint8Array(i.buffer,d,f),m=e._stringDecoder,h=``;for(let e=0;e<u.length;e++)h+=r(m,u[e]);h+=n(m,p),$(e,s,c,h),a=t,o===3&&a++,o=0,c=0,s=0,l=0,u.length=0}else{let e=i.byteLength-a,t=new Uint8Array(i.buffer,d,e);u.push(t),l-=t.byteLength;break}}t._rowState=o,t._rowID=s,t._rowTag=c,t._rowLength=l}function te(e,t,n){let r=0,i=t._rowState,a=t._rowID,o=t._rowTag,s=n.length;for(;r<s;){let t=-1;switch(i){case 0:{let e=n.charCodeAt(r++);e===58?i=1:a=a<<4|(e>96?e-87:e-48);continue}case 1:{let e=n.charCodeAt(r);e===84||e>64&&e<91?(o=e,i=3,r++):(o=0,i=3);continue}case 3:t=n.indexOf(`
|
|
2
|
+
`,r);break}if(t>-1){let s=n.slice(r,t);$(e,a,o,s),r=t,i===3&&r++,i=0,o=0,a=0}else break}t._rowState=i,t._rowID=a,t._rowTag=o}function ne(e){e._closed=!0,e._chunks.forEach(e=>{e.status===c&&S(e,Error(`Connection closed.`))})}export{ne as close,q as createResponse,J as createStreamState,g as getRoot,ee as processBinaryChunk,te as processStringChunk,M as reportGlobalError};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as createStringDecoder, c as readPartialStringChunk, i as StringDecoder, l as requireModule, n as ClientReferenceMetadata, o as preloadModule, r as ServerConsumerModuleMap, s as readFinalStringChunk, t as ClientReference, u as resolveClientReference } from "../../../ReactFlightClientConfig-BZt6Cjql.mjs";
|
|
2
|
+
export { ClientReference, ClientReferenceMetadata, ServerConsumerModuleMap, StringDecoder, createStringDecoder, preloadModule, readFinalStringChunk, readPartialStringChunk, requireModule, resolveClientReference };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return globalThis}function t(e){return{specifier:e.id,name:e.name||`default`}}function n(t){let n=e()[`~clientComponents`];if(!n)return null;let r=`${t.specifier}#${t.name}`,i=r.replace(/\\/g,`/`),a=t.specifier.replace(/\\/g,`/`),o=n[i]||n[r]||(t.name===`default`?n[a]||n[t.specifier]:void 0);return!o||o.component?null:o.loadPromise?o.loadPromise:o.loader?(o.loading=!0,o.loadPromise=o.loader().then(e=>(o.component=e,o.registered=!0,o.loading=!1,e)).catch(e=>{throw o.loading=!1,o.loadPromise=void 0,e}),o.loadPromise):null}function r(t){let n=e()[`~clientComponents`];if(!n)throw Error(`[rari] Client components registry not found`);let r=`${t.specifier}#${t.name}`,i=r.replace(/\\/g,`/`),a=t.specifier.replace(/\\/g,`/`),o=n[i]||n[r]||(t.name===`default`?n[a]||n[t.specifier]:void 0);if(!o)throw Error(`[rari] Component not registered: ${r}`);if(o.component){let e=o.component;return typeof e==`function`||t.name===`default`?e:e?.[t.name]}throw o.loadPromise?o.loadPromise:o.loader?(o.loading=!0,o.loadPromise=o.loader().then(e=>(o.component=e,o.registered=!0,o.loading=!1,e)).catch(e=>{throw o.loading=!1,o.loadPromise=void 0,e}),o.loadPromise):Error(`[rari] Module not found: ${r}`)}function i(e,t){return e.decode(t,{stream:!0})}function a(e,t){return e.decode(t)}function o(){return new TextDecoder}export{o as createStringDecoder,n as preloadModule,a as readFinalStringChunk,i as readPartialStringChunk,r as requireModule,t as resolveClientReference};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CallServerCallback, Thenable } from "./ReactFlightClient.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/vendor/react-flight-client/index.d.ts
|
|
4
|
+
interface Options {
|
|
5
|
+
callServer?: CallServerCallback;
|
|
6
|
+
moduleMap?: any;
|
|
7
|
+
moduleLoading?: any;
|
|
8
|
+
}
|
|
9
|
+
declare function createFromReadableStream<T>(stream: ReadableStream<Uint8Array>, options?: Options): Thenable<T>;
|
|
10
|
+
declare function createFromFetch<T>(promiseForResponse: Promise<globalThis.Response>, options?: Options): Thenable<T>;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Options, createFromFetch, createFromReadableStream };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{close as e,createResponse as t,createStreamState as n,getRoot as r,processBinaryChunk as i,reportGlobalError as a}from"./ReactFlightClient.mjs";function o(n,i){let a=t(i?.moduleMap?{moduleMap:i.moduleMap,moduleLoading:i.moduleLoading}:{},i?.callServer);return c(a,n,()=>{e(a)}),r(a)}function s(n,i){let o=t(i?.moduleMap?{moduleMap:i.moduleMap,moduleLoading:i.moduleLoading}:{},i?.callServer);return n.then(t=>{if(!t.body){a(o,Error(`Response has no body`));return}c(o,t.body,()=>{e(o)})},e=>{if(l(e)){o._closed=!0;return}a(o,e)}),r(o)}function c(e,t,r){let o=n(),s=t.getReader();function c(t){if(t.done)return r();let n=t.value;return i(e,o,n),s.read().then(c).catch(u)}function u(t){if(l(t)){e._closed=!0;return}a(e,t)}s.read().then(c).catch(u)}function l(e){return e instanceof Error&&(e.name===`AbortError`||e.message===`The operation was aborted.`||e.message===`The user aborted a request.`)}export{s as createFromFetch,o as createFromReadableStream};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import*as e from"react";import{Component as t,Suspense as n}from"react";function r(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 i(e,t,n,i){typeof e.getData==`function`&&r(await e.getData({params:t,searchParams:n}),i)}async function a(e,t,n,i){typeof e.getServerSideProps==`function`&&r(await e.getServerSideProps({params:t,searchParams:n}),i)}async function o(e,t,n){typeof e.getStaticProps==`function`&&r(await e.getStaticProps({params:t}),n)}async function s(e,t,n){try{let r=await import(e),s={props:{}};return await i(r,t,n,s),await a(r,t,n,s),await o(r,t,s),s}catch(t){return console.error(`[rari] Router: Failed to extract server props from ${e}:`,t),{props:{}}}}async function c(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 l(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 u(e){try{let t=await import(e);return!!(t.getData||t.getServerSideProps||t.getStaticProps||t.generateMetadata||t.generateStaticParams)}catch{return!1}}const d=new Map;async function f(e,t,n,r=6e4){let i=`${e}:${JSON.stringify(t)}:${JSON.stringify(n)}`,a=d.get(i);if(a&&Date.now()-a.timestamp<r)return a.result;let o=await s(e,t,n);return d.set(i,{result:o,timestamp:Date.now()}),o}function p(){d.clear()}function m(e){for(let t of d.keys())t.startsWith(e)&&d.delete(t)}async function h(e){if(!e.ok){let t;try{t=await e.text()}catch{t=`<unable to read response body>`}let n=t.length>200?`${t.slice(0,200)}...`:t,r=Error(`HTTP ${e.status}: ${e.statusText}`);throw r.status=e.status,r.statusText=e.statusText,r.bodyPreview=n,r}}var g=class{baseUrl;timeout;components=[];initialized=!1;constructor(e={}){let{host:t=`127.0.0.1`,port:n=3e3,timeout:r=3e4,ssl:i=!1}=e;this.baseUrl=`${i?`https`:`http`}://${t}:${n}`,this.timeout=r}assertInitialized(){if(!this.initialized)throw Error(`Runtime client not initialized. Call initialize() first.`)}async request(e,t={}){let{method:n=`GET`,body:r,headers:i={}}=t,a=`${this.baseUrl}${e}`,o={method:n,headers:{"Content-Type":`application/json`,...i},signal:AbortSignal.timeout(this.timeout)};r&&(n===`POST`||n===`PUT`)&&(o.body=JSON.stringify(r));try{let e=await fetch(a,o);return await h(e),e.headers.get(`content-type`)?.includes(`application/json`)?await e.json():await e.text()}catch(e){if(e instanceof Error){if(e.name===`AbortError`)throw Error(`Request timeout after ${this.timeout}ms`);if(e.message.includes(`ECONNREFUSED`))throw Error(`Failed to connect to rari server at ${this.baseUrl}. Make sure the server is running.`)}throw e}}async initialize(){try{let e=await this.request(`/_rari/health`);if(e.status!==`healthy`)throw Error(`Server is not healthy: ${e.status}`);this.initialized=!0}catch(e){throw Error(`Failed to initialize runtime client: ${e}`)}}async registerComponent(e,t){this.assertInitialized();let n={component_id:e,component_code:t};try{let t=await this.request(`/_rari/register`,{method:`POST`,body:n});if(!t.success)throw Error(`Failed to register component: ${t.error||`Unknown error`}`);this.components.includes(e)||this.components.push(e)}catch(t){throw Error(`Failed to register component ${e}: ${t}`)}}async renderToStreamCallbacks(e,t){this.assertInitialized();let n={component_id:e,props:t?JSON.parse(t):void 0};try{let e=await fetch(`${this.baseUrl}/_rari/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});return await h(e),e.body}catch(t){throw Error(`Failed to stream component ${e}: ${t}`)}}registerClientComponent(e,t,n){this.queueClientComponentRegistration(e,t,n)}async queueClientComponentRegistration(e,t,n){if(!this.initialized){console.error(`[rari] Runtime: Client not initialized. Client component registration will be delayed.`);return}let r={component_id:e,file_path:t,export_name:n};try{let e=await this.request(`/_rari/register-client`,{method:`POST`,body:r});if(!e.success)throw Error(`Failed to register client component: ${e.error||`Unknown error`}`)}catch(t){console.error(`[rari] Runtime: Failed to register client component ${e}:`,t)}}registerClientReference(e,t,n){this.queueClientComponentRegistration(e,t,n)}listComponents(){return[...this.components]}async shutdown(){try{this.initialized=!1,this.components=[]}catch(e){console.error(`[rari] Runtime: Error during shutdown:`,e)}}async getServerStatus(){return await this.request(`/_rari/status`)}async checkHealth(){return await this.request(`/_rari/health`)}isInitialized(){return this.initialized}getBaseUrl(){return this.baseUrl}};function _(e){return new g(e)}function v(t){return
|
|
1
|
+
import*as e from"react";import{Component as t,Suspense as n}from"react";function r(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 i(e,t,n,i){typeof e.getData==`function`&&r(await e.getData({params:t,searchParams:n}),i)}async function a(e,t,n,i){typeof e.getServerSideProps==`function`&&r(await e.getServerSideProps({params:t,searchParams:n}),i)}async function o(e,t,n){typeof e.getStaticProps==`function`&&r(await e.getStaticProps({params:t}),n)}async function s(e,t,n){try{let r=await import(e),s={props:{}};return await i(r,t,n,s),await a(r,t,n,s),await o(r,t,s),s}catch(t){return console.error(`[rari] Router: Failed to extract server props from ${e}:`,t),{props:{}}}}async function c(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 l(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 u(e){try{let t=await import(e);return!!(t.getData||t.getServerSideProps||t.getStaticProps||t.generateMetadata||t.generateStaticParams)}catch{return!1}}const d=new Map;async function f(e,t,n,r=6e4){let i=`${e}:${JSON.stringify(t)}:${JSON.stringify(n)}`,a=d.get(i);if(a&&Date.now()-a.timestamp<r)return a.result;let o=await s(e,t,n);return d.set(i,{result:o,timestamp:Date.now()}),o}function p(){d.clear()}function m(e){for(let t of d.keys())t.startsWith(e)&&d.delete(t)}async function h(e){if(!e.ok){let t;try{t=await e.text()}catch{t=`<unable to read response body>`}let n=t.length>200?`${t.slice(0,200)}...`:t,r=Error(`HTTP ${e.status}: ${e.statusText}`);throw r.status=e.status,r.statusText=e.statusText,r.bodyPreview=n,r}}var g=class{baseUrl;timeout;components=[];initialized=!1;constructor(e={}){let{host:t=`127.0.0.1`,port:n=3e3,timeout:r=3e4,ssl:i=!1}=e;this.baseUrl=`${i?`https`:`http`}://${t}:${n}`,this.timeout=r}assertInitialized(){if(!this.initialized)throw Error(`Runtime client not initialized. Call initialize() first.`)}async request(e,t={}){let{method:n=`GET`,body:r,headers:i={}}=t,a=`${this.baseUrl}${e}`,o={method:n,headers:{"Content-Type":`application/json`,...i},signal:AbortSignal.timeout(this.timeout)};r&&(n===`POST`||n===`PUT`)&&(o.body=JSON.stringify(r));try{let e=await fetch(a,o);return await h(e),e.headers.get(`content-type`)?.includes(`application/json`)?await e.json():await e.text()}catch(e){if(e instanceof Error){if(e.name===`AbortError`)throw Error(`Request timeout after ${this.timeout}ms`);if(e.message.includes(`ECONNREFUSED`))throw Error(`Failed to connect to rari server at ${this.baseUrl}. Make sure the server is running.`)}throw e}}async initialize(){try{let e=await this.request(`/_rari/health`);if(e.status!==`healthy`)throw Error(`Server is not healthy: ${e.status}`);this.initialized=!0}catch(e){throw Error(`Failed to initialize runtime client: ${e}`)}}async registerComponent(e,t){this.assertInitialized();let n={component_id:e,component_code:t};try{let t=await this.request(`/_rari/register`,{method:`POST`,body:n});if(!t.success)throw Error(`Failed to register component: ${t.error||`Unknown error`}`);this.components.includes(e)||this.components.push(e)}catch(t){throw Error(`Failed to register component ${e}: ${t}`)}}async renderToStreamCallbacks(e,t){this.assertInitialized();let n={component_id:e,props:t?JSON.parse(t):void 0};try{let e=await fetch(`${this.baseUrl}/_rari/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});return await h(e),e.body}catch(t){throw Error(`Failed to stream component ${e}: ${t}`)}}registerClientComponent(e,t,n){this.queueClientComponentRegistration(e,t,n)}async queueClientComponentRegistration(e,t,n){if(!this.initialized){console.error(`[rari] Runtime: Client not initialized. Client component registration will be delayed.`);return}let r={component_id:e,file_path:t,export_name:n};try{let e=await this.request(`/_rari/register-client`,{method:`POST`,body:r});if(!e.success)throw Error(`Failed to register client component: ${e.error||`Unknown error`}`)}catch(t){console.error(`[rari] Runtime: Failed to register client component ${e}:`,t)}}registerClientReference(e,t,n){this.queueClientComponentRegistration(e,t,n)}listComponents(){return[...this.components]}async shutdown(){try{this.initialized=!1,this.components=[]}catch(e){console.error(`[rari] Runtime: Error during shutdown:`,e)}}async getServerStatus(){return await this.request(`/_rari/status`)}async checkHealth(){return await this.request(`/_rari/health`)}isInitialized(){return this.initialized}getBaseUrl(){return this.baseUrl}};function _(e){return new g(e)}function v({children:t,fallback:r}){return e.createElement(n,{fallback:r},t)}function y(t){return({children:n})=>e.createElement(v,{fallback:t,children:n})}var b=class extends t{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.props.onError?.(e,t)}render(){if(this.state.hasError){let t=()=>this.setState({hasError:!1,error:null});return this.props.fallback?this.props.fallback(this.state.error,t):e.createElement(`div`,{style:{padding:`1rem`,border:`1px solid #ef4444`,borderRadius:`0.5rem`,backgroundColor:`#fef2f2`}},[e.createElement(`h2`,{style:{color:`#dc2626`,margin:`0 0 0.5rem 0`}},`Something went wrong`),e.createElement(`p`,{style:{color:`#991b1b`,margin:`0 0 1rem 0`}},this.state.error?.message||`An unexpected error occurred`),e.createElement(`button`,{onClick:t,style:{padding:`0.5rem 1rem`,backgroundColor:`#dc2626`,color:`white`,border:`none`,borderRadius:`0.25rem`,cursor:`pointer`}},`Try again`)])}return this.props.children}};function x({children:t,fallback:n}){return e.createElement(b,{fallback:n},t)}function S(t){return({children:n})=>e.createElement(x,{fallback:t,children:n})}function C(){return e.createElement(`div`,{style:{padding:`2rem`,textAlign:`center`}},[e.createElement(`h1`,{style:{fontSize:`2rem`,margin:`0 0 1rem 0`}},`404 - Page Not Found`),e.createElement(`p`,{style:{color:`#6b7280`,margin:`0 0 1rem 0`}},`The page you're looking for doesn't exist.`),e.createElement(`button`,{onClick:()=>window.history.back(),style:{padding:`0.5rem 1rem`,backgroundColor:`#3b82f6`,color:`white`,border:`none`,borderRadius:`0.25rem`,cursor:`pointer`}},`Go back`)])}function w({size:t=`medium`}){let n={small:`1rem`,medium:`2rem`,large:`3rem`};return e.createElement(`div`,{style:{display:`inline-block`,width:n[t],height:n[t],border:`2px solid #e5e7eb`,borderTop:`2px solid #3b82f6`,borderRadius:`50%`,animation:`spin 1s linear infinite`}})}function T(){return e.createElement(`div`,{style:{display:`flex`,justifyContent:`center`,alignItems:`center`,padding:`2rem`,minHeight:`200px`}},e.createElement(w))}function E({error:t,reset:n}){return e.createElement(`div`,{style:{padding:`2rem`,border:`1px solid #ef4444`,borderRadius:`0.5rem`,backgroundColor:`#fef2f2`,textAlign:`center`}},[e.createElement(`h2`,{style:{color:`#dc2626`,margin:`0 0 1rem 0`}},`Something went wrong`),e.createElement(`p`,{style:{color:`#991b1b`,margin:`0 0 1rem 0`}},t.message||`An unexpected error occurred`),e.createElement(`button`,{onClick:n,style:{padding:`0.5rem 1rem`,backgroundColor:`#dc2626`,color:`white`,border:`none`,borderRadius:`0.25rem`,cursor:`pointer`}},`Try again`)])}if(typeof document<`u`){let e=document.createElement(`style`);e.textContent=`
|
|
2
2
|
@keyframes spin {
|
|
3
3
|
0% { transform: rotate(0deg); }
|
|
4
4
|
100% { transform: rotate(360deg); }
|
|
5
5
|
}
|
|
6
|
-
`,document.head.appendChild(e)}export{u as _,
|
|
6
|
+
`,document.head.appendChild(e)}export{u as _,w as a,_ as c,p as d,m as f,l as g,f as h,g as i,y as l,s as m,T as n,C as o,c as p,b as r,S as s,E as t,h as u};
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import{C as t,a as n,c as r,d as i,i as a,o,r as s,s as c,w as l}from"./regex-constants-CmOAY1_W.mjs";import u from"node:fs";import d from"node:path";import f from"node:process";import{pathToFileURL as p}from"node:url";import{build as m}from"rolldown";const h=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]);function g(e){return e===` `||e===` `||e===`\r`||e===`
|
|
2
|
+
`||e===`\u2028`||e===`\u2029`||e===``}function _(e){return e===`\r`||e===`
|
|
3
|
+
`||e===`\u2028`||e===`\u2029`}function ee(e,t,n){for(;t<n&&g(e[t]);)t++;return t}function v(e,t,n){for(;t<n;){let r=ee(e,t,n);if(r!==t){t=r;continue}if(e[t]===`/`&&e[t+1]===`/`){t=y(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=b(e,t,n);continue}break}return t}function y(e,t,n){for(;t<n&&!_(e[t]);)t++;return t}function b(e,t,n){for(t+=2;t<n-1&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}function x(e,t,n,r){for(t++;t<n;){if(e[t]===`\\`){t+=2;continue}if(e[t]===r)return t+1;t++}return t}function S(e,t,n){t++;let r=e[t]===`/`;for(r&&t++;t<n&&(E(e[t])||e[t]===`.`||e[t]===`-`);)t++;let i=+!r;for(;t<n&&i>0;){let a=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(a){t=x(e,t,n,a);continue}if(e[t]===`{`){t++;let r=1;for(;t<n&&r>0;){let i=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(i){t=x(e,t,n,i);continue}e[t]===`{`&&r++,e[t]===`}`&&r--,t++}continue}if(e[t]===`/`&&e[t+1]===`>`){i--,t+=2;continue}if(e[t]===`>`){t++,r&&i--;continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||D(r)){for(r===`/`?(i--,t++):r!==`!`&&i++,t++;t<n&&(E(e[t])||e[t]===`.`||e[t]===`-`);)t++;continue}t++;continue}t++}return t}function C(e,t){let n=0,r=e.length;for(;n<r;){if(g(e[n])){n++;continue}if(e[n]===`/`&&e[n+1]===`/`){n=y(e,n,r);continue}if(e[n]===`/`&&e[n+1]===`*`){n=b(e,n,r);continue}let i=e[n]===`'`||e[n]===`"`?e[n]:null;if(i){let a=n+1,o=x(e,n,r,i);if(o>a){let i=e.slice(a,o-1),s=o;for(;s<r;){if(g(e[s])&&!_(e[s])){s++;continue}if(_(e[s])||e[s]===`;`){if(i===t)return!0;n=s+1;break}if(e[s]===`/`&&e[s+1]===`/`){s=y(e,s,r);continue}if(e[s]===`/`&&e[s+1]===`*`){s=b(e,s,r);continue}return!1}if(s>=r)return i===t;if(s<r&&(_(e[s])||e[s]===`;`))continue;return!1}}return!1}return!1}function w(e){return C(e,`use server`)}function T(e){return C(e,`use client`)}function E(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e>=`0`&&e<=`9`||e===`_`||e===`$`)}function D(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e===`_`||e===`$`)}function te(e){return!e||e===`(`||e===`[`||e===`{`||e===`,`||e===`;`||e===`=`||e===`:`||e===`?`||e===`!`||e===`+`||e===`-`||e===`*`||e===`%`||e===`&`||e===`|`||e===`^`||e===`~`||e===`<`||e===`>`}function O(e,t){let n=t-1;for(;n>=0;){if(g(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
|
|
4
|
+
`&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}break}if(n<0||!E(e[n]))return;let r=n;for(;n>=0&&E(e[n]);)n--;return e.slice(n+1,r+1)}function k(e,t){if(te(j(e,t)))return!0;let n=O(e,t);return n?h.has(n):!1}function A(e,t,n){t++;let r=!1;for(;t<n;){if(e[t]===`\\`){t+=2;continue}if(r){e[t]===`]`&&(r=!1),t++;continue}if(e[t]===`[`){r=!0,t++;continue}if(e[t]===`/`){for(t++;t<n&&E(e[t]);)t++;return t}if(_(e[t]))return t;t++}return t}function j(e,t){let n=t-1;for(;n>=0;){if(g(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
|
|
5
|
+
`&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}return e[n]}}function M(e){let t=0,n=e.length;for(;t<n;){if(g(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){t=y(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=b(e,t,n);continue}let r=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(r){t=x(e,t,n,r);continue}if(e[t]===`/`&&e[t+1]!==`/`&&e[t+1]!==`*`&&k(e,t)){t=A(e,t,n);continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||D(r)){t=S(e,t,n);continue}t++;continue}if(e.slice(t,t+6)===`export`){let r=t+6;if(r<n&&(g(e[r])||e[r]===`{`||e[r]===`/`&&(e[r+1]===`/`||e[r+1]===`*`))){let t=v(e,r,n);if(e.slice(t,t+7)===`default`){let r=t+7;if(r>=n||!E(e[r]))return!0}if(e[t]===`{`){let r=t+1;for(;r<n&&(r=v(e,r,n),e[r]!==`}`);){let t=r;for(;r<n&&E(e[r]);)r++;let i=e.slice(t,r);if(!i)break;r=v(e,r,n);let a=!1;if(e.slice(r,r+2)===`as`){a=!0;let t=r+2;if(t<n&&!E(e[t])){r=v(e,t,n);let i=r;for(;r<n&&E(e[r]);)r++;if(e.slice(i,r)===`default`)return!0}}if(!a&&i===`default`)return!0;if(e[r]===`,`){r++;continue}if(e[r]===`}`)break;r++}}}}t++}return!1}function N(e,t){let n=null;for(let r of t)if(e.endsWith(r)&&(n??=u.existsSync(e),n))return e;for(let n of t){let t=`${e}${n}`;if(u.existsSync(t))return t}return null}function P(e,t){if(u.existsSync(e)){if(!u.statSync(e).isDirectory())return null;for(let n of t){let t=d.join(e,`index${n}`);if(u.existsSync(t))return t}}return null}function F(e,t,n){if(typeof e!=`string`)throw TypeError(`Expected source to be a string, but received ${typeof e}`);if(t==null)throw TypeError(`Expected aliases to be an object, but received ${t}`);if(typeof t!=`object`||Array.isArray(t))throw TypeError(`Expected aliases to be a plain object, but received ${Array.isArray(t)?`array`:typeof t}`);if(Object.getPrototypeOf(t)!==Object.prototype&&Object.getPrototypeOf(t)!==null)throw TypeError(`Expected aliases to be a plain object, but received ${t.constructor?.name||`object with custom prototype`}`);if(typeof n!=`string`)throw TypeError(`Expected projectRoot to be a string, but received ${typeof n}`);let r=Object.entries(t).sort((e,t)=>t[0].length-e[0].length);for(let[t,i]of r)if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length),a=d.join(i,r);return d.isAbsolute(a)?a:d.resolve(n,a)}return null}var I=e({ServerComponentBuilder:()=>Z,createServerBuildPlugin:()=>$,scanDirectory:()=>Q});const L=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,R=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,z=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,B=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,V=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,H=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,U=/\\/g,W=/\.(tsx?|jsx?)$/,G=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,K=/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/,q=/^export\s*\{([^}]+)\};?\s*$/gm,J=/^export\s+(const|let|var)\s+(\w+)/gm,ne=/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/,Y=/^node:/,X=/\\/g;var Z=class{serverComponents=new Map;serverActions=new Map;options;projectRoot;buildCache=new Map;htmlOnlyImports=new Set;fileImporters=new Map;getComponentCount(){return this.serverComponents.size+this.serverActions.size}getImportGraph(){let e=new Map;for(let[t,n]of this.fileImporters)e.set(t,new Set(n));return e}getHtmlOnlyImports(){return new Set(this.htmlOnlyImports)}constructor(e,t={}){this.projectRoot=e;let n=t.rscDir||`server`;this.options={outDir:t.outDir||d.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath||d.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath||d.join(n,`config.json`),minify:t.minify??f.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,rateLimit:t.rateLimit,spamBlocker:t.spamBlocker,cacheControl:t.cacheControl},this.parseHtmlImports()}parseHtmlImports(){let e=d.join(this.projectRoot,`index.html`);if(u.existsSync(e))try{let t=u.readFileSync(e,`utf-8`);for(let e of t.matchAll(L)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=d.join(this.projectRoot,t.slice(1));this.htmlOnlyImports.add(e)}}}catch(e){console.warn(`[server-build] Error parsing index.html:`,e)}}isHtmlOnlyImport(e){return this.htmlOnlyImports.has(e)}isServerComponent(e,t){if(e.includes(`node_modules`)||this.isHtmlOnlyImport(e))return!1;try{let n=t??(u.existsSync(e)?u.readFileSync(e,`utf-8`):null);return n===null?!1:!T(n)&&!w(n)}catch{return!1}}isClientComponent(e,t){try{let n=t??(u.existsSync(e)?u.readFileSync(e,`utf-8`):null);return n===null?!1:T(n)}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let t=e=>{if(!u.existsSync(e))return;let n=u.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=d.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`)continue;t(n)}else if(r.isFile()&&l.test(r.name))try{let e=u.readFileSync(n,`utf-8`),t;for(R.lastIndex=0,t=R.exec(e);t!==null;){let r=t[1]||t[2]||t[3],i=null;if(r.startsWith(`./`)||r.startsWith(`../`)){let e=d.dirname(n);i=d.resolve(e,r)}else if(r.startsWith(`@/`)){let e=r.slice(2);i=d.join(this.projectRoot,`src`,e)}if(i){let e=[``,`.ts`,`.tsx`,`.js`,`.jsx`],t=null;for(let n of e){let e=i+n;if(u.existsSync(e)&&u.statSync(e).isFile()){t=e;break}}t&&(this.fileImporters.has(t)||this.fileImporters.set(t,new Set),this.fileImporters.get(t).add(n))}t=R.exec(e)}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error building import graph:`,n,e)}}};t(e)}isOnlyImportedByClientComponents(e){let t=this.fileImporters.get(e);if(!t||t.size===0)return!1;for(let e of t)if(!this.isClientComponent(e)&&!this.isOnlyImportedByClientComponents(e))return!1;return!0}addServerComponent(e,t){let n=t??u.readFileSync(e,`utf-8`);if(this.isServerAction(n)){let t=this.extractDependencies(n),r=this.hasNodeImports(n);this.serverActions.set(e,{filePath:e,originalCode:n,dependencies:t,hasNodeImports:r});return}if(!this.isServerComponent(e,n))return;let r=this.extractDependencies(n),i=this.hasNodeImports(n);this.serverComponents.set(e,{filePath:e,originalCode:n,dependencies:r,hasNodeImports:i})}isServerAction(e){return w(e)}extractDependencies(e){let t=[],n;for(z.lastIndex=0;n=z.exec(e),n!==null;){let e=n[1];!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`node:`)&&!this.isNodeBuiltin(e)&&t.push(e)}return[...new Set(t)]}isNodeBuiltin(e){return[`fs`,`path`,`os`,`crypto`,`util`,`stream`,`events`,`process`,`buffer`,`url`,`querystring`,`zlib`,`http`,`https`,`net`,`tls`,`child_process`,`cluster`,`worker_threads`].includes(e)}hasNodeImports(e){return e.includes(`from 'node:`)||e.includes(`from "node:`)||e.includes(`from 'fs'`)||e.includes(`from "fs"`)||e.includes(`from 'path'`)||e.includes(`from "path"`)||e.includes(`from 'os'`)||e.includes(`from "os"`)||e.includes(`from 'crypto'`)||e.includes(`from "crypto"`)||e.includes(`from 'util'`)||e.includes(`from "util"`)||e.includes(`from 'stream'`)||e.includes(`from "stream"`)||e.includes(`from 'events'`)||e.includes(`from "events"`)}async getTransformedComponentsForDevelopment(){let e=[];for(let[t]of this.serverComponents){let n=d.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}for(let[t]of this.serverActions){let n=d.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}return e}transformComponentImportsToGlobal(e){let t=[];for(let n of e.matchAll(B)){let[e,r,i]=n;if(!i.startsWith(`.`)&&!i.startsWith(`@`)&&!i.startsWith(`~`)&&!i.startsWith(`#`))continue;let a=null;if(i.startsWith(`.`)){if(i.includes(`/components/`)){let n=i.match(G);if(n){let i=n[1],a=[d.resolve(this.projectRoot,`src`,`components`,`${i}.tsx`),d.resolve(this.projectRoot,`src`,`components`,`${i}.ts`),d.resolve(this.projectRoot,`src`,`components`,`${i}.jsx`),d.resolve(this.projectRoot,`src`,`components`,`${i}.js`)],o=!1;for(let e of a)if(u.existsSync(e)&&this.isClientComponent(e)){o=!0;break}if(!o)continue;let s=`// Component reference: ${i}
|
|
6
|
+
const ${r} = (props) => {
|
|
7
|
+
let Component = globalThis['~clientComponents']?.['components/${i}']?.component
|
|
8
|
+
|| globalThis['components/${i}'];
|
|
9
|
+
|
|
10
|
+
if (Component && typeof Component === 'object' && Component.default) {
|
|
11
|
+
Component = Component.default;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (!Component) {
|
|
15
|
+
throw new Error('Component components/${i} not loaded');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (typeof Component !== 'function') {
|
|
19
|
+
throw new Error('Component components/${i} is not a function, got: ' + typeof Component);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return Component(props);
|
|
23
|
+
}`;t.push({original:e,replacement:s})}}continue}let o=this.options.alias||{};for(let[e,t]of Object.entries(o))if(i.startsWith(`${e}/`)||i===e){let n=i.slice(e.length);a=d.join(t,n);break}if(a){let n=a.match(K);if(n){let i=n[1],o=d.isAbsolute(a)?a:d.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(u.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let f=d.relative(this.projectRoot,l),p=this.getComponentId(f),m=`// Component reference: ${i}
|
|
24
|
+
const ${r} = (props) => {
|
|
25
|
+
let Component = globalThis['~clientComponents']?.['${p}']?.component
|
|
26
|
+
|| globalThis['${p}'];
|
|
27
|
+
|
|
28
|
+
if (Component && typeof Component === 'object' && Component.default) {
|
|
29
|
+
Component = Component.default;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!Component) {
|
|
33
|
+
throw new Error('Component ${p} not loaded');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (typeof Component !== 'function') {
|
|
37
|
+
throw new Error('Component ${p} is not a function, got: ' + typeof Component);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return Component(props);
|
|
41
|
+
}`;t.push({original:e,replacement:m})}}}let n=e;for(let{original:e,replacement:r}of t)n=n.replace(e,r);return n}isPageComponent(e){return e.includes(`/app/`)||e.includes(`\\app\\`)}createBuildPlugins(e,t,n,r,a=!1){let o=d.dirname(r),s=H.test(d.basename(r)),c=this,l=new Map,f=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){let e=d.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(u.existsSync(n)&&u.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=d.join(e,`index${t}`);if(u.existsSync(n))return n}return e}return null},load(r){return r===e?{code:t,moduleType:n}:null}},{name:`resolve-client-server-boundaries`,resolveId:(t,n)=>{if(!n||n.includes(`node_modules`)||n.includes(`/packages/rari/dist`)||t.startsWith(`node:`)||c.isNodeBuiltin(t)||t===`react`||t===`react-dom`||t===`react/jsx-runtime`||t===`react/jsx-dev-runtime`)return null;let r=null;if(r=F(t,c.options.alias||{},c.projectRoot),!r&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:d.dirname(n);r=d.resolve(i,t)}if(r)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(u.existsSync(t)&&u.statSync(t).isFile()){if(c.isClientComponent(t)){let e=d.relative(c.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(X,`/`);return l.set(t,n),{id:`\0client-ref:${t}`}}try{let e=u.readFileSync(t,`utf-8`);if(w(e)){let n=d.relative(c.projectRoot,t),r=n.startsWith(`..`)?t:n,i=M(e);return f.set(t,{actionId:r,hasDefaultExport:i}),{id:`\0server-action:${t}`}}}catch(e){console.error(`[rari] Failed to read file for server action detection: ${t}`,e)}break}}return null},load(e){if(e.startsWith(`\0client-ref:`)){let t=e.slice(12),n=d.relative(c.projectRoot,t),r=(l.get(t)||(n.startsWith(`..`)?t:n)).replace(X,`/`);return{code:`
|
|
42
|
+
function registerClientReference(clientReference, id, exportName) {
|
|
43
|
+
const key = id + '#' + exportName;
|
|
44
|
+
const clientProxy = {};
|
|
45
|
+
Object.defineProperty(clientProxy, '$$typeof', {
|
|
46
|
+
value: Symbol.for('react.client.reference'),
|
|
47
|
+
enumerable: false
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(clientProxy, '$$id', {
|
|
50
|
+
value: key,
|
|
51
|
+
enumerable: false
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(clientProxy, '$$async', {
|
|
54
|
+
value: false,
|
|
55
|
+
enumerable: false
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
if (typeof globalThis['~rari']?.bridge !== 'undefined' &&
|
|
59
|
+
typeof globalThis['~rari'].bridge.registerClientReference === 'function') {
|
|
60
|
+
globalThis['~rari'].bridge.registerClientReference(key, id, exportName);
|
|
61
|
+
}
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error('[rari] Build: Failed to register client reference:', error);
|
|
64
|
+
}
|
|
65
|
+
return clientProxy;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export default registerClientReference(null, ${JSON.stringify(r)}, "default");
|
|
69
|
+
`,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=d.relative(c.projectRoot,t).replace(X,`/`),r=n.startsWith(`src/`)?n.slice(4):n,i=d.join(c.options.outDir,c.options.rscDir,r.replace(W,`.js`)),a=p(d.resolve(c.projectRoot,i)).href;return{code:f.get(t)?.hasDefaultExport??!1?`export * from ${JSON.stringify(a)};\nexport { default } from ${JSON.stringify(a)};`:`export * from ${JSON.stringify(a)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!a)return null;if(e.startsWith(`file://`)){let t=e.replace(i,``);return u.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=F(e,c.options.alias||{},c.projectRoot);let r=t?.startsWith(`\0`)?o:t?d.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=d.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(u.existsSync(t)&&u.statSync(t).isFile()){if(c.isClientComponent(t))return null;let e=d.join(c.projectRoot,`src`);if(!t.startsWith(e))return null;let n=d.relative(e,t),r=d.join(c.options.outDir,c.options.rscDir,n.replace(W,`.js`));if(u.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:u.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=c.options.alias||{};for(let[n,r]of Object.entries(t))if(e.startsWith(`${n}/`)||e===n){let t=e.slice(n.length),i=d.join(r,t),a=d.isAbsolute(i)?i:d.resolve(c.projectRoot,i);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=a+e;if(u.existsSync(t)&&u.statSync(t).isFile())return t}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let t=d.join(a,`index${e}`);if(u.existsSync(t))return t}return a}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=d.resolve(c.projectRoot,`node_modules/rari/dist/proxy/RariResponse.mjs`);if(u.existsSync(e))return e;let t=d.resolve(c.projectRoot,`node_modules/rari/src/proxy/RariResponse.ts`);if(u.existsSync(t))return t}return null}},{name:`externalize-deps`,resolveId:e=>e.startsWith(`\0`)?null:e.startsWith(`node:`)||c.isNodeBuiltin(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)?{id:e,external:!0}:e===`rari`||e===`rari/client`?null:!e.startsWith(`.`)&&!e.startsWith(`/`)?{id:e,external:!0}:null}]}async buildComponentCodeOnly(e){let t=await u.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=d.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await m({input:s,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${o}`]:o},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(f.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(s,i,o,e,r)});if(!c.output||c.output.length===0)throw Error(`No output generated from Rolldown`);let l=c.output.find(e=>e.type===`chunk`&&e.isEntry);if(!l||l.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let p=l.code;return p=`// Built: ${new Date().toISOString()}\n${p}`,p}async buildServerComponents(){let e=d.join(this.options.outDir,this.options.rscDir);await u.promises.mkdir(e,{recursive:!0});let t={react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`},n=this.options.alias||{};for(let[e,r]of Object.entries(n)){let n=d.isAbsolute(r)?r:d.resolve(this.projectRoot,r),i=d.join(this.projectRoot,`src`),a=d.relative(i,n);if(a.startsWith(`..`))continue;let o=d.join(this.options.outDir,this.options.rscDir,a),s=d.resolve(this.projectRoot,o);t[e]||(t[`${e}/`]=`${p(s).href}/`)}let r={components:{},importMap:{imports:t},version:`1.0.0`,buildTime:new Date().toISOString()};for(let[e,t]of this.serverComponents){if(this.isPageComponent(e))continue;let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverComponents){if(!this.isPageComponent(e))continue;let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverActions){let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}let i=d.join(this.options.outDir,this.options.manifestPath);await u.promises.writeFile(i,JSON.stringify(r,null,2),`utf-8`);let a={};this.options.csp&&(a.csp=this.options.csp),this.options.rateLimit&&(a.rateLimit=this.options.rateLimit),this.options.spamBlocker&&(a.spamBlocker=this.options.spamBlocker),this.options.cacheControl&&(a.cacheControl=this.options.cacheControl);let o=d.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(a).length===0)try{await u.promises.unlink(o)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await u.promises.writeFile(o,JSON.stringify(a,null,2),`utf-8`);return r}async buildSingleComponent(e,t,n=!1){let r=await u.promises.readFile(e,`utf-8`),i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=d.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,p=await m({input:l,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${c}`]:c},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(f.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(l,o,c,e,a)});if(!p.output||p.output.length===0)throw Error(`No output generated from Rolldown`);let h=p.output.find(e=>e.type===`chunk`&&e.isEntry);if(!h||h.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let g=h.code;g=`// Built: ${new Date().toISOString()}\n${g}`,await u.promises.writeFile(t,g,`utf-8`);let _=await u.promises.open(t,`r+`);if(await _.sync(),await _.close(),n)return g}createSelfRegisteringModule(e,t){if(e.includes(`Self-registering Production Component`))return e;let i=e,s=null,l=[];if(i=i.replace(o,(e,t)=>(s=t,`function ${t}`)),i=i.replace(a,(e,t)=>(s=t,`async function ${t}`)),i=i.replace(c,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(n,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(q,(e,n)=>{let r=n.split(`,`).map(e=>e.trim()),a=[];return r.forEach(e=>{if(e.includes(`as default`)){let t=e.replace(`as default`,``).trim();s=t,a.push(`${t} (default)`)}else if(e===`default`){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e),a.push(`default`)}else l.push(e),a.push(e)}),`// Exports: ${a.join(`, `)}`}),i=i.replace(r,(e,t)=>(l.push(t),e.replace(`export `,``))),i=i.replace(J,(e,t,n)=>(l.push(n),`${t} ${n}`)),!s){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e)}return`// Self-registering Production Component: ${t}
|
|
70
|
+
|
|
71
|
+
if (!globalThis["${t}"]) {
|
|
72
|
+
${i}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const moduleKey = "${t}";
|
|
76
|
+
let mainExport = null;
|
|
77
|
+
const exportedFunctions = {};
|
|
78
|
+
|
|
79
|
+
if (!globalThis['~serverFunctions']) globalThis['~serverFunctions'] = {};
|
|
80
|
+
if (!globalThis['~serverFunctions'].all) globalThis['~serverFunctions'].all = {};
|
|
81
|
+
|
|
82
|
+
${l.map(e=>`if (typeof ${e} !== 'undefined') {
|
|
83
|
+
globalThis.${e} = ${e};
|
|
84
|
+
globalThis['~serverFunctions'].all['${t}:${e}'] = ${e};
|
|
85
|
+
exportedFunctions['${e}'] = ${e};
|
|
86
|
+
}`).join(`
|
|
87
|
+
`)}
|
|
88
|
+
|
|
89
|
+
${s?`if (typeof ${s} !== 'undefined') {
|
|
90
|
+
mainExport = ${s};
|
|
91
|
+
}`:``}
|
|
92
|
+
|
|
93
|
+
if (mainExport === null && Object.keys(exportedFunctions).length > 0) {
|
|
94
|
+
if (Object.keys(exportedFunctions).length === 1) {
|
|
95
|
+
mainExport = exportedFunctions[Object.keys(exportedFunctions)[0]];
|
|
96
|
+
} else {
|
|
97
|
+
let componentFunction = null;
|
|
98
|
+
let firstFunction = null;
|
|
99
|
+
|
|
100
|
+
for (const [name, value] of Object.entries(exportedFunctions)) {
|
|
101
|
+
if (typeof value === 'function') {
|
|
102
|
+
if (!firstFunction) firstFunction = value;
|
|
103
|
+
if (/^[A-Z]/.test(name)) {
|
|
104
|
+
componentFunction = value;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
mainExport = componentFunction || firstFunction;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (mainExport !== null) {
|
|
115
|
+
if (!globalThis[moduleKey]) {
|
|
116
|
+
globalThis[moduleKey] = mainExport;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (!globalThis['~clientComponents']) globalThis['~clientComponents'] = {};
|
|
120
|
+
globalThis['~clientComponents'][moduleKey] = {
|
|
121
|
+
component: mainExport,
|
|
122
|
+
id: moduleKey,
|
|
123
|
+
registered: true
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
if (typeof globalThis.RscModuleManager !== 'undefined' && globalThis.RscModuleManager.register) {
|
|
127
|
+
globalThis.RscModuleManager.register(moduleKey, mainExport, exportedFunctions);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} catch (error) {
|
|
131
|
+
console.error('[rari] Build: Error in self-registration for ${t}:', error);
|
|
132
|
+
}
|
|
133
|
+
}`}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=[`rari/image`];for(V.lastIndex=0;r=V.exec(e),r!==null;){let[e,n,s,c]=r,l=!1,u=c;if(o.includes(c))l=!0;else{let e=this.resolveImportPath(c,t);this.isClientComponent(e)&&(l=!0,u=d.relative(this.projectRoot,e).replace(X,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
|
|
134
|
+
null,
|
|
135
|
+
${JSON.stringify(u)},
|
|
136
|
+
"default"
|
|
137
|
+
);`:s&&(t=s.split(`,`).map(e=>e.trim()).map(e=>{let[t,n]=e.includes(` as `)?e.split(` as `).map(e=>e.trim()):[e,e];return`const ${n} = registerClientReference(
|
|
138
|
+
null,
|
|
139
|
+
${JSON.stringify(u)},
|
|
140
|
+
${JSON.stringify(t)}
|
|
141
|
+
);`}).join(`
|
|
142
|
+
`)),i.push({original:e,replacement:t})}}a&&(n=`
|
|
143
|
+
function registerClientReference(clientReference, id, exportName) {
|
|
144
|
+
const key = id + '#' + exportName;
|
|
145
|
+
|
|
146
|
+
const clientProxy = {};
|
|
147
|
+
|
|
148
|
+
Object.defineProperty(clientProxy, '$$typeof', {
|
|
149
|
+
value: Symbol.for('react.client.reference'),
|
|
150
|
+
enumerable: false
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
Object.defineProperty(clientProxy, '$$id', {
|
|
154
|
+
value: key,
|
|
155
|
+
enumerable: false
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
Object.defineProperty(clientProxy, '$$async', {
|
|
159
|
+
value: false,
|
|
160
|
+
enumerable: false
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
if (typeof globalThis['~rari']?.bridge !== 'undefined' &&
|
|
165
|
+
typeof globalThis['~rari'].bridge.registerClientReference === 'function') {
|
|
166
|
+
globalThis['~rari'].bridge.registerClientReference(key, id, exportName);
|
|
167
|
+
}
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error('[rari] Build: Failed to register client reference with Rust bridge:', error);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return clientProxy;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
`+n);for(let{original:e,replacement:t}of i)n=n.replace(e,t);return n}resolveImportPath(e,t){let n=e,r=this.options.alias||{};for(let[t,i]of Object.entries(r))if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length);n=d.join(i,r);break}d.isAbsolute(n)||(n=d.resolve(d.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`];return N(n,i)||P(n,i)||`${n}.tsx`}getComponentId(e){return e.replace(U,`/`).replace(W,``).replace(s,`_`).replace(t,``)}async rebuildComponent(e){let t=this.getComponentId(d.relative(this.projectRoot,e)),n=await u.promises.readFile(e,`utf-8`),r=this.extractDependencies(n),i={filePath:e,originalCode:n,dependencies:r,hasNodeImports:this.hasNodeImports(n)};this.isServerAction(n)?this.serverActions.set(e,i):this.serverComponents.set(e,i);let a=d.join(this.options.rscDir,`${t}.js`),o=d.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await u.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.dependencies)===JSON.stringify(r))return await u.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:d.join(this.options.outDir,a),success:!0};let l=d.dirname(o);await u.promises.mkdir(l,{recursive:!0});let f=await this.buildSingleComponent(e,o,!0);return this.buildCache.set(e,{code:f,timestamp:Date.now(),dependencies:r}),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:d.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,t,n){let r=d.join(this.options.outDir,this.options.manifestPath),i;if(this.manifestCache)i=this.manifestCache;else if(u.existsSync(r)){let e=await u.promises.readFile(r,`utf-8`);i=JSON.parse(e),this.manifestCache=i}else i={components:{},importMap:{imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},version:`1.0.0`,buildTime:new Date().toISOString()},this.manifestCache=i;let a=this.serverComponents.get(t)||this.serverActions.get(t),o=d.join(this.options.outDir,n),s=p(d.resolve(this.projectRoot,o)).href;if(a)i.components[e]={id:e,filePath:t,relativePath:d.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:a.dependencies,hasNodeImports:a.hasNodeImports};else{let r=await u.promises.readFile(t,`utf-8`);i.components[e]={id:e,filePath:t,relativePath:d.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:this.extractDependencies(r),hasNodeImports:this.hasNodeImports(r)}}i.importMap||={imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},i.buildTime=new Date().toISOString(),await u.promises.writeFile(r,JSON.stringify(i,null,2),`utf-8`),this.manifestCache=i}clearCache(){this.buildCache.clear(),this.manifestCache=null}async getTransformedComponentCode(e){return await this.buildComponentCodeOnly(e)}};function Q(e,t,n=!0){n&&t.buildImportGraph(e);let r=u.readdirSync(e,{withFileTypes:!0});for(let n of r){let r=d.join(e,n.name);if(n.isDirectory())Q(r,t,!1);else if(n.isFile()&&l.test(n.name)){if(ne.test(n.name)||n.name.endsWith(`.d.ts`))continue;try{let e=u.readFileSync(r,`utf-8`);if(w(e)){t.addServerComponent(r,e);continue}if(t.isOnlyImportedByClientComponents(r))continue;t.isServerComponent(r,e)&&t.addServerComponent(r,e)}catch(e){console.warn(`[server-build] Error checking ${r}:`,e instanceof Error?e.message:e)}}}}function $(e={}){let t=null,n,r=!1;return{name:`rari-server-build`,configResolved(i){n=i.root,r=i.command===`serve`;let a={};if(i.resolve?.alias){let e=i.resolve.alias;Array.isArray(e)?e.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&(a[e.find]=e.replacement)}):typeof e==`object`&&Object.entries(e).forEach(([e,t])=>{typeof t==`string`&&(a[e]=t)})}t=new Z(n,{...e,alias:a})},buildStart(){if(!t)return;let e=f.env.NODE_ENV===`production`,r=[d.join(n,`dist`,`cache`,`og`),d.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{u.existsSync(e)&&u.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let i=d.join(n,`src`);u.existsSync(i)&&Q(i,t)},async closeBundle(){if(t){await t.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-Ch7hYjpz.mjs`);await e({appDir:d.join(n,`src`,`app`),outDir:d.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate robots.txt:`,e)}try{let{generateSitemapFiles:e}=await import(`./sitemap-generator-n0LjA3Y1.mjs`);await e({appDir:d.join(n,`src`,`app`),outDir:d.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate sitemap:`,e)}}},async handleHotUpdate({file:e}){if(!t||!r)return;let i=d.relative(n,e).replace(U,`/`);if(!(!i.startsWith(`src/`)||!l.test(i)))try{if(T(await u.promises.readFile(e,`utf-8`)))return;await t.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}export{M as a,N as i,I as n,T as o,P as r,w as s,$ as t};
|
|
@@ -142,7 +142,10 @@ declare function createLoadingBoundary(fallback: ReactElement): ({
|
|
|
142
142
|
children
|
|
143
143
|
}: {
|
|
144
144
|
children: ReactNode;
|
|
145
|
-
}) => React.FunctionComponentElement<
|
|
145
|
+
}) => React.FunctionComponentElement<{
|
|
146
|
+
children: ReactNode;
|
|
147
|
+
fallback: ReactElement;
|
|
148
|
+
}>;
|
|
146
149
|
declare class ErrorBoundary extends Component<{
|
|
147
150
|
children: ReactNode;
|
|
148
151
|
fallback?: (error: Error, reset: () => void) => ReactElement;
|
|
@@ -163,7 +166,10 @@ declare function createErrorBoundary(fallback?: (error: Error, reset: () => void
|
|
|
163
166
|
children
|
|
164
167
|
}: {
|
|
165
168
|
children: ReactNode;
|
|
166
|
-
}) => React.
|
|
169
|
+
}) => React.FunctionComponentElement<{
|
|
170
|
+
children: ReactNode;
|
|
171
|
+
fallback?: (error: Error, reset: () => void) => ReactElement;
|
|
172
|
+
}>;
|
|
167
173
|
declare function NotFound(): React.DetailedReactHTMLElement<{
|
|
168
174
|
style: {
|
|
169
175
|
padding: string;
|
package/dist/vite.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as extractServerPropsWithCache, S as extractServerProps, T as hasServerSideDataFetching, _ as ServerSidePropsResult, a as ServerSpamBlockerConfig, b as clearPropsCacheForComponent, f as RuntimeClient, g as MetadataResult, i as ServerRateLimitConfig, l as HttpRuntimeClient, m as createHttpRuntimeClient, n as ServerCacheControlConfig, r as ServerConfig, t as ServerCSPConfig, v as StaticParamsResult, w as extractStaticParams, x as extractMetadata, y as clearPropsCache } from "./server-config-
|
|
1
|
+
import { C as extractServerPropsWithCache, S as extractServerProps, T as hasServerSideDataFetching, _ as ServerSidePropsResult, a as ServerSpamBlockerConfig, b as clearPropsCacheForComponent, f as RuntimeClient, g as MetadataResult, i as ServerRateLimitConfig, l as HttpRuntimeClient, m as createHttpRuntimeClient, n as ServerCacheControlConfig, r as ServerConfig, t as ServerCSPConfig, v as StaticParamsResult, w as extractStaticParams, x as extractMetadata, y as clearPropsCache } from "./server-config-DXVkrIkP.mjs";
|
|
2
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-Cfe0C3JU.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-CyBO6ooC.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-DovC7o1Y.mjs";
|