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