1- import type { ValueOrPromise } from '@qwik.dev/core' ;
2- import {
3- _deserialize ,
4- _UNINITIALIZED ,
5- isDev ,
6- type SerializationStrategy ,
7- } from '@qwik.dev/core/internal' ;
1+ import { _deserialize , isDev } from '@qwik.dev/core/internal' ;
82import type {
93 ActionInternal ,
104 FailReturn ,
115 JSONValue ,
126 LoadedRoute ,
137 LoaderInternal ,
148} from '../../runtime/src/types' ;
9+ import {
10+ ensureRouteLoaderSignal ,
11+ getRouteLoaderState ,
12+ getRouteLoaderCtx ,
13+ } from '../../runtime/src/route-loaders' ;
1514import type { AbortMessage , RedirectMessage } from './redirect-handler' ;
1615import type { RewriteMessage } from './rewrite-handler' ;
1716import type { ServerError } from './server-error' ;
@@ -37,7 +36,6 @@ interface RequestEventDeps {
3736 RedirectMessage : new ( ) => RedirectMessage ;
3837 RewriteMessage : new ( pathname : string ) => RewriteMessage ;
3938 ServerError : new < T = any > ( status : number , data : T ) => ServerError < T > ;
40- getRouteLoaderPromise : typeof import ( './request-loader' ) . getRouteLoaderPromise ;
4139 recognizeRequest : typeof import ( './request-path' ) . recognizeRequest ;
4240 IsQLoader : string ;
4341 IsQAction : string ;
@@ -48,12 +46,8 @@ interface RequestEventDeps {
4846 getContentType : typeof import ( './request-utils' ) . getContentType ;
4947}
5048
51- const RequestEvLoaders = Symbol ( 'RequestEvLoaders' ) ;
5249const RequestEvMode = Symbol ( 'RequestEvMode' ) ;
5350const RequestEvRoute = Symbol ( 'RequestEvRoute' ) ;
54- export const RequestEvLoaderSerializationStrategyMap = Symbol (
55- 'RequestEvLoaderSerializationStrategyMap'
56- ) ;
5751export const RequestRouteName = '@routeName' ;
5852export const RequestEvSharedActionId = '@actionId' ;
5953export const RequestEvSharedActionFormData = '@actionFormData' ;
@@ -181,10 +175,7 @@ export function createRequestEventWithDeps(
181175 return message ;
182176 } ;
183177
184- const loaders : Record < string , ValueOrPromise < unknown > | undefined > = { } ;
185178 const requestEv : RequestEventInternal = {
186- [ RequestEvLoaders ] : loaders ,
187- [ RequestEvLoaderSerializationStrategyMap ] : new Map ( ) ,
188179 [ RequestEvMode ] : serverRequestEv . mode ,
189180 get [ RequestEvRoute ] ( ) {
190181 return loadedRoute ;
@@ -231,25 +222,18 @@ export function createRequestEventWithDeps(
231222 } ,
232223
233224 resolveValue : ( async ( loaderOrAction : LoaderInternal | ActionInternal ) => {
234- // create user request event, which is a narrowed down request context
235- const id = loaderOrAction . __id ;
236225 if ( loaderOrAction . __brand === 'server_loader' ) {
237- if ( ! ( id in loaders ) ) {
238- throw new Error (
239- 'You can not get the returned data of a loader that has not been executed for this request.'
240- ) ;
241- }
242- if ( loaders [ id ] === _UNINITIALIZED ) {
243- await deps . getRouteLoaderPromise (
244- loaderOrAction ,
245- loaders ,
246- requestEv [ RequestEvLoaderSerializationStrategyMap ] ,
247- requestEv
248- ) ;
226+ const loaderState = getRouteLoaderState ( requestEv ) ;
227+ const routeLoaderCtx = getRouteLoaderCtx ( requestEv ) ;
228+ const signal = ensureRouteLoaderSignal ( loaderOrAction , loaderState , routeLoaderCtx ) ;
229+ if ( signal . loading ) {
230+ await signal . promise ( ) ;
249231 }
232+ return signal . value ;
250233 }
251234
252- return loaders [ id ] ;
235+ // Action result
236+ return requestEv . sharedMap . get ( '@actionResult' ) ;
253237 } ) as ResolveValue ,
254238
255239 status : ( statusCode ?: number ) => {
@@ -379,8 +363,6 @@ export function createRequestEventWithDeps(
379363}
380364
381365export interface RequestEventInternal extends Readonly < RequestEvent > , Readonly < RequestEventLoader > {
382- readonly [ RequestEvLoaders ] : Record < string , ValueOrPromise < unknown > | undefined > ;
383- readonly [ RequestEvLoaderSerializationStrategyMap ] : Map < string , SerializationStrategy > ;
384366 readonly [ RequestEvMode ] : ServerRequestMode ;
385367 readonly [ RequestEvRoute ] : LoadedRoute ;
386368
@@ -405,14 +387,6 @@ export interface RequestEventInternal extends Readonly<RequestEvent>, Readonly<R
405387 ) : void ;
406388}
407389
408- export function getRequestLoaders ( requestEv : RequestEventCommon ) {
409- return ( requestEv as RequestEventInternal ) [ RequestEvLoaders ] ;
410- }
411-
412- export function getRequestLoaderSerializationStrategyMap ( requestEv : RequestEventCommon ) {
413- return ( requestEv as RequestEventInternal ) [ RequestEvLoaderSerializationStrategyMap ] ;
414- }
415-
416390export function getRequestRoute ( requestEv : RequestEventCommon ) {
417391 return ( requestEv as RequestEventInternal ) [ RequestEvRoute ] ;
418392}
0 commit comments