149 lines
4.2 KiB
JavaScript
149 lines
4.2 KiB
JavaScript
|
/**
|
||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const url = 'url' |> require(%);
|
||
|
const Module = 'module' |> require(%);
|
||
|
let webpackModuleIdx = 0;
|
||
|
let webpackChunkIdx = 0;
|
||
|
const webpackServerModules = {};
|
||
|
const webpackClientModules = {};
|
||
|
const webpackErroredModules = {};
|
||
|
const webpackServerMap = {};
|
||
|
const webpackClientMap = {};
|
||
|
const webpackChunkMap = {};
|
||
|
global.__webpack_chunk_load__ = function (id) {
|
||
|
return webpackChunkMap[id];
|
||
|
};
|
||
|
global.__webpack_require__ = function (id) {
|
||
|
if (webpackErroredModules[id]) {
|
||
|
throw webpackErroredModules[id];
|
||
|
}
|
||
|
return webpackClientModules[id] || webpackServerModules[id];
|
||
|
};
|
||
|
const previousCompile = Module.prototype._compile;
|
||
|
const register = 'react-server-dom-webpack/node-register' |> require(%);
|
||
|
// Register node compile
|
||
|
register();
|
||
|
const nodeCompile = Module.prototype._compile;
|
||
|
if (previousCompile === nodeCompile) {
|
||
|
throw new Error('Expected the Node loader to register the _compile extension');
|
||
|
}
|
||
|
Module.prototype._compile = previousCompile;
|
||
|
exports.webpackMap = webpackClientMap;
|
||
|
exports.webpackModules = webpackClientModules;
|
||
|
exports.webpackServerMap = webpackServerMap;
|
||
|
exports.moduleLoading = {
|
||
|
prefix: '/'
|
||
|
};
|
||
|
exports.clientModuleError = function clientModuleError(moduleError) {
|
||
|
const idx = '' + webpackModuleIdx++;
|
||
|
webpackErroredModules[idx] = moduleError;
|
||
|
const path = (idx |> url.pathToFileURL(%)).href;
|
||
|
webpackClientMap[path] = {
|
||
|
id: idx,
|
||
|
chunks: [],
|
||
|
name: '*'
|
||
|
};
|
||
|
const mod = new Module();
|
||
|
nodeCompile.call(mod, '"use client"', idx);
|
||
|
return mod.exports;
|
||
|
};
|
||
|
exports.clientExports = function clientExports(moduleExports, chunkId, chunkFilename, blockOnChunk) {
|
||
|
const chunks = [];
|
||
|
if (chunkId) {
|
||
|
chunkId |> chunks.push(%, chunkFilename);
|
||
|
if (blockOnChunk) {
|
||
|
webpackChunkMap[chunkId] = blockOnChunk;
|
||
|
}
|
||
|
}
|
||
|
const idx = '' + webpackModuleIdx++;
|
||
|
webpackClientModules[idx] = moduleExports;
|
||
|
const path = (idx |> url.pathToFileURL(%)).href;
|
||
|
webpackClientMap[path] = {
|
||
|
id: idx,
|
||
|
chunks,
|
||
|
name: '*'
|
||
|
};
|
||
|
// We only add this if this test is testing ESM compat.
|
||
|
if ('__esModule' in moduleExports) {
|
||
|
webpackClientMap[path + '#'] = {
|
||
|
id: idx,
|
||
|
chunks,
|
||
|
name: ''
|
||
|
};
|
||
|
}
|
||
|
if (typeof moduleExports.then === 'function') {
|
||
|
(asyncModuleExports => {
|
||
|
for (const name in asyncModuleExports) {
|
||
|
webpackClientMap[path + '#' + name] = {
|
||
|
id: idx,
|
||
|
chunks,
|
||
|
name: name
|
||
|
};
|
||
|
}
|
||
|
}) |> moduleExports.then(%, () => {});
|
||
|
}
|
||
|
if ('split' in moduleExports) {
|
||
|
// If we're testing module splitting, we encode this name in a separate module id.
|
||
|
const splitIdx = '' + webpackModuleIdx++;
|
||
|
webpackClientModules[splitIdx] = {
|
||
|
s: moduleExports.split
|
||
|
};
|
||
|
webpackClientMap[path + '#split'] = {
|
||
|
id: splitIdx,
|
||
|
chunks,
|
||
|
name: 's'
|
||
|
};
|
||
|
}
|
||
|
const mod = new Module();
|
||
|
nodeCompile.call(mod, '"use client"', idx);
|
||
|
return mod.exports;
|
||
|
};
|
||
|
|
||
|
// This tests server to server references. There's another case of client to server references.
|
||
|
exports.serverExports = function serverExports(moduleExports, blockOnChunk) {
|
||
|
const idx = '' + webpackModuleIdx++;
|
||
|
webpackServerModules[idx] = moduleExports;
|
||
|
const path = (idx |> url.pathToFileURL(%)).href;
|
||
|
const chunks = [];
|
||
|
if (blockOnChunk) {
|
||
|
const chunkId = webpackChunkIdx++;
|
||
|
webpackChunkMap[chunkId] = blockOnChunk;
|
||
|
chunkId |> chunks.push(%);
|
||
|
}
|
||
|
webpackServerMap[path] = {
|
||
|
id: idx,
|
||
|
chunks: chunks,
|
||
|
name: '*'
|
||
|
};
|
||
|
// We only add this if this test is testing ESM compat.
|
||
|
if ('__esModule' in moduleExports) {
|
||
|
webpackServerMap[path + '#'] = {
|
||
|
id: idx,
|
||
|
chunks: [],
|
||
|
name: ''
|
||
|
};
|
||
|
}
|
||
|
if ('split' in moduleExports) {
|
||
|
// If we're testing module splitting, we encode this name in a separate module id.
|
||
|
const splitIdx = '' + webpackModuleIdx++;
|
||
|
webpackServerModules[splitIdx] = {
|
||
|
s: moduleExports.split
|
||
|
};
|
||
|
webpackServerMap[path + '#split'] = {
|
||
|
id: splitIdx,
|
||
|
chunks: [],
|
||
|
name: 's'
|
||
|
};
|
||
|
}
|
||
|
const mod = new Module();
|
||
|
mod.exports = moduleExports;
|
||
|
nodeCompile.call(mod, '"use server"', idx);
|
||
|
return mod.exports;
|
||
|
};
|