@@ -34,17 +34,19 @@ const loader: LoaderDefinitionFunction<KnightedCssBridgeLoaderOptions> = functio
3434
3535export const pitch : PitchLoaderDefinitionFunction < KnightedCssBridgeLoaderOptions > =
3636 function pitch ( remainingRequest ) {
37+ const resolvedRemainingRequest = resolveRemainingRequest ( this , remainingRequest )
38+
3739 if ( isJsLikeResource ( this . resourcePath ) && hasCombinedQuery ( this . resourceQuery ) ) {
3840 const callback = this . async ( )
3941 if ( ! callback ) {
40- return createCombinedJsBridgeModuleSync ( this , remainingRequest )
42+ return createCombinedJsBridgeModuleSync ( this , resolvedRemainingRequest )
4143 }
4244 readResourceSource ( this )
4345 . then ( source => {
4446 const cssRequests = collectCssModuleRequests ( source ) . map ( request =>
4547 buildBridgeCssRequest ( request ) ,
4648 )
47- const upstreamRequest = buildUpstreamRequest ( remainingRequest )
49+ const upstreamRequest = buildUpstreamRequest ( resolvedRemainingRequest )
4850 callback (
4951 null ,
5052 createCombinedJsBridgeModule ( {
@@ -58,7 +60,7 @@ export const pitch: PitchLoaderDefinitionFunction<KnightedCssBridgeLoaderOptions
5860 return
5961 }
6062 const localsRequest = buildProxyRequest ( this )
61- const upstreamRequest = buildUpstreamRequest ( remainingRequest )
63+ const upstreamRequest = buildUpstreamRequest ( resolvedRemainingRequest )
6264 const { emitCssModules } = resolveLoaderOptions ( this )
6365 const combined = hasCombinedQuery ( this . resourceQuery )
6466 const skipSyntheticDefault = hasNamedOnlyQueryFlag ( this . resourceQuery )
@@ -78,9 +80,12 @@ export const pitch: PitchLoaderDefinitionFunction<KnightedCssBridgeLoaderOptions
7880 } )
7981 : false
8082
83+ const resolvedUpstream = upstreamRequest || localsRequest
84+ const resolvedLocals = upstreamRequest || localsRequest
85+
8186 return createBridgeModule ( {
82- localsRequest,
83- upstreamRequest : upstreamRequest || localsRequest ,
87+ localsRequest : resolvedLocals ,
88+ upstreamRequest : resolvedUpstream ,
8489 combined,
8590 emitDefault,
8691 emitCssModules,
@@ -268,7 +273,8 @@ function createBridgeModule(options: BridgeModuleOptions): string {
268273 `const __knightedDefault =\ntypeof __knightedUpstream.default !== 'undefined'\n ? __knightedUpstream.default\n : __knightedUpstream;` ,
269274 `const __knightedResolveCss = ${ resolveCssText . toString ( ) } ;` ,
270275 `const __knightedResolveCssModules = ${ resolveCssModules . toString ( ) } ;` ,
271- `const __knightedLocalsExport =\n __knightedResolveCssModules(__knightedLocals, __knightedLocals) ??\n __knightedLocals;` ,
276+ `const __knightedUpstreamLocals =\n __knightedResolveCssModules(__knightedUpstream, __knightedUpstream);` ,
277+ `const __knightedLocalsExport =\n __knightedUpstreamLocals ??\n __knightedResolveCssModules(__knightedLocals, __knightedLocals) ??\n __knightedLocals;` ,
272278 `const __knightedCss = __knightedResolveCss(__knightedDefault, __knightedUpstream);` ,
273279 `export const ${ DEFAULT_EXPORT_NAME } = __knightedCss;` ,
274280 ]
@@ -312,6 +318,40 @@ function buildProxyRequest(ctx: LoaderContext<KnightedCssBridgeLoaderOptions>):
312318 return contextifyRequest ( ctx , request )
313319}
314320
321+ function resolveRemainingRequest (
322+ ctx : LoaderContext < KnightedCssBridgeLoaderOptions > ,
323+ remainingRequest ?: string ,
324+ ) : string {
325+ const resolved = remainingRequest || ctx . remainingRequest
326+ if ( resolved ) return resolved
327+ const loaders = Array . isArray ( ctx . loaders ) ? ctx . loaders . slice ( ctx . loaderIndex + 1 ) : [ ]
328+ if ( loaders . length > 0 ) {
329+ const loaderRequests = loaders
330+ . map ( loader => {
331+ if ( loader && typeof loader . request === 'string' && loader . request ) {
332+ return loader . request
333+ }
334+ const path = loader && typeof loader . path === 'string' ? loader . path : ''
335+ const query = loader && typeof loader . query === 'string' ? loader . query : ''
336+ return path ? `${ path } ${ query } ` : ''
337+ } )
338+ . filter ( Boolean )
339+ if ( loaderRequests . length > 0 ) {
340+ const resource = `${ ctx . resourcePath } ${ ctx . resourceQuery ?? '' } `
341+ return [ ...loaderRequests , resource ] . join ( '!' )
342+ }
343+ }
344+ if ( typeof ctx . request === 'string' && typeof ctx . loaderIndex === 'number' ) {
345+ const parts = ctx . request . split ( '!' ) . filter ( Boolean )
346+ if ( parts . length > 0 ) {
347+ const start = Math . min ( ctx . loaderIndex + 1 , parts . length )
348+ const next = parts . slice ( start ) . join ( '!' )
349+ if ( next ) return next
350+ }
351+ }
352+ return ''
353+ }
354+
315355function rebuildProxyRequestFromRaw (
316356 ctx : LoaderContext < KnightedCssBridgeLoaderOptions > ,
317357 rawRequest : string ,
0 commit comments