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

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 (343) hide show
  1. package/README.md +1 -0
  2. package/package.json +90 -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/README.md +23 -0
  249. package/src/router/client/link-intent.js +55 -39
  250. package/src/router/client/link-intent.test.browser.js +49 -49
  251. package/src/router/client/link-navigation-policy.js +114 -93
  252. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  253. package/src/router/client/navigation-coordinator.js +235 -211
  254. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  255. package/src/router/client/navigation-lifecycle.js +50 -0
  256. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  257. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  258. package/src/router/server/route-registry.js +237 -242
  259. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  260. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  261. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  262. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  263. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  264. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  265. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  266. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  267. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  268. package/src/services/assets/asset-processing-service/index.js +8 -8
  269. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  270. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  271. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  272. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  273. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  274. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  275. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  276. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  277. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  278. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  279. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  280. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  281. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  282. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  283. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  284. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  285. package/src/services/assets/browser-bundle.service.js +52 -47
  286. package/src/services/cache/cache.types.js +5 -0
  287. package/src/services/cache/index.js +6 -7
  288. package/src/services/cache/memory-cache-store.js +101 -89
  289. package/src/services/cache/page-cache-service.js +156 -145
  290. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  291. package/src/services/html/html-rewriter-provider.service.js +61 -61
  292. package/src/services/html/html-transformer.service.js +249 -266
  293. package/src/services/invalidation/development-invalidation.service.js +252 -241
  294. package/src/services/module-loading/app-module-loader.service.js +1 -0
  295. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  296. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  297. package/src/services/module-loading/module-loading-types.js +1 -0
  298. package/src/services/module-loading/page-module-import.service.js +235 -243
  299. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  300. package/src/services/module-loading/route-module-build-cache.js +3 -38
  301. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  302. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  303. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  304. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  305. package/src/services/module-loading/source-module-support.js +15 -7
  306. package/src/services/runtime-state/dev-graph.service.js +165 -157
  307. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  308. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  309. package/src/services/validation/schema-validation-service.js +157 -95
  310. package/src/services/validation/standard-schema.types.js +1 -0
  311. package/src/services/validation/validate-standard-schema.js +13 -13
  312. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  313. package/src/static-site-generator/sitemap-routes.js +33 -28
  314. package/src/static-site-generator/sitemap.js +38 -29
  315. package/src/static-site-generator/static-build-invalidation.js +34 -56
  316. package/src/static-site-generator/static-export-context.js +1 -0
  317. package/src/static-site-generator/static-site-generator.js +517 -553
  318. package/src/types/internal-types.d.ts +19 -3
  319. package/src/types/internal-types.js +1 -0
  320. package/src/types/public-types.d.ts +16 -46
  321. package/src/types/public-types.js +1 -0
  322. package/src/utils/deep-merge.js +39 -26
  323. package/src/utils/ecopages-route-info.js +27 -23
  324. package/src/utils/hash.js +3 -6
  325. package/src/utils/html-escaping.js +21 -8
  326. package/src/utils/html.js +1 -4
  327. package/src/utils/invariant.js +11 -10
  328. package/src/utils/locals-utils.js +32 -22
  329. package/src/utils/parse-cli-args.js +73 -65
  330. package/src/utils/path-pattern.js +38 -23
  331. package/src/utils/path-utils.module.js +8 -11
  332. package/src/utils/resolve-entry-file.js +70 -38
  333. package/src/utils/resolve-work-dir.js +23 -27
  334. package/src/utils/runtime.js +24 -33
  335. package/src/utils/server-utils.module.js +60 -52
  336. package/src/utils/static-file-extensions.js +52 -46
  337. package/src/watchers/project-watcher-ignore.js +16 -15
  338. package/src/watchers/project-watcher.js +385 -366
  339. package/src/watchers/project-watcher.test-helpers.js +45 -50
  340. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  341. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  342. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  343. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,148 +1,155 @@
1
- import {
2
- HtmlTransformerService
3
- } from "../../../services/html/html-transformer.service.js";
1
+ import { HtmlTransformerService, } from '../../../services/html/html-transformer.service.js';
4
2
  function resolveDocumentShellLayouts(input) {
5
- if (input.layouts && input.layouts.length > 0) {
6
- return input.layouts;
7
- }
8
- return input.layout ? [input.layout] : [];
3
+ if (input.layouts && input.layouts.length > 0) {
4
+ return input.layouts;
5
+ }
6
+ return input.layout ? [input.layout] : [];
9
7
  }
10
8
  function resolveComponentIntegrationName(component) {
11
- return component.config?.integration ?? component.config?.__eco?.integration ?? "ecopages";
9
+ return component.config?.integration ?? component.config?.__eco?.integration ?? 'ecopages';
12
10
  }
13
- async function composeSequentialLayoutChildren(context) {
14
- if (!context.primaryRender) {
15
- throw new Error("[ecopages] composeSequentialLayoutChildren requires primaryRender.");
16
- }
17
- let children = context.primaryRender.html;
18
- const layoutRenders = [];
19
- for (const layout of [...context.layouts].reverse()) {
20
- const layoutRender = await context.renderComponentWithForeignChildren({
21
- component: layout.component,
22
- props: layout.props ?? {},
23
- children,
24
- integrationContext: { rendererCache: context.rendererCache }
25
- });
26
- layoutRenders.push(layoutRender);
27
- children = layoutRender.html;
28
- }
29
- return {
30
- children,
31
- layoutRenders
32
- };
11
+ /**
12
+ * Default sequential string-child composition for document shell layers.
13
+ */
14
+ export async function composeSequentialLayoutChildren(context) {
15
+ if (!context.primaryRender) {
16
+ throw new Error('[ecopages] composeSequentialLayoutChildren requires primaryRender.');
17
+ }
18
+ let children = context.primaryRender.html;
19
+ const layoutRenders = [];
20
+ for (const layout of [...context.layouts].reverse()) {
21
+ const layoutRender = await context.renderComponentWithForeignChildren({
22
+ component: layout.component,
23
+ props: layout.props ?? {},
24
+ children,
25
+ integrationContext: { rendererCache: context.rendererCache },
26
+ });
27
+ layoutRenders.push(layoutRender);
28
+ children = layoutRender.html;
29
+ }
30
+ return {
31
+ children,
32
+ layoutRenders,
33
+ };
33
34
  }
34
- async function composeDocumentShell(dependencies, input) {
35
- const rendererCache = /* @__PURE__ */ new Map();
36
- const layouts = resolveDocumentShellLayouts(input);
37
- const composeChildren = input.composeChildren ?? composeSequentialLayoutChildren;
38
- const usesCustomComposeChildren = input.composeChildren !== void 0;
39
- let primaryRender;
40
- let children;
41
- let layoutRenders;
42
- if (usesCustomComposeChildren) {
43
- const composed = await composeChildren({
44
- primaryComponent: input.primaryComponent,
45
- primaryProps: input.primaryProps,
46
- layouts,
47
- rendererCache,
48
- renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren
35
+ /**
36
+ * Composes page or view content through optional layout and document shells.
37
+ *
38
+ * One execution-scoped renderer cache is threaded through every shell layer so
39
+ * repeated foreign delegation reuses initialized renderers within one render pass.
40
+ */
41
+ export async function composeDocumentShell(dependencies, input) {
42
+ const rendererCache = new Map();
43
+ const layouts = resolveDocumentShellLayouts(input);
44
+ const composeChildren = input.composeChildren ?? composeSequentialLayoutChildren;
45
+ const usesCustomComposeChildren = input.composeChildren !== undefined;
46
+ let primaryRender;
47
+ let children;
48
+ let layoutRenders;
49
+ if (usesCustomComposeChildren) {
50
+ const composed = await composeChildren({
51
+ primaryComponent: input.primaryComponent,
52
+ primaryProps: input.primaryProps,
53
+ layouts,
54
+ rendererCache,
55
+ renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren,
56
+ });
57
+ children = composed.children;
58
+ layoutRenders = composed.layoutRenders;
59
+ primaryRender = composed.primaryRender ?? {
60
+ html: typeof composed.children === 'string' ? composed.children : '',
61
+ assets: [],
62
+ canAttachAttributes: true,
63
+ rootTag: 'main',
64
+ integrationName: resolveComponentIntegrationName(input.primaryComponent),
65
+ };
66
+ }
67
+ else {
68
+ primaryRender = await dependencies.renderComponentWithForeignChildren({
69
+ component: input.primaryComponent,
70
+ props: input.primaryProps,
71
+ integrationContext: { rendererCache },
72
+ });
73
+ const composed = await composeChildren({
74
+ primaryComponent: input.primaryComponent,
75
+ primaryProps: input.primaryProps,
76
+ primaryRender,
77
+ layouts,
78
+ rendererCache,
79
+ renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren,
80
+ });
81
+ children = composed.children;
82
+ layoutRenders = composed.layoutRenders;
83
+ }
84
+ const documentRender = await dependencies.renderComponentWithForeignChildren({
85
+ component: input.htmlTemplate,
86
+ props: input.documentProps,
87
+ children,
88
+ integrationContext: { rendererCache },
49
89
  });
50
- children = composed.children;
51
- layoutRenders = composed.layoutRenders;
52
- primaryRender = composed.primaryRender ?? {
53
- html: typeof composed.children === "string" ? composed.children : "",
54
- assets: [],
55
- canAttachAttributes: true,
56
- rootTag: "main",
57
- integrationName: resolveComponentIntegrationName(input.primaryComponent)
90
+ dependencies.appendProcessedDependencies(primaryRender.assets, ...layoutRenders.map((layoutRender) => layoutRender.assets), documentRender.assets);
91
+ return {
92
+ documentHtml: documentRender.html,
58
93
  };
59
- } else {
60
- primaryRender = await dependencies.renderComponentWithForeignChildren({
61
- component: input.primaryComponent,
62
- props: input.primaryProps,
63
- integrationContext: { rendererCache }
64
- });
65
- const composed = await composeChildren({
66
- primaryComponent: input.primaryComponent,
67
- primaryProps: input.primaryProps,
68
- primaryRender,
69
- layouts,
70
- rendererCache,
71
- renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren
72
- });
73
- children = composed.children;
74
- layoutRenders = composed.layoutRenders;
75
- }
76
- const documentRender = await dependencies.renderComponentWithForeignChildren({
77
- component: input.htmlTemplate,
78
- props: input.documentProps,
79
- children,
80
- integrationContext: { rendererCache }
81
- });
82
- dependencies.appendProcessedDependencies(
83
- primaryRender.assets,
84
- ...layoutRenders.map((layoutRender) => layoutRender.assets),
85
- documentRender.assets
86
- );
87
- return {
88
- documentHtml: documentRender.html
89
- };
90
94
  }
91
- function applyDocumentShellAttributeStamping(html, stamping, options) {
92
- let nextHtml = html;
93
- if (options.componentRootAttributes && Object.keys(options.componentRootAttributes).length > 0) {
94
- nextHtml = stamping.applyAttributesToFirstBodyElement(nextHtml, options.componentRootAttributes);
95
- }
96
- if (options.documentAttributes && Object.keys(options.documentAttributes).length > 0) {
97
- nextHtml = stamping.applyAttributesToHtmlElement(nextHtml, options.documentAttributes);
98
- }
99
- return nextHtml;
100
- }
101
- async function renderPageDocumentShell(dependencies, input, docType) {
102
- const { documentHtml: composedDocumentHtml } = await composeDocumentShell(dependencies, {
103
- primaryComponent: input.page.component,
104
- primaryProps: input.page.props,
105
- layout: input.layout,
106
- layouts: input.layouts,
107
- composeChildren: input.composeChildren,
108
- htmlTemplate: input.htmlTemplate,
109
- documentProps: {
110
- metadata: input.metadata,
111
- pageProps: input.pageProps,
112
- ...input.documentProps ?? {}
95
+ /**
96
+ * Applies optional component-root and document-root attribute stamping before HTML
97
+ * transformation runs on explicit renderer-owned paths.
98
+ */
99
+ export function applyDocumentShellAttributeStamping(html, stamping, options) {
100
+ let nextHtml = html;
101
+ if (options.componentRootAttributes && Object.keys(options.componentRootAttributes).length > 0) {
102
+ nextHtml = stamping.applyAttributesToFirstBodyElement(nextHtml, options.componentRootAttributes);
103
+ }
104
+ if (options.documentAttributes && Object.keys(options.documentAttributes).length > 0) {
105
+ nextHtml = stamping.applyAttributesToHtmlElement(nextHtml, options.documentAttributes);
113
106
  }
114
- });
115
- const documentHtml = input.transformDocumentHtml ? input.transformDocumentHtml(composedDocumentHtml) : composedDocumentHtml;
116
- return `${docType}${documentHtml}`;
107
+ return nextHtml;
117
108
  }
118
- async function finalizeDocumentShellHtml(htmlTransformer, options) {
119
- const html = applyDocumentShellAttributeStamping(
120
- options.html,
121
- {
122
- applyAttributesToFirstBodyElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToFirstBodyElement(nextHtml, attributes),
123
- applyAttributesToHtmlElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToHtmlElement(nextHtml, attributes)
124
- },
125
- {
126
- componentRootAttributes: options.componentRootAttributes,
127
- documentAttributes: options.documentAttributes
109
+ /**
110
+ * Builds the final serialized document HTML for one route page render.
111
+ */
112
+ export async function renderPageDocumentShell(dependencies, input, docType) {
113
+ const { documentHtml: composedDocumentHtml } = await composeDocumentShell(dependencies, {
114
+ primaryComponent: input.page.component,
115
+ primaryProps: input.page.props,
116
+ layout: input.layout,
117
+ layouts: input.layouts,
118
+ composeChildren: input.composeChildren,
119
+ htmlTemplate: input.htmlTemplate,
120
+ documentProps: {
121
+ metadata: input.metadata,
122
+ pageProps: input.pageProps,
123
+ ...(input.documentProps ?? {}),
124
+ },
125
+ });
126
+ const documentHtml = input.transformDocumentHtml
127
+ ? input.transformDocumentHtml(composedDocumentHtml)
128
+ : composedDocumentHtml;
129
+ return `${docType}${documentHtml}`;
130
+ }
131
+ /**
132
+ * Finalizes already-resolved HTML for explicit renderer-owned paths.
133
+ *
134
+ * @remarks
135
+ * Callers append renderer bootstrap dependencies before invoking this helper.
136
+ * Stamps document/root attributes and runs HTML transformation after nested
137
+ * foreign-subtree resolution without routing back through shared route execution.
138
+ */
139
+ export async function finalizeDocumentShellHtml(htmlTransformer, options) {
140
+ const html = applyDocumentShellAttributeStamping(options.html, {
141
+ applyAttributesToFirstBodyElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToFirstBodyElement(nextHtml, attributes),
142
+ applyAttributesToHtmlElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToHtmlElement(nextHtml, attributes),
143
+ }, {
144
+ componentRootAttributes: options.componentRootAttributes,
145
+ documentAttributes: options.documentAttributes,
146
+ });
147
+ const shouldTransform = options.transformHtml ?? !options.partial;
148
+ if (!shouldTransform) {
149
+ return html;
128
150
  }
129
- );
130
- const shouldTransform = options.transformHtml ?? !options.partial;
131
- if (!shouldTransform) {
132
- return html;
133
- }
134
- const transformedResponse = await htmlTransformer.transform(
135
- new Response(html, {
136
- headers: { "Content-Type": "text/html" }
137
- }),
138
- options.htmlContributions
139
- );
140
- return await transformedResponse.text();
151
+ const transformedResponse = await htmlTransformer.transform(new Response(html, {
152
+ headers: { 'Content-Type': 'text/html' },
153
+ }), options.htmlContributions);
154
+ return await transformedResponse.text();
141
155
  }
142
- export {
143
- applyDocumentShellAttributeStamping,
144
- composeDocumentShell,
145
- composeSequentialLayoutChildren,
146
- finalizeDocumentShellHtml,
147
- renderPageDocumentShell
148
- };
@@ -1,31 +1,37 @@
1
- function resolveLayoutShellProps(context) {
2
- return context.locals ? { locals: context.locals } : {};
1
+ /**
2
+ * Resolves the default shell props passed to a layout tier during route render.
3
+ */
4
+ export function resolveLayoutShellProps(context) {
5
+ return context.locals ? { locals: context.locals } : {};
3
6
  }
4
- function resolveLayoutEntryProps(entry, context) {
5
- const shellProps = resolveLayoutShellProps(context);
6
- if (!entry.props) {
7
- return shellProps;
8
- }
9
- const layoutPropsContext = {
10
- params: context.params,
11
- query: context.query,
12
- locals: context.locals
13
- };
14
- return {
15
- ...shellProps,
16
- ...entry.props(layoutPropsContext)
17
- };
7
+ /**
8
+ * Resolves props for one layout entry, merging shell props with an optional factory.
9
+ */
10
+ export function resolveLayoutEntryProps(entry, context) {
11
+ const shellProps = resolveLayoutShellProps(context);
12
+ if (!entry.props) {
13
+ return shellProps;
14
+ }
15
+ const layoutPropsContext = {
16
+ params: context.params,
17
+ query: context.query,
18
+ locals: context.locals,
19
+ };
20
+ return {
21
+ ...shellProps,
22
+ ...entry.props(layoutPropsContext),
23
+ };
18
24
  }
19
- function resolvePageLayoutComponents(layouts) {
20
- return layouts && layouts.length > 0 ? layouts : [];
25
+ /**
26
+ * Reads the normalized layout stack from a page component config.
27
+ */
28
+ export function resolvePageLayoutComponents(layouts) {
29
+ return layouts && layouts.length > 0 ? layouts : [];
21
30
  }
22
- function resolveInnermostPageLayout(layouts) {
23
- const stack = resolvePageLayoutComponents(layouts);
24
- return stack[stack.length - 1];
31
+ /**
32
+ * Returns the innermost layout component from a normalized page layout stack.
33
+ */
34
+ export function resolveInnermostPageLayout(layouts) {
35
+ const stack = resolvePageLayoutComponents(layouts);
36
+ return stack[stack.length - 1];
25
37
  }
26
- export {
27
- resolveInnermostPageLayout,
28
- resolveLayoutEntryProps,
29
- resolveLayoutShellProps,
30
- resolvePageLayoutComponents
31
- };