@bleedingdev/modern-js-app-tools 3.2.0-ultramodern.10 → 3.2.0-ultramodern.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/modern.js +0 -0
- package/dist/cjs/baseline.js +43 -1
- package/dist/cjs/builder/generator/getBuilderEnvironments.js +191 -8
- package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +41 -5
- package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +3 -1
- package/dist/cjs/plugins/deploy/index.js +17 -6
- package/dist/cjs/plugins/deploy/platforms/cloudflare.js +222 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +438 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +7 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +185 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +59 -0
- package/dist/cjs/rsbuild.js +3 -0
- package/dist/esm/baseline.mjs +33 -1
- package/dist/esm/builder/generator/getBuilderEnvironments.mjs +180 -8
- package/dist/esm/builder/shared/builderPlugins/adapterBasic.mjs +41 -5
- package/dist/esm/builder/shared/builderPlugins/adapterSSR.mjs +3 -1
- package/dist/esm/plugins/deploy/index.mjs +10 -4
- package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +178 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +438 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +7 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +185 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +59 -0
- package/dist/esm/rsbuild.mjs +5 -2
- package/dist/esm-node/baseline.mjs +33 -1
- package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +185 -9
- package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.mjs +41 -5
- package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.mjs +3 -1
- package/dist/esm-node/plugins/deploy/index.mjs +10 -4
- package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +179 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +438 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +7 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +185 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +59 -0
- package/dist/esm-node/rsbuild.mjs +5 -2
- package/dist/types/locale/en.d.ts +1 -1
- package/dist/types/locale/zh.d.ts +1 -1
- package/dist/types/plugins/deploy/index.d.ts +4 -1
- package/dist/types/plugins/deploy/platforms/cloudflare.d.ts +2 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.d.mts +4 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.d.mts +5 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.d.mts +48 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-path.d.mts +21 -0
- package/dist/types/types/config/deploy.d.ts +8 -0
- package/package.json +18 -17
package/bin/modern.js
CHANGED
|
File without changes
|
package/dist/cjs/baseline.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
3
12
|
(()=>{
|
|
4
13
|
__webpack_require__.d = (exports1, definition)=>{
|
|
5
14
|
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
@@ -27,7 +36,37 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
27
36
|
createAppBaselineConfig: ()=>createAppBaselineConfig,
|
|
28
37
|
withAppBaseline: ()=>withAppBaseline
|
|
29
38
|
});
|
|
39
|
+
const external_node_module_namespaceObject = require("node:module");
|
|
40
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
41
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
30
42
|
const cli_namespaceObject = require("@modern-js/plugin/cli");
|
|
43
|
+
const resolveReactRouterPackageDir = ()=>{
|
|
44
|
+
const localRequire = (0, external_node_module_namespaceObject.createRequire)(external_node_path_default().join(process.cwd(), 'package.json'));
|
|
45
|
+
try {
|
|
46
|
+
const reactRouterDomPackageJson = localRequire.resolve('react-router-dom/package.json', {
|
|
47
|
+
paths: [
|
|
48
|
+
process.cwd()
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
const reactRouterPackageJson = localRequire.resolve('react-router/package.json', {
|
|
52
|
+
paths: [
|
|
53
|
+
external_node_path_default().dirname(reactRouterDomPackageJson)
|
|
54
|
+
]
|
|
55
|
+
});
|
|
56
|
+
return external_node_path_default().dirname(reactRouterPackageJson);
|
|
57
|
+
} catch {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const setReactRouterBridgeSafeAliases = (chain)=>{
|
|
62
|
+
const reactRouterPackageDir = resolveReactRouterPackageDir();
|
|
63
|
+
if (!reactRouterPackageDir) return;
|
|
64
|
+
const productionEntry = external_node_path_default().join(reactRouterPackageDir, 'dist/production/index.mjs');
|
|
65
|
+
const developmentEntry = external_node_path_default().join(reactRouterPackageDir, 'dist/development/index.mjs');
|
|
66
|
+
chain.resolve.alias.set('react-router$', productionEntry);
|
|
67
|
+
chain.resolve.alias.set('react-router/dist/production/index.js', productionEntry);
|
|
68
|
+
chain.resolve.alias.set('react-router/dist/development/index.js', developmentEntry);
|
|
69
|
+
};
|
|
31
70
|
const createAppBaselineConfig = (options = {})=>{
|
|
32
71
|
const { appId = 'app', enableBffRequestId = true, enableTelemetry = true, enableTelemetryExporters = true, otlpEndpoint = process.env.MODERN_TELEMETRY_OTLP_ENDPOINT || 'http://127.0.0.1:4318/v1/logs', victoriaMetricsEndpoint = process.env.MODERN_TELEMETRY_VICTORIA_ENDPOINT || 'http://127.0.0.1:8428/api/v1/import/prometheus', telemetryFailLoudStartup = true, enableModuleFederationSSR = true } = options;
|
|
33
72
|
const server = {};
|
|
@@ -61,7 +100,10 @@ const createAppBaselineConfig = (options = {})=>{
|
|
|
61
100
|
disableClientServer: true
|
|
62
101
|
}
|
|
63
102
|
},
|
|
64
|
-
server
|
|
103
|
+
server,
|
|
104
|
+
tools: {
|
|
105
|
+
bundlerChain: setReactRouterBridgeSafeAliases
|
|
106
|
+
}
|
|
65
107
|
};
|
|
66
108
|
if (enableBffRequestId) baselineConfig.bff = {
|
|
67
109
|
requestId: appId
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
3
12
|
(()=>{
|
|
4
13
|
__webpack_require__.d = (exports1, definition)=>{
|
|
5
14
|
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
@@ -26,8 +35,74 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
36
|
getBuilderEnvironments: ()=>getBuilderEnvironments
|
|
28
37
|
});
|
|
38
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
39
|
+
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
40
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
41
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
29
42
|
const builder_namespaceObject = require("@modern-js/builder");
|
|
30
43
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
44
|
+
const BFF_EFFECT_WORKER_ENTRY_NAME = '__modern_bff_effect';
|
|
45
|
+
const BFF_EFFECT_WORKER_RUNTIME_QUERY = 'modern-bff-runtime';
|
|
46
|
+
const JS_OR_TS_EXTS = [
|
|
47
|
+
'.ts',
|
|
48
|
+
'.tsx',
|
|
49
|
+
'.js',
|
|
50
|
+
'.jsx',
|
|
51
|
+
'.mjs',
|
|
52
|
+
'.cjs'
|
|
53
|
+
];
|
|
54
|
+
const CLOUDFLARE_WORKER_COMPAT_TEMPLATE_DIR = external_node_path_default().resolve(__dirname, '../../plugins/deploy/platforms/templates');
|
|
55
|
+
function findExistingFile(candidates) {
|
|
56
|
+
return candidates.find((candidate)=>external_node_fs_default().existsSync(candidate));
|
|
57
|
+
}
|
|
58
|
+
function resolvePackageEntry(packageName, paths) {
|
|
59
|
+
try {
|
|
60
|
+
return external_node_fs_default().realpathSync(require.resolve(packageName, {
|
|
61
|
+
paths
|
|
62
|
+
}));
|
|
63
|
+
} catch {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function resolvePackageFile(packageName, filePath, paths) {
|
|
68
|
+
try {
|
|
69
|
+
return external_node_fs_default().realpathSync(require.resolve(`${packageName}/${filePath}`, {
|
|
70
|
+
paths
|
|
71
|
+
}));
|
|
72
|
+
} catch {
|
|
73
|
+
const packageEntry = resolvePackageEntry(packageName, paths);
|
|
74
|
+
if (!packageEntry) return;
|
|
75
|
+
const packageRoot = findPackageRoot(packageEntry, packageName);
|
|
76
|
+
const packageFile = packageRoot ? external_node_path_default().join(packageRoot, filePath) : void 0;
|
|
77
|
+
return packageFile && external_node_fs_default().existsSync(packageFile) ? external_node_fs_default().realpathSync(packageFile) : void 0;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function findPackageRoot(entryFile, packageName) {
|
|
81
|
+
let directory = external_node_path_default().dirname(entryFile);
|
|
82
|
+
while(directory !== external_node_path_default().dirname(directory)){
|
|
83
|
+
const packageJsonPath = external_node_path_default().join(directory, 'package.json');
|
|
84
|
+
try {
|
|
85
|
+
const packageJson = JSON.parse(external_node_fs_default().readFileSync(packageJsonPath, 'utf-8'));
|
|
86
|
+
if (packageJson.name === packageName) return directory;
|
|
87
|
+
} catch {}
|
|
88
|
+
directory = external_node_path_default().dirname(directory);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function setAliasIfPresent(alias, name, value) {
|
|
92
|
+
if (value) alias.set(name, value);
|
|
93
|
+
}
|
|
94
|
+
function getCloudflareWorkerCompatFile(file) {
|
|
95
|
+
return external_node_path_default().join(CLOUDFLARE_WORKER_COMPAT_TEMPLATE_DIR, file);
|
|
96
|
+
}
|
|
97
|
+
function getEffectBffEntry(normalizedConfig, appContext) {
|
|
98
|
+
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
99
|
+
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
100
|
+
const entryWithoutExtension = configuredEntry ? external_node_path_default().isAbsolute(configuredEntry) ? configuredEntry : external_node_path_default().resolve(appContext.appDirectory, configuredEntry) : external_node_path_default().resolve(appContext.apiDirectory, 'effect', 'index');
|
|
101
|
+
return findExistingFile(JS_OR_TS_EXTS.map((extension)=>`${entryWithoutExtension}${extension}`));
|
|
102
|
+
}
|
|
103
|
+
function isCloudflareWorkerDeploy(normalizedConfig) {
|
|
104
|
+
return normalizedConfig.deploy?.target === 'cloudflare' || 'cloudflare' === process.env.MODERNJS_DEPLOY;
|
|
105
|
+
}
|
|
31
106
|
function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig) {
|
|
32
107
|
const entries = {};
|
|
33
108
|
const { entrypoints = [], checkedEntries } = appContext;
|
|
@@ -44,6 +119,11 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
44
119
|
const v = entries[entry];
|
|
45
120
|
serverEntries[entry] = v.map((entry)=>entry.replace('index.jsx', 'index.server.jsx')).map((entry)=>entry.replace('bootstrap.jsx', 'bootstrap.server.jsx'));
|
|
46
121
|
}
|
|
122
|
+
const cloudflareWorkerServerEntries = {};
|
|
123
|
+
for(const entry in entries){
|
|
124
|
+
const v = entries[entry];
|
|
125
|
+
cloudflareWorkerServerEntries[entry] = v.map((entry)=>entry.replace('index.jsx', 'index.server.jsx')).map((entry)=>entry.replace('bootstrap.jsx', 'index.server.jsx'));
|
|
126
|
+
}
|
|
47
127
|
const environments = {
|
|
48
128
|
client: {
|
|
49
129
|
output: {
|
|
@@ -68,14 +148,117 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
68
148
|
}
|
|
69
149
|
};
|
|
70
150
|
const useWorkerTarget = (0, utils_namespaceObject.isServiceWorker)(normalizedConfig);
|
|
71
|
-
if (useWorkerTarget)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
151
|
+
if (useWorkerTarget) {
|
|
152
|
+
const useCloudflareModuleWorker = isCloudflareWorkerDeploy(normalizedConfig);
|
|
153
|
+
const effectBffEntry = useCloudflareModuleWorker ? getEffectBffEntry(normalizedConfig, appContext) : void 0;
|
|
154
|
+
const tanstackRouterSsrServerFile = useCloudflareModuleWorker ? resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', [
|
|
155
|
+
appContext.appDirectory,
|
|
156
|
+
process.cwd()
|
|
157
|
+
]) : void 0;
|
|
158
|
+
const runtimeRscWorkerFile = useCloudflareModuleWorker ? resolvePackageFile('@modern-js/runtime', 'dist/esm/rsc/server.worker.mjs', [
|
|
159
|
+
appContext.appDirectory,
|
|
160
|
+
process.cwd()
|
|
161
|
+
]) : void 0;
|
|
162
|
+
const renderRscWorkerFile = useCloudflareModuleWorker ? resolvePackageFile('@modern-js/render', 'dist/esm/rscWorker.mjs', [
|
|
163
|
+
appContext.appDirectory,
|
|
164
|
+
process.cwd()
|
|
165
|
+
]) : void 0;
|
|
166
|
+
const reactFile = useCloudflareModuleWorker ? resolvePackageFile('react', 'index.js', [
|
|
167
|
+
appContext.appDirectory,
|
|
168
|
+
process.cwd()
|
|
169
|
+
]) : void 0;
|
|
170
|
+
const reactJsxRuntimeFile = useCloudflareModuleWorker ? resolvePackageFile('react', 'jsx-runtime.js', [
|
|
171
|
+
appContext.appDirectory,
|
|
172
|
+
process.cwd()
|
|
173
|
+
]) : void 0;
|
|
174
|
+
const reactJsxDevRuntimeFile = useCloudflareModuleWorker ? resolvePackageFile('react', 'jsx-dev-runtime.js', [
|
|
175
|
+
appContext.appDirectory,
|
|
176
|
+
process.cwd()
|
|
177
|
+
]) : void 0;
|
|
178
|
+
const reactDomFile = useCloudflareModuleWorker ? resolvePackageFile('react-dom', 'index.js', [
|
|
179
|
+
appContext.appDirectory,
|
|
180
|
+
process.cwd()
|
|
181
|
+
]) : void 0;
|
|
182
|
+
const reactDomServerEdgeFile = useCloudflareModuleWorker ? resolvePackageFile('react-dom', 'server.edge.js', [
|
|
183
|
+
appContext.appDirectory,
|
|
184
|
+
process.cwd()
|
|
185
|
+
]) : void 0;
|
|
186
|
+
const loadableComponentFile = useCloudflareModuleWorker ? resolvePackageFile('@loadable/component', 'dist/esm/loadable.esm.mjs', [
|
|
187
|
+
appContext.appDirectory,
|
|
188
|
+
process.cwd(),
|
|
189
|
+
CLOUDFLARE_WORKER_COMPAT_TEMPLATE_DIR
|
|
190
|
+
]) : void 0;
|
|
191
|
+
const loadableServerWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-loadable-server.mjs') : void 0;
|
|
192
|
+
const fsPromisesWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-fs-promises.mjs') : void 0;
|
|
193
|
+
const pathWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-path.mjs') : void 0;
|
|
194
|
+
const baseWorkerEntries = useCloudflareModuleWorker ? cloudflareWorkerServerEntries : serverEntries;
|
|
195
|
+
const workerEntries = effectBffEntry ? {
|
|
196
|
+
...baseWorkerEntries,
|
|
197
|
+
[BFF_EFFECT_WORKER_ENTRY_NAME]: [
|
|
198
|
+
`${effectBffEntry}?${BFF_EFFECT_WORKER_RUNTIME_QUERY}`
|
|
199
|
+
]
|
|
200
|
+
} : baseWorkerEntries;
|
|
201
|
+
environments[builder_namespaceObject.SERVICE_WORKER_ENVIRONMENT_NAME] = {
|
|
202
|
+
output: {
|
|
203
|
+
target: useCloudflareModuleWorker ? 'web' : 'web-worker',
|
|
204
|
+
...useCloudflareModuleWorker ? {
|
|
205
|
+
module: true
|
|
206
|
+
} : {}
|
|
207
|
+
},
|
|
208
|
+
source: {
|
|
209
|
+
entry: workerEntries
|
|
210
|
+
},
|
|
211
|
+
tools: {
|
|
212
|
+
htmlPlugin: false,
|
|
213
|
+
...useCloudflareModuleWorker ? {
|
|
214
|
+
bundlerChain: (chain)=>{
|
|
215
|
+
chain.merge({
|
|
216
|
+
experiments: {
|
|
217
|
+
outputModule: true
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
chain.output.module(true).library({
|
|
221
|
+
type: 'module'
|
|
222
|
+
}).chunkFormat('module').chunkLoading('import').workerChunkLoading('import');
|
|
223
|
+
chain.target('webworker');
|
|
224
|
+
chain.plugins.delete('plugin-module-federation');
|
|
225
|
+
if (tanstackRouterSsrServerFile) {
|
|
226
|
+
chain.resolve.alias.set('@tanstack/router-core/ssr/server$', tanstackRouterSsrServerFile);
|
|
227
|
+
chain.resolve.alias.set('@tanstack/router-core/ssr/server', tanstackRouterSsrServerFile);
|
|
228
|
+
}
|
|
229
|
+
if (runtimeRscWorkerFile) {
|
|
230
|
+
chain.resolve.alias.set('@modern-js/runtime/rsc/server$', runtimeRscWorkerFile);
|
|
231
|
+
chain.resolve.alias.set('@modern-js/runtime/rsc/server', runtimeRscWorkerFile);
|
|
232
|
+
}
|
|
233
|
+
if (renderRscWorkerFile) {
|
|
234
|
+
chain.resolve.alias.set('@modern-js/render/rsc$', renderRscWorkerFile);
|
|
235
|
+
chain.resolve.alias.set('@modern-js/render/rsc', renderRscWorkerFile);
|
|
236
|
+
chain.resolve.alias.set('@modern-js/render/rsc-worker$', renderRscWorkerFile);
|
|
237
|
+
}
|
|
238
|
+
setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
|
|
239
|
+
setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
|
|
240
|
+
setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
|
|
241
|
+
setAliasIfPresent(chain.resolve.alias, 'react-dom$', reactDomFile);
|
|
242
|
+
setAliasIfPresent(chain.resolve.alias, 'react-dom/server.edge$', reactDomServerEdgeFile);
|
|
243
|
+
setAliasIfPresent(chain.resolve.alias, '@loadable/component$', loadableComponentFile);
|
|
244
|
+
setAliasIfPresent(chain.resolve.alias, '@loadable/server$', loadableServerWorkerFile);
|
|
245
|
+
setAliasIfPresent(chain.resolve.alias, 'fs/promises$', fsPromisesWorkerFile);
|
|
246
|
+
setAliasIfPresent(chain.resolve.alias, 'node:fs/promises$', fsPromisesWorkerFile);
|
|
247
|
+
setAliasIfPresent(chain.resolve.alias, 'path$', pathWorkerFile);
|
|
248
|
+
setAliasIfPresent(chain.resolve.alias, 'node:path$', pathWorkerFile);
|
|
249
|
+
chain.resolve.alias.set('react-server-dom-rspack/server.node$', 'react-server-dom-rspack/server.edge');
|
|
250
|
+
chain.resolve.alias.set('react-server-dom-rspack/server.node', 'react-server-dom-rspack/server.edge');
|
|
251
|
+
chain.resolve.alias.set('react-server-dom-rspack/client.node$', 'react-server-dom-rspack/client.edge');
|
|
252
|
+
chain.resolve.alias.set('react-server-dom-rspack/client.node', 'react-server-dom-rspack/client.edge');
|
|
253
|
+
chain.resolve.fallback.set('async_hooks', false);
|
|
254
|
+
chain.resolve.fallback.set('node:async_hooks', false);
|
|
255
|
+
chain.resolve.fallback.set('fs', false);
|
|
256
|
+
chain.resolve.fallback.set('node:fs', false);
|
|
257
|
+
}
|
|
258
|
+
} : {}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
79
262
|
return {
|
|
80
263
|
environments,
|
|
81
264
|
builderConfig: tempBuilderConfig
|
|
@@ -43,8 +43,11 @@ const builderPluginAdapterBasic = (options)=>({
|
|
|
43
43
|
setup (api) {
|
|
44
44
|
api.modifyBundlerChain((chain, { target, CHAIN_ID, environment })=>{
|
|
45
45
|
const isServiceWorker = environment.name === builder_namespaceObject.SERVICE_WORKER_ENVIRONMENT_NAME;
|
|
46
|
-
|
|
47
|
-
if ('
|
|
46
|
+
const isWebTargetServiceWorker = isServiceWorker && 'web' === target;
|
|
47
|
+
if ('node' === target || isServiceWorker) applyNodeCompat(isServiceWorker, chain, {
|
|
48
|
+
includeNodeExtensions: !isWebTargetServiceWorker
|
|
49
|
+
});
|
|
50
|
+
if ('web' === target && !isServiceWorker) {
|
|
48
51
|
const bareServerModuleReg = /\.(server|node)\.[tj]sx?$/;
|
|
49
52
|
const depExt = 'js';
|
|
50
53
|
chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
|
|
@@ -60,8 +63,40 @@ const builderPluginAdapterBasic = (options)=>({
|
|
|
60
63
|
});
|
|
61
64
|
api.modifyRspackConfig((config, { target, environment })=>{
|
|
62
65
|
const isServiceWorker = environment.name === builder_namespaceObject.SERVICE_WORKER_ENVIRONMENT_NAME;
|
|
66
|
+
const isWebTargetServiceWorker = isServiceWorker && 'web' === target;
|
|
63
67
|
if ('node' === target || isServiceWorker) {
|
|
64
|
-
const extensionAlias = {
|
|
68
|
+
const extensionAlias = isWebTargetServiceWorker ? {
|
|
69
|
+
'.js': [
|
|
70
|
+
'.worker.js',
|
|
71
|
+
'.server.js',
|
|
72
|
+
'.js'
|
|
73
|
+
],
|
|
74
|
+
'.jsx': [
|
|
75
|
+
'.worker.jsx',
|
|
76
|
+
'.server.jsx',
|
|
77
|
+
'.jsx'
|
|
78
|
+
],
|
|
79
|
+
'.ts': [
|
|
80
|
+
'.worker.ts',
|
|
81
|
+
'.server.ts',
|
|
82
|
+
'.ts'
|
|
83
|
+
],
|
|
84
|
+
'.tsx': [
|
|
85
|
+
'.worker.tsx',
|
|
86
|
+
'.server.tsx',
|
|
87
|
+
'.tsx'
|
|
88
|
+
],
|
|
89
|
+
'.mjs': [
|
|
90
|
+
'.worker.mjs',
|
|
91
|
+
'.server.mjs',
|
|
92
|
+
'.mjs'
|
|
93
|
+
],
|
|
94
|
+
'.json': [
|
|
95
|
+
'.worker.json',
|
|
96
|
+
'.server.json',
|
|
97
|
+
'.json'
|
|
98
|
+
]
|
|
99
|
+
} : {
|
|
65
100
|
'.js': [
|
|
66
101
|
'.node.js',
|
|
67
102
|
'.server.js',
|
|
@@ -102,7 +137,8 @@ const builderPluginAdapterBasic = (options)=>({
|
|
|
102
137
|
});
|
|
103
138
|
}
|
|
104
139
|
});
|
|
105
|
-
function applyNodeCompat(isServiceWorker, chain) {
|
|
140
|
+
function applyNodeCompat(isServiceWorker, chain, options = {}) {
|
|
141
|
+
const { includeNodeExtensions = true } = options;
|
|
106
142
|
const nodeExts = [
|
|
107
143
|
'.node.js',
|
|
108
144
|
'.node.jsx',
|
|
@@ -121,7 +157,7 @@ function applyNodeCompat(isServiceWorker, chain) {
|
|
|
121
157
|
'.worker.ts',
|
|
122
158
|
'.worker.tsx'
|
|
123
159
|
];
|
|
124
|
-
for (const ext of nodeExts)chain.resolve.extensions.prepend(ext);
|
|
160
|
+
if (includeNodeExtensions) for (const ext of nodeExts)chain.resolve.extensions.prepend(ext);
|
|
125
161
|
if (isServiceWorker) for (const ext of webWorkerExts)chain.resolve.extensions.prepend(ext);
|
|
126
162
|
}
|
|
127
163
|
exports.builderPluginAdapterBasic = __webpack_exports__.builderPluginAdapterBasic;
|
|
@@ -122,9 +122,10 @@ function applyFilterEntriesBySSRConfig({ isProd, chain, appNormalizedConfig }) {
|
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
async function applySSRLoaderEntry(chain, optinos, isServer) {
|
|
125
|
-
const { appContext } = optinos;
|
|
125
|
+
const { appContext, normalizedConfig } = optinos;
|
|
126
126
|
const { internalDirectory } = appContext;
|
|
127
127
|
const { entrypoints } = appContext;
|
|
128
|
+
const isRsc = (0, utils_namespaceObject.isUseRsc)(normalizedConfig);
|
|
128
129
|
await Promise.all(entrypoints.map(async (entrypoint)=>{
|
|
129
130
|
const { entryName } = entrypoint;
|
|
130
131
|
const serverLoadersFile = (0, utils_js_namespaceObject.getServerCombinedModuleFile)(internalDirectory, entryName);
|
|
@@ -132,6 +133,7 @@ async function applySSRLoaderEntry(chain, optinos, isServer) {
|
|
|
132
133
|
await utils_namespaceObject.fs.access(serverLoadersFile, utils_namespaceObject.fs.constants.F_OK);
|
|
133
134
|
chain.entry(`${entryName}-server-loaders`).add(serverLoadersFile);
|
|
134
135
|
} catch (err) {}
|
|
136
|
+
else if (isRsc) chain.entry(`${entryName}-server-loaders`).add("data:text/javascript,export%20{};");
|
|
135
137
|
}));
|
|
136
138
|
}
|
|
137
139
|
function applySSRDataLoader(chain, options) {
|
|
@@ -24,9 +24,12 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
default: ()=>deploy
|
|
27
|
+
default: ()=>deploy,
|
|
28
|
+
getSupportedDeployTargets: ()=>getSupportedDeployTargets,
|
|
29
|
+
resolveDeployTarget: ()=>resolveDeployTarget
|
|
28
30
|
});
|
|
29
31
|
const external_std_env_namespaceObject = require("std-env");
|
|
32
|
+
const cloudflare_js_namespaceObject = require("./platforms/cloudflare.js");
|
|
30
33
|
const gh_pages_js_namespaceObject = require("./platforms/gh-pages.js");
|
|
31
34
|
const netlify_js_namespaceObject = require("./platforms/netlify.js");
|
|
32
35
|
const node_js_namespaceObject = require("./platforms/node.js");
|
|
@@ -36,14 +39,18 @@ const deployPresets = {
|
|
|
36
39
|
node: node_js_namespaceObject.createNodePreset,
|
|
37
40
|
vercel: vercel_js_namespaceObject.createVercelPreset,
|
|
38
41
|
netlify: netlify_js_namespaceObject.createNetlifyPreset,
|
|
39
|
-
ghPages: gh_pages_js_namespaceObject.createGhPagesPreset
|
|
42
|
+
ghPages: gh_pages_js_namespaceObject.createGhPagesPreset,
|
|
43
|
+
cloudflare: cloudflare_js_namespaceObject.createCloudflarePreset
|
|
40
44
|
};
|
|
45
|
+
const getSupportedDeployTargets = ()=>Object.keys(deployPresets);
|
|
46
|
+
const isDeployTarget = (target)=>Object.prototype.hasOwnProperty.call(deployPresets, target);
|
|
47
|
+
const resolveDeployTarget = (modernConfig, envDeployTarget = process.env.MODERNJS_DEPLOY, detectedProvider = external_std_env_namespaceObject.provider)=>modernConfig.deploy?.target || envDeployTarget || detectedProvider || 'node';
|
|
41
48
|
async function getDeployPreset(appContext, modernConfig, deployTarget, api) {
|
|
42
49
|
const { appDirectory, distDirectory, metaName } = appContext;
|
|
43
50
|
const { useSSR, useAPI, useWebServer } = (0, index_js_namespaceObject.getProjectUsage)(appDirectory, distDirectory, metaName);
|
|
44
51
|
const needModernServer = useSSR || useAPI || useWebServer;
|
|
52
|
+
if (!isDeployTarget(deployTarget)) throw new Error(`Unknown deploy target: '${deployTarget}'. deploy.target or MODERNJS_DEPLOY should be one of: ${getSupportedDeployTargets().join(', ')}.`);
|
|
45
53
|
const createPreset = deployPresets[deployTarget];
|
|
46
|
-
if (!createPreset) throw new Error(`Unknown deploy target: '${deployTarget}'. MODERNJS_DEPLOY should be 'node', 'vercel', or 'netlify'.`);
|
|
47
54
|
return createPreset({
|
|
48
55
|
appContext,
|
|
49
56
|
modernConfig,
|
|
@@ -54,12 +61,12 @@ async function getDeployPreset(appContext, modernConfig, deployTarget, api) {
|
|
|
54
61
|
const deploy = ()=>({
|
|
55
62
|
name: '@modern-js/plugin-deploy',
|
|
56
63
|
setup: (api)=>{
|
|
57
|
-
const deployTarget = process.env.MODERNJS_DEPLOY || external_std_env_namespaceObject.provider || 'node';
|
|
58
64
|
api.deploy(async ()=>{
|
|
59
65
|
const appContext = api.getAppContext();
|
|
60
66
|
const { metaName } = appContext;
|
|
61
|
-
if ('modern-js' !== metaName && !process.env.MODERNJS_DEPLOY) return;
|
|
62
67
|
const modernConfig = api.getNormalizedConfig();
|
|
68
|
+
const deployTarget = resolveDeployTarget(modernConfig);
|
|
69
|
+
if ('modern-js' !== metaName && !modernConfig.deploy?.target && !process.env.MODERNJS_DEPLOY) return;
|
|
63
70
|
const deployPreset = await getDeployPreset(appContext, modernConfig, deployTarget, api);
|
|
64
71
|
deployPreset?.prepare && await deployPreset?.prepare();
|
|
65
72
|
deployPreset?.writeOutput && await deployPreset?.writeOutput();
|
|
@@ -69,8 +76,12 @@ const deploy = ()=>({
|
|
|
69
76
|
}
|
|
70
77
|
});
|
|
71
78
|
exports["default"] = __webpack_exports__["default"];
|
|
79
|
+
exports.getSupportedDeployTargets = __webpack_exports__.getSupportedDeployTargets;
|
|
80
|
+
exports.resolveDeployTarget = __webpack_exports__.resolveDeployTarget;
|
|
72
81
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
73
|
-
"default"
|
|
82
|
+
"default",
|
|
83
|
+
"getSupportedDeployTargets",
|
|
84
|
+
"resolveDeployTarget"
|
|
74
85
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
75
86
|
Object.defineProperty(exports, '__esModule', {
|
|
76
87
|
value: true
|