@ecopages/core 0.2.0-beta.30 → 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,149 +1,196 @@
1
- import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./foreign-child-output.utils.js";
1
+ import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from './foreign-child-output.utils.js';
2
+ /**
3
+ * Shared output finalization behavior used both inside and outside active render contexts.
4
+ *
5
+ * This stage is responsible only for lazy trigger or injector wrapping. Foreign-child
6
+ * interception stays in `ContextualComponentRenderRuntime`.
7
+ */
2
8
  class ComponentRenderOutputRuntime {
3
- finalizeComponentRender(component, content) {
4
- const lazyTriggers = component.config?._resolvedLazyTriggers;
5
- if (lazyTriggers && lazyTriggers.length > 0) {
6
- return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
9
+ finalizeComponentRender(component, content) {
10
+ const lazyTriggers = component.config?._resolvedLazyTriggers;
11
+ if (lazyTriggers && lazyTriggers.length > 0) {
12
+ return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
13
+ }
14
+ const lazyGroups = component.config?._resolvedLazyScripts;
15
+ if (lazyGroups && lazyGroups.length > 0) {
16
+ return this.wrapContentWithScriptsInjector(content, lazyGroups);
17
+ }
18
+ return content;
7
19
  }
8
- const lazyGroups = component.config?._resolvedLazyScripts;
9
- if (lazyGroups && lazyGroups.length > 0) {
10
- return this.wrapContentWithScriptsInjector(content, lazyGroups);
20
+ addTriggerToContent(content, triggerId) {
21
+ if (isThenable(content)) {
22
+ return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
23
+ }
24
+ return addTriggerAttribute(content, triggerId);
11
25
  }
12
- return content;
13
- }
14
- addTriggerToContent(content, triggerId) {
15
- if (isThenable(content)) {
16
- return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
26
+ wrapContentWithScriptsInjector(content, lazyGroups) {
27
+ if (isThenable(content)) {
28
+ return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
29
+ }
30
+ return wrapWithScriptsInjector(content, lazyGroups);
17
31
  }
18
- return addTriggerAttribute(content, triggerId);
19
- }
20
- wrapContentWithScriptsInjector(content, lazyGroups) {
21
- if (isThenable(content)) {
22
- return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
23
- }
24
- return wrapWithScriptsInjector(content, lazyGroups);
25
- }
26
32
  }
33
+ /**
34
+ * Render-context-aware runtime that delegates foreign-child interception.
35
+ */
27
36
  class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
28
- context;
29
- constructor(context) {
30
- super();
31
- this.context = context;
32
- }
33
- applyForeignChildInterceptionResult(result) {
34
- if (result.kind === "resolved") {
35
- return result;
37
+ context;
38
+ constructor(context) {
39
+ super();
40
+ this.context = context;
36
41
  }
37
- return result.props ? result : void 0;
38
- }
39
- /**
40
- * Resolves one foreign-child interception through the active runtime.
41
- *
42
- * The runtime may choose inline rendering or immediate resolved output.
43
- */
44
- interceptForeignChild(input) {
45
- const foreignChildRuntimeInput = {
46
- currentIntegration: this.context.currentIntegration,
47
- targetIntegration: input.targetIntegration,
48
- component: input.component,
49
- props: input.props
50
- };
51
- const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
52
- if (asyncInterception !== void 0) {
53
- if (isThenable(asyncInterception)) {
54
- return asyncInterception.then(
55
- (result) => result === void 0 ? void 0 : this.applyForeignChildInterceptionResult(result)
56
- );
57
- }
58
- return this.applyForeignChildInterceptionResult(asyncInterception);
42
+ applyForeignChildInterceptionResult(result) {
43
+ if (result.kind === 'resolved') {
44
+ return result;
45
+ }
46
+ return result.props ? result : undefined;
59
47
  }
60
- const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
61
- if (syncInterception === void 0) {
62
- return void 0;
48
+ /**
49
+ * Resolves one foreign-child interception through the active runtime.
50
+ *
51
+ * The runtime may choose inline rendering or immediate resolved output.
52
+ */
53
+ interceptForeignChild(input) {
54
+ const foreignChildRuntimeInput = {
55
+ currentIntegration: this.context.currentIntegration,
56
+ targetIntegration: input.targetIntegration,
57
+ component: input.component,
58
+ props: input.props,
59
+ };
60
+ const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
61
+ if (asyncInterception !== undefined) {
62
+ if (isThenable(asyncInterception)) {
63
+ return asyncInterception.then((result) => result === undefined ? undefined : this.applyForeignChildInterceptionResult(result));
64
+ }
65
+ return this.applyForeignChildInterceptionResult(asyncInterception);
66
+ }
67
+ const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
68
+ if (syncInterception === undefined) {
69
+ return undefined;
70
+ }
71
+ return this.applyForeignChildInterceptionResult(syncInterception);
63
72
  }
64
- return this.applyForeignChildInterceptionResult(syncInterception);
65
- }
66
73
  }
67
- const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = "__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__";
74
+ const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = '__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__';
75
+ /**
76
+ * Chooses the widest shared global scope available for process-wide state.
77
+ *
78
+ * `process` is preferred when present so duplicate bundles or module instances in
79
+ * the same runtime still converge on one shared context registry.
80
+ */
68
81
  function getSharedContextScope() {
69
- const globalProcess = globalThis.process;
70
- if (globalProcess && typeof globalProcess === "object") {
71
- return globalProcess;
72
- }
73
- return globalThis;
82
+ const globalProcess = globalThis.process;
83
+ if (globalProcess && typeof globalProcess === 'object') {
84
+ return globalProcess;
85
+ }
86
+ return globalThis;
74
87
  }
88
+ /**
89
+ * Returns the singleton mutable state used by component render contexts.
90
+ */
75
91
  function getComponentRenderContextState() {
76
- const sharedScope = getSharedContextScope();
77
- sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
78
- contextStack: [],
79
- nodeContextStorage: null,
80
- nodeContextStorageLoader: null
81
- };
82
- return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
92
+ const sharedScope = getSharedContextScope();
93
+ sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
94
+ contextStack: [],
95
+ nodeContextStorage: null,
96
+ nodeContextStorageLoader: null,
97
+ };
98
+ return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
83
99
  }
100
+ /**
101
+ * Lazily initializes async context storage for Node runtimes.
102
+ *
103
+ * Falls back to in-memory stack mode when async_hooks is unavailable.
104
+ *
105
+ * @returns Async context storage when available; otherwise `null`.
106
+ */
84
107
  async function getContextStorage() {
85
- const state = getComponentRenderContextState();
86
- if (state.nodeContextStorage) {
87
- return state.nodeContextStorage;
88
- }
89
- if (state.nodeContextStorageLoader) {
108
+ const state = getComponentRenderContextState();
109
+ if (state.nodeContextStorage) {
110
+ return state.nodeContextStorage;
111
+ }
112
+ if (state.nodeContextStorageLoader) {
113
+ return state.nodeContextStorageLoader;
114
+ }
115
+ state.nodeContextStorageLoader = import('node:async_hooks')
116
+ .then((module) => {
117
+ const storage = new module.AsyncLocalStorage();
118
+ state.nodeContextStorage = {
119
+ getStore: () => storage.getStore(),
120
+ run: (store, callback) => storage.run(store, callback),
121
+ };
122
+ return state.nodeContextStorage;
123
+ })
124
+ .catch(() => {
125
+ state.nodeContextStorage = null;
126
+ return null;
127
+ })
128
+ .finally(() => {
129
+ state.nodeContextStorageLoader = null;
130
+ });
90
131
  return state.nodeContextStorageLoader;
91
- }
92
- state.nodeContextStorageLoader = import("node:async_hooks").then((module) => {
93
- const storage = new module.AsyncLocalStorage();
94
- state.nodeContextStorage = {
95
- getStore: () => storage.getStore(),
96
- run: (store, callback) => storage.run(store, callback)
97
- };
98
- return state.nodeContextStorage;
99
- }).catch(() => {
100
- state.nodeContextStorage = null;
101
- return null;
102
- }).finally(() => {
103
- state.nodeContextStorageLoader = null;
104
- });
105
- return state.nodeContextStorageLoader;
106
132
  }
107
- function getComponentRenderContext() {
108
- const state = getComponentRenderContextState();
109
- return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
133
+ /**
134
+ * Returns the current component render context, if one is active.
135
+ *
136
+ * @returns Active render context or `undefined` outside render execution.
137
+ */
138
+ export function getComponentRenderContext() {
139
+ const state = getComponentRenderContextState();
140
+ return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
110
141
  }
111
142
  const componentRenderOutputRuntime = new ComponentRenderOutputRuntime();
112
- function interceptForeignChild(input) {
113
- return getComponentRenderContext()?.interceptForeignChild(input);
143
+ /**
144
+ * Runs foreign-child interception for one component render step.
145
+ *
146
+ * The active runtime may resolve the foreign child immediately or keep it inline.
147
+ */
148
+ export function interceptForeignChild(input) {
149
+ return getComponentRenderContext()?.interceptForeignChild(input);
114
150
  }
115
- function finalizeComponentRender(component, content) {
116
- const renderContext = getComponentRenderContext();
117
- return renderContext?.finalizeComponentRender(component, content) ?? componentRenderOutputRuntime.finalizeComponentRender(component, content);
151
+ /**
152
+ * Applies lazy trigger or injector wrapping to completed component output.
153
+ *
154
+ * This helper works both inside render-context execution and in fallback flows
155
+ * where no active context exists.
156
+ */
157
+ export function finalizeComponentRender(component, content) {
158
+ const renderContext = getComponentRenderContext();
159
+ return (renderContext?.finalizeComponentRender(component, content) ??
160
+ componentRenderOutputRuntime.finalizeComponentRender(component, content));
118
161
  }
119
- async function runWithComponentRenderContext(input, render) {
120
- const context = {
121
- currentIntegration: input.currentIntegration,
122
- foreignChildRuntime: input.foreignChildRuntime
123
- };
124
- const runtime = new ContextualComponentRenderRuntime(context);
125
- context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
126
- context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
127
- const storage = await getContextStorage();
128
- let value;
129
- if (storage) {
130
- value = await storage.run(context, render);
131
- } else {
132
- const state = getComponentRenderContextState();
133
- state.contextStack.push(context);
134
- try {
135
- value = await render();
136
- } finally {
137
- state.contextStack.pop();
162
+ /**
163
+ * Runs render work under a fresh component render context and returns the
164
+ * resulting value.
165
+ *
166
+ * @param input Execution metadata for current integration and foreign-child policy.
167
+ * @param render Async render function to execute inside the context.
168
+ * @returns Render result value.
169
+ */
170
+ export async function runWithComponentRenderContext(input, render) {
171
+ const context = {
172
+ currentIntegration: input.currentIntegration,
173
+ foreignChildRuntime: input.foreignChildRuntime,
174
+ };
175
+ const runtime = new ContextualComponentRenderRuntime(context);
176
+ context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
177
+ context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
178
+ const storage = await getContextStorage();
179
+ let value;
180
+ if (storage) {
181
+ value = await storage.run(context, render);
182
+ }
183
+ else {
184
+ const state = getComponentRenderContextState();
185
+ state.contextStack.push(context);
186
+ try {
187
+ value = await render();
188
+ }
189
+ finally {
190
+ state.contextStack.pop();
191
+ }
138
192
  }
139
- }
140
- return {
141
- value
142
- };
193
+ return {
194
+ value,
195
+ };
143
196
  }
144
- export {
145
- finalizeComponentRender,
146
- getComponentRenderContext,
147
- interceptForeignChild,
148
- runWithComponentRenderContext
149
- };