Skip to content

Commit

Permalink
fix: buildInfo rsc for builtin flight client entry plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
ahabhgk committed Feb 5, 2025
1 parent 0fe5e2d commit 9876169
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,13 @@ export default function transformSource(
buildInfo.rsc = {
type: RSC_MODULE_TYPES.client,
}
if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
return (
`/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */\n` +
code
)
}

return code
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ const flightClientModuleLoader: webpack.LoaderDefinitionFunction =
// Assign the RSC meta information to buildInfo.
const buildInfo = getModuleBuildInfo(this._module)
buildInfo.rsc = getRSCModuleInformation(source, false)
if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
source =
`/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */\n` +
source
}

// This is a server action entry module in the client layer. We need to
// create re-exports of "virtual modules" to expose the reference IDs to the
Expand All @@ -30,11 +36,6 @@ const flightClientModuleLoader: webpack.LoaderDefinitionFunction =
.join('\n')
}

if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
source += `\n/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */`
}

return this.callback(null, source, sourceMap)
}

Expand Down
28 changes: 12 additions & 16 deletions packages/next/src/build/webpack/loaders/next-flight-loader/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ export default function transformSource(
// Exclude next internal files which are not marked as client files
const buildInfo = getModuleBuildInfo(module)
buildInfo.rsc = getRSCModuleInformation(source, true)
let prefix
if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
prefix = `/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */\n`
source = prefix + source
}

// Resource key is the unique identifier for the resource. When RSC renders
// a client module, that key is used to identify that module across all compiler
Expand Down Expand Up @@ -112,6 +118,9 @@ export default function transformSource(
let esmSource = `\
import { registerClientReference } from "react-server-dom-webpack/server.edge";
`
if (prefix) {
esmSource = prefix + esmSource
}
for (const ref of clientRefs) {
if (ref === 'default') {
esmSource += `export default registerClientReference(
Expand All @@ -134,23 +143,16 @@ ${JSON.stringify(ref)},
}
}

if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
esmSource += `\n/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */`
}

return this.callback(null, esmSource, sourceMap)
} else if (assumedSourceType === 'commonjs') {
let cjsSource = `\
const { createProxy } = require("${MODULE_PROXY_PATH}")
module.exports = createProxy(${stringifiedResourceKey})
`
if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
cjsSource += `\n/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */`
if (prefix) {
cjsSource = prefix + cjsSource
}

return this.callback(null, cjsSource, sourceMap)
}
}
Expand All @@ -163,15 +165,9 @@ module.exports = createProxy(${stringifiedResourceKey})
}
}

let replacedSource = source.replace(
const replacedSource = source.replace(
RSC_MOD_REF_PROXY_ALIAS,
MODULE_PROXY_PATH
)

if (process.env.BUILTIN_FLIGHT_CLIENT_ENTRY_PLUGIN) {
const rscModuleInformationJson = JSON.stringify(buildInfo.rsc)
replacedSource += `\n/* __rspack_internal_rsc_module_information_do_not_use__ ${rscModuleInformationJson} */`
}

this.callback(null, replacedSource, sourceMap)
}

0 comments on commit 9876169

Please sign in to comment.