@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
|
@@ -31,10 +31,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
verifyDeliveryUnitIdentity: ()=>verifyDeliveryUnitIdentity
|
|
32
32
|
});
|
|
33
33
|
const backend_federation_contracts_namespaceObject = require("@modern-js/backend-federation-contracts");
|
|
34
|
+
const utils_js_namespaceObject = require("../cloudflare/utils.js");
|
|
34
35
|
const external_issues_js_namespaceObject = require("./issues.js");
|
|
35
36
|
const verifyDeliveryUnitIdentity = (issues, manifest, manifestPath, declared)=>{
|
|
36
37
|
const stamped = manifest?.deliveryUnit;
|
|
37
|
-
const hasStamp =
|
|
38
|
+
const hasStamp = (0, utils_js_namespaceObject.isRecord)(stamped);
|
|
38
39
|
if (declared) {
|
|
39
40
|
if (!hasStamp) return void (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
40
41
|
code: 'missing-delivery-unit',
|
|
@@ -50,36 +51,124 @@ const verifyDeliveryUnitIdentity = (issues, manifest, manifestPath, declared)=>{
|
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
if (hasStamp
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
if (hasStamp) {
|
|
55
|
+
if (!(0, utils_js_namespaceObject.isRecord)(stamped.surfaces)) return void (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
56
|
+
code: 'missing-delivery-unit',
|
|
57
|
+
message: 'Cloudflare worker manifest is missing delivery-unit surface markers.',
|
|
58
|
+
path: manifestPath
|
|
59
|
+
});
|
|
60
|
+
for (const surface of Object.keys(stamped.surfaces))if ('ui' !== surface && 'api' !== surface) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
61
|
+
code: 'delivery-unit-drift',
|
|
62
|
+
message: `Cloudflare worker manifest declares an unsupported ${surface} delivery-unit surface.`,
|
|
63
|
+
path: manifestPath
|
|
64
|
+
});
|
|
65
|
+
if (!declared?.surfaces && !Object.hasOwn(stamped.surfaces, 'ui') && !Object.hasOwn(stamped.surfaces, 'api')) return void (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
66
|
+
code: 'missing-delivery-unit',
|
|
67
|
+
message: 'Cloudflare worker manifest is missing delivery-unit surface markers.',
|
|
68
|
+
path: manifestPath
|
|
69
|
+
});
|
|
70
|
+
for (const surface of [
|
|
71
|
+
'ui',
|
|
72
|
+
'api'
|
|
73
|
+
]){
|
|
74
|
+
const marker = stamped.surfaces[surface];
|
|
75
|
+
const expected = declared?.surfaces?.[surface];
|
|
76
|
+
if (!expected && !marker) continue;
|
|
77
|
+
if (declared?.surfaces && !expected) {
|
|
78
|
+
if (marker) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
79
|
+
code: 'delivery-unit-drift',
|
|
80
|
+
message: `Cloudflare worker manifest declares an unexpected ${surface} delivery-unit surface for this topology profile.`,
|
|
81
|
+
path: manifestPath
|
|
82
|
+
});
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (!(0, utils_js_namespaceObject.isRecord)(marker)) {
|
|
86
|
+
(0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
87
|
+
code: 'missing-delivery-unit',
|
|
88
|
+
message: `Cloudflare worker manifest is missing the ${surface} delivery-unit surface marker.`,
|
|
89
|
+
path: manifestPath
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
(0, external_issues_js_namespaceObject.assertEqual)(issues, marker.surface, surface, {
|
|
61
94
|
code: 'delivery-unit-drift',
|
|
62
|
-
message: `Cloudflare worker manifest
|
|
95
|
+
message: `Cloudflare worker manifest ${surface} surface must declare surface "${surface}".`,
|
|
63
96
|
path: manifestPath
|
|
64
97
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
for (const field of backend_federation_contracts_namespaceObject.DELIVERY_UNIT_IDENTITY_FIELDS){
|
|
99
|
+
const markerValue = (0, backend_federation_contracts_namespaceObject.deliveryUnitIdentityFieldValue)(marker, field);
|
|
100
|
+
const stampedValue = (0, backend_federation_contracts_namespaceObject.deliveryUnitIdentityFieldValue)(stamped, field);
|
|
101
|
+
(0, external_issues_js_namespaceObject.assertEqual)(issues, markerValue, stampedValue, {
|
|
102
|
+
code: 'delivery-unit-drift',
|
|
103
|
+
message: `Cloudflare worker manifest ${surface} surface deliveryUnit.${field} must derive from one delivery-unit record (expected ${stampedValue ?? 'undefined'}, received ${markerValue ?? 'undefined'}).`,
|
|
104
|
+
path: manifestPath
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if ('api' === surface) {
|
|
108
|
+
for (const field of [
|
|
109
|
+
'rendererIdentity',
|
|
110
|
+
'rendererProfile'
|
|
111
|
+
])if (Object.hasOwn(marker, field)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
112
|
+
code: 'delivery-unit-drift',
|
|
113
|
+
message: `Cloudflare worker manifest API surface must not declare ${field}.`,
|
|
114
|
+
path: manifestPath
|
|
115
|
+
});
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const identity = marker.rendererIdentity;
|
|
119
|
+
const profile = marker.rendererProfile;
|
|
120
|
+
const errors = [
|
|
121
|
+
...(0, backend_federation_contracts_namespaceObject.validateRendererIdentity)(identity).errors,
|
|
122
|
+
...(0, backend_federation_contracts_namespaceObject.validateRendererProfile)(profile).errors
|
|
123
|
+
];
|
|
124
|
+
for (const error of errors)(0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
125
|
+
code: 'delivery-unit-drift',
|
|
126
|
+
message: `Cloudflare worker manifest UI ${error.path} ${error.message}`,
|
|
71
127
|
path: manifestPath
|
|
72
128
|
});
|
|
73
|
-
continue;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
129
|
+
if (errors.length || !(0, utils_js_namespaceObject.isRecord)(identity) || !(0, utils_js_namespaceObject.isRecord)(profile)) continue;
|
|
130
|
+
(0, external_issues_js_namespaceObject.assertEqual)(issues, identity.buildId, marker.buildMarker, {
|
|
131
|
+
code: 'delivery-unit-drift',
|
|
132
|
+
message: 'Cloudflare worker manifest UI rendererIdentity.buildId must match its surface buildMarker.',
|
|
133
|
+
path: manifestPath
|
|
134
|
+
});
|
|
135
|
+
(0, external_issues_js_namespaceObject.assertEqual)(issues, identity.appId, marker.appId, {
|
|
136
|
+
code: 'delivery-unit-drift',
|
|
137
|
+
message: 'Cloudflare worker manifest UI rendererIdentity.appId must match its surface appId.',
|
|
138
|
+
path: manifestPath
|
|
139
|
+
});
|
|
140
|
+
(0, external_issues_js_namespaceObject.assertEqual)(issues, marker.appId, stamped.appId, {
|
|
141
|
+
code: 'delivery-unit-drift',
|
|
142
|
+
message: 'Cloudflare worker manifest UI surface appId must match its delivery-unit appId.',
|
|
143
|
+
path: manifestPath
|
|
144
|
+
});
|
|
145
|
+
for (const field of [
|
|
146
|
+
'renderer',
|
|
147
|
+
'protocolVersion'
|
|
148
|
+
])(0, external_issues_js_namespaceObject.assertEqual)(issues, identity[field], profile[field], {
|
|
79
149
|
code: 'delivery-unit-drift',
|
|
80
|
-
message: `Cloudflare worker manifest
|
|
150
|
+
message: `Cloudflare worker manifest UI rendererProfile.${field} must match its renderer identity.`,
|
|
81
151
|
path: manifestPath
|
|
82
152
|
});
|
|
153
|
+
const expectedUi = declared?.surfaces?.ui;
|
|
154
|
+
if (expectedUi?.rendererIdentity) {
|
|
155
|
+
for (const field of [
|
|
156
|
+
'renderer',
|
|
157
|
+
'appId',
|
|
158
|
+
'entryName',
|
|
159
|
+
'protocolVersion',
|
|
160
|
+
'buildId'
|
|
161
|
+
])(0, external_issues_js_namespaceObject.assertEqual)(issues, identity[field], expectedUi.rendererIdentity[field], {
|
|
162
|
+
code: 'delivery-unit-drift',
|
|
163
|
+
message: `Cloudflare worker manifest UI rendererIdentity.${field} must match the topology renderer identity.`,
|
|
164
|
+
path: manifestPath
|
|
165
|
+
});
|
|
166
|
+
for (const error of (0, backend_federation_contracts_namespaceObject.validateRendererProfileCompatibility)(expectedUi.rendererProfile, profile).errors)(0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
167
|
+
code: 'delivery-unit-drift',
|
|
168
|
+
message: `Cloudflare worker manifest UI ${error.path} ${error.message}`,
|
|
169
|
+
path: manifestPath
|
|
170
|
+
});
|
|
171
|
+
}
|
|
83
172
|
}
|
|
84
173
|
}
|
|
85
174
|
};
|
|
@@ -118,6 +118,16 @@ const verifyCloudflareOutput = async (options)=>{
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
if (wrangler) {
|
|
121
|
+
if ('string' != typeof wrangler.name || 0 === wrangler.name.trim().length) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
122
|
+
code: 'invalid-wrangler',
|
|
123
|
+
message: 'wrangler.json name must be a non-empty worker name.',
|
|
124
|
+
path: wranglerPath
|
|
125
|
+
});
|
|
126
|
+
if ('string' != typeof wrangler.compatibility_date || !/^\d{4}-\d{2}-\d{2}$/u.test(wrangler.compatibility_date)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
127
|
+
code: 'invalid-wrangler',
|
|
128
|
+
message: 'wrangler.json compatibility_date must use YYYY-MM-DD.',
|
|
129
|
+
path: wranglerPath
|
|
130
|
+
});
|
|
121
131
|
(0, external_issues_js_namespaceObject.assertEqual)(issues, wrangler.main, outputPlan.wrangler.main, {
|
|
122
132
|
code: 'invalid-wrangler',
|
|
123
133
|
message: `wrangler.json main must be ${outputPlan.wrangler.main}.`,
|
|
@@ -74,6 +74,52 @@ const verifyManifestShape = (issues, manifest, manifestPath)=>{
|
|
|
74
74
|
message: 'Cloudflare output manifest routeSpec.routes must be array.',
|
|
75
75
|
path: manifestPath
|
|
76
76
|
});
|
|
77
|
+
const security = manifest.security;
|
|
78
|
+
if (security && 'object' == typeof security && 'boolean' == typeof security.enabled) {
|
|
79
|
+
const cors = security.cors;
|
|
80
|
+
if (!cors || 'object' != typeof cors || 'boolean' != typeof cors.assets || !Array.isArray(cors.allowedOrigins) || !Array.isArray(cors.allowedMethods) || !Array.isArray(cors.allowedHeaders)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
81
|
+
code: 'invalid-manifest',
|
|
82
|
+
message: 'Cloudflare output manifest security.cors is incomplete.',
|
|
83
|
+
path: manifestPath
|
|
84
|
+
});
|
|
85
|
+
if (security.enabled) {
|
|
86
|
+
const headers = security.headers;
|
|
87
|
+
const csp = security.contentSecurityPolicy;
|
|
88
|
+
const noindex = security.noindex;
|
|
89
|
+
if (!headers || 'object' != typeof headers || ![
|
|
90
|
+
'string',
|
|
91
|
+
'boolean'
|
|
92
|
+
].includes(typeof headers.referrerPolicy) || ![
|
|
93
|
+
'string',
|
|
94
|
+
'boolean'
|
|
95
|
+
].includes(typeof headers.contentTypeOptions) || ![
|
|
96
|
+
'string',
|
|
97
|
+
'boolean'
|
|
98
|
+
].includes(typeof headers.permissionsPolicy)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
99
|
+
code: 'invalid-manifest',
|
|
100
|
+
message: 'Cloudflare output manifest security.headers is incomplete.',
|
|
101
|
+
path: manifestPath
|
|
102
|
+
});
|
|
103
|
+
if (!csp || ![
|
|
104
|
+
'off',
|
|
105
|
+
'report-only',
|
|
106
|
+
'enforce'
|
|
107
|
+
].includes(csp.mode) || !csp.directives || 'object' != typeof csp.directives || Array.isArray(csp.directives) || Object.values(csp.directives).some((value)=>!Array.isArray(value) || value.some((entry)=>'string' != typeof entry))) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
108
|
+
code: 'invalid-manifest',
|
|
109
|
+
message: 'Cloudflare output manifest security.contentSecurityPolicy is invalid.',
|
|
110
|
+
path: manifestPath
|
|
111
|
+
});
|
|
112
|
+
if (!noindex || 'boolean' != typeof noindex.workersDev || 'boolean' != typeof noindex.localhost || !Array.isArray(noindex.previewHostnames)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
113
|
+
code: 'invalid-manifest',
|
|
114
|
+
message: 'Cloudflare output manifest security.noindex is incomplete.',
|
|
115
|
+
path: manifestPath
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
} else (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
119
|
+
code: 'invalid-manifest',
|
|
120
|
+
message: 'Cloudflare output manifest security.enabled must be a boolean.',
|
|
121
|
+
path: manifestPath
|
|
122
|
+
});
|
|
77
123
|
if (manifest.bff?.runtimeFramework === 'effect') (0, external_issues_js_namespaceObject.assertEqual)(issues, manifest.bff.dispatcherExport, constants_js_namespaceObject.BFF_EFFECT_WORKER_DISPATCHER_EXPORT, {
|
|
78
124
|
code: 'invalid-manifest',
|
|
79
125
|
message: `Cloudflare Effect BFF manifest dispatcherExport must be ${constants_js_namespaceObject.BFF_EFFECT_WORKER_DISPATCHER_EXPORT}.`,
|
|
@@ -128,7 +128,13 @@ const verifyCloudflareOutputMutationPolicy = async (options)=>{
|
|
|
128
128
|
const files = (await Promise.all(options.scanRoots.map((scanRoot)=>walkFiles(external_node_path_default().resolve(scanRoot))))).flat();
|
|
129
129
|
for (const file of files){
|
|
130
130
|
if (excludedFiles.has(file)) continue;
|
|
131
|
-
|
|
131
|
+
let source;
|
|
132
|
+
try {
|
|
133
|
+
source = await promises_default().readFile(file, 'utf-8');
|
|
134
|
+
} catch (error) {
|
|
135
|
+
if ('ENOENT' === error.code) continue;
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
132
138
|
for (const forbidden of FORBIDDEN_MUTATION_PATTERNS)if (forbidden.pattern.test(source)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
133
139
|
code: forbidden.code,
|
|
134
140
|
message: forbidden.message,
|
|
@@ -55,7 +55,7 @@ const traverse_namespaceObject = require("@babel/traverse");
|
|
|
55
55
|
var traverse_default = /*#__PURE__*/ __webpack_require__.n(traverse_namespaceObject);
|
|
56
56
|
const external_cloudflare_output_contract_js_namespaceObject = require("../cloudflare-output-contract.js");
|
|
57
57
|
const external_issues_js_namespaceObject = require("./issues.js");
|
|
58
|
-
const getReferencedRouteWorkers = (manifest)=>Array.isArray(manifest?.routeSpec?.routes) ? manifest.routeSpec.routes.map((route)=>'string' == typeof route?.
|
|
58
|
+
const getReferencedRouteWorkers = (manifest, field)=>Array.isArray(manifest?.routeSpec?.routes) ? manifest.routeSpec.routes.map((route)=>'string' == typeof route?.[field] && route[field].length > 0 ? route[field] : void 0).filter((worker)=>'string' == typeof worker) : [];
|
|
59
59
|
const getEffectBffWorker = (manifest)=>manifest?.bff?.runtimeFramework === 'effect' && 'string' == typeof manifest.bff.worker ? manifest.bff.worker : void 0;
|
|
60
60
|
const getWorkerBundleReferences = (manifest)=>{
|
|
61
61
|
const effectBffWorker = getEffectBffWorker(manifest);
|
|
@@ -67,9 +67,14 @@ const getWorkerBundleReferences = (manifest)=>{
|
|
|
67
67
|
reference: effectBffWorker
|
|
68
68
|
}
|
|
69
69
|
] : [],
|
|
70
|
-
...getReferencedRouteWorkers(manifest).map((reference)=>({
|
|
70
|
+
...getReferencedRouteWorkers(manifest, 'worker').map((reference)=>({
|
|
71
71
|
kind: 'route',
|
|
72
72
|
reference
|
|
73
|
+
})),
|
|
74
|
+
...getReferencedRouteWorkers(manifest, 'routeDataWorker').map((reference)=>({
|
|
75
|
+
dispatcherExport: external_cloudflare_output_contract_js_namespaceObject.CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT,
|
|
76
|
+
kind: 'route-data',
|
|
77
|
+
reference
|
|
73
78
|
}))
|
|
74
79
|
];
|
|
75
80
|
};
|
|
@@ -90,7 +95,7 @@ const resolveWorkerBundleReference = (issues, outputDirectory, reference, manife
|
|
|
90
95
|
path: workerPath
|
|
91
96
|
};
|
|
92
97
|
};
|
|
93
|
-
const missingWorkerBundleMessage = (reference)=>'effect-bff' === reference.kind ? 'Cloudflare Effect BFF manifest points to a missing worker bundle.' : 'Cloudflare route worker manifest points to a missing worker bundle.';
|
|
98
|
+
const missingWorkerBundleMessage = (reference)=>'effect-bff' === reference.kind ? 'Cloudflare Effect BFF manifest points to a missing worker bundle.' : 'route-data' === reference.kind ? 'Cloudflare route data worker manifest points to a missing worker bundle.' : 'Cloudflare route worker manifest points to a missing worker bundle.';
|
|
94
99
|
const isAstNode = (value)=>null !== value && 'object' == typeof value && 'type' in value && 'string' == typeof value.type;
|
|
95
100
|
const getNodeName = (node)=>{
|
|
96
101
|
if (!isAstNode(node)) return;
|
|
@@ -334,9 +339,9 @@ const verifyWorkerModuleClosure = async (issues, entryPath, entrySource, contrac
|
|
|
334
339
|
};
|
|
335
340
|
const verifyWorkerBundleReferences = async (issues, worker, source, contract)=>{
|
|
336
341
|
const entryAnalysis = await verifyWorkerModuleClosure(issues, worker.path, source, contract);
|
|
337
|
-
if ('
|
|
342
|
+
if ('string' == typeof worker.dispatcherExport && !entryAnalysis?.exports.has(worker.dispatcherExport)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
|
|
338
343
|
code: 'invalid-worker-bundle',
|
|
339
|
-
message: 'Cloudflare Effect BFF worker bundle must expose its manifest dispatcherExport.',
|
|
344
|
+
message: 'route-data' === worker.kind ? `Cloudflare route data worker bundle must expose ${worker.dispatcherExport}.` : 'Cloudflare Effect BFF worker bundle must expose its manifest dispatcherExport.',
|
|
340
345
|
path: worker.path
|
|
341
346
|
});
|
|
342
347
|
};
|
package/dist/cjs/config.js
CHANGED
|
@@ -28,18 +28,23 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createRemoteManifestUrl: ()=>remote_address_js_namespaceObject.createRemoteManifestUrl,
|
|
31
32
|
getBuildConfigEnvironment: ()=>public_js_namespaceObject.getBuildConfigEnvironment,
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
resolveDeployTarget: ()=>target_js_namespaceObject.resolveDeployTarget,
|
|
34
|
+
resolveEffectTsgoCompiler: ()=>public_js_namespaceObject.resolveEffectTsgoCompiler
|
|
34
35
|
});
|
|
35
36
|
const public_js_namespaceObject = require("./build-config/public.js");
|
|
37
|
+
const remote_address_js_namespaceObject = require("./build-config/remote-address.js");
|
|
38
|
+
const target_js_namespaceObject = require("./deploy-output/target.js");
|
|
39
|
+
exports.createRemoteManifestUrl = __webpack_exports__.createRemoteManifestUrl;
|
|
36
40
|
exports.getBuildConfigEnvironment = __webpack_exports__.getBuildConfigEnvironment;
|
|
41
|
+
exports.resolveDeployTarget = __webpack_exports__.resolveDeployTarget;
|
|
37
42
|
exports.resolveEffectTsgoCompiler = __webpack_exports__.resolveEffectTsgoCompiler;
|
|
38
|
-
exports.withBuildConfigEnvironment = __webpack_exports__.withBuildConfigEnvironment;
|
|
39
43
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
44
|
+
"createRemoteManifestUrl",
|
|
40
45
|
"getBuildConfigEnvironment",
|
|
41
|
-
"
|
|
42
|
-
"
|
|
46
|
+
"resolveDeployTarget",
|
|
47
|
+
"resolveEffectTsgoCompiler"
|
|
43
48
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
44
49
|
Object.defineProperty(exports, '__esModule', {
|
|
45
50
|
value: true
|
|
@@ -48,6 +48,10 @@ const dependencyKeys = [
|
|
|
48
48
|
'dependencies',
|
|
49
49
|
'optionalDependencies'
|
|
50
50
|
];
|
|
51
|
+
const rootDependencyKeys = [
|
|
52
|
+
...dependencyKeys,
|
|
53
|
+
'devDependencies'
|
|
54
|
+
];
|
|
51
55
|
const exactVersionPattern = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u;
|
|
52
56
|
async function readPackageJson(filePath) {
|
|
53
57
|
return JSON.parse(await promises_default().readFile(filePath, 'utf8'));
|
|
@@ -63,14 +67,87 @@ function parseNpmAlias(aliasName, specifier) {
|
|
|
63
67
|
targetVersion: target.slice(versionSeparator + 1)
|
|
64
68
|
};
|
|
65
69
|
}
|
|
66
|
-
function aliasesFromPackageJson(packageJson) {
|
|
70
|
+
function aliasesFromPackageJson(packageJson, keys = dependencyKeys) {
|
|
67
71
|
const aliases = [];
|
|
68
|
-
for (const dependencyKey of
|
|
72
|
+
for (const dependencyKey of keys)for (const [aliasName, specifier] of Object.entries(packageJson[dependencyKey] ?? {})){
|
|
69
73
|
const alias = parseNpmAlias(aliasName, specifier);
|
|
70
74
|
if (alias) aliases.push(alias);
|
|
71
75
|
}
|
|
72
76
|
return aliases;
|
|
73
77
|
}
|
|
78
|
+
async function catalogAliasesFromInstalledPackages(appDirectory, packageJson) {
|
|
79
|
+
const aliases = [];
|
|
80
|
+
for (const dependencyKey of rootDependencyKeys)for (const [aliasName, specifier] of Object.entries(packageJson[dependencyKey] ?? {})){
|
|
81
|
+
if (!specifier.startsWith('catalog:')) continue;
|
|
82
|
+
let installedPackage;
|
|
83
|
+
try {
|
|
84
|
+
installedPackage = await readPackageJson(external_node_path_default().join(appDirectory, 'node_modules', aliasName, 'package.json'));
|
|
85
|
+
} catch (error) {
|
|
86
|
+
if ('ENOENT' === error.code) continue;
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
if (!installedPackage.name || !installedPackage.version) throw new Error(`Installed catalog package ${aliasName} has no identity`);
|
|
90
|
+
if (installedPackage.name !== aliasName) aliases.push({
|
|
91
|
+
aliasName,
|
|
92
|
+
targetName: installedPackage.name,
|
|
93
|
+
targetVersion: installedPackage.version
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return aliases;
|
|
97
|
+
}
|
|
98
|
+
async function installedAliasesByOwner(appDirectory, emittedOwners) {
|
|
99
|
+
const aliasesByOwner = new Map();
|
|
100
|
+
let rootAliases = [];
|
|
101
|
+
const visited = new Set();
|
|
102
|
+
const rootFile = await promises_default().realpath(external_node_path_default().join(appDirectory, 'package.json'));
|
|
103
|
+
const pending = [
|
|
104
|
+
rootFile
|
|
105
|
+
];
|
|
106
|
+
while(pending.length){
|
|
107
|
+
const file = await promises_default().realpath(pending.pop());
|
|
108
|
+
if (visited.has(file)) continue;
|
|
109
|
+
visited.add(file);
|
|
110
|
+
const owner = await readPackageJson(file);
|
|
111
|
+
const aliases = [];
|
|
112
|
+
const keys = file === rootFile ? rootDependencyKeys : dependencyKeys;
|
|
113
|
+
for (const key of keys)for (const name of Object.keys(owner[key] ?? {})){
|
|
114
|
+
let directory = external_node_path_default().dirname(file);
|
|
115
|
+
while(true){
|
|
116
|
+
const packageFile = external_node_path_default().join(directory, 'node_modules', name, 'package.json');
|
|
117
|
+
let target;
|
|
118
|
+
try {
|
|
119
|
+
target = await readPackageJson(packageFile);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if ('ENOENT' !== error.code) throw error;
|
|
122
|
+
const parent = external_node_path_default().dirname(directory);
|
|
123
|
+
if (parent === directory) break;
|
|
124
|
+
directory = parent;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (!target.name || !target.version) throw new Error(`Installed package ${name} has no identity`);
|
|
128
|
+
pending.push(packageFile);
|
|
129
|
+
if (target.name !== name) aliases.push({
|
|
130
|
+
aliasName: name,
|
|
131
|
+
targetName: target.name,
|
|
132
|
+
targetVersion: target.version
|
|
133
|
+
});
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (file === rootFile) rootAliases = aliases;
|
|
138
|
+
const identity = `${owner.name}@${owner.version}`;
|
|
139
|
+
if (emittedOwners.has(identity)) {
|
|
140
|
+
const existing = aliasesByOwner.get(identity);
|
|
141
|
+
const normalized = (items)=>items.map((item)=>`${item.aliasName}=${aliasSpecifier(item)}`).sort().join('\n');
|
|
142
|
+
if (existing && normalized(existing) !== normalized(aliases)) throw new Error(`Cannot preserve npm aliases for ${identity}: installed contexts resolve different dependency identities`);
|
|
143
|
+
aliasesByOwner.set(identity, aliases);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
aliasesByOwner,
|
|
148
|
+
rootAliases
|
|
149
|
+
};
|
|
150
|
+
}
|
|
74
151
|
async function collectPackageRecords(nodeModulesDirectory) {
|
|
75
152
|
const records = [];
|
|
76
153
|
const visitedNodeModules = new Set();
|
|
@@ -191,8 +268,11 @@ async function readPackageIdentity(entryPath) {
|
|
|
191
268
|
async function preserveNpmAliases({ appDirectory, outputDirectory, implicitAliases = [] }) {
|
|
192
269
|
const records = await collectPackageRecords(external_node_path_default().join(outputDirectory, 'node_modules'));
|
|
193
270
|
const appPackageJson = await readPackageJson(external_node_path_default().join(appDirectory, 'package.json'));
|
|
271
|
+
const installedAliases = await installedAliasesByOwner(appDirectory, new Set(records.map(({ packageJson })=>`${packageJson.name}@${packageJson.version}`)));
|
|
194
272
|
const rootAliases = [
|
|
195
|
-
...aliasesFromPackageJson(appPackageJson),
|
|
273
|
+
...aliasesFromPackageJson(appPackageJson, rootDependencyKeys),
|
|
274
|
+
...installedAliases.rootAliases,
|
|
275
|
+
...await catalogAliasesFromInstalledPackages(appDirectory, appPackageJson),
|
|
196
276
|
...implicitAliases
|
|
197
277
|
].filter((alias)=>alias.aliasName !== alias.targetName);
|
|
198
278
|
const emittedRootAliases = [];
|
|
@@ -205,9 +285,15 @@ async function preserveNpmAliases({ appDirectory, outputDirectory, implicitAlias
|
|
|
205
285
|
await ensureAliasLink(outputDirectory, alias, target);
|
|
206
286
|
emittedRootAliases.push(alias);
|
|
207
287
|
}
|
|
208
|
-
for (const record of records)
|
|
209
|
-
const
|
|
210
|
-
|
|
288
|
+
for (const record of records){
|
|
289
|
+
const ownerAliases = [
|
|
290
|
+
...aliasesFromPackageJson(record.packageJson),
|
|
291
|
+
...installedAliases.aliasesByOwner.get(`${record.packageJson.name}@${record.packageJson.version}`) ?? []
|
|
292
|
+
];
|
|
293
|
+
for (const alias of ownerAliases.filter((candidate)=>candidate.aliasName !== candidate.targetName)){
|
|
294
|
+
const target = await resolveAliasTarget(record.directory, alias, outputDirectory);
|
|
295
|
+
if (target) await ensureAliasLink(record.directory, alias, target);
|
|
296
|
+
}
|
|
211
297
|
}
|
|
212
298
|
const outputPackageJsonPath = external_node_path_default().join(outputDirectory, 'package.json');
|
|
213
299
|
const outputPackageJson = await readPackageJson(outputPackageJsonPath);
|
|
@@ -37,20 +37,22 @@ var __webpack_require__ = {};
|
|
|
37
37
|
var __webpack_exports__ = {};
|
|
38
38
|
__webpack_require__.r(__webpack_exports__);
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
-
createDeployOutputAliasesPlugin: ()=>createDeployOutputAliasesPlugin
|
|
40
|
+
createDeployOutputAliasesPlugin: ()=>createDeployOutputAliasesPlugin,
|
|
41
|
+
createDeployOutputPublicAssetsPlugin: ()=>createDeployOutputPublicAssetsPlugin
|
|
41
42
|
});
|
|
42
43
|
const external_node_module_namespaceObject = require("node:module");
|
|
43
44
|
const external_node_path_namespaceObject = require("node:path");
|
|
44
45
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
45
46
|
const external_npmAliases_js_namespaceObject = require("./npmAliases.js");
|
|
47
|
+
const external_public_assets_js_namespaceObject = require("./public-assets.js");
|
|
46
48
|
const external_target_js_namespaceObject = require("./target.js");
|
|
47
|
-
const createDeployOutputAliasesPlugin = (
|
|
49
|
+
const createDeployOutputAliasesPlugin = ()=>({
|
|
48
50
|
name: '@modern-js/deploy-output-aliases',
|
|
49
51
|
setup (api) {
|
|
50
52
|
api.onAfterDeploy(async ()=>{
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
const appContext = api.getAppContext();
|
|
54
|
+
if ('node' !== (0, external_target_js_namespaceObject.getDeployingTarget)(appContext)) return;
|
|
55
|
+
const { appDirectory } = appContext;
|
|
54
56
|
const entry = (0, external_node_module_namespaceObject.createRequire)(__filename).resolve('@modern-js/prod-server');
|
|
55
57
|
const identity = await (0, external_npmAliases_js_namespaceObject.readPackageIdentity)(entry);
|
|
56
58
|
await (0, external_npmAliases_js_namespaceObject.preserveNpmAliases)({
|
|
@@ -67,9 +69,28 @@ const createDeployOutputAliasesPlugin = ({ resolveDeployTarget = external_target
|
|
|
67
69
|
});
|
|
68
70
|
}
|
|
69
71
|
});
|
|
72
|
+
const createDeployOutputPublicAssetsPlugin = ()=>({
|
|
73
|
+
name: '@modern-js/deploy-output-public-assets',
|
|
74
|
+
setup (api) {
|
|
75
|
+
api.onAfterDeploy(async ()=>{
|
|
76
|
+
const appContext = api.getAppContext();
|
|
77
|
+
if ('node' !== (0, external_target_js_namespaceObject.getDeployingTarget)(appContext)) return;
|
|
78
|
+
const { appDirectory } = appContext;
|
|
79
|
+
const config = api.getNormalizedConfig();
|
|
80
|
+
await (0, external_public_assets_js_namespaceObject.stageDeclaredPublicAssets)({
|
|
81
|
+
appDirectory,
|
|
82
|
+
outputDirectory: external_node_path_default().join(appDirectory, '.output'),
|
|
83
|
+
assets: (0, external_public_assets_js_namespaceObject.normalizeDeclaredPublicAssets)(config.deploy?.node?.publicAssets, external_public_assets_js_namespaceObject.NODE_PUBLIC_ASSET_SCOPE),
|
|
84
|
+
scope: external_public_assets_js_namespaceObject.NODE_PUBLIC_ASSET_SCOPE
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
});
|
|
70
89
|
exports.createDeployOutputAliasesPlugin = __webpack_exports__.createDeployOutputAliasesPlugin;
|
|
90
|
+
exports.createDeployOutputPublicAssetsPlugin = __webpack_exports__.createDeployOutputPublicAssetsPlugin;
|
|
71
91
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
72
|
-
"createDeployOutputAliasesPlugin"
|
|
92
|
+
"createDeployOutputAliasesPlugin",
|
|
93
|
+
"createDeployOutputPublicAssetsPlugin"
|
|
73
94
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
74
95
|
Object.defineProperty(exports, '__esModule', {
|
|
75
96
|
value: true
|