rsnext/test/lib/react-channel-require-hook.js

27 lines
1,011 B
JavaScript
Raw Normal View History

const mod = require('module')
// The value will be '17' or 'exp' to alias the actual react channel
const reactVersion = process.env.__NEXT_REACT_CHANNEL
const reactDir = `react-${reactVersion}`
const reactDomDir = `react-dom-${reactVersion}`
const hookPropertyMap = new Map([
['react', reactDir],
['react/package.json', `${reactDir}/package.json`],
['react/jsx-runtime', `${reactDir}/jsx-runtime`],
['react/jsx-dev-runtime', `${reactDir}/jsx-dev-runtime`],
['react-dom', `${reactDomDir}`],
['react-dom/package.json', `${reactDomDir}/package.json`],
['react-dom/client', `${reactDomDir}/client`],
['react-dom/server', `${reactDomDir}/server`],
['react-dom/server.browser', `${reactDomDir}/server.browser`],
])
const resolveFilename = mod._resolveFilename
mod._resolveFilename = function (request, parent, isMain, options) {
const hookResolved = hookPropertyMap.get(request)
if (hookResolved) request = hookResolved
return resolveFilename.call(mod, request, parent, isMain, options)
}