@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.
Files changed (275) hide show
  1. package/README.md +23 -0
  2. package/dist/cjs/backend-federation-build/codegen.js +29 -18
  3. package/dist/cjs/backend-federation-build/config.js +84 -45
  4. package/dist/cjs/backend-federation-build/emit.js +63 -22
  5. package/dist/cjs/build-config/build-environment.js +25 -162
  6. package/dist/cjs/build-config/internal-effect-discovery.js +143 -0
  7. package/dist/cjs/build-config/public.js +2 -5
  8. package/dist/cjs/build-config/remote-address.js +58 -0
  9. package/dist/cjs/cloudflare/artifacts.js +8 -19
  10. package/dist/cjs/cloudflare/delivery-unit.js +125 -43
  11. package/dist/cjs/cloudflare/index.js +14 -4
  12. package/dist/cjs/cloudflare/native-renderer.js +100 -0
  13. package/dist/cjs/cloudflare/renderer-identity.js +106 -0
  14. package/dist/cjs/cloudflare/worker-manifest.js +54 -13
  15. package/dist/cjs/cloudflare/worker-options.js +48 -0
  16. package/dist/cjs/cloudflare/wrangler-config.js +210 -13
  17. package/dist/cjs/cloudflare-builder.js +307 -89
  18. package/dist/cjs/cloudflare-output-contract.js +36 -4
  19. package/dist/cjs/cloudflare-output-verifier/identity.js +112 -23
  20. package/dist/cjs/cloudflare-output-verifier/index.js +10 -0
  21. package/dist/cjs/cloudflare-output-verifier/manifest.js +46 -0
  22. package/dist/cjs/cloudflare-output-verifier/mutation-policy.js +7 -1
  23. package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +10 -5
  24. package/dist/cjs/config.js +10 -5
  25. package/dist/cjs/deploy-output/npmAliases.js +92 -6
  26. package/dist/cjs/deploy-output/plugin.js +27 -6
  27. package/dist/cjs/deploy-output/public-assets.js +146 -0
  28. package/dist/cjs/deploy-output/target.js +57 -1
  29. package/dist/cjs/deploy-output/trace-files.js +99 -0
  30. package/dist/cjs/module-federation-config/exposes.js +70 -0
  31. package/dist/cjs/module-federation-config/index.js +73 -0
  32. package/dist/cjs/module-federation-config/inspect.js +103 -0
  33. package/dist/cjs/module-federation-config/object-literal.js +87 -0
  34. package/dist/cjs/module-federation-config/syntax.js +151 -0
  35. package/dist/cjs/module-federation-config/types.js +18 -0
  36. package/dist/cjs/native-type-checker.js +130 -13
  37. package/dist/cjs/policy-defaults.js +38 -29
  38. package/dist/cjs/release-envelope/canonical.js +2 -9
  39. package/dist/cjs/release-envelope/contract.js +68 -0
  40. package/dist/cjs/release-envelope/framework-output.js +296 -105
  41. package/dist/cjs/release-envelope/index.js +150 -36
  42. package/dist/cjs/release-envelope/plugin.js +24 -15
  43. package/dist/cjs/release-envelope/renderer-output-stamp.js +170 -0
  44. package/dist/cjs/release-envelope/types.js +10 -8
  45. package/dist/cjs/release-identity.js +8 -5
  46. package/dist/cjs/renderer-build-identity.js +134 -0
  47. package/dist/cjs/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  48. package/dist/cjs/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  49. package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  50. package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
  51. package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  52. package/dist/cjs/templates/cloudflare-worker-route-data.mjs +1069 -0
  53. package/dist/cjs/workspace-topology.js +84 -0
  54. package/dist/esm/backend-federation-build/codegen.mjs +29 -18
  55. package/dist/esm/backend-federation-build/config.mjs +74 -38
  56. package/dist/esm/backend-federation-build/emit.mjs +64 -23
  57. package/dist/esm/build-config/build-environment.mjs +26 -160
  58. package/dist/esm/build-config/internal-effect-discovery.mjs +102 -0
  59. package/dist/esm/build-config/public.mjs +1 -1
  60. package/dist/esm/build-config/remote-address.mjs +20 -0
  61. package/dist/esm/cloudflare/artifacts.mjs +8 -19
  62. package/dist/esm/cloudflare/delivery-unit.mjs +124 -45
  63. package/dist/esm/cloudflare/index.mjs +15 -5
  64. package/dist/esm/cloudflare/native-renderer.mjs +48 -0
  65. package/dist/esm/cloudflare/renderer-identity.mjs +57 -0
  66. package/dist/esm/cloudflare/worker-manifest.mjs +55 -14
  67. package/dist/esm/cloudflare/worker-options.mjs +10 -0
  68. package/dist/esm/cloudflare/wrangler-config.mjs +203 -12
  69. package/dist/esm/cloudflare-builder.mjs +301 -89
  70. package/dist/esm/cloudflare-output-contract.mjs +29 -3
  71. package/dist/esm/cloudflare-output-verifier/identity.mjs +113 -24
  72. package/dist/esm/cloudflare-output-verifier/index.mjs +10 -0
  73. package/dist/esm/cloudflare-output-verifier/manifest.mjs +46 -0
  74. package/dist/esm/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  75. package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  76. package/dist/esm/config.mjs +3 -1
  77. package/dist/esm/deploy-output/npmAliases.mjs +92 -6
  78. package/dist/esm/deploy-output/plugin.mjs +24 -6
  79. package/dist/esm/deploy-output/public-assets.mjs +82 -0
  80. package/dist/esm/deploy-output/target.mjs +50 -3
  81. package/dist/esm/deploy-output/trace-files.mjs +47 -0
  82. package/dist/esm/module-federation-config/exposes.mjs +18 -0
  83. package/dist/esm/module-federation-config/index.mjs +4 -0
  84. package/dist/esm/module-federation-config/inspect.mjs +65 -0
  85. package/dist/esm/module-federation-config/object-literal.mjs +43 -0
  86. package/dist/esm/module-federation-config/syntax.mjs +101 -0
  87. package/dist/esm/module-federation-config/types.mjs +0 -0
  88. package/dist/esm/native-type-checker.mjs +124 -13
  89. package/dist/esm/policy-defaults.mjs +36 -30
  90. package/dist/esm/release-envelope/canonical.mjs +2 -9
  91. package/dist/esm/release-envelope/contract.mjs +21 -0
  92. package/dist/esm/release-envelope/framework-output.mjs +297 -106
  93. package/dist/esm/release-envelope/index.mjs +149 -38
  94. package/dist/esm/release-envelope/plugin.mjs +24 -15
  95. package/dist/esm/release-envelope/renderer-output-stamp.mjs +112 -0
  96. package/dist/esm/release-envelope/types.mjs +2 -3
  97. package/dist/esm/release-identity.mjs +8 -5
  98. package/dist/esm/renderer-build-identity.mjs +82 -0
  99. package/dist/esm/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  100. package/dist/esm/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  101. package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  102. package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
  103. package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  104. package/dist/esm/templates/cloudflare-worker-route-data.mjs +1069 -0
  105. package/dist/esm/workspace-topology.mjs +21 -0
  106. package/dist/esm-node/backend-federation-build/codegen.mjs +29 -18
  107. package/dist/esm-node/backend-federation-build/config.mjs +74 -38
  108. package/dist/esm-node/backend-federation-build/emit.mjs +64 -23
  109. package/dist/esm-node/build-config/build-environment.mjs +26 -160
  110. package/dist/esm-node/build-config/internal-effect-discovery.mjs +103 -0
  111. package/dist/esm-node/build-config/public.mjs +1 -1
  112. package/dist/esm-node/build-config/remote-address.mjs +21 -0
  113. package/dist/esm-node/cloudflare/artifacts.mjs +8 -19
  114. package/dist/esm-node/cloudflare/delivery-unit.mjs +124 -45
  115. package/dist/esm-node/cloudflare/index.mjs +15 -5
  116. package/dist/esm-node/cloudflare/native-renderer.mjs +49 -0
  117. package/dist/esm-node/cloudflare/renderer-identity.mjs +58 -0
  118. package/dist/esm-node/cloudflare/worker-manifest.mjs +55 -14
  119. package/dist/esm-node/cloudflare/worker-options.mjs +11 -0
  120. package/dist/esm-node/cloudflare/wrangler-config.mjs +203 -12
  121. package/dist/esm-node/cloudflare-builder.mjs +301 -89
  122. package/dist/esm-node/cloudflare-output-contract.mjs +29 -3
  123. package/dist/esm-node/cloudflare-output-verifier/identity.mjs +113 -24
  124. package/dist/esm-node/cloudflare-output-verifier/index.mjs +10 -0
  125. package/dist/esm-node/cloudflare-output-verifier/manifest.mjs +46 -0
  126. package/dist/esm-node/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  127. package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  128. package/dist/esm-node/config.mjs +3 -1
  129. package/dist/esm-node/deploy-output/npmAliases.mjs +92 -6
  130. package/dist/esm-node/deploy-output/plugin.mjs +24 -6
  131. package/dist/esm-node/deploy-output/public-assets.mjs +83 -0
  132. package/dist/esm-node/deploy-output/target.mjs +50 -3
  133. package/dist/esm-node/deploy-output/trace-files.mjs +48 -0
  134. package/dist/esm-node/module-federation-config/exposes.mjs +19 -0
  135. package/dist/esm-node/module-federation-config/index.mjs +5 -0
  136. package/dist/esm-node/module-federation-config/inspect.mjs +66 -0
  137. package/dist/esm-node/module-federation-config/object-literal.mjs +44 -0
  138. package/dist/esm-node/module-federation-config/syntax.mjs +102 -0
  139. package/dist/esm-node/module-federation-config/types.mjs +1 -0
  140. package/dist/esm-node/native-type-checker.mjs +124 -13
  141. package/dist/esm-node/policy-defaults.mjs +36 -30
  142. package/dist/esm-node/release-envelope/canonical.mjs +2 -9
  143. package/dist/esm-node/release-envelope/contract.mjs +22 -0
  144. package/dist/esm-node/release-envelope/framework-output.mjs +297 -106
  145. package/dist/esm-node/release-envelope/index.mjs +149 -38
  146. package/dist/esm-node/release-envelope/plugin.mjs +24 -15
  147. package/dist/esm-node/release-envelope/renderer-output-stamp.mjs +113 -0
  148. package/dist/esm-node/release-envelope/types.mjs +2 -3
  149. package/dist/esm-node/release-identity.mjs +8 -5
  150. package/dist/esm-node/renderer-build-identity.mjs +83 -0
  151. package/dist/esm-node/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  152. package/dist/esm-node/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  153. package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  154. package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
  155. package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  156. package/dist/esm-node/templates/cloudflare-worker-route-data.mjs +1069 -0
  157. package/dist/esm-node/workspace-topology.mjs +22 -0
  158. package/dist/types/backend-federation-build/codegen.d.ts +30 -0
  159. package/dist/types/backend-federation-build/config.d.ts +10 -57
  160. package/dist/types/backend-federation-build/emit.d.ts +12 -2
  161. package/dist/types/backend-federation-build/index.d.ts +1 -1
  162. package/dist/types/build-config/build-environment.d.ts +1 -9
  163. package/dist/types/build-config/internal-effect-discovery.d.ts +4 -0
  164. package/dist/types/build-config/public.d.ts +1 -1
  165. package/dist/types/build-config/remote-address.d.ts +3 -0
  166. package/dist/types/cloudflare/artifacts.d.ts +7 -6
  167. package/dist/types/cloudflare/constants.d.ts +1 -1
  168. package/dist/types/cloudflare/delivery-unit.d.ts +38 -7
  169. package/dist/types/cloudflare/native-renderer.d.ts +30 -0
  170. package/dist/types/cloudflare/renderer-identity.d.ts +25 -0
  171. package/dist/types/cloudflare/worker-manifest.d.ts +17 -2
  172. package/dist/types/cloudflare/worker-options.d.ts +20 -0
  173. package/dist/types/cloudflare/wrangler-config.d.ts +55 -2
  174. package/dist/types/cloudflare-builder.d.ts +51 -8
  175. package/dist/types/cloudflare-output-contract.d.ts +5 -3
  176. package/dist/types/cloudflare-output-verifier/identity.d.ts +7 -3
  177. package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +2 -2
  178. package/dist/types/config.d.ts +98 -13
  179. package/dist/types/deploy-output/plugin.d.ts +29 -9
  180. package/dist/types/deploy-output/public-assets.d.ts +51 -0
  181. package/dist/types/deploy-output/target.d.ts +28 -5
  182. package/dist/types/deploy-output/trace-files.d.ts +17 -0
  183. package/dist/types/module-federation-config/exposes.d.ts +11 -0
  184. package/dist/types/module-federation-config/index.d.ts +5 -0
  185. package/dist/types/module-federation-config/inspect.d.ts +2 -0
  186. package/dist/types/module-federation-config/object-literal.d.ts +4 -0
  187. package/dist/types/module-federation-config/syntax.d.ts +7 -0
  188. package/dist/types/module-federation-config/types.d.ts +20 -0
  189. package/dist/types/native-type-checker.d.ts +26 -3
  190. package/dist/types/policy-defaults.d.ts +12 -2
  191. package/dist/types/release-envelope/canonical.d.ts +5 -5
  192. package/dist/types/release-envelope/contract.d.mts +8 -0
  193. package/dist/types/release-envelope/framework-output.d.ts +23 -13
  194. package/dist/types/release-envelope/index.d.ts +17 -5
  195. package/dist/types/release-envelope/plugin.d.ts +10 -6
  196. package/dist/types/release-envelope/renderer-output-stamp.d.ts +34 -0
  197. package/dist/types/release-envelope/types.d.ts +42 -4
  198. package/dist/types/release-identity.d.ts +3 -2
  199. package/dist/types/renderer-build-identity.d.ts +30 -0
  200. package/dist/types/templates/cloudflare-worker-route-data.d.mts +14 -0
  201. package/dist/types/workspace-topology.d.ts +91 -0
  202. package/package.json +87 -27
  203. package/src/backend-federation-build/codegen.ts +28 -19
  204. package/src/backend-federation-build/config.ts +189 -123
  205. package/src/backend-federation-build/emit.ts +119 -38
  206. package/src/backend-federation-build/index.ts +4 -1
  207. package/src/build-config/build-environment.ts +59 -285
  208. package/src/build-config/internal-effect-discovery.ts +239 -0
  209. package/src/build-config/public.ts +0 -1
  210. package/src/build-config/remote-address.ts +33 -0
  211. package/src/cloudflare/artifacts.ts +22 -43
  212. package/src/cloudflare/delivery-unit.ts +283 -60
  213. package/src/cloudflare/index.ts +35 -19
  214. package/src/cloudflare/native-renderer.ts +117 -0
  215. package/src/cloudflare/renderer-identity.ts +171 -0
  216. package/src/cloudflare/worker-manifest.ts +108 -10
  217. package/src/cloudflare/worker-options.ts +60 -0
  218. package/src/cloudflare/wrangler-config.ts +390 -14
  219. package/src/cloudflare-builder.ts +543 -170
  220. package/src/cloudflare-output-contract.ts +45 -2
  221. package/src/cloudflare-output-verifier/identity.ts +138 -7
  222. package/src/cloudflare-output-verifier/index.ts +20 -0
  223. package/src/cloudflare-output-verifier/manifest.ts +77 -0
  224. package/src/cloudflare-output-verifier/mutation-policy.ts +11 -1
  225. package/src/cloudflare-output-verifier/worker-bundles.ts +27 -11
  226. package/src/config.ts +101 -19
  227. package/src/deploy-output/npmAliases.ts +141 -4
  228. package/src/deploy-output/plugin.ts +55 -18
  229. package/src/deploy-output/public-assets.ts +224 -0
  230. package/src/deploy-output/target.ts +97 -14
  231. package/src/deploy-output/trace-files.ts +80 -0
  232. package/src/module-federation-config/exposes.ts +46 -0
  233. package/src/module-federation-config/index.ts +22 -0
  234. package/src/module-federation-config/inspect.ts +157 -0
  235. package/src/module-federation-config/object-literal.ts +76 -0
  236. package/src/module-federation-config/syntax.ts +212 -0
  237. package/src/module-federation-config/types.ts +22 -0
  238. package/src/native-type-checker.ts +233 -20
  239. package/src/policy-defaults.ts +47 -17
  240. package/src/release-envelope/canonical.ts +6 -18
  241. package/src/release-envelope/contract.mjs +28 -0
  242. package/src/release-envelope/framework-output.ts +681 -156
  243. package/src/release-envelope/index.ts +315 -60
  244. package/src/release-envelope/plugin.ts +54 -38
  245. package/src/release-envelope/renderer-output-stamp.ts +210 -0
  246. package/src/release-envelope/types.ts +75 -6
  247. package/src/release-identity.ts +19 -2
  248. package/src/renderer-build-identity.ts +168 -0
  249. package/src/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  250. package/src/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  251. package/src/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  252. package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +530 -103
  253. package/src/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  254. package/src/templates/cloudflare-worker-route-data.mjs +1069 -0
  255. package/src/workspace-topology.ts +125 -0
  256. package/dist/cjs/templates/cloudflare-worker-fs-promises.mjs +0 -11
  257. package/dist/cjs/templates/cloudflare-worker-loadable-server.mjs +0 -281
  258. package/dist/cjs/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  259. package/dist/cjs/templates/cloudflare-worker-path.mjs +0 -98
  260. package/dist/esm/templates/cloudflare-worker-fs-promises.mjs +0 -11
  261. package/dist/esm/templates/cloudflare-worker-loadable-server.mjs +0 -281
  262. package/dist/esm/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  263. package/dist/esm/templates/cloudflare-worker-path.mjs +0 -98
  264. package/dist/esm-node/templates/cloudflare-worker-fs-promises.mjs +0 -11
  265. package/dist/esm-node/templates/cloudflare-worker-loadable-server.mjs +0 -281
  266. package/dist/esm-node/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  267. package/dist/esm-node/templates/cloudflare-worker-path.mjs +0 -98
  268. package/dist/types/templates/cloudflare-worker-fs-promises.d.mts +0 -5
  269. package/dist/types/templates/cloudflare-worker-loadable-server.d.mts +0 -48
  270. package/dist/types/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +0 -13
  271. package/dist/types/templates/cloudflare-worker-path.d.mts +0 -21
  272. package/src/templates/cloudflare-worker-fs-promises.mjs +0 -11
  273. package/src/templates/cloudflare-worker-loadable-server.mjs +0 -281
  274. package/src/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  275. 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 = Boolean(stamped) && 'object' == typeof stamped;
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 && stamped.surfaces && 'object' == typeof stamped.surfaces) for (const surface of [
54
- 'ui',
55
- 'api'
56
- ]){
57
- const marker = stamped.surfaces[surface];
58
- const expected = declared?.surfaces?.[surface];
59
- if (declared?.surfaces && !expected) {
60
- if (marker) (0, external_issues_js_namespaceObject.addIssue)(issues, {
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 declares an unexpected ${surface} delivery-unit surface for this topology profile.`,
95
+ message: `Cloudflare worker manifest ${surface} surface must declare surface "${surface}".`,
63
96
  path: manifestPath
64
97
  });
65
- continue;
66
- }
67
- if (!marker || 'object' != typeof marker) {
68
- (0, external_issues_js_namespaceObject.addIssue)(issues, {
69
- code: 'missing-delivery-unit',
70
- message: `Cloudflare worker manifest is missing the ${surface} delivery-unit surface marker.`,
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
- for (const field of backend_federation_contracts_namespaceObject.DELIVERY_UNIT_IDENTITY_FIELDS){
76
- const markerValue = (0, backend_federation_contracts_namespaceObject.deliveryUnitIdentityFieldValue)(marker, field);
77
- const stampedValue = (0, backend_federation_contracts_namespaceObject.deliveryUnitIdentityFieldValue)(stamped, field);
78
- (0, external_issues_js_namespaceObject.assertEqual)(issues, markerValue, stampedValue, {
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 ${surface} surface deliveryUnit.${field} must derive from one delivery-unit record (expected ${stampedValue ?? 'undefined'}, received ${markerValue ?? 'undefined'}).`,
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
- const source = await promises_default().readFile(file, 'utf-8');
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?.worker && route.worker.length > 0 ? route.worker : void 0).filter((worker)=>'string' == typeof worker) : [];
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 ('effect-bff' === worker.kind && 'string' == typeof worker.dispatcherExport && !entryAnalysis?.exports.has(worker.dispatcherExport)) (0, external_issues_js_namespaceObject.addIssue)(issues, {
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
  };
@@ -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
- resolveEffectTsgoCompiler: ()=>public_js_namespaceObject.resolveEffectTsgoCompiler,
33
- withBuildConfigEnvironment: ()=>public_js_namespaceObject.withBuildConfigEnvironment
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
- "resolveEffectTsgoCompiler",
42
- "withBuildConfigEnvironment"
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 dependencyKeys)for (const [aliasName, specifier] of Object.entries(packageJson[dependencyKey] ?? {})){
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)for (const alias of aliasesFromPackageJson(record.packageJson).filter((candidate)=>candidate.aliasName !== candidate.targetName)){
209
- const target = await resolveAliasTarget(record.directory, alias, outputDirectory);
210
- if (target) await ensureAliasLink(record.directory, alias, target);
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 = ({ resolveDeployTarget = external_target_js_namespaceObject.resolveDeployTarget } = {})=>({
49
+ const createDeployOutputAliasesPlugin = ()=>({
48
50
  name: '@modern-js/deploy-output-aliases',
49
51
  setup (api) {
50
52
  api.onAfterDeploy(async ()=>{
51
- const { appDirectory, metaName } = api.getAppContext();
52
- const config = api.getNormalizedConfig();
53
- if ('modern-js' !== metaName && !config.deploy?.target && !process.env.MODERNJS_DEPLOY || 'node' !== resolveDeployTarget(config)) return;
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