@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.32

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 (338) hide show
  1. package/README.md +1 -0
  2. package/package.json +82 -3
  3. package/src/adapters/abstract/application-adapter.d.ts +0 -8
  4. package/src/adapters/abstract/application-adapter.js +252 -261
  5. package/src/adapters/abstract/router-adapter.js +12 -4
  6. package/src/adapters/abstract/segment-path-matcher.js +132 -134
  7. package/src/adapters/abstract/server-adapter.js +22 -14
  8. package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
  9. package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
  10. package/src/adapters/bun/client-bridge.js +51 -50
  11. package/src/adapters/bun/create-app.js +171 -161
  12. package/src/adapters/bun/hmr-manager.js +62 -57
  13. package/src/adapters/bun/index.js +2 -31
  14. package/src/adapters/bun/runtime-host.js +61 -54
  15. package/src/adapters/bun/server-adapter.d.ts +0 -1
  16. package/src/adapters/bun/server-adapter.js +561 -561
  17. package/src/adapters/bun/static-preview-host.js +43 -46
  18. package/src/adapters/create-app.js +11 -14
  19. package/src/adapters/index.js +2 -30
  20. package/src/adapters/node/create-app.js +123 -129
  21. package/src/adapters/node/http-request-bridge.js +147 -106
  22. package/src/adapters/node/node-client-bridge.js +62 -64
  23. package/src/adapters/node/node-hmr-manager.js +58 -48
  24. package/src/adapters/node/runtime-host.js +96 -89
  25. package/src/adapters/node/server-adapter-dependencies.js +18 -21
  26. package/src/adapters/node/server-adapter.d.ts +0 -1
  27. package/src/adapters/node/server-adapter.js +347 -326
  28. package/src/adapters/node/static-content-server.js +172 -191
  29. package/src/adapters/node/static-preview-host.js +87 -78
  30. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  31. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  32. package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
  33. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
  34. package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
  35. package/src/adapters/shared/http/api-request-pipeline.js +122 -119
  36. package/src/adapters/shared/http/api-response.js +77 -77
  37. package/src/adapters/shared/http/create-body-response.js +22 -19
  38. package/src/adapters/shared/http/define-api-handler.js +41 -55
  39. package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
  40. package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
  41. package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
  42. package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
  43. package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
  44. package/src/adapters/shared/http/run-middleware-chain.js +15 -15
  45. package/src/adapters/shared/runtime/application-adapter.js +72 -87
  46. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
  47. package/src/adapters/shared/runtime/port-manager.js +207 -177
  48. package/src/adapters/shared/runtime/render-context.js +94 -79
  49. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
  50. package/src/adapters/shared/runtime/runtime-host.js +1 -0
  51. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
  52. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
  53. package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
  54. package/src/adapters/shared/runtime/server-adapter.js +233 -217
  55. package/src/adapters/shared/runtime/server-route-handler.js +74 -70
  56. package/src/adapters/shared/runtime/server-static-builder.js +165 -184
  57. package/src/adapters/shared/runtime/static-preview-host.js +1 -0
  58. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
  59. package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
  60. package/src/build/README.md +52 -1
  61. package/src/build/app-build-manifest-runtime.js +129 -108
  62. package/src/build/browser/browser-runtime-manifest.js +47 -50
  63. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
  64. package/src/build/browser/browser-runtime-plugin.js +206 -160
  65. package/src/build/browser/jsx-ownership-plugins.js +51 -37
  66. package/src/build/browser/lit-static-render-worker-context.js +3 -5
  67. package/src/build/build-adapter.js +276 -139
  68. package/src/build/cache/build-input-fingerprint.js +28 -26
  69. package/src/build/cache/cache-constants.js +4 -6
  70. package/src/build/cache/cache-keys.js +64 -56
  71. package/src/build/cache/pages-unified-graph-build.js +179 -178
  72. package/src/build/cache/production-build-cache.js +47 -54
  73. package/src/build/cache/server-entry-build-cache.js +134 -146
  74. package/src/build/contracts/build-contracts.d.ts +4 -4
  75. package/src/build/contracts/build-contracts.js +1 -0
  76. package/src/build/contracts/build-manifest.js +58 -43
  77. package/src/build/contracts/build-types.js +1 -0
  78. package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
  79. package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
  80. package/src/build/rolldown/rolldown-build-adapter.js +53 -61
  81. package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
  82. package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
  83. package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
  84. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
  85. package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
  86. package/src/build/runtime/build-profile-options.js +36 -36
  87. package/src/build/runtime/build-request-identity.js +70 -45
  88. package/src/build/runtime/build-request-policy.js +80 -42
  89. package/src/build/runtime/build-runtime.js +64 -54
  90. package/src/build/runtime/deduping-build-executor.js +38 -32
  91. package/src/build/runtime/parallel-build-executor.js +58 -50
  92. package/src/build/runtime/serialized-build-executor.js +78 -62
  93. package/src/cache/index.js +6 -6
  94. package/src/cache/module-parse-cache.js +99 -68
  95. package/src/client/navigation-scripts/classification.js +45 -37
  96. package/src/client/navigation-scripts/index.js +3 -23
  97. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
  98. package/src/client/navigation-scripts/registry.js +15 -11
  99. package/src/client/navigation-scripts/rerun-queue.js +81 -64
  100. package/src/client/scroll.js +32 -24
  101. package/src/client/scroll.test.browser.js +27 -33
  102. package/src/client/view-transitions.js +68 -55
  103. package/src/config/config-builder.d.ts +8 -0
  104. package/src/config/config-builder.js +637 -642
  105. package/src/config/constants.js +44 -24
  106. package/src/declarations.d.ts +1 -0
  107. package/src/dev/README.md +24 -0
  108. package/src/dev/client-bridge-registry.js +7 -12
  109. package/src/dev/dev-client-ownership.js +7 -5
  110. package/src/dev/hmr-manager-registry.js +7 -12
  111. package/src/dev/host-runtime.js +25 -30
  112. package/src/dev/runtime-server-started-message.js +2 -5
  113. package/src/dev/sc-server.js +106 -103
  114. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  115. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  116. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  117. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  118. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  119. package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
  120. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  121. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  122. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  123. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  124. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  125. package/src/dev/transform-server/dev-transform-server.js +191 -0
  126. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  127. package/src/dev/transform-server/dev-transform-url.js +58 -0
  128. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
  129. package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
  130. package/src/dev/transform-server/index.d.ts +6 -0
  131. package/src/dev/transform-server/index.js +4 -0
  132. package/src/dev/transform-server/types.d.ts +15 -0
  133. package/src/dev/transform-server/types.js +1 -0
  134. package/src/dev-toolbar/README.md +51 -0
  135. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  136. package/src/dev-toolbar/define-dev-tool.js +9 -0
  137. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  138. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  139. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  140. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  141. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  142. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  143. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  144. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  145. package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
  146. package/src/dev-toolbar/dev-toolbar-package.js +72 -0
  147. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  148. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  149. package/src/diagnostics/request-build-dedupe.js +34 -28
  150. package/src/diagnostics/startup-trace.d.ts +10 -1
  151. package/src/diagnostics/startup-trace.js +269 -241
  152. package/src/eco/README.md +6 -0
  153. package/src/eco/eco-declared-component.js +19 -14
  154. package/src/eco/eco.browser.js +56 -69
  155. package/src/eco/eco.js +156 -96
  156. package/src/eco/eco.types.js +5 -0
  157. package/src/eco/eco.utils.js +1 -10
  158. package/src/eco/global-injector-map.js +55 -41
  159. package/src/eco/lazy-injector-map.js +90 -60
  160. package/src/eco/module-dependencies.js +52 -44
  161. package/src/eco/page-layout-normalization.js +59 -49
  162. package/src/errors/http-error.js +50 -49
  163. package/src/errors/index.js +3 -12
  164. package/src/errors/locals-access-error.js +5 -8
  165. package/src/errors/undeclared-component-dependency-error.js +15 -15
  166. package/src/global/app-logger.js +3 -6
  167. package/src/hmr/README.md +10 -0
  168. package/src/hmr/client/hmr-runtime.js +117 -113
  169. package/src/hmr/client/module-update.d.ts +13 -0
  170. package/src/hmr/client/module-update.js +39 -0
  171. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  172. package/src/hmr/hmr-asset-paths.js +22 -0
  173. package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
  174. package/src/hmr/hmr-entrypoint-output.js +28 -54
  175. package/src/hmr/hmr-file-change-prep.js +13 -16
  176. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  177. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  178. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  179. package/src/hmr/hmr-runtime-paths.js +13 -0
  180. package/src/hmr/hmr-strategy.d.ts +5 -11
  181. package/src/hmr/hmr-strategy.js +113 -61
  182. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  183. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
  184. package/src/hmr/strategies/js-hmr-strategy.js +104 -217
  185. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
  186. package/src/index.browser.js +1 -4
  187. package/src/index.d.ts +1 -0
  188. package/src/index.js +6 -47
  189. package/src/integrations/ghtml/ghtml-renderer.js +12 -7
  190. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  191. package/src/integrations/ghtml/ghtml.plugin.js +9 -12
  192. package/src/islands/README.md +25 -0
  193. package/src/islands/island-host.d.ts +37 -0
  194. package/src/islands/island-host.js +55 -0
  195. package/src/plugins/alias-resolver-cache.js +114 -97
  196. package/src/plugins/alias-resolver-plugin.js +33 -47
  197. package/src/plugins/define-integration.js +18 -17
  198. package/src/plugins/eco-component-meta-plugin.js +387 -145
  199. package/src/plugins/foreign-jsx-override-plugin.js +49 -35
  200. package/src/plugins/integration-plugin.js +212 -203
  201. package/src/plugins/jsx-import-source.utils.js +16 -21
  202. package/src/plugins/processor.js +159 -149
  203. package/src/plugins/runtime-capability.js +1 -0
  204. package/src/plugins/source-transform.js +109 -79
  205. package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
  206. package/src/plugins/tsconfig-import-resolver.js +218 -142
  207. package/src/route-renderer/README.md +12 -1
  208. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
  209. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
  210. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
  211. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
  212. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
  213. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
  214. package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
  215. package/src/route-renderer/orchestration/integration-renderer.js +731 -750
  216. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
  217. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
  218. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
  219. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
  220. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
  221. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
  222. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
  223. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
  224. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
  225. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
  226. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
  227. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
  228. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
  229. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
  230. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
  231. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
  232. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
  233. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
  234. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
  235. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
  236. package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
  237. package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
  238. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  239. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  240. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
  241. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  242. package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
  243. package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
  244. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  245. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  246. package/src/route-renderer/page-loading/page-module-loader.js +130 -124
  247. package/src/route-renderer/route-renderer.js +74 -76
  248. package/src/router/client/link-intent.js +55 -39
  249. package/src/router/client/link-intent.test.browser.js +49 -49
  250. package/src/router/client/link-navigation-policy.js +114 -93
  251. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  252. package/src/router/client/navigation-coordinator.js +235 -211
  253. package/src/router/server/route-registry.js +237 -242
  254. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  255. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  256. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  257. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  258. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  259. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  260. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  261. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  262. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  263. package/src/services/assets/asset-processing-service/index.js +8 -8
  264. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  265. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  266. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  267. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  268. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  269. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  270. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  271. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  272. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  273. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  274. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  275. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  276. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  277. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  278. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  279. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  280. package/src/services/assets/browser-bundle.service.js +52 -47
  281. package/src/services/cache/cache.types.js +5 -0
  282. package/src/services/cache/index.js +6 -7
  283. package/src/services/cache/memory-cache-store.js +101 -89
  284. package/src/services/cache/page-cache-service.js +156 -145
  285. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  286. package/src/services/html/html-rewriter-provider.service.js +61 -61
  287. package/src/services/html/html-transformer.service.js +249 -266
  288. package/src/services/invalidation/development-invalidation.service.js +252 -241
  289. package/src/services/module-loading/app-module-loader.service.js +1 -0
  290. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  291. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  292. package/src/services/module-loading/module-loading-types.js +1 -0
  293. package/src/services/module-loading/page-module-import.service.js +235 -243
  294. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  295. package/src/services/module-loading/route-module-build-cache.js +3 -38
  296. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  297. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  298. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  299. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  300. package/src/services/module-loading/source-module-support.js +15 -7
  301. package/src/services/runtime-state/dev-graph.service.js +165 -157
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  303. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  304. package/src/services/validation/schema-validation-service.js +157 -95
  305. package/src/services/validation/standard-schema.types.js +1 -0
  306. package/src/services/validation/validate-standard-schema.js +13 -13
  307. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  308. package/src/static-site-generator/sitemap-routes.js +33 -28
  309. package/src/static-site-generator/sitemap.js +38 -29
  310. package/src/static-site-generator/static-build-invalidation.js +34 -56
  311. package/src/static-site-generator/static-export-context.js +1 -0
  312. package/src/static-site-generator/static-site-generator.js +517 -553
  313. package/src/types/internal-types.d.ts +19 -3
  314. package/src/types/internal-types.js +1 -0
  315. package/src/types/public-types.d.ts +16 -46
  316. package/src/types/public-types.js +1 -0
  317. package/src/utils/deep-merge.js +39 -26
  318. package/src/utils/ecopages-route-info.js +27 -23
  319. package/src/utils/hash.js +3 -6
  320. package/src/utils/html-escaping.js +21 -8
  321. package/src/utils/html.js +1 -4
  322. package/src/utils/invariant.js +11 -10
  323. package/src/utils/locals-utils.js +32 -22
  324. package/src/utils/parse-cli-args.js +73 -65
  325. package/src/utils/path-pattern.js +38 -23
  326. package/src/utils/path-utils.module.js +8 -11
  327. package/src/utils/resolve-entry-file.js +70 -38
  328. package/src/utils/resolve-work-dir.js +23 -27
  329. package/src/utils/runtime.js +24 -33
  330. package/src/utils/server-utils.module.js +60 -52
  331. package/src/utils/static-file-extensions.js +52 -46
  332. package/src/watchers/project-watcher-ignore.js +16 -15
  333. package/src/watchers/project-watcher.js +385 -366
  334. package/src/watchers/project-watcher.test-helpers.js +45 -50
  335. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  336. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  337. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  338. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,37 +1,44 @@
1
- import { normalizeModuleDeclarations } from "../../eco/module-dependencies.js";
2
- import { isBrowserEcopagesVirtualImport } from "./ecopages-virtual-imports.js";
1
+ import { normalizeModuleDeclarations } from '../../eco/module-dependencies.js';
2
+ import { isBrowserEcopagesVirtualImport } from './ecopages-virtual-imports.js';
3
+ /**
4
+ * Narrows arbitrary config input onto the declared module string array shape.
5
+ */
3
6
  function getDeclaredModules(value) {
4
- if (!Array.isArray(value)) {
5
- return void 0;
6
- }
7
- return value.every((entry) => typeof entry === "string") ? value : void 0;
7
+ if (!Array.isArray(value)) {
8
+ return undefined;
9
+ }
10
+ return value.every((entry) => typeof entry === 'string') ? value : undefined;
8
11
  }
12
+ /**
13
+ * Merges one module declaration into the aggregated map, preserving the wildcard
14
+ * import semantics represented by `null`.
15
+ */
9
16
  function mergeModuleDeclaration(modulesMap, declaration) {
10
- const existing = modulesMap.get(declaration.from);
11
- if (!declaration.imports || declaration.imports.length === 0) {
12
- modulesMap.set(declaration.from, null);
13
- return;
14
- }
15
- if (existing === null) {
16
- return;
17
- }
18
- const merged = existing ?? /* @__PURE__ */ new Set();
19
- for (const imported of declaration.imports) {
20
- merged.add(imported);
21
- }
22
- modulesMap.set(declaration.from, merged);
17
+ const existing = modulesMap.get(declaration.from);
18
+ if (!declaration.imports || declaration.imports.length === 0) {
19
+ modulesMap.set(declaration.from, null);
20
+ return;
21
+ }
22
+ if (existing === null) {
23
+ return;
24
+ }
25
+ const merged = existing ?? new Set();
26
+ for (const imported of declaration.imports) {
27
+ merged.add(imported);
28
+ }
29
+ modulesMap.set(declaration.from, merged);
23
30
  }
24
- function collectModuleDeclarations(modulesMap, declaredModules, autoVirtualImports) {
25
- for (const declaration of normalizeModuleDeclarations(getDeclaredModules(declaredModules))) {
26
- if (declaration.from.startsWith("ecopages:") && !isBrowserEcopagesVirtualImport(declaration.from)) {
27
- continue;
31
+ /**
32
+ * Combines explicit config module declarations with auto-detected `ecopages:` imports.
33
+ */
34
+ export function collectModuleDeclarations(modulesMap, declaredModules, autoVirtualImports) {
35
+ for (const declaration of normalizeModuleDeclarations(getDeclaredModules(declaredModules))) {
36
+ if (declaration.from.startsWith('ecopages:') && !isBrowserEcopagesVirtualImport(declaration.from)) {
37
+ continue;
38
+ }
39
+ mergeModuleDeclaration(modulesMap, declaration);
40
+ }
41
+ for (const declaration of autoVirtualImports) {
42
+ mergeModuleDeclaration(modulesMap, declaration);
28
43
  }
29
- mergeModuleDeclaration(modulesMap, declaration);
30
- }
31
- for (const declaration of autoVirtualImports) {
32
- mergeModuleDeclaration(modulesMap, declaration);
33
- }
34
44
  }
35
- export {
36
- collectModuleDeclarations
37
- };
@@ -1,18 +1,13 @@
1
- import { rapidhash } from "../../utils/hash.js";
2
- function createModuleScriptName(from, imports) {
3
- const normalizedImports = imports ? [...imports].sort().join(",") : "*";
4
- const hash = rapidhash(`${from}|${normalizedImports}`).toString(16);
5
- return `module-${hash}`;
1
+ import { rapidhash } from '../../utils/hash.js';
2
+ export function createModuleScriptName(from, imports) {
3
+ const normalizedImports = imports ? [...imports].sort().join(',') : '*';
4
+ const hash = rapidhash(`${from}|${normalizedImports}`).toString(16);
5
+ return `module-${hash}`;
6
6
  }
7
- function createNamedImportModuleSource(from, imports) {
8
- const namedImports = [...new Set(imports)].sort().join(", ");
9
- return `export { ${namedImports} } from '${from}';`;
7
+ export function createNamedImportModuleSource(from, imports) {
8
+ const namedImports = [...new Set(imports)].sort().join(', ');
9
+ return `export { ${namedImports} } from '${from}';`;
10
10
  }
11
- function createNamespaceImportModuleSource(from) {
12
- return `export * from '${from}';`;
11
+ export function createNamespaceImportModuleSource(from) {
12
+ return `export * from '${from}';`;
13
13
  }
14
- export {
15
- createModuleScriptName,
16
- createNamedImportModuleSource,
17
- createNamespaceImportModuleSource
18
- };
@@ -1,137 +1,180 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
3
- import { rapidhash } from "../../utils/hash.js";
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { AssetFactory } from '../../services/assets/asset-processing-service/index.js';
3
+ import { rapidhash } from '../../utils/hash.js';
4
+ /**
5
+ * Returns `true` when the asset attributes match the exact shape required for
6
+ * safe page-owned bundling.
7
+ */
4
8
  function hasOnlyExpectedAttributes(attributes, expected) {
5
- const keys = Object.keys(attributes ?? {});
6
- const expectedKeys = Object.keys(expected);
7
- if (keys.length !== expectedKeys.length) {
8
- return false;
9
- }
10
- return expectedKeys.every((key) => attributes?.[key] === expected[key]);
9
+ const keys = Object.keys(attributes ?? {});
10
+ const expectedKeys = Object.keys(expected);
11
+ if (keys.length !== expectedKeys.length) {
12
+ return false;
13
+ }
14
+ return expectedKeys.every((key) => attributes?.[key] === expected[key]);
11
15
  }
12
16
  function isSafeBundledStylesheetReference(reference) {
13
- return reference.startsWith("/") || reference.startsWith("data:") || reference.startsWith("http://") || reference.startsWith("https://") || reference.startsWith("#");
17
+ return (reference.startsWith('/') ||
18
+ reference.startsWith('data:') ||
19
+ reference.startsWith('http://') ||
20
+ reference.startsWith('https://') ||
21
+ reference.startsWith('#'));
14
22
  }
23
+ /**
24
+ * Normalizes CSS URL tokens before safety checks so quoted and unquoted forms are treated equally.
25
+ */
15
26
  function normalizeCssReferenceToken(token) {
16
- return token.trim().replace(/^['"]|['"]$/g, "");
27
+ return token.trim().replace(/^['"]|['"]$/g, '');
17
28
  }
29
+ /**
30
+ * Rejects stylesheet content that contains relative references which would stop
31
+ * working once multiple files are collapsed into one page-owned bundle.
32
+ */
18
33
  function isSafeBundledStylesheetContent(content) {
19
- for (const match of content.matchAll(/@import\s+(?:url\()?['"]?([^'")\s]+)['"]?\)?/g)) {
20
- const reference = normalizeCssReferenceToken(match[1] ?? "");
21
- if (reference && !isSafeBundledStylesheetReference(reference)) {
22
- return false;
34
+ for (const match of content.matchAll(/@import\s+(?:url\()?['"]?([^'")\s]+)['"]?\)?/g)) {
35
+ const reference = normalizeCssReferenceToken(match[1] ?? '');
36
+ if (reference && !isSafeBundledStylesheetReference(reference)) {
37
+ return false;
38
+ }
23
39
  }
24
- }
25
- for (const match of content.matchAll(/url\(([^)]+)\)/g)) {
26
- const reference = normalizeCssReferenceToken(match[1] ?? "");
27
- if (reference && !isSafeBundledStylesheetReference(reference)) {
28
- return false;
40
+ for (const match of content.matchAll(/url\(([^)]+)\)/g)) {
41
+ const reference = normalizeCssReferenceToken(match[1] ?? '');
42
+ if (reference && !isSafeBundledStylesheetReference(reference)) {
43
+ return false;
44
+ }
29
45
  }
30
- }
31
- return true;
46
+ return true;
32
47
  }
33
48
  function isBundleableFileStylesheetAsset(dependency) {
34
- return dependency.kind === "stylesheet" && dependency.source === "file";
49
+ return dependency.kind === 'stylesheet' && dependency.source === 'file';
35
50
  }
36
51
  function isBundleableFileScriptAsset(dependency) {
37
- return dependency.kind === "script" && dependency.source === "file";
52
+ return dependency.kind === 'script' && dependency.source === 'file';
38
53
  }
39
- function shouldBundlePageDependencies(integrationName) {
40
- return integrationName === "react" || integrationName === "ecopages-jsx";
54
+ /**
55
+ * Returns whether the current integration should collapse eligible page assets into
56
+ * page-owned bundle entries.
57
+ */
58
+ export function shouldBundlePageDependencies(integrationName) {
59
+ return integrationName === 'react' || integrationName === 'ecopages-jsx';
41
60
  }
42
61
  function createPageDependencyPackagingPlan(dependencies, integrationName) {
43
- const shouldBundleDependencies = process.env.NODE_ENV === "production";
44
- const bundleableStyles = dependencies.filter((dependency) => {
45
- if (!shouldBundleDependencies) {
46
- return false;
47
- }
48
- if (dependency.kind !== "stylesheet" || dependency.inline || dependency.position === "body") {
49
- return false;
50
- }
51
- if (dependency.packageRole || !hasOnlyExpectedAttributes(dependency.attributes, { rel: "stylesheet" })) {
52
- return false;
53
- }
54
- if (dependency.source === "content") {
55
- return isSafeBundledStylesheetContent(dependency.content);
56
- }
57
- if (!existsSync(dependency.filepath)) {
58
- return false;
59
- }
60
- return isSafeBundledStylesheetContent(readFileSync(dependency.filepath, "utf8"));
61
- }).filter(isBundleableFileStylesheetAsset);
62
- const bundleableScripts = dependencies.filter((dependency) => {
63
- if (!shouldBundleDependencies) {
64
- return false;
62
+ const shouldBundleDependencies = process.env.NODE_ENV === 'production';
63
+ const bundleableStyles = dependencies
64
+ .filter((dependency) => {
65
+ if (!shouldBundleDependencies) {
66
+ return false;
67
+ }
68
+ if (dependency.kind !== 'stylesheet' || dependency.inline || dependency.position === 'body') {
69
+ return false;
70
+ }
71
+ if (dependency.packageRole || !hasOnlyExpectedAttributes(dependency.attributes, { rel: 'stylesheet' })) {
72
+ return false;
73
+ }
74
+ if (dependency.source === 'content') {
75
+ return isSafeBundledStylesheetContent(dependency.content);
76
+ }
77
+ if (!existsSync(dependency.filepath)) {
78
+ return false;
79
+ }
80
+ return isSafeBundledStylesheetContent(readFileSync(dependency.filepath, 'utf8'));
81
+ })
82
+ .filter(isBundleableFileStylesheetAsset);
83
+ const bundleableScripts = dependencies
84
+ .filter((dependency) => {
85
+ if (!shouldBundleDependencies) {
86
+ return false;
87
+ }
88
+ return (dependency.kind === 'script' &&
89
+ dependency.source === 'file' &&
90
+ !dependency.inline &&
91
+ !dependency.excludeFromHtml &&
92
+ dependency.position !== 'body' &&
93
+ !dependency.packageRole &&
94
+ dependency.bundle !== false &&
95
+ hasOnlyExpectedAttributes(dependency.attributes, { type: 'module', defer: '' }) &&
96
+ existsSync(dependency.filepath));
97
+ })
98
+ .filter(isBundleableFileScriptAsset);
99
+ const bundledStylesheet = bundleableStyles.length > 1
100
+ ? AssetFactory.createContentStylesheet({
101
+ content: bundleableStyles.map((dependency) => readFileSync(dependency.filepath, 'utf8')).join('\n'),
102
+ position: 'head',
103
+ attributes: { rel: 'stylesheet' },
104
+ packageRole: 'page-style',
105
+ bundledSourceFilepaths: bundleableStyles.map((dependency) => dependency.filepath),
106
+ })
107
+ : undefined;
108
+ const pageScriptImports = [...new Set(bundleableScripts.map((dependency) => dependency.filepath))];
109
+ const shouldBundlePageScript = pageScriptImports.length > 0 && bundleableScripts.length > 1;
110
+ const bundledScript = shouldBundlePageScript
111
+ ? AssetFactory.createContentScript({
112
+ name: `${integrationName}-page-${rapidhash(pageScriptImports.join('|')).toString(16)}`,
113
+ content: pageScriptImports.map((filepath) => `import ${JSON.stringify(filepath)};`).join('\n'),
114
+ position: 'head',
115
+ attributes: { type: 'module', defer: '' },
116
+ packageRole: 'page-script',
117
+ bundledSourceFilepaths: pageScriptImports,
118
+ })
119
+ : undefined;
120
+ if (!bundledStylesheet && !bundledScript) {
121
+ return undefined;
65
122
  }
66
- return dependency.kind === "script" && dependency.source === "file" && !dependency.inline && !dependency.excludeFromHtml && dependency.position !== "body" && !dependency.packageRole && dependency.bundle !== false && hasOnlyExpectedAttributes(dependency.attributes, { type: "module", defer: "" }) && existsSync(dependency.filepath);
67
- }).filter(isBundleableFileScriptAsset);
68
- const bundledStylesheet = bundleableStyles.length > 1 ? AssetFactory.createContentStylesheet({
69
- content: bundleableStyles.map((dependency) => readFileSync(dependency.filepath, "utf8")).join("\n"),
70
- position: "head",
71
- attributes: { rel: "stylesheet" },
72
- packageRole: "page-style",
73
- bundledSourceFilepaths: bundleableStyles.map((dependency) => dependency.filepath)
74
- }) : void 0;
75
- const pageScriptImports = [...new Set(bundleableScripts.map((dependency) => dependency.filepath))];
76
- const shouldBundlePageScript = pageScriptImports.length > 0 && bundleableScripts.length > 1;
77
- const bundledScript = shouldBundlePageScript ? AssetFactory.createContentScript({
78
- name: `${integrationName}-page-${rapidhash(pageScriptImports.join("|")).toString(16)}`,
79
- content: pageScriptImports.map((filepath) => `import ${JSON.stringify(filepath)};`).join("\n"),
80
- position: "head",
81
- attributes: { type: "module", defer: "" },
82
- packageRole: "page-script",
83
- bundledSourceFilepaths: pageScriptImports
84
- }) : void 0;
85
- if (!bundledStylesheet && !bundledScript) {
86
- return void 0;
87
- }
88
- return {
89
- bundledStylesheet,
90
- bundledScript,
91
- bundleableStyleFilepaths: new Set(bundleableStyles.map((dependency) => dependency.filepath)),
92
- bundleableScriptFilepaths: new Set(pageScriptImports)
93
- };
123
+ return {
124
+ bundledStylesheet,
125
+ bundledScript,
126
+ bundleableStyleFilepaths: new Set(bundleableStyles.map((dependency) => dependency.filepath)),
127
+ bundleableScriptFilepaths: new Set(pageScriptImports),
128
+ };
94
129
  }
95
130
  function applyPageDependencyPackagingPlan(dependencies, plan) {
96
- const unifiedDependencies = [];
97
- let insertedStylesheet = false;
98
- let insertedScript = false;
99
- for (const dependency of dependencies) {
100
- if (plan.bundledStylesheet && dependency.kind === "stylesheet" && dependency.source === "file" && plan.bundleableStyleFilepaths.has(dependency.filepath)) {
101
- if (!insertedStylesheet) {
102
- unifiedDependencies.push(plan.bundledStylesheet);
103
- insertedStylesheet = true;
104
- }
105
- continue;
131
+ const unifiedDependencies = [];
132
+ let insertedStylesheet = false;
133
+ let insertedScript = false;
134
+ for (const dependency of dependencies) {
135
+ if (plan.bundledStylesheet &&
136
+ dependency.kind === 'stylesheet' &&
137
+ dependency.source === 'file' &&
138
+ plan.bundleableStyleFilepaths.has(dependency.filepath)) {
139
+ if (!insertedStylesheet) {
140
+ unifiedDependencies.push(plan.bundledStylesheet);
141
+ insertedStylesheet = true;
142
+ }
143
+ continue;
144
+ }
145
+ if (plan.bundledScript &&
146
+ dependency.kind === 'script' &&
147
+ dependency.source === 'file' &&
148
+ plan.bundleableScriptFilepaths.has(dependency.filepath)) {
149
+ if (!insertedScript) {
150
+ unifiedDependencies.push(plan.bundledScript);
151
+ insertedScript = true;
152
+ }
153
+ continue;
154
+ }
155
+ unifiedDependencies.push(dependency);
106
156
  }
107
- if (plan.bundledScript && dependency.kind === "script" && dependency.source === "file" && plan.bundleableScriptFilepaths.has(dependency.filepath)) {
108
- if (!insertedScript) {
157
+ if (plan.bundledScript && !insertedScript) {
109
158
  unifiedDependencies.push(plan.bundledScript);
110
- insertedScript = true;
111
- }
112
- continue;
113
159
  }
114
- unifiedDependencies.push(dependency);
115
- }
116
- if (plan.bundledScript && !insertedScript) {
117
- unifiedDependencies.push(plan.bundledScript);
118
- }
119
- if (plan.bundledStylesheet && !insertedStylesheet) {
120
- unifiedDependencies.push(plan.bundledStylesheet);
121
- }
122
- return unifiedDependencies;
160
+ if (plan.bundledStylesheet && !insertedStylesheet) {
161
+ unifiedDependencies.push(plan.bundledStylesheet);
162
+ }
163
+ return unifiedDependencies;
123
164
  }
124
- function packagePageDependencies(dependencies, integrationName) {
125
- if (!shouldBundlePageDependencies(integrationName)) {
126
- return dependencies;
127
- }
128
- const plan = createPageDependencyPackagingPlan(dependencies, integrationName);
129
- if (!plan) {
130
- return dependencies;
131
- }
132
- return applyPageDependencyPackagingPlan(dependencies, plan);
165
+ /**
166
+ * Rewrites eligible flat dependency declarations into page-owned stylesheet and script bundles.
167
+ *
168
+ * Only assets with the default attribute shape and without explicit packaging roles are
169
+ * collapsed so integration-specific or lazy behavior keeps its existing ownership model.
170
+ */
171
+ export function packagePageDependencies(dependencies, integrationName) {
172
+ if (!shouldBundlePageDependencies(integrationName)) {
173
+ return dependencies;
174
+ }
175
+ const plan = createPageDependencyPackagingPlan(dependencies, integrationName);
176
+ if (!plan) {
177
+ return dependencies;
178
+ }
179
+ return applyPageDependencyPackagingPlan(dependencies, plan);
133
180
  }
134
- export {
135
- packagePageDependencies,
136
- shouldBundlePageDependencies
137
- };