@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.9 → 3.9.3-ultramodern.1
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/README.md +23 -0
- package/dist/cjs/backend-federation-build/codegen.js +29 -18
- package/dist/cjs/backend-federation-build/config.js +84 -45
- package/dist/cjs/backend-federation-build/emit.js +63 -22
- package/dist/cjs/build-config/build-environment.js +25 -162
- package/dist/cjs/build-config/internal-effect-discovery.js +143 -0
- package/dist/cjs/build-config/public.js +2 -5
- package/dist/cjs/build-config/remote-address.js +58 -0
- package/dist/cjs/cloudflare/artifacts.js +8 -19
- package/dist/cjs/cloudflare/delivery-unit.js +125 -43
- package/dist/cjs/cloudflare/index.js +14 -4
- package/dist/cjs/cloudflare/native-renderer.js +100 -0
- package/dist/cjs/cloudflare/renderer-identity.js +106 -0
- package/dist/cjs/cloudflare/worker-manifest.js +54 -13
- package/dist/cjs/cloudflare/worker-options.js +48 -0
- package/dist/cjs/cloudflare/wrangler-config.js +210 -13
- package/dist/cjs/cloudflare-builder.js +307 -89
- package/dist/cjs/cloudflare-output-contract.js +36 -4
- package/dist/cjs/cloudflare-output-verifier/identity.js +112 -23
- package/dist/cjs/cloudflare-output-verifier/index.js +10 -0
- package/dist/cjs/cloudflare-output-verifier/manifest.js +46 -0
- package/dist/cjs/cloudflare-output-verifier/mutation-policy.js +7 -1
- package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +10 -5
- package/dist/cjs/config.js +10 -5
- package/dist/cjs/deploy-output/npmAliases.js +92 -6
- package/dist/cjs/deploy-output/plugin.js +27 -6
- package/dist/cjs/deploy-output/public-assets.js +146 -0
- package/dist/cjs/deploy-output/target.js +57 -1
- package/dist/cjs/deploy-output/trace-files.js +99 -0
- package/dist/cjs/module-federation-config/exposes.js +70 -0
- package/dist/cjs/module-federation-config/index.js +73 -0
- package/dist/cjs/module-federation-config/inspect.js +103 -0
- package/dist/cjs/module-federation-config/object-literal.js +87 -0
- package/dist/cjs/module-federation-config/syntax.js +151 -0
- package/dist/cjs/module-federation-config/types.js +18 -0
- package/dist/cjs/native-type-checker.js +130 -13
- package/dist/cjs/policy-defaults.js +38 -29
- package/dist/cjs/release-envelope/canonical.js +2 -9
- package/dist/cjs/release-envelope/contract.js +68 -0
- package/dist/cjs/release-envelope/framework-output.js +296 -105
- package/dist/cjs/release-envelope/index.js +150 -36
- package/dist/cjs/release-envelope/plugin.js +24 -15
- package/dist/cjs/release-envelope/renderer-output-stamp.js +170 -0
- package/dist/cjs/release-envelope/types.js +10 -8
- package/dist/cjs/release-identity.js +8 -5
- package/dist/cjs/renderer-build-identity.js +134 -0
- package/dist/cjs/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
- package/dist/cjs/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
- package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
- package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
- package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
- package/dist/cjs/templates/cloudflare-worker-route-data.mjs +1069 -0
- package/dist/cjs/workspace-topology.js +84 -0
- package/dist/esm/backend-federation-build/codegen.mjs +29 -18
- package/dist/esm/backend-federation-build/config.mjs +74 -38
- package/dist/esm/backend-federation-build/emit.mjs +64 -23
- package/dist/esm/build-config/build-environment.mjs +26 -160
- package/dist/esm/build-config/internal-effect-discovery.mjs +102 -0
- package/dist/esm/build-config/public.mjs +1 -1
- package/dist/esm/build-config/remote-address.mjs +20 -0
- package/dist/esm/cloudflare/artifacts.mjs +8 -19
- package/dist/esm/cloudflare/delivery-unit.mjs +124 -45
- package/dist/esm/cloudflare/index.mjs +15 -5
- package/dist/esm/cloudflare/native-renderer.mjs +48 -0
- package/dist/esm/cloudflare/renderer-identity.mjs +57 -0
- package/dist/esm/cloudflare/worker-manifest.mjs +55 -14
- package/dist/esm/cloudflare/worker-options.mjs +10 -0
- package/dist/esm/cloudflare/wrangler-config.mjs +203 -12
- package/dist/esm/cloudflare-builder.mjs +301 -89
- package/dist/esm/cloudflare-output-contract.mjs +29 -3
- package/dist/esm/cloudflare-output-verifier/identity.mjs +113 -24
- package/dist/esm/cloudflare-output-verifier/index.mjs +10 -0
- package/dist/esm/cloudflare-output-verifier/manifest.mjs +46 -0
- package/dist/esm/cloudflare-output-verifier/mutation-policy.mjs +7 -1
- package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +11 -6
- package/dist/esm/config.mjs +3 -1
- package/dist/esm/deploy-output/npmAliases.mjs +92 -6
- package/dist/esm/deploy-output/plugin.mjs +24 -6
- package/dist/esm/deploy-output/public-assets.mjs +82 -0
- package/dist/esm/deploy-output/target.mjs +50 -3
- package/dist/esm/deploy-output/trace-files.mjs +47 -0
- package/dist/esm/module-federation-config/exposes.mjs +18 -0
- package/dist/esm/module-federation-config/index.mjs +4 -0
- package/dist/esm/module-federation-config/inspect.mjs +65 -0
- package/dist/esm/module-federation-config/object-literal.mjs +43 -0
- package/dist/esm/module-federation-config/syntax.mjs +101 -0
- package/dist/esm/module-federation-config/types.mjs +0 -0
- package/dist/esm/native-type-checker.mjs +124 -13
- package/dist/esm/policy-defaults.mjs +36 -30
- package/dist/esm/release-envelope/canonical.mjs +2 -9
- package/dist/esm/release-envelope/contract.mjs +21 -0
- package/dist/esm/release-envelope/framework-output.mjs +297 -106
- package/dist/esm/release-envelope/index.mjs +149 -38
- package/dist/esm/release-envelope/plugin.mjs +24 -15
- package/dist/esm/release-envelope/renderer-output-stamp.mjs +112 -0
- package/dist/esm/release-envelope/types.mjs +2 -3
- package/dist/esm/release-identity.mjs +8 -5
- package/dist/esm/renderer-build-identity.mjs +82 -0
- package/dist/esm/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
- package/dist/esm/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
- package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
- package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
- package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
- package/dist/esm/templates/cloudflare-worker-route-data.mjs +1069 -0
- package/dist/esm/workspace-topology.mjs +21 -0
- package/dist/esm-node/backend-federation-build/codegen.mjs +29 -18
- package/dist/esm-node/backend-federation-build/config.mjs +74 -38
- package/dist/esm-node/backend-federation-build/emit.mjs +64 -23
- package/dist/esm-node/build-config/build-environment.mjs +26 -160
- package/dist/esm-node/build-config/internal-effect-discovery.mjs +103 -0
- package/dist/esm-node/build-config/public.mjs +1 -1
- package/dist/esm-node/build-config/remote-address.mjs +21 -0
- package/dist/esm-node/cloudflare/artifacts.mjs +8 -19
- package/dist/esm-node/cloudflare/delivery-unit.mjs +124 -45
- package/dist/esm-node/cloudflare/index.mjs +15 -5
- package/dist/esm-node/cloudflare/native-renderer.mjs +49 -0
- package/dist/esm-node/cloudflare/renderer-identity.mjs +58 -0
- package/dist/esm-node/cloudflare/worker-manifest.mjs +55 -14
- package/dist/esm-node/cloudflare/worker-options.mjs +11 -0
- package/dist/esm-node/cloudflare/wrangler-config.mjs +203 -12
- package/dist/esm-node/cloudflare-builder.mjs +301 -89
- package/dist/esm-node/cloudflare-output-contract.mjs +29 -3
- package/dist/esm-node/cloudflare-output-verifier/identity.mjs +113 -24
- package/dist/esm-node/cloudflare-output-verifier/index.mjs +10 -0
- package/dist/esm-node/cloudflare-output-verifier/manifest.mjs +46 -0
- package/dist/esm-node/cloudflare-output-verifier/mutation-policy.mjs +7 -1
- package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +11 -6
- package/dist/esm-node/config.mjs +3 -1
- package/dist/esm-node/deploy-output/npmAliases.mjs +92 -6
- package/dist/esm-node/deploy-output/plugin.mjs +24 -6
- package/dist/esm-node/deploy-output/public-assets.mjs +83 -0
- package/dist/esm-node/deploy-output/target.mjs +50 -3
- package/dist/esm-node/deploy-output/trace-files.mjs +48 -0
- package/dist/esm-node/module-federation-config/exposes.mjs +19 -0
- package/dist/esm-node/module-federation-config/index.mjs +5 -0
- package/dist/esm-node/module-federation-config/inspect.mjs +66 -0
- package/dist/esm-node/module-federation-config/object-literal.mjs +44 -0
- package/dist/esm-node/module-federation-config/syntax.mjs +102 -0
- package/dist/esm-node/module-federation-config/types.mjs +1 -0
- package/dist/esm-node/native-type-checker.mjs +124 -13
- package/dist/esm-node/policy-defaults.mjs +36 -30
- package/dist/esm-node/release-envelope/canonical.mjs +2 -9
- package/dist/esm-node/release-envelope/contract.mjs +22 -0
- package/dist/esm-node/release-envelope/framework-output.mjs +297 -106
- package/dist/esm-node/release-envelope/index.mjs +149 -38
- package/dist/esm-node/release-envelope/plugin.mjs +24 -15
- package/dist/esm-node/release-envelope/renderer-output-stamp.mjs +113 -0
- package/dist/esm-node/release-envelope/types.mjs +2 -3
- package/dist/esm-node/release-identity.mjs +8 -5
- package/dist/esm-node/renderer-build-identity.mjs +83 -0
- package/dist/esm-node/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
- package/dist/esm-node/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
- package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
- package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
- package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
- package/dist/esm-node/templates/cloudflare-worker-route-data.mjs +1069 -0
- package/dist/esm-node/workspace-topology.mjs +22 -0
- package/dist/types/backend-federation-build/codegen.d.ts +30 -0
- package/dist/types/backend-federation-build/config.d.ts +10 -57
- package/dist/types/backend-federation-build/emit.d.ts +12 -2
- package/dist/types/backend-federation-build/index.d.ts +1 -1
- package/dist/types/build-config/build-environment.d.ts +1 -9
- package/dist/types/build-config/internal-effect-discovery.d.ts +4 -0
- package/dist/types/build-config/public.d.ts +1 -1
- package/dist/types/build-config/remote-address.d.ts +3 -0
- package/dist/types/cloudflare/artifacts.d.ts +7 -6
- package/dist/types/cloudflare/constants.d.ts +1 -1
- package/dist/types/cloudflare/delivery-unit.d.ts +38 -7
- package/dist/types/cloudflare/native-renderer.d.ts +30 -0
- package/dist/types/cloudflare/renderer-identity.d.ts +25 -0
- package/dist/types/cloudflare/worker-manifest.d.ts +17 -2
- package/dist/types/cloudflare/worker-options.d.ts +20 -0
- package/dist/types/cloudflare/wrangler-config.d.ts +55 -2
- package/dist/types/cloudflare-builder.d.ts +51 -8
- package/dist/types/cloudflare-output-contract.d.ts +5 -3
- package/dist/types/cloudflare-output-verifier/identity.d.ts +7 -3
- package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +2 -2
- package/dist/types/config.d.ts +98 -13
- package/dist/types/deploy-output/plugin.d.ts +29 -9
- package/dist/types/deploy-output/public-assets.d.ts +51 -0
- package/dist/types/deploy-output/target.d.ts +28 -5
- package/dist/types/deploy-output/trace-files.d.ts +17 -0
- package/dist/types/module-federation-config/exposes.d.ts +11 -0
- package/dist/types/module-federation-config/index.d.ts +5 -0
- package/dist/types/module-federation-config/inspect.d.ts +2 -0
- package/dist/types/module-federation-config/object-literal.d.ts +4 -0
- package/dist/types/module-federation-config/syntax.d.ts +7 -0
- package/dist/types/module-federation-config/types.d.ts +20 -0
- package/dist/types/native-type-checker.d.ts +26 -3
- package/dist/types/policy-defaults.d.ts +12 -2
- package/dist/types/release-envelope/canonical.d.ts +5 -5
- package/dist/types/release-envelope/contract.d.mts +8 -0
- package/dist/types/release-envelope/framework-output.d.ts +23 -13
- package/dist/types/release-envelope/index.d.ts +17 -5
- package/dist/types/release-envelope/plugin.d.ts +10 -6
- package/dist/types/release-envelope/renderer-output-stamp.d.ts +34 -0
- package/dist/types/release-envelope/types.d.ts +42 -4
- package/dist/types/release-identity.d.ts +3 -2
- package/dist/types/renderer-build-identity.d.ts +30 -0
- package/dist/types/templates/cloudflare-worker-route-data.d.mts +14 -0
- package/dist/types/workspace-topology.d.ts +91 -0
- package/package.json +87 -27
- package/src/backend-federation-build/codegen.ts +28 -19
- package/src/backend-federation-build/config.ts +189 -123
- package/src/backend-federation-build/emit.ts +119 -38
- package/src/backend-federation-build/index.ts +4 -1
- package/src/build-config/build-environment.ts +59 -285
- package/src/build-config/internal-effect-discovery.ts +239 -0
- package/src/build-config/public.ts +0 -1
- package/src/build-config/remote-address.ts +33 -0
- package/src/cloudflare/artifacts.ts +22 -43
- package/src/cloudflare/delivery-unit.ts +283 -60
- package/src/cloudflare/index.ts +35 -19
- package/src/cloudflare/native-renderer.ts +117 -0
- package/src/cloudflare/renderer-identity.ts +171 -0
- package/src/cloudflare/worker-manifest.ts +108 -10
- package/src/cloudflare/worker-options.ts +60 -0
- package/src/cloudflare/wrangler-config.ts +390 -14
- package/src/cloudflare-builder.ts +543 -170
- package/src/cloudflare-output-contract.ts +45 -2
- package/src/cloudflare-output-verifier/identity.ts +138 -7
- package/src/cloudflare-output-verifier/index.ts +20 -0
- package/src/cloudflare-output-verifier/manifest.ts +77 -0
- package/src/cloudflare-output-verifier/mutation-policy.ts +11 -1
- package/src/cloudflare-output-verifier/worker-bundles.ts +27 -11
- package/src/config.ts +101 -19
- package/src/deploy-output/npmAliases.ts +141 -4
- package/src/deploy-output/plugin.ts +55 -18
- package/src/deploy-output/public-assets.ts +224 -0
- package/src/deploy-output/target.ts +97 -14
- package/src/deploy-output/trace-files.ts +80 -0
- package/src/module-federation-config/exposes.ts +46 -0
- package/src/module-federation-config/index.ts +22 -0
- package/src/module-federation-config/inspect.ts +157 -0
- package/src/module-federation-config/object-literal.ts +76 -0
- package/src/module-federation-config/syntax.ts +212 -0
- package/src/module-federation-config/types.ts +22 -0
- package/src/native-type-checker.ts +233 -20
- package/src/policy-defaults.ts +47 -17
- package/src/release-envelope/canonical.ts +6 -18
- package/src/release-envelope/contract.mjs +28 -0
- package/src/release-envelope/framework-output.ts +681 -156
- package/src/release-envelope/index.ts +315 -60
- package/src/release-envelope/plugin.ts +54 -38
- package/src/release-envelope/renderer-output-stamp.ts +210 -0
- package/src/release-envelope/types.ts +75 -6
- package/src/release-identity.ts +19 -2
- package/src/renderer-build-identity.ts +168 -0
- package/src/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
- package/src/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
- package/src/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
- package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
- package/src/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
- package/src/templates/cloudflare-worker-route-data.mjs +1069 -0
- package/src/workspace-topology.ts +125 -0
- package/dist/cjs/templates/cloudflare-worker-fs-promises.mjs +0 -11
- package/dist/cjs/templates/cloudflare-worker-loadable-server.mjs +0 -281
- package/dist/cjs/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/cjs/templates/cloudflare-worker-path.mjs +0 -98
- package/dist/esm/templates/cloudflare-worker-fs-promises.mjs +0 -11
- package/dist/esm/templates/cloudflare-worker-loadable-server.mjs +0 -281
- package/dist/esm/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/esm/templates/cloudflare-worker-path.mjs +0 -98
- package/dist/esm-node/templates/cloudflare-worker-fs-promises.mjs +0 -11
- package/dist/esm-node/templates/cloudflare-worker-loadable-server.mjs +0 -281
- package/dist/esm-node/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/esm-node/templates/cloudflare-worker-path.mjs +0 -98
- package/dist/types/templates/cloudflare-worker-fs-promises.d.mts +0 -5
- package/dist/types/templates/cloudflare-worker-loadable-server.d.mts +0 -48
- package/dist/types/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +0 -13
- package/dist/types/templates/cloudflare-worker-path.d.mts +0 -21
- package/src/templates/cloudflare-worker-fs-promises.mjs +0 -11
- package/src/templates/cloudflare-worker-loadable-server.mjs +0 -281
- package/src/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/src/templates/cloudflare-worker-path.mjs +0 -98
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import node_fs from "node:fs";
|
|
3
|
-
import { createRequire } from "node:module";
|
|
3
|
+
import { createRequire, isBuiltin } from "node:module";
|
|
4
4
|
import node_path from "node:path";
|
|
5
5
|
import { SERVICE_WORKER_ENVIRONMENT_NAME } from "@modern-js/builder";
|
|
6
6
|
import { isProd } from "@modern-js/utils";
|
|
7
|
-
import {
|
|
8
|
-
import { CLOUDFLARE_WORKER_NODE_BUILTINS } from "./cloudflare-output-contract.mjs";
|
|
7
|
+
import { CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT, CLOUDFLARE_WORKER_NODE_BUILTINS, CLOUDFLARE_WORKER_PLATFORM_MODULES, getCloudflareWorkerRouteDataEntryName } from "./cloudflare-output-contract.mjs";
|
|
9
8
|
import { getTemplatePath } from "./read-template.mjs";
|
|
10
9
|
const moduleRequire = createRequire(import.meta.url);
|
|
11
10
|
const BFF_EFFECT_WORKER_ENTRY_NAME = '__modern_bff_effect';
|
|
12
11
|
const BFF_EFFECT_WORKER_RUNTIME_QUERY = 'modern-bff-runtime';
|
|
13
|
-
const
|
|
14
|
-
const
|
|
12
|
+
const SERVER_LOADER_COMBINED_FILE = 'server-loader-combined.js';
|
|
13
|
+
const ROUTE_SERVER_LOADERS_FILE = 'route-server-loaders.js';
|
|
14
|
+
const WORKER_ROUTE_DATA_FILE = 'cloudflare-worker-route-data.js';
|
|
15
|
+
const WORKER_ROUTE_DATA_TEMPLATE = 'cloudflare-worker-route-data.mjs';
|
|
16
|
+
const DATA_LOADER_CLIENT_TRANSFORM = /plugin-data-loader[\\/](?:.+[\\/])?loader\.[cm]?js$/u;
|
|
17
|
+
const WORKER_DEPENDENCY_CONDITIONS = [
|
|
18
|
+
[
|
|
19
|
+
'esm',
|
|
20
|
+
'import'
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
'wasm',
|
|
24
|
+
'import'
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
'loaderImport',
|
|
28
|
+
'import'
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
'worker',
|
|
32
|
+
'import'
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
'commonjs',
|
|
36
|
+
'require'
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
'amd',
|
|
40
|
+
'require'
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
'loader',
|
|
44
|
+
'require'
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
'unknown',
|
|
48
|
+
'require'
|
|
49
|
+
]
|
|
50
|
+
];
|
|
15
51
|
const JS_OR_TS_EXTENSIONS = new Set([
|
|
16
52
|
'.js',
|
|
17
53
|
'.jsx',
|
|
@@ -71,19 +107,155 @@ const resolvePackageFile = (packageName, filePath, paths)=>{
|
|
|
71
107
|
const setAliasIfPresent = (alias, name, value)=>{
|
|
72
108
|
if (value) alias.set(name, value);
|
|
73
109
|
};
|
|
74
|
-
const getCloudflareWorkerNodeExternals = ()=>Object.fromEntries(
|
|
75
|
-
|
|
110
|
+
const getCloudflareWorkerNodeExternals = ()=>Object.fromEntries([
|
|
111
|
+
...CLOUDFLARE_WORKER_NODE_BUILTINS.flatMap((builtin)=>{
|
|
112
|
+
const nodeBuiltin = `node:${builtin}`;
|
|
113
|
+
const external = `module-import ${nodeBuiltin}`;
|
|
114
|
+
return isBuiltin(builtin) ? [
|
|
115
|
+
[
|
|
116
|
+
builtin,
|
|
117
|
+
external
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
nodeBuiltin,
|
|
121
|
+
external
|
|
122
|
+
]
|
|
123
|
+
] : [
|
|
124
|
+
[
|
|
125
|
+
nodeBuiltin,
|
|
126
|
+
external
|
|
127
|
+
]
|
|
128
|
+
];
|
|
129
|
+
}),
|
|
130
|
+
...CLOUDFLARE_WORKER_PLATFORM_MODULES.map((platformModule)=>[
|
|
131
|
+
platformModule,
|
|
132
|
+
`module-import ${platformModule}`
|
|
133
|
+
])
|
|
134
|
+
]);
|
|
135
|
+
const getPackageNameFromRequest = (request)=>{
|
|
136
|
+
if (request.startsWith('.') || request.startsWith('/') || request.includes(':') || node_path.isAbsolute(request)) return;
|
|
137
|
+
const segments = request.split('/');
|
|
138
|
+
return request.startsWith('@') ? segments.length > 1 ? `${segments[0]}/${segments[1]}` : void 0 : segments[0];
|
|
139
|
+
};
|
|
140
|
+
const isRedirectedByAliasField = (manifest, aliasFields, request)=>aliasFields.some((field)=>{
|
|
141
|
+
let value = manifest;
|
|
142
|
+
for (const key of 'string' == typeof field ? [
|
|
143
|
+
field
|
|
144
|
+
] : field)value = value && 'object' == typeof value ? value[key] : void 0;
|
|
145
|
+
return 'object' == typeof value && null !== value && Object.hasOwn(value, request);
|
|
146
|
+
});
|
|
147
|
+
const findOwningPackageManifest = (directory, cache)=>{
|
|
148
|
+
if (cache.has(directory)) return cache.get(directory);
|
|
149
|
+
let manifest;
|
|
150
|
+
const packageJsonPath = node_path.join(directory, 'package.json');
|
|
151
|
+
if (node_fs.existsSync(packageJsonPath)) try {
|
|
152
|
+
manifest = JSON.parse(node_fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
153
|
+
} catch {
|
|
154
|
+
manifest = void 0;
|
|
155
|
+
}
|
|
156
|
+
else if (node_path.dirname(directory) !== directory) manifest = findOwningPackageManifest(node_path.dirname(directory), cache);
|
|
157
|
+
cache.set(directory, manifest);
|
|
158
|
+
return manifest;
|
|
159
|
+
};
|
|
160
|
+
const isPackageInstalled = (packageName, directory, moduleDirectories)=>moduleDirectories.some((moduleDirectory)=>{
|
|
161
|
+
if (node_path.isAbsolute(moduleDirectory)) return node_fs.existsSync(node_path.join(moduleDirectory, packageName));
|
|
162
|
+
let current = directory;
|
|
163
|
+
while(true){
|
|
164
|
+
if (node_fs.existsSync(node_path.join(current, moduleDirectory, packageName))) return true;
|
|
165
|
+
const parent = node_path.dirname(current);
|
|
166
|
+
if (parent === current) return false;
|
|
167
|
+
current = parent;
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
const createAbsentOptionalDependencyFilter = (isRedirected = ()=>false, moduleDirectories = [
|
|
171
|
+
'node_modules'
|
|
172
|
+
], aliasFields = [])=>{
|
|
173
|
+
const manifests = new Map();
|
|
174
|
+
return (request, context)=>{
|
|
175
|
+
const packageName = getPackageNameFromRequest(request);
|
|
176
|
+
if (!packageName || !context || isRedirected(request)) return false;
|
|
177
|
+
const manifest = findOwningPackageManifest(context, manifests);
|
|
178
|
+
if (!manifest) return false;
|
|
179
|
+
const optional = manifest.peerDependenciesMeta?.[packageName]?.optional === true || Object.hasOwn(manifest.optionalDependencies ?? {}, packageName);
|
|
180
|
+
return optional && !isRedirectedByAliasField(manifest, aliasFields, request) && !isPackageInstalled(packageName, context, moduleDirectories);
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
const getAliasNames = (alias)=>alias ? Array.isArray(alias) ? alias.map((entry)=>entry.onlyModule ? `${entry.name}$` : entry.name) : Object.keys(alias) : [];
|
|
184
|
+
const getExternalMatchers = (externals)=>{
|
|
185
|
+
if (Array.isArray(externals)) return externals.flatMap(getExternalMatchers);
|
|
186
|
+
if ('string' == typeof externals) return [
|
|
187
|
+
(request)=>request === externals
|
|
188
|
+
];
|
|
189
|
+
if (externals instanceof RegExp) return [
|
|
190
|
+
(request)=>{
|
|
191
|
+
externals.lastIndex = 0;
|
|
192
|
+
return externals.test(request);
|
|
193
|
+
}
|
|
194
|
+
];
|
|
195
|
+
if (externals && 'object' == typeof externals) {
|
|
196
|
+
const names = new Set(Object.entries(externals).filter(([, value])=>false !== value).map(([name])=>name));
|
|
76
197
|
return [
|
|
77
|
-
|
|
78
|
-
builtin,
|
|
79
|
-
`module-import ${nodeBuiltin}`
|
|
80
|
-
],
|
|
81
|
-
[
|
|
82
|
-
nodeBuiltin,
|
|
83
|
-
`module-import ${nodeBuiltin}`
|
|
84
|
-
]
|
|
198
|
+
(request)=>names.has(request)
|
|
85
199
|
];
|
|
86
|
-
}
|
|
200
|
+
}
|
|
201
|
+
return [];
|
|
202
|
+
};
|
|
203
|
+
const createRequestRedirectMatcher = (options)=>{
|
|
204
|
+
const aliasNames = [
|
|
205
|
+
...getAliasNames(options.resolve?.alias),
|
|
206
|
+
...getAliasNames(options.resolve?.fallback)
|
|
207
|
+
];
|
|
208
|
+
const externalMatchers = getExternalMatchers(options.externals);
|
|
209
|
+
return (request)=>externalMatchers.some((matches)=>matches(request)) || aliasNames.some((name)=>name.endsWith('$') ? request === name.slice(0, -1) : request === name || request.startsWith(`${name}/`));
|
|
210
|
+
};
|
|
211
|
+
const getFunctionExternals = (externals)=>Array.isArray(externals) ? externals.flatMap(getFunctionExternals) : 'function' == typeof externals ? [
|
|
212
|
+
externals
|
|
213
|
+
] : [];
|
|
214
|
+
const callFunctionExternal = (external, data)=>new Promise((resolve, reject)=>{
|
|
215
|
+
const returned = external(data, (error, result)=>error ? reject(error) : resolve(result));
|
|
216
|
+
if (null !== returned && 'object' == typeof returned && 'function' == typeof returned.then) returned.then(resolve, reject);
|
|
217
|
+
else if (1 === external.length) resolve(returned);
|
|
218
|
+
});
|
|
219
|
+
const claimsByFunctionExternal = async (externals, data)=>{
|
|
220
|
+
for (const external of externals)try {
|
|
221
|
+
const result = await callFunctionExternal(external, data);
|
|
222
|
+
if (null != result && false !== result) return true;
|
|
223
|
+
} catch {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
return false;
|
|
227
|
+
};
|
|
228
|
+
const PLUGIN_NAME = 'AbsentOptionalDependencyPlugin';
|
|
229
|
+
class AbsentOptionalDependencyPlugin {
|
|
230
|
+
apply(compiler) {
|
|
231
|
+
const isAbsent = createAbsentOptionalDependencyFilter(createRequestRedirectMatcher(compiler.options), compiler.options.resolve.modules, compiler.options.resolve.aliasFields);
|
|
232
|
+
const functionExternals = getFunctionExternals(compiler.options.externals);
|
|
233
|
+
compiler.hooks.normalModuleFactory.tap(PLUGIN_NAME, (factory)=>{
|
|
234
|
+
factory.hooks.beforeResolve.tapPromise(PLUGIN_NAME, async (data)=>{
|
|
235
|
+
if (!isAbsent(data.request, data.context)) return;
|
|
236
|
+
const claimed = await claimsByFunctionExternal(functionExternals, {
|
|
237
|
+
context: data.context,
|
|
238
|
+
contextInfo: {
|
|
239
|
+
issuer: data.contextInfo.issuer,
|
|
240
|
+
issuerLayer: data.contextInfo.issuerLayer ?? null
|
|
241
|
+
},
|
|
242
|
+
getResolve: (options)=>{
|
|
243
|
+
const resolver = factory.getResolver('normal', options ?? {});
|
|
244
|
+
function resolveRequest(context, request, callback) {
|
|
245
|
+
if (callback) return void resolver.resolve({}, context, request, {}, callback);
|
|
246
|
+
return new Promise((resolve, reject)=>{
|
|
247
|
+
resolver.resolve({}, context, request, {}, (error, result)=>error ? reject(error) : resolve(result || void 0));
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return resolveRequest;
|
|
251
|
+
},
|
|
252
|
+
request: data.request
|
|
253
|
+
});
|
|
254
|
+
return claimed ? void 0 : false;
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
87
259
|
const normalizeWorkerOutputName = (name)=>node_path.posix.normalize(name.replace(/\\/gu, '/')).toLowerCase();
|
|
88
260
|
const reserveWorkerChunkName = (baseName, reservedOutputNames)=>{
|
|
89
261
|
let name = baseName;
|
|
@@ -133,11 +305,8 @@ function applyCloudflareWorkerRspackConfig(chain, workerEntryNames) {
|
|
|
133
305
|
chain.optimization.runtimeChunk(config.optimization.runtimeChunk);
|
|
134
306
|
chain.optimization.splitChunks(config.optimization.splitChunks);
|
|
135
307
|
}
|
|
136
|
-
function
|
|
137
|
-
const
|
|
138
|
-
chain.plugins.delete('plugin-module-federation');
|
|
139
|
-
chain.resolve.alias.set(`${MF_SSR_DATA_FETCH_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
140
|
-
chain.resolve.alias.set(`${MF_SSR_DEV_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
308
|
+
function removeCloudflareWorkerDataLoaderClientTransform(chain) {
|
|
309
|
+
for (const [name, rule] of Object.entries(chain.module.rules.entries() ?? {}))if (rule.uses.values().some((use)=>DATA_LOADER_CLIENT_TRANSFORM.test(String(use.get('loader'))))) chain.module.rules.delete(name);
|
|
141
310
|
}
|
|
142
311
|
const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
143
312
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
@@ -148,18 +317,6 @@ const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
|
148
317
|
}
|
|
149
318
|
return resolveJsOrTsEntry(node_path.resolve(appContext.apiDirectory, 'index'));
|
|
150
319
|
};
|
|
151
|
-
const CLOUDFLARE_DEPLOY_PROVIDERS = new Set([
|
|
152
|
-
'cloudflare',
|
|
153
|
-
'cloudflare_pages',
|
|
154
|
-
'cloudflare_workers'
|
|
155
|
-
]);
|
|
156
|
-
const resolveStdEnvDeployProvider = ()=>provider;
|
|
157
|
-
const isCloudflareWorkerDeploy = (normalizedConfig, resolveDeployProvider)=>{
|
|
158
|
-
const explicitTarget = normalizedConfig.deploy?.target || process.env.MODERNJS_DEPLOY;
|
|
159
|
-
if (explicitTarget) return 'cloudflare' === explicitTarget;
|
|
160
|
-
const detectedProvider = resolveDeployProvider();
|
|
161
|
-
return detectedProvider ? CLOUDFLARE_DEPLOY_PROVIDERS.has(detectedProvider) : false;
|
|
162
|
-
};
|
|
163
320
|
const rewriteWorkerEntryPath = (entry)=>entry.replace('index.jsx', 'index.server.jsx').replace('bootstrap.server.jsx', 'index.server.jsx').replace('bootstrap.jsx', 'index.server.jsx');
|
|
164
321
|
const rewriteWorkerEntryDescription = (description)=>{
|
|
165
322
|
const entryImport = description.import;
|
|
@@ -187,28 +344,60 @@ const rewriteWorkerEntries = (entries)=>Object.fromEntries(Object.entries(entrie
|
|
|
187
344
|
rewriteWorkerEntryDescription(value)
|
|
188
345
|
];
|
|
189
346
|
}));
|
|
190
|
-
const prependBundlerChain = (environment, handler)=>{
|
|
347
|
+
const prependBundlerChain = (environment, handler, finalHandler)=>{
|
|
191
348
|
const bundlerChain = environment.tools?.bundlerChain;
|
|
349
|
+
const handlers = [
|
|
350
|
+
handler,
|
|
351
|
+
...bundlerChain ? Array.isArray(bundlerChain) ? bundlerChain : [
|
|
352
|
+
bundlerChain
|
|
353
|
+
] : [],
|
|
354
|
+
...finalHandler ? [
|
|
355
|
+
finalHandler
|
|
356
|
+
] : []
|
|
357
|
+
];
|
|
192
358
|
return {
|
|
193
359
|
...environment,
|
|
194
360
|
tools: {
|
|
195
361
|
...environment.tools,
|
|
196
362
|
htmlPlugin: false,
|
|
197
|
-
bundlerChain:
|
|
198
|
-
handler,
|
|
199
|
-
...bundlerChain
|
|
200
|
-
] : [
|
|
201
|
-
handler,
|
|
202
|
-
bundlerChain
|
|
203
|
-
] : handler
|
|
363
|
+
bundlerChain: handlers
|
|
204
364
|
}
|
|
205
365
|
};
|
|
206
366
|
};
|
|
367
|
+
const createWorkerRouteDataModule = ()=>[
|
|
368
|
+
`import { routes } from './${ROUTE_SERVER_LOADERS_FILE}';`,
|
|
369
|
+
`import { createRouteDataRequestHandler } from ${JSON.stringify(getTemplatePath(WORKER_ROUTE_DATA_TEMPLATE))};`,
|
|
370
|
+
'',
|
|
371
|
+
`export const ${CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT} =`,
|
|
372
|
+
' createRouteDataRequestHandler(routes);',
|
|
373
|
+
''
|
|
374
|
+
].join('\n');
|
|
375
|
+
const getWorkerRouteDataEntries = (appContext)=>{
|
|
376
|
+
const { entrypoints, internalDirectory } = appContext;
|
|
377
|
+
if (!entrypoints || !internalDirectory) return {};
|
|
378
|
+
return Object.fromEntries(entrypoints.flatMap(({ entryName })=>{
|
|
379
|
+
const entryDirectory = node_path.join(internalDirectory, entryName);
|
|
380
|
+
if (!node_fs.existsSync(node_path.join(entryDirectory, SERVER_LOADER_COMBINED_FILE)) || !node_fs.existsSync(node_path.join(entryDirectory, ROUTE_SERVER_LOADERS_FILE))) return [];
|
|
381
|
+
const routeDataFile = node_path.join(entryDirectory, WORKER_ROUTE_DATA_FILE);
|
|
382
|
+
node_fs.writeFileSync(routeDataFile, createWorkerRouteDataModule());
|
|
383
|
+
return [
|
|
384
|
+
[
|
|
385
|
+
getCloudflareWorkerRouteDataEntryName(entryName),
|
|
386
|
+
[
|
|
387
|
+
routeDataFile
|
|
388
|
+
]
|
|
389
|
+
]
|
|
390
|
+
];
|
|
391
|
+
}));
|
|
392
|
+
};
|
|
207
393
|
const getWorkerEntries = (environment, normalizedConfig, appContext)=>{
|
|
208
394
|
const configuredEntries = environment.source?.entry;
|
|
209
|
-
if (!configuredEntries) return;
|
|
210
|
-
const entries = rewriteWorkerEntries(configuredEntries);
|
|
211
395
|
const effectApiEntry = getEffectBffEntry(normalizedConfig, appContext);
|
|
396
|
+
if (!configuredEntries && !effectApiEntry) return;
|
|
397
|
+
const entries = configuredEntries ? {
|
|
398
|
+
...rewriteWorkerEntries(configuredEntries),
|
|
399
|
+
...getWorkerRouteDataEntries(appContext)
|
|
400
|
+
} : {};
|
|
212
401
|
return effectApiEntry ? {
|
|
213
402
|
...entries,
|
|
214
403
|
[BFF_EFFECT_WORKER_ENTRY_NAME]: [
|
|
@@ -216,14 +405,11 @@ const getWorkerEntries = (environment, normalizedConfig, appContext)=>{
|
|
|
216
405
|
]
|
|
217
406
|
} : entries;
|
|
218
407
|
};
|
|
219
|
-
const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
408
|
+
const createCloudflareBundlerChain = (appContext, workerEntryNames, rscEnabled)=>{
|
|
220
409
|
const resolvePaths = [
|
|
221
410
|
appContext.appDirectory,
|
|
222
411
|
process.cwd()
|
|
223
412
|
];
|
|
224
|
-
const tanstackRouterSsrServerFile = resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', resolvePaths);
|
|
225
|
-
const runtimeRscWorkerFile = resolvePackageFile('@modern-js/runtime', 'dist/esm/rsc/server.worker.mjs', resolvePaths);
|
|
226
|
-
const renderRscWorkerFile = resolvePackageFile('@modern-js/render', 'dist/esm/rscWorker.mjs', resolvePaths);
|
|
227
413
|
const reactFile = resolvePackageFile('react', 'index.js', resolvePaths);
|
|
228
414
|
const reactJsxRuntimeFile = resolvePackageFile('react', 'jsx-runtime.js', resolvePaths);
|
|
229
415
|
const reactJsxDevRuntimeFile = resolvePackageFile('react', 'jsx-dev-runtime.js', resolvePaths);
|
|
@@ -233,62 +419,52 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
|
233
419
|
...resolvePaths,
|
|
234
420
|
getTemplatePath('')
|
|
235
421
|
]);
|
|
236
|
-
const loadableServerWorkerFile = getTemplatePath('cloudflare-worker-loadable-server.mjs');
|
|
237
|
-
const fsPromisesWorkerFile = getTemplatePath('cloudflare-worker-fs-promises.mjs');
|
|
238
|
-
const pathWorkerFile = getTemplatePath('cloudflare-worker-path.mjs');
|
|
239
422
|
const entryNames = [
|
|
240
423
|
...workerEntryNames
|
|
241
424
|
];
|
|
242
425
|
return (chain)=>{
|
|
243
426
|
applyCloudflareWorkerRspackConfig(chain, entryNames);
|
|
427
|
+
removeCloudflareWorkerDataLoaderClientTransform(chain);
|
|
428
|
+
if (rscEnabled) chain.optimization.runtimeChunk(false);
|
|
244
429
|
chain.output.module(true).library({
|
|
245
430
|
type: 'module'
|
|
246
431
|
}).publicPath('/').chunkFormat('module').chunkLoading('import').workerChunkLoading('import');
|
|
432
|
+
chain.node.set('__dirname', 'mock').set('__filename', 'mock');
|
|
247
433
|
for (const condition of [
|
|
248
434
|
'workerd',
|
|
249
435
|
'worker',
|
|
250
436
|
'webpack',
|
|
251
437
|
isProd() ? 'production' : 'development',
|
|
252
|
-
'import',
|
|
253
|
-
'require',
|
|
254
438
|
'module'
|
|
255
439
|
])chain.resolve.conditionNames.add(condition);
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
chain.resolve.alias
|
|
267
|
-
chain.resolve.alias
|
|
268
|
-
chain.resolve.alias
|
|
440
|
+
for (const [dependencyType, condition] of WORKER_DEPENDENCY_CONDITIONS)chain.resolve.byDependency.set(dependencyType, {
|
|
441
|
+
conditionNames: [
|
|
442
|
+
condition,
|
|
443
|
+
'...'
|
|
444
|
+
]
|
|
445
|
+
});
|
|
446
|
+
chain.plugin('cloudflare-worker-absent-optional-dependencies').use(AbsentOptionalDependencyPlugin);
|
|
447
|
+
chain.plugins.delete('plugin-module-federation');
|
|
448
|
+
if (!rscEnabled) {
|
|
449
|
+
setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
|
|
450
|
+
setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
|
|
451
|
+
setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
|
|
452
|
+
setAliasIfPresent(chain.resolve.alias, 'react-dom$', reactDomFile);
|
|
453
|
+
setAliasIfPresent(chain.resolve.alias, 'react-dom/server.edge$', reactDomServerEdgeFile);
|
|
269
454
|
}
|
|
270
|
-
setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
|
|
271
|
-
setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
|
|
272
|
-
setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
|
|
273
|
-
setAliasIfPresent(chain.resolve.alias, 'react-dom$', reactDomFile);
|
|
274
|
-
setAliasIfPresent(chain.resolve.alias, 'react-dom/server.edge$', reactDomServerEdgeFile);
|
|
275
455
|
setAliasIfPresent(chain.resolve.alias, '@loadable/component$', loadableComponentFile);
|
|
276
|
-
setAliasIfPresent(chain.resolve.alias, '@loadable/server$', loadableServerWorkerFile);
|
|
277
|
-
setAliasIfPresent(chain.resolve.alias, 'fs/promises$', fsPromisesWorkerFile);
|
|
278
|
-
setAliasIfPresent(chain.resolve.alias, 'node:fs/promises$', fsPromisesWorkerFile);
|
|
279
|
-
setAliasIfPresent(chain.resolve.alias, 'path$', pathWorkerFile);
|
|
280
|
-
setAliasIfPresent(chain.resolve.alias, 'node:path$', pathWorkerFile);
|
|
281
|
-
chain.resolve.alias.set('react-server-dom-rspack/server.node$', 'react-server-dom-rspack/server.edge');
|
|
282
|
-
chain.resolve.alias.set('react-server-dom-rspack/server.node', 'react-server-dom-rspack/server.edge');
|
|
283
|
-
chain.resolve.alias.set('react-server-dom-rspack/client.node$', 'react-server-dom-rspack/client.edge');
|
|
284
|
-
chain.resolve.alias.set('react-server-dom-rspack/client.node', 'react-server-dom-rspack/client.edge');
|
|
285
|
-
chain.resolve.fallback.set('fs', false);
|
|
286
|
-
chain.resolve.fallback.set('node:fs', false);
|
|
287
456
|
};
|
|
288
457
|
};
|
|
289
|
-
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig
|
|
290
|
-
if (
|
|
291
|
-
const workerEnvironment = environments[SERVICE_WORKER_ENVIRONMENT_NAME]
|
|
458
|
+
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig }) {
|
|
459
|
+
if (appContext.deployTarget?.target !== 'cloudflare') return environments;
|
|
460
|
+
const workerEnvironment = environments[SERVICE_WORKER_ENVIRONMENT_NAME] ?? (appContext.apiOnly ? {
|
|
461
|
+
output: {
|
|
462
|
+
target: 'web-worker'
|
|
463
|
+
},
|
|
464
|
+
source: {
|
|
465
|
+
entry: {}
|
|
466
|
+
}
|
|
467
|
+
} : void 0);
|
|
292
468
|
if (!workerEnvironment) return environments;
|
|
293
469
|
const workerEntries = getWorkerEntries(workerEnvironment, normalizedConfig, appContext);
|
|
294
470
|
if (!workerEntries) return environments;
|
|
@@ -303,7 +479,44 @@ function getCloudflareBuilderEnvironments({ appContext, environments, normalized
|
|
|
303
479
|
...workerEnvironment.source,
|
|
304
480
|
entry: workerEntries
|
|
305
481
|
}
|
|
306
|
-
}, createCloudflareBundlerChain(appContext, Object.keys(workerEntries)))
|
|
482
|
+
}, createCloudflareBundlerChain(appContext, Object.keys(workerEntries), Boolean(normalizedConfig.server?.rsc)), normalizedConfig.server?.rsc ? (chain)=>{
|
|
483
|
+
for (const [name, packageName, file] of [
|
|
484
|
+
[
|
|
485
|
+
'react$',
|
|
486
|
+
'react',
|
|
487
|
+
'index.js'
|
|
488
|
+
],
|
|
489
|
+
[
|
|
490
|
+
'react/jsx-runtime$',
|
|
491
|
+
'react',
|
|
492
|
+
'jsx-runtime.js'
|
|
493
|
+
],
|
|
494
|
+
[
|
|
495
|
+
'react/jsx-dev-runtime$',
|
|
496
|
+
'react',
|
|
497
|
+
'jsx-dev-runtime.js'
|
|
498
|
+
],
|
|
499
|
+
[
|
|
500
|
+
'react-dom$',
|
|
501
|
+
'react-dom',
|
|
502
|
+
'index.js'
|
|
503
|
+
],
|
|
504
|
+
[
|
|
505
|
+
'react-dom/server.edge$',
|
|
506
|
+
'react-dom',
|
|
507
|
+
'server.edge.js'
|
|
508
|
+
]
|
|
509
|
+
]){
|
|
510
|
+
const target = resolvePackageFile(packageName, file, [
|
|
511
|
+
appContext.appDirectory,
|
|
512
|
+
process.cwd()
|
|
513
|
+
]);
|
|
514
|
+
if (target && chain.resolve.alias.get(name) === target) chain.resolve.alias.delete(name);
|
|
515
|
+
}
|
|
516
|
+
} : void 0);
|
|
517
|
+
if (appContext.apiOnly) return {
|
|
518
|
+
[SERVICE_WORKER_ENVIRONMENT_NAME]: cloudflareWorkerEnvironment
|
|
519
|
+
};
|
|
307
520
|
return {
|
|
308
521
|
...environments,
|
|
309
522
|
[SERVICE_WORKER_ENVIRONMENT_NAME]: cloudflareWorkerEnvironment
|
|
@@ -314,15 +527,14 @@ function applyCloudflareBuilderEnvironments(options) {
|
|
|
314
527
|
environments: getCloudflareBuilderEnvironments(options)
|
|
315
528
|
};
|
|
316
529
|
}
|
|
317
|
-
const createCloudflareBuilderPlugin = (
|
|
530
|
+
const createCloudflareBuilderPlugin = ()=>({
|
|
318
531
|
name: '@modern-js/cloudflare-builder',
|
|
319
532
|
setup (api) {
|
|
320
533
|
api.modifyBuilderEnvironments(({ environments })=>applyCloudflareBuilderEnvironments({
|
|
321
534
|
appContext: api.getAppContext(),
|
|
322
535
|
environments,
|
|
323
|
-
normalizedConfig: api.getNormalizedConfig()
|
|
324
|
-
resolveDeployProvider
|
|
536
|
+
normalizedConfig: api.getNormalizedConfig()
|
|
325
537
|
}));
|
|
326
538
|
}
|
|
327
539
|
});
|
|
328
|
-
export { applyCloudflareBuilderEnvironments,
|
|
540
|
+
export { applyCloudflareBuilderEnvironments, applyCloudflareWorkerRspackConfig, claimsByFunctionExternal, createAbsentOptionalDependencyFilter, createCloudflareBuilderPlugin, createRequestRedirectMatcher, getCloudflareBuilderEnvironments, getCloudflareWorkerRspackConfig };
|
|
@@ -11,27 +11,49 @@ const CLOUDFLARE_RUNTIME_TYPE = 'cloudflare-module-worker';
|
|
|
11
11
|
const CLOUDFLARE_OUTPUT_PACKAGE_TYPE = 'module';
|
|
12
12
|
const CLOUDFLARE_WORKER_PACKAGE_TYPE = 'commonjs';
|
|
13
13
|
const CLOUDFLARE_WORKER_BUNDLE_FORMAT = 'commonjs';
|
|
14
|
+
const CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT = 'handleRouteDataRequest';
|
|
15
|
+
const getCloudflareWorkerRouteDataEntryName = (entryName)=>`${entryName}-server-loaders`;
|
|
14
16
|
const CLOUDFLARE_WORKER_NODE_BUILTINS = [
|
|
17
|
+
'_http_agent',
|
|
18
|
+
'_http_client',
|
|
19
|
+
'_http_common',
|
|
20
|
+
'_http_incoming',
|
|
21
|
+
'_http_outgoing',
|
|
22
|
+
'_http_server',
|
|
23
|
+
'_tls_common',
|
|
24
|
+
'_tls_wrap',
|
|
15
25
|
'assert',
|
|
16
26
|
'assert/strict',
|
|
17
27
|
'async_hooks',
|
|
18
28
|
'buffer',
|
|
19
29
|
'child_process',
|
|
30
|
+
'cluster',
|
|
31
|
+
'console',
|
|
32
|
+
'constants',
|
|
20
33
|
'crypto',
|
|
21
34
|
'dgram',
|
|
35
|
+
'diagnostics_channel',
|
|
22
36
|
'dns',
|
|
37
|
+
'dns/promises',
|
|
23
38
|
'domain',
|
|
24
39
|
'events',
|
|
25
40
|
'fs',
|
|
26
41
|
'fs/promises',
|
|
27
42
|
'http',
|
|
28
43
|
'http2',
|
|
44
|
+
'https',
|
|
29
45
|
'inspector',
|
|
46
|
+
'inspector/promises',
|
|
30
47
|
'module',
|
|
31
48
|
'net',
|
|
32
49
|
'os',
|
|
33
50
|
'path',
|
|
51
|
+
'path/posix',
|
|
52
|
+
'path/win32',
|
|
53
|
+
'perf_hooks',
|
|
34
54
|
'process',
|
|
55
|
+
'punycode',
|
|
56
|
+
'querystring',
|
|
35
57
|
'readline',
|
|
36
58
|
'readline/promises',
|
|
37
59
|
'repl',
|
|
@@ -41,6 +63,8 @@ const CLOUDFLARE_WORKER_NODE_BUILTINS = [
|
|
|
41
63
|
'stream/promises',
|
|
42
64
|
'stream/web',
|
|
43
65
|
'string_decoder',
|
|
66
|
+
'sys',
|
|
67
|
+
'test',
|
|
44
68
|
'timers',
|
|
45
69
|
'timers/promises',
|
|
46
70
|
'tls',
|
|
@@ -56,10 +80,12 @@ const CLOUDFLARE_WORKER_NODE_BUILTINS = [
|
|
|
56
80
|
'zlib'
|
|
57
81
|
];
|
|
58
82
|
const CLOUDFLARE_WORKER_PLATFORM_MODULES = [
|
|
59
|
-
'cloudflare:sockets'
|
|
83
|
+
'cloudflare:sockets',
|
|
84
|
+
'cloudflare:workers'
|
|
60
85
|
];
|
|
61
86
|
const CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS = [
|
|
62
87
|
'nodejs_compat',
|
|
63
|
-
'global_fetch_strictly_public'
|
|
88
|
+
'global_fetch_strictly_public',
|
|
89
|
+
'enable_request_signal'
|
|
64
90
|
];
|
|
65
|
-
export { CLOUDFLARE_ASSETS_BINDING, CLOUDFLARE_OUTPUT_PACKAGE_FILE, CLOUDFLARE_OUTPUT_PACKAGE_TYPE, CLOUDFLARE_PUBLIC_ASSETS_DIRECTORY, CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS, CLOUDFLARE_RUNTIME_TYPE, CLOUDFLARE_WORKER_BUNDLE_DIRECTORY, CLOUDFLARE_WORKER_BUNDLE_FORMAT, CLOUDFLARE_WORKER_ENTRY, CLOUDFLARE_WORKER_MANIFEST, CLOUDFLARE_WORKER_NODE_BUILTINS, CLOUDFLARE_WORKER_PACKAGE_FILE, CLOUDFLARE_WORKER_PACKAGE_TYPE, CLOUDFLARE_WORKER_PLATFORM_MODULES, CLOUDFLARE_WRANGLER_CONFIG_FILE };
|
|
91
|
+
export { CLOUDFLARE_ASSETS_BINDING, CLOUDFLARE_OUTPUT_PACKAGE_FILE, CLOUDFLARE_OUTPUT_PACKAGE_TYPE, CLOUDFLARE_PUBLIC_ASSETS_DIRECTORY, CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS, CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT, CLOUDFLARE_RUNTIME_TYPE, CLOUDFLARE_WORKER_BUNDLE_DIRECTORY, CLOUDFLARE_WORKER_BUNDLE_FORMAT, CLOUDFLARE_WORKER_ENTRY, CLOUDFLARE_WORKER_MANIFEST, CLOUDFLARE_WORKER_NODE_BUILTINS, CLOUDFLARE_WORKER_PACKAGE_FILE, CLOUDFLARE_WORKER_PACKAGE_TYPE, CLOUDFLARE_WORKER_PLATFORM_MODULES, CLOUDFLARE_WRANGLER_CONFIG_FILE, getCloudflareWorkerRouteDataEntryName };
|