@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.19 → 3.9.0-ultramodern.20
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/dist/cjs/build-config/remote-address.js +12 -10
- package/dist/cjs/cloudflare-builder.js +5 -30
- package/dist/cjs/config.js +4 -0
- package/dist/cjs/deploy-output/plugin.js +8 -7
- package/dist/cjs/deploy-output/target.js +57 -1
- package/dist/cjs/release-envelope/plugin.js +5 -10
- package/dist/esm/build-config/remote-address.mjs +12 -10
- package/dist/esm/cloudflare-builder.mjs +6 -28
- package/dist/esm/config.mjs +1 -0
- package/dist/esm/deploy-output/plugin.mjs +9 -8
- package/dist/esm/deploy-output/target.mjs +50 -3
- package/dist/esm/release-envelope/plugin.mjs +5 -10
- package/dist/esm-node/build-config/remote-address.mjs +12 -10
- package/dist/esm-node/cloudflare-builder.mjs +6 -28
- package/dist/esm-node/config.mjs +1 -0
- package/dist/esm-node/deploy-output/plugin.mjs +9 -8
- package/dist/esm-node/deploy-output/target.mjs +50 -3
- package/dist/esm-node/release-envelope/plugin.mjs +5 -10
- package/dist/types/cloudflare-builder.d.ts +4 -8
- package/dist/types/config.d.ts +2 -1
- package/dist/types/deploy-output/plugin.d.ts +12 -18
- package/dist/types/deploy-output/target.d.ts +28 -5
- package/dist/types/release-envelope/plugin.d.ts +3 -7
- package/package.json +17 -16
- package/src/build-config/remote-address.ts +11 -9
- package/src/cloudflare-builder.ts +11 -55
- package/src/config.ts +2 -7
- package/src/deploy-output/plugin.ts +20 -37
- package/src/deploy-output/target.ts +97 -14
- package/src/release-envelope/plugin.ts +10 -40
- package/dist/cjs/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/esm/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/esm-node/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
- package/dist/types/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +0 -13
- package/src/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
|
@@ -31,18 +31,20 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
createRemoteManifestUrl: ()=>createRemoteManifestUrl
|
|
32
32
|
});
|
|
33
33
|
const surface_resolution_namespaceObject = require("@modern-js/surface-resolution");
|
|
34
|
+
const target_js_namespaceObject = require("../deploy-output/target.js");
|
|
34
35
|
const external_build_environment_js_namespaceObject = require("./build-environment.js");
|
|
35
36
|
function createRemoteManifestUrl(options) {
|
|
36
|
-
const env =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
const env = {
|
|
38
|
+
...Object.fromEntries([
|
|
39
|
+
options.manifestEnv,
|
|
40
|
+
options.publicUrlEnv,
|
|
41
|
+
'ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN'
|
|
42
|
+
].map((name)=>[
|
|
43
|
+
name,
|
|
44
|
+
(0, external_build_environment_js_namespaceObject.getBuildConfigEnvironment)(name)
|
|
45
|
+
])),
|
|
46
|
+
MODERNJS_DEPLOY: (0, target_js_namespaceObject.resolveDeployTarget)().target
|
|
47
|
+
};
|
|
46
48
|
const address = (0, surface_resolution_namespaceObject.resolveBrowserManifestAddress)(env, options, (0, external_build_environment_js_namespaceObject.getBuildConfigEnvironment)('NODE_ENV') ?? 'production');
|
|
47
49
|
if (!address.ok) throw new Error(`Remote ${options.mfName}: ${address.reason}`);
|
|
48
50
|
return env[options.manifestEnv]?.trim() || `${options.mfName}@${address.manifestUrl}`;
|
|
@@ -41,7 +41,6 @@ var __webpack_exports__ = {};
|
|
|
41
41
|
__webpack_require__.r(__webpack_exports__);
|
|
42
42
|
__webpack_require__.d(__webpack_exports__, {
|
|
43
43
|
applyCloudflareBuilderEnvironments: ()=>applyCloudflareBuilderEnvironments,
|
|
44
|
-
applyCloudflareWorkerMfRuntimeBoundary: ()=>applyCloudflareWorkerMfRuntimeBoundary,
|
|
45
44
|
applyCloudflareWorkerRspackConfig: ()=>applyCloudflareWorkerRspackConfig,
|
|
46
45
|
claimsByFunctionExternal: ()=>claimsByFunctionExternal,
|
|
47
46
|
createAbsentOptionalDependencyFilter: ()=>createAbsentOptionalDependencyFilter,
|
|
@@ -57,7 +56,6 @@ const external_node_path_namespaceObject = require("node:path");
|
|
|
57
56
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
58
57
|
const builder_namespaceObject = require("@modern-js/builder");
|
|
59
58
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
60
|
-
const external_std_env_namespaceObject = require("std-env");
|
|
61
59
|
const external_cloudflare_output_contract_js_namespaceObject = require("./cloudflare-output-contract.js");
|
|
62
60
|
const external_read_template_js_namespaceObject = require("./read-template.js");
|
|
63
61
|
const moduleRequire = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
|
@@ -68,8 +66,6 @@ const ROUTE_SERVER_LOADERS_FILE = 'route-server-loaders.js';
|
|
|
68
66
|
const WORKER_ROUTE_DATA_FILE = 'cloudflare-worker-route-data.js';
|
|
69
67
|
const WORKER_ROUTE_DATA_TEMPLATE = 'cloudflare-worker-route-data.mjs';
|
|
70
68
|
const DATA_LOADER_CLIENT_TRANSFORM = /plugin-data-loader[\\/](?:.+[\\/])?loader\.[cm]?js$/u;
|
|
71
|
-
const MF_SSR_DATA_FETCH_RUNTIME_PLUGIN = '@module-federation/modern-js-v3/ssr-inject-data-fetch-function-plugin';
|
|
72
|
-
const MF_SSR_DEV_RUNTIME_PLUGIN = '@module-federation/modern-js-v3/ssr-dev-plugin';
|
|
73
69
|
const WORKER_DEPENDENCY_CONDITIONS = [
|
|
74
70
|
[
|
|
75
71
|
'esm',
|
|
@@ -363,12 +359,6 @@ function applyCloudflareWorkerRspackConfig(chain, workerEntryNames) {
|
|
|
363
359
|
function removeCloudflareWorkerDataLoaderClientTransform(chain) {
|
|
364
360
|
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);
|
|
365
361
|
}
|
|
366
|
-
function applyCloudflareWorkerMfRuntimeBoundary(chain) {
|
|
367
|
-
const runtimePlugin = (0, external_read_template_js_namespaceObject.getTemplatePath)('cloudflare-worker-mf-ssr-runtime-plugin.mjs');
|
|
368
|
-
chain.plugins.delete('plugin-module-federation');
|
|
369
|
-
chain.resolve.alias.set(`${MF_SSR_DATA_FETCH_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
370
|
-
chain.resolve.alias.set(`${MF_SSR_DEV_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
371
|
-
}
|
|
372
362
|
const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
373
363
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
374
364
|
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
@@ -378,18 +368,6 @@ const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
|
378
368
|
}
|
|
379
369
|
return resolveJsOrTsEntry(external_node_path_default().resolve(appContext.apiDirectory, 'index'));
|
|
380
370
|
};
|
|
381
|
-
const CLOUDFLARE_DEPLOY_PROVIDERS = new Set([
|
|
382
|
-
'cloudflare',
|
|
383
|
-
'cloudflare_pages',
|
|
384
|
-
'cloudflare_workers'
|
|
385
|
-
]);
|
|
386
|
-
const resolveStdEnvDeployProvider = ()=>external_std_env_namespaceObject.provider;
|
|
387
|
-
const isCloudflareWorkerDeploy = (normalizedConfig, resolveDeployProvider)=>{
|
|
388
|
-
const explicitTarget = normalizedConfig.deploy?.target || process.env.MODERNJS_DEPLOY;
|
|
389
|
-
if (explicitTarget) return 'cloudflare' === explicitTarget;
|
|
390
|
-
const detectedProvider = resolveDeployProvider();
|
|
391
|
-
return detectedProvider ? CLOUDFLARE_DEPLOY_PROVIDERS.has(detectedProvider) : false;
|
|
392
|
-
};
|
|
393
371
|
const rewriteWorkerEntryPath = (entry)=>entry.replace('index.jsx', 'index.server.jsx').replace('bootstrap.server.jsx', 'index.server.jsx').replace('bootstrap.jsx', 'index.server.jsx');
|
|
394
372
|
const rewriteWorkerEntryDescription = (description)=>{
|
|
395
373
|
const entryImport = description.import;
|
|
@@ -512,7 +490,7 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
|
512
490
|
]
|
|
513
491
|
});
|
|
514
492
|
chain.plugin('cloudflare-worker-absent-optional-dependencies').use(AbsentOptionalDependencyPlugin);
|
|
515
|
-
|
|
493
|
+
chain.plugins.delete('plugin-module-federation');
|
|
516
494
|
setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
|
|
517
495
|
setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
|
|
518
496
|
setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
|
|
@@ -521,8 +499,8 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
|
521
499
|
setAliasIfPresent(chain.resolve.alias, '@loadable/component$', loadableComponentFile);
|
|
522
500
|
};
|
|
523
501
|
};
|
|
524
|
-
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig
|
|
525
|
-
if (
|
|
502
|
+
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig }) {
|
|
503
|
+
if (appContext.deployTarget?.target !== 'cloudflare') return environments;
|
|
526
504
|
const workerEnvironment = environments[builder_namespaceObject.SERVICE_WORKER_ENVIRONMENT_NAME] ?? (appContext.apiOnly ? {
|
|
527
505
|
output: {
|
|
528
506
|
target: 'web-worker'
|
|
@@ -559,19 +537,17 @@ function applyCloudflareBuilderEnvironments(options) {
|
|
|
559
537
|
environments: getCloudflareBuilderEnvironments(options)
|
|
560
538
|
};
|
|
561
539
|
}
|
|
562
|
-
const createCloudflareBuilderPlugin = (
|
|
540
|
+
const createCloudflareBuilderPlugin = ()=>({
|
|
563
541
|
name: '@modern-js/cloudflare-builder',
|
|
564
542
|
setup (api) {
|
|
565
543
|
api.modifyBuilderEnvironments(({ environments })=>applyCloudflareBuilderEnvironments({
|
|
566
544
|
appContext: api.getAppContext(),
|
|
567
545
|
environments,
|
|
568
|
-
normalizedConfig: api.getNormalizedConfig()
|
|
569
|
-
resolveDeployProvider
|
|
546
|
+
normalizedConfig: api.getNormalizedConfig()
|
|
570
547
|
}));
|
|
571
548
|
}
|
|
572
549
|
});
|
|
573
550
|
exports.applyCloudflareBuilderEnvironments = __webpack_exports__.applyCloudflareBuilderEnvironments;
|
|
574
|
-
exports.applyCloudflareWorkerMfRuntimeBoundary = __webpack_exports__.applyCloudflareWorkerMfRuntimeBoundary;
|
|
575
551
|
exports.applyCloudflareWorkerRspackConfig = __webpack_exports__.applyCloudflareWorkerRspackConfig;
|
|
576
552
|
exports.claimsByFunctionExternal = __webpack_exports__.claimsByFunctionExternal;
|
|
577
553
|
exports.createAbsentOptionalDependencyFilter = __webpack_exports__.createAbsentOptionalDependencyFilter;
|
|
@@ -581,7 +557,6 @@ exports.getCloudflareBuilderEnvironments = __webpack_exports__.getCloudflareBuil
|
|
|
581
557
|
exports.getCloudflareWorkerRspackConfig = __webpack_exports__.getCloudflareWorkerRspackConfig;
|
|
582
558
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
583
559
|
"applyCloudflareBuilderEnvironments",
|
|
584
|
-
"applyCloudflareWorkerMfRuntimeBoundary",
|
|
585
560
|
"applyCloudflareWorkerRspackConfig",
|
|
586
561
|
"claimsByFunctionExternal",
|
|
587
562
|
"createAbsentOptionalDependencyFilter",
|
package/dist/cjs/config.js
CHANGED
|
@@ -30,16 +30,20 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
createRemoteManifestUrl: ()=>remote_address_js_namespaceObject.createRemoteManifestUrl,
|
|
32
32
|
getBuildConfigEnvironment: ()=>public_js_namespaceObject.getBuildConfigEnvironment,
|
|
33
|
+
resolveDeployTarget: ()=>target_js_namespaceObject.resolveDeployTarget,
|
|
33
34
|
resolveEffectTsgoCompiler: ()=>public_js_namespaceObject.resolveEffectTsgoCompiler
|
|
34
35
|
});
|
|
35
36
|
const public_js_namespaceObject = require("./build-config/public.js");
|
|
36
37
|
const remote_address_js_namespaceObject = require("./build-config/remote-address.js");
|
|
38
|
+
const target_js_namespaceObject = require("./deploy-output/target.js");
|
|
37
39
|
exports.createRemoteManifestUrl = __webpack_exports__.createRemoteManifestUrl;
|
|
38
40
|
exports.getBuildConfigEnvironment = __webpack_exports__.getBuildConfigEnvironment;
|
|
41
|
+
exports.resolveDeployTarget = __webpack_exports__.resolveDeployTarget;
|
|
39
42
|
exports.resolveEffectTsgoCompiler = __webpack_exports__.resolveEffectTsgoCompiler;
|
|
40
43
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
41
44
|
"createRemoteManifestUrl",
|
|
42
45
|
"getBuildConfigEnvironment",
|
|
46
|
+
"resolveDeployTarget",
|
|
43
47
|
"resolveEffectTsgoCompiler"
|
|
44
48
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
45
49
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -46,13 +46,13 @@ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_no
|
|
|
46
46
|
const external_npmAliases_js_namespaceObject = require("./npmAliases.js");
|
|
47
47
|
const external_public_assets_js_namespaceObject = require("./public-assets.js");
|
|
48
48
|
const external_target_js_namespaceObject = require("./target.js");
|
|
49
|
-
const createDeployOutputAliasesPlugin = (
|
|
49
|
+
const createDeployOutputAliasesPlugin = ()=>({
|
|
50
50
|
name: '@modern-js/deploy-output-aliases',
|
|
51
51
|
setup (api) {
|
|
52
52
|
api.onAfterDeploy(async ()=>{
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const appContext = api.getAppContext();
|
|
54
|
+
if ('node' !== (0, external_target_js_namespaceObject.getDeployingTarget)(appContext)) return;
|
|
55
|
+
const { appDirectory } = appContext;
|
|
56
56
|
const entry = (0, external_node_module_namespaceObject.createRequire)(__filename).resolve('@modern-js/prod-server');
|
|
57
57
|
const identity = await (0, external_npmAliases_js_namespaceObject.readPackageIdentity)(entry);
|
|
58
58
|
await (0, external_npmAliases_js_namespaceObject.preserveNpmAliases)({
|
|
@@ -69,13 +69,14 @@ const createDeployOutputAliasesPlugin = ({ resolveDeployTarget = external_target
|
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
|
-
const createDeployOutputPublicAssetsPlugin = (
|
|
72
|
+
const createDeployOutputPublicAssetsPlugin = ()=>({
|
|
73
73
|
name: '@modern-js/deploy-output-public-assets',
|
|
74
74
|
setup (api) {
|
|
75
75
|
api.onAfterDeploy(async ()=>{
|
|
76
|
-
const
|
|
76
|
+
const appContext = api.getAppContext();
|
|
77
|
+
if ('node' !== (0, external_target_js_namespaceObject.getDeployingTarget)(appContext)) return;
|
|
78
|
+
const { appDirectory } = appContext;
|
|
77
79
|
const config = api.getNormalizedConfig();
|
|
78
|
-
if ('modern-js' !== metaName && !config.deploy?.target && !process.env.MODERNJS_DEPLOY || 'node' !== resolveDeployTarget(config)) return;
|
|
79
80
|
await (0, external_public_assets_js_namespaceObject.stageDeclaredPublicAssets)({
|
|
80
81
|
appDirectory,
|
|
81
82
|
outputDirectory: external_node_path_default().join(appDirectory, '.output'),
|
|
@@ -28,9 +28,21 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
DEPLOY_TARGETS: ()=>DEPLOY_TARGETS,
|
|
32
|
+
DEPLOY_TARGET_FLAG: ()=>DEPLOY_TARGET_FLAG,
|
|
33
|
+
getDeployingTarget: ()=>getDeployingTarget,
|
|
31
34
|
resolveDeployTarget: ()=>resolveDeployTarget
|
|
32
35
|
});
|
|
36
|
+
const utils_namespaceObject = require("@modern-js/utils");
|
|
33
37
|
const external_std_env_namespaceObject = require("std-env");
|
|
38
|
+
const DEPLOY_TARGETS = [
|
|
39
|
+
'node',
|
|
40
|
+
'vercel',
|
|
41
|
+
'netlify',
|
|
42
|
+
'ghPages',
|
|
43
|
+
'cloudflare'
|
|
44
|
+
];
|
|
45
|
+
const DEPLOY_TARGET_FLAG = '--deploy-target';
|
|
34
46
|
const providerDeployTargets = {
|
|
35
47
|
vercel: 'vercel',
|
|
36
48
|
netlify: 'netlify',
|
|
@@ -38,9 +50,53 @@ const providerDeployTargets = {
|
|
|
38
50
|
cloudflare_pages: 'cloudflare',
|
|
39
51
|
cloudflare_workers: 'cloudflare'
|
|
40
52
|
};
|
|
41
|
-
const
|
|
53
|
+
const readDeployTargetFlag = (argv)=>{
|
|
54
|
+
for (const [index, arg] of argv.entries()){
|
|
55
|
+
if (arg === DEPLOY_TARGET_FLAG) {
|
|
56
|
+
const value = argv[index + 1];
|
|
57
|
+
if (void 0 === value || value.startsWith('-')) throw new Error(`${DEPLOY_TARGET_FLAG} needs a value.`);
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
if (arg.startsWith(`${DEPLOY_TARGET_FLAG}=`)) return arg.slice(DEPLOY_TARGET_FLAG.length + 1);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const assertDeployTarget = (target, source)=>{
|
|
64
|
+
if (!DEPLOY_TARGETS.includes(target)) throw new Error(`Unknown deploy target '${target}' from ${source}. Use one of: ${DEPLOY_TARGETS.join(', ')}.`);
|
|
65
|
+
return target;
|
|
66
|
+
};
|
|
67
|
+
const resolveDeployTarget = ({ argv = (0, utils_namespaceObject.getArgv)(), configTarget, env = process.env.MODERNJS_DEPLOY, provider = external_std_env_namespaceObject.provider } = {})=>{
|
|
68
|
+
const explicit = [
|
|
69
|
+
[
|
|
70
|
+
readDeployTargetFlag(argv),
|
|
71
|
+
DEPLOY_TARGET_FLAG
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
configTarget,
|
|
75
|
+
'deploy.target'
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
env,
|
|
79
|
+
'MODERNJS_DEPLOY'
|
|
80
|
+
]
|
|
81
|
+
].find(([target])=>target);
|
|
82
|
+
if (explicit?.[0]) return {
|
|
83
|
+
target: assertDeployTarget(explicit[0], explicit[1]),
|
|
84
|
+
explicit: true
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
target: provider && providerDeployTargets[provider] || 'node',
|
|
88
|
+
explicit: false
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
const getDeployingTarget = ({ deployTarget, metaName })=>deployTarget && ('modern-js' === metaName || deployTarget.explicit) ? deployTarget.target : void 0;
|
|
92
|
+
exports.DEPLOY_TARGETS = __webpack_exports__.DEPLOY_TARGETS;
|
|
93
|
+
exports.DEPLOY_TARGET_FLAG = __webpack_exports__.DEPLOY_TARGET_FLAG;
|
|
94
|
+
exports.getDeployingTarget = __webpack_exports__.getDeployingTarget;
|
|
42
95
|
exports.resolveDeployTarget = __webpack_exports__.resolveDeployTarget;
|
|
43
96
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
97
|
+
"DEPLOY_TARGETS",
|
|
98
|
+
"DEPLOY_TARGET_FLAG",
|
|
99
|
+
"getDeployingTarget",
|
|
44
100
|
"resolveDeployTarget"
|
|
45
101
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
46
102
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -42,14 +42,9 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
42
42
|
const external_node_path_namespaceObject = require("node:path");
|
|
43
43
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
44
44
|
const public_assets_js_namespaceObject = require("../deploy-output/public-assets.js");
|
|
45
|
+
const target_js_namespaceObject = require("../deploy-output/target.js");
|
|
45
46
|
const external_framework_output_js_namespaceObject = require("./framework-output.js");
|
|
46
|
-
const
|
|
47
|
-
const { metaName } = api.getAppContext();
|
|
48
|
-
const config = api.getNormalizedConfig();
|
|
49
|
-
if ('modern-js' !== metaName && !config.deploy?.target && !process.env.MODERNJS_DEPLOY) return;
|
|
50
|
-
return resolveDeployTarget(config);
|
|
51
|
-
};
|
|
52
|
-
const createUltramodernReleaseEnvelopePlugin = ({ resolveDeployTarget })=>({
|
|
47
|
+
const createUltramodernReleaseEnvelopePlugin = ()=>({
|
|
53
48
|
name: '@modern-js/ultramodern-release-envelope',
|
|
54
49
|
pre: [
|
|
55
50
|
'@modern-js/backend-federation-build',
|
|
@@ -71,19 +66,19 @@ const createUltramodernReleaseEnvelopePlugin = ({ resolveDeployTarget })=>({
|
|
|
71
66
|
});
|
|
72
67
|
};
|
|
73
68
|
api.onAfterBuild(async ()=>{
|
|
74
|
-
const configuredTarget =
|
|
69
|
+
const configuredTarget = api.getAppContext().deployTarget?.target;
|
|
75
70
|
if ('node' !== configuredTarget && 'cloudflare' !== configuredTarget) return;
|
|
76
71
|
await emitBuildEnvelope(configuredTarget, false);
|
|
77
72
|
});
|
|
78
73
|
api.onBeforeDeploy(async ()=>{
|
|
79
|
-
const configuredTarget =
|
|
74
|
+
const configuredTarget = (0, target_js_namespaceObject.getDeployingTarget)(api.getAppContext());
|
|
80
75
|
if ('node' !== configuredTarget) return;
|
|
81
76
|
await emitBuildEnvelope(configuredTarget);
|
|
82
77
|
const { distDirectory } = api.getAppContext();
|
|
83
78
|
await (0, external_framework_output_js_namespaceObject.verifyBuildOutputReleaseEnvelope)(distDirectory, configuredTarget);
|
|
84
79
|
});
|
|
85
80
|
api.onAfterDeploy(async ()=>{
|
|
86
|
-
const configuredTarget =
|
|
81
|
+
const configuredTarget = (0, target_js_namespaceObject.getDeployingTarget)(api.getAppContext());
|
|
87
82
|
if ('node' !== configuredTarget) return;
|
|
88
83
|
const { appDirectory, distDirectory } = api.getAppContext();
|
|
89
84
|
const outputDirectory = external_node_path_default().join(appDirectory, '.output');
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { resolveBrowserManifestAddress } from "@modern-js/surface-resolution";
|
|
2
|
+
import { resolveDeployTarget } from "../deploy-output/target.mjs";
|
|
2
3
|
import { getBuildConfigEnvironment } from "./build-environment.mjs";
|
|
3
4
|
function createRemoteManifestUrl(options) {
|
|
4
|
-
const env =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
const env = {
|
|
6
|
+
...Object.fromEntries([
|
|
7
|
+
options.manifestEnv,
|
|
8
|
+
options.publicUrlEnv,
|
|
9
|
+
'ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN'
|
|
10
|
+
].map((name)=>[
|
|
11
|
+
name,
|
|
12
|
+
getBuildConfigEnvironment(name)
|
|
13
|
+
])),
|
|
14
|
+
MODERNJS_DEPLOY: resolveDeployTarget().target
|
|
15
|
+
};
|
|
14
16
|
const address = resolveBrowserManifestAddress(env, options, getBuildConfigEnvironment('NODE_ENV') ?? 'production');
|
|
15
17
|
if (!address.ok) throw new Error(`Remote ${options.mfName}: ${address.reason}`);
|
|
16
18
|
return env[options.manifestEnv]?.trim() || `${options.mfName}@${address.manifestUrl}`;
|
|
@@ -3,7 +3,6 @@ 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 { provider } from "std-env";
|
|
7
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);
|
|
@@ -14,8 +13,6 @@ const ROUTE_SERVER_LOADERS_FILE = 'route-server-loaders.js';
|
|
|
14
13
|
const WORKER_ROUTE_DATA_FILE = 'cloudflare-worker-route-data.js';
|
|
15
14
|
const WORKER_ROUTE_DATA_TEMPLATE = 'cloudflare-worker-route-data.mjs';
|
|
16
15
|
const DATA_LOADER_CLIENT_TRANSFORM = /plugin-data-loader[\\/](?:.+[\\/])?loader\.[cm]?js$/u;
|
|
17
|
-
const MF_SSR_DATA_FETCH_RUNTIME_PLUGIN = '@module-federation/modern-js-v3/ssr-inject-data-fetch-function-plugin';
|
|
18
|
-
const MF_SSR_DEV_RUNTIME_PLUGIN = '@module-federation/modern-js-v3/ssr-dev-plugin';
|
|
19
16
|
const WORKER_DEPENDENCY_CONDITIONS = [
|
|
20
17
|
[
|
|
21
18
|
'esm',
|
|
@@ -309,12 +306,6 @@ function applyCloudflareWorkerRspackConfig(chain, workerEntryNames) {
|
|
|
309
306
|
function removeCloudflareWorkerDataLoaderClientTransform(chain) {
|
|
310
307
|
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);
|
|
311
308
|
}
|
|
312
|
-
function applyCloudflareWorkerMfRuntimeBoundary(chain) {
|
|
313
|
-
const runtimePlugin = getTemplatePath('cloudflare-worker-mf-ssr-runtime-plugin.mjs');
|
|
314
|
-
chain.plugins.delete('plugin-module-federation');
|
|
315
|
-
chain.resolve.alias.set(`${MF_SSR_DATA_FETCH_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
316
|
-
chain.resolve.alias.set(`${MF_SSR_DEV_RUNTIME_PLUGIN}$`, runtimePlugin);
|
|
317
|
-
}
|
|
318
309
|
const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
319
310
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
320
311
|
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
@@ -324,18 +315,6 @@ const getEffectBffEntry = (normalizedConfig, appContext)=>{
|
|
|
324
315
|
}
|
|
325
316
|
return resolveJsOrTsEntry(node_path.resolve(appContext.apiDirectory, 'index'));
|
|
326
317
|
};
|
|
327
|
-
const CLOUDFLARE_DEPLOY_PROVIDERS = new Set([
|
|
328
|
-
'cloudflare',
|
|
329
|
-
'cloudflare_pages',
|
|
330
|
-
'cloudflare_workers'
|
|
331
|
-
]);
|
|
332
|
-
const resolveStdEnvDeployProvider = ()=>provider;
|
|
333
|
-
const isCloudflareWorkerDeploy = (normalizedConfig, resolveDeployProvider)=>{
|
|
334
|
-
const explicitTarget = normalizedConfig.deploy?.target || process.env.MODERNJS_DEPLOY;
|
|
335
|
-
if (explicitTarget) return 'cloudflare' === explicitTarget;
|
|
336
|
-
const detectedProvider = resolveDeployProvider();
|
|
337
|
-
return detectedProvider ? CLOUDFLARE_DEPLOY_PROVIDERS.has(detectedProvider) : false;
|
|
338
|
-
};
|
|
339
318
|
const rewriteWorkerEntryPath = (entry)=>entry.replace('index.jsx', 'index.server.jsx').replace('bootstrap.server.jsx', 'index.server.jsx').replace('bootstrap.jsx', 'index.server.jsx');
|
|
340
319
|
const rewriteWorkerEntryDescription = (description)=>{
|
|
341
320
|
const entryImport = description.import;
|
|
@@ -458,7 +437,7 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
|
458
437
|
]
|
|
459
438
|
});
|
|
460
439
|
chain.plugin('cloudflare-worker-absent-optional-dependencies').use(AbsentOptionalDependencyPlugin);
|
|
461
|
-
|
|
440
|
+
chain.plugins.delete('plugin-module-federation');
|
|
462
441
|
setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
|
|
463
442
|
setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
|
|
464
443
|
setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
|
|
@@ -467,8 +446,8 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
|
|
|
467
446
|
setAliasIfPresent(chain.resolve.alias, '@loadable/component$', loadableComponentFile);
|
|
468
447
|
};
|
|
469
448
|
};
|
|
470
|
-
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig
|
|
471
|
-
if (
|
|
449
|
+
function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig }) {
|
|
450
|
+
if (appContext.deployTarget?.target !== 'cloudflare') return environments;
|
|
472
451
|
const workerEnvironment = environments[SERVICE_WORKER_ENVIRONMENT_NAME] ?? (appContext.apiOnly ? {
|
|
473
452
|
output: {
|
|
474
453
|
target: 'web-worker'
|
|
@@ -505,15 +484,14 @@ function applyCloudflareBuilderEnvironments(options) {
|
|
|
505
484
|
environments: getCloudflareBuilderEnvironments(options)
|
|
506
485
|
};
|
|
507
486
|
}
|
|
508
|
-
const createCloudflareBuilderPlugin = (
|
|
487
|
+
const createCloudflareBuilderPlugin = ()=>({
|
|
509
488
|
name: '@modern-js/cloudflare-builder',
|
|
510
489
|
setup (api) {
|
|
511
490
|
api.modifyBuilderEnvironments(({ environments })=>applyCloudflareBuilderEnvironments({
|
|
512
491
|
appContext: api.getAppContext(),
|
|
513
492
|
environments,
|
|
514
|
-
normalizedConfig: api.getNormalizedConfig()
|
|
515
|
-
resolveDeployProvider
|
|
493
|
+
normalizedConfig: api.getNormalizedConfig()
|
|
516
494
|
}));
|
|
517
495
|
}
|
|
518
496
|
});
|
|
519
|
-
export { applyCloudflareBuilderEnvironments,
|
|
497
|
+
export { applyCloudflareBuilderEnvironments, applyCloudflareWorkerRspackConfig, claimsByFunctionExternal, createAbsentOptionalDependencyFilter, createCloudflareBuilderPlugin, createRequestRedirectMatcher, getCloudflareBuilderEnvironments, getCloudflareWorkerRspackConfig };
|
package/dist/esm/config.mjs
CHANGED
|
@@ -2,14 +2,14 @@ import { createRequire } from "node:module";
|
|
|
2
2
|
import node_path from "node:path";
|
|
3
3
|
import { preserveNpmAliases, readPackageIdentity } from "./npmAliases.mjs";
|
|
4
4
|
import { NODE_PUBLIC_ASSET_SCOPE, normalizeDeclaredPublicAssets, stageDeclaredPublicAssets } from "./public-assets.mjs";
|
|
5
|
-
import {
|
|
6
|
-
const createDeployOutputAliasesPlugin = (
|
|
5
|
+
import { getDeployingTarget } from "./target.mjs";
|
|
6
|
+
const createDeployOutputAliasesPlugin = ()=>({
|
|
7
7
|
name: '@modern-js/deploy-output-aliases',
|
|
8
8
|
setup (api) {
|
|
9
9
|
api.onAfterDeploy(async ()=>{
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const appContext = api.getAppContext();
|
|
11
|
+
if ('node' !== getDeployingTarget(appContext)) return;
|
|
12
|
+
const { appDirectory } = appContext;
|
|
13
13
|
const entry = createRequire(__filename).resolve('@modern-js/prod-server');
|
|
14
14
|
const identity = await readPackageIdentity(entry);
|
|
15
15
|
await preserveNpmAliases({
|
|
@@ -26,13 +26,14 @@ const createDeployOutputAliasesPlugin = ({ resolveDeployTarget = external_target
|
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
const createDeployOutputPublicAssetsPlugin = (
|
|
29
|
+
const createDeployOutputPublicAssetsPlugin = ()=>({
|
|
30
30
|
name: '@modern-js/deploy-output-public-assets',
|
|
31
31
|
setup (api) {
|
|
32
32
|
api.onAfterDeploy(async ()=>{
|
|
33
|
-
const
|
|
33
|
+
const appContext = api.getAppContext();
|
|
34
|
+
if ('node' !== getDeployingTarget(appContext)) return;
|
|
35
|
+
const { appDirectory } = appContext;
|
|
34
36
|
const config = api.getNormalizedConfig();
|
|
35
|
-
if ('modern-js' !== metaName && !config.deploy?.target && !process.env.MODERNJS_DEPLOY || 'node' !== resolveDeployTarget(config)) return;
|
|
36
37
|
await stageDeclaredPublicAssets({
|
|
37
38
|
appDirectory,
|
|
38
39
|
outputDirectory: node_path.join(appDirectory, '.output'),
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getArgv } from "@modern-js/utils";
|
|
2
|
+
import { provider as external_std_env_provider } from "std-env";
|
|
3
|
+
const DEPLOY_TARGETS = [
|
|
4
|
+
'node',
|
|
5
|
+
'vercel',
|
|
6
|
+
'netlify',
|
|
7
|
+
'ghPages',
|
|
8
|
+
'cloudflare'
|
|
9
|
+
];
|
|
10
|
+
const DEPLOY_TARGET_FLAG = '--deploy-target';
|
|
2
11
|
const providerDeployTargets = {
|
|
3
12
|
vercel: 'vercel',
|
|
4
13
|
netlify: 'netlify',
|
|
@@ -6,5 +15,43 @@ const providerDeployTargets = {
|
|
|
6
15
|
cloudflare_pages: 'cloudflare',
|
|
7
16
|
cloudflare_workers: 'cloudflare'
|
|
8
17
|
};
|
|
9
|
-
const
|
|
10
|
-
|
|
18
|
+
const readDeployTargetFlag = (argv)=>{
|
|
19
|
+
for (const [index, arg] of argv.entries()){
|
|
20
|
+
if (arg === DEPLOY_TARGET_FLAG) {
|
|
21
|
+
const value = argv[index + 1];
|
|
22
|
+
if (void 0 === value || value.startsWith('-')) throw new Error(`${DEPLOY_TARGET_FLAG} needs a value.`);
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
if (arg.startsWith(`${DEPLOY_TARGET_FLAG}=`)) return arg.slice(DEPLOY_TARGET_FLAG.length + 1);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const assertDeployTarget = (target, source)=>{
|
|
29
|
+
if (!DEPLOY_TARGETS.includes(target)) throw new Error(`Unknown deploy target '${target}' from ${source}. Use one of: ${DEPLOY_TARGETS.join(', ')}.`);
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
const resolveDeployTarget = ({ argv = getArgv(), configTarget, env = process.env.MODERNJS_DEPLOY, provider = external_std_env_provider } = {})=>{
|
|
33
|
+
const explicit = [
|
|
34
|
+
[
|
|
35
|
+
readDeployTargetFlag(argv),
|
|
36
|
+
DEPLOY_TARGET_FLAG
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
configTarget,
|
|
40
|
+
'deploy.target'
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
env,
|
|
44
|
+
'MODERNJS_DEPLOY'
|
|
45
|
+
]
|
|
46
|
+
].find(([target])=>target);
|
|
47
|
+
if (explicit?.[0]) return {
|
|
48
|
+
target: assertDeployTarget(explicit[0], explicit[1]),
|
|
49
|
+
explicit: true
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
target: provider && providerDeployTargets[provider] || 'node',
|
|
53
|
+
explicit: false
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const getDeployingTarget = ({ deployTarget, metaName })=>deployTarget && ('modern-js' === metaName || deployTarget.explicit) ? deployTarget.target : void 0;
|
|
57
|
+
export { DEPLOY_TARGETS, DEPLOY_TARGET_FLAG, getDeployingTarget, resolveDeployTarget };
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import node_path from "node:path";
|
|
2
2
|
import { NODE_PUBLIC_ASSET_SCOPE, normalizeDeclaredPublicAssets, resolveAddedDeclaredPublicAssetPaths } from "../deploy-output/public-assets.mjs";
|
|
3
|
+
import { getDeployingTarget } from "../deploy-output/target.mjs";
|
|
3
4
|
import { emitFrameworkMicroVerticalReleaseEnvelope, emitNodeStagedReleaseEnvelope, verifyBuildOutputReleaseEnvelope, verifyNodeReleaseEnvelopeStaging } from "./framework-output.mjs";
|
|
4
|
-
const
|
|
5
|
-
const { metaName } = api.getAppContext();
|
|
6
|
-
const config = api.getNormalizedConfig();
|
|
7
|
-
if ('modern-js' !== metaName && !config.deploy?.target && !process.env.MODERNJS_DEPLOY) return;
|
|
8
|
-
return resolveDeployTarget(config);
|
|
9
|
-
};
|
|
10
|
-
const createUltramodernReleaseEnvelopePlugin = ({ resolveDeployTarget })=>({
|
|
5
|
+
const createUltramodernReleaseEnvelopePlugin = ()=>({
|
|
11
6
|
name: '@modern-js/ultramodern-release-envelope',
|
|
12
7
|
pre: [
|
|
13
8
|
'@modern-js/backend-federation-build',
|
|
@@ -29,19 +24,19 @@ const createUltramodernReleaseEnvelopePlugin = ({ resolveDeployTarget })=>({
|
|
|
29
24
|
});
|
|
30
25
|
};
|
|
31
26
|
api.onAfterBuild(async ()=>{
|
|
32
|
-
const configuredTarget =
|
|
27
|
+
const configuredTarget = api.getAppContext().deployTarget?.target;
|
|
33
28
|
if ('node' !== configuredTarget && 'cloudflare' !== configuredTarget) return;
|
|
34
29
|
await emitBuildEnvelope(configuredTarget, false);
|
|
35
30
|
});
|
|
36
31
|
api.onBeforeDeploy(async ()=>{
|
|
37
|
-
const configuredTarget =
|
|
32
|
+
const configuredTarget = getDeployingTarget(api.getAppContext());
|
|
38
33
|
if ('node' !== configuredTarget) return;
|
|
39
34
|
await emitBuildEnvelope(configuredTarget);
|
|
40
35
|
const { distDirectory } = api.getAppContext();
|
|
41
36
|
await verifyBuildOutputReleaseEnvelope(distDirectory, configuredTarget);
|
|
42
37
|
});
|
|
43
38
|
api.onAfterDeploy(async ()=>{
|
|
44
|
-
const configuredTarget =
|
|
39
|
+
const configuredTarget = getDeployingTarget(api.getAppContext());
|
|
45
40
|
if ('node' !== configuredTarget) return;
|
|
46
41
|
const { appDirectory, distDirectory } = api.getAppContext();
|
|
47
42
|
const outputDirectory = node_path.join(appDirectory, '.output');
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { resolveBrowserManifestAddress } from "@modern-js/surface-resolution";
|
|
3
|
+
import { resolveDeployTarget } from "../deploy-output/target.mjs";
|
|
3
4
|
import { getBuildConfigEnvironment } from "./build-environment.mjs";
|
|
4
5
|
function createRemoteManifestUrl(options) {
|
|
5
|
-
const env =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
const env = {
|
|
7
|
+
...Object.fromEntries([
|
|
8
|
+
options.manifestEnv,
|
|
9
|
+
options.publicUrlEnv,
|
|
10
|
+
'ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN'
|
|
11
|
+
].map((name)=>[
|
|
12
|
+
name,
|
|
13
|
+
getBuildConfigEnvironment(name)
|
|
14
|
+
])),
|
|
15
|
+
MODERNJS_DEPLOY: resolveDeployTarget().target
|
|
16
|
+
};
|
|
15
17
|
const address = resolveBrowserManifestAddress(env, options, getBuildConfigEnvironment('NODE_ENV') ?? 'production');
|
|
16
18
|
if (!address.ok) throw new Error(`Remote ${options.mfName}: ${address.reason}`);
|
|
17
19
|
return env[options.manifestEnv]?.trim() || `${options.mfName}@${address.manifestUrl}`;
|