@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,55 +1,52 @@
1
- import { IntegrationRenderer } from "./integration-renderer.js";
2
- import { resolveInnermostPageLayout } from "./document-shell/layout-shell-props.service.js";
3
- class StringMarkupRenderer extends IntegrationRenderer {
4
- async renderComponent(input) {
5
- if (typeof input.component !== "function") {
6
- throw new TypeError(`${this.name} renderer expected a callable component.`);
1
+ import { IntegrationRenderer } from './integration-renderer.js';
2
+ import { resolveInnermostPageLayout } from './document-shell/layout-shell-props.service.js';
3
+ /**
4
+ * Base renderer for integrations whose page output is string HTML markup.
5
+ *
6
+ * @remarks
7
+ * Ghtml, KitaJS, and MDX share the same document-shell rendering path. Subclasses
8
+ * only need to set `name` and override hooks for integration-specific behavior.
9
+ */
10
+ export class StringMarkupRenderer extends IntegrationRenderer {
11
+ async renderComponent(input) {
12
+ if (typeof input.component !== 'function') {
13
+ throw new TypeError(`${this.name} renderer expected a callable component.`);
14
+ }
15
+ return this.renderStringComponentWithQueuedForeignSubtrees(input, input.component);
7
16
  }
8
- return this.renderStringComponentWithQueuedForeignSubtrees(input, input.component);
9
- }
10
- async render({
11
- params,
12
- query,
13
- props,
14
- locals,
15
- pageLocals,
16
- metadata,
17
- Page,
18
- Layout,
19
- HtmlTemplate,
20
- pageProps
21
- }) {
22
- try {
23
- return await this.renderPageWithDocumentShell({
24
- page: {
25
- component: Page,
26
- props: { params, query, ...props, locals: pageLocals }
27
- },
28
- layout: Layout ? {
29
- component: Layout,
30
- props: locals ? { locals } : {}
31
- } : void 0,
32
- htmlTemplate: HtmlTemplate,
33
- metadata,
34
- pageProps: pageProps ?? props ?? {}
35
- });
36
- } catch (error) {
37
- throw this.createRenderError("Error rendering page", error);
17
+ async render({ params, query, props, locals, pageLocals, metadata, Page, Layout, HtmlTemplate, pageProps, }) {
18
+ try {
19
+ return await this.renderPageWithDocumentShell({
20
+ page: {
21
+ component: Page,
22
+ props: { params, query, ...props, locals: pageLocals },
23
+ },
24
+ layout: Layout
25
+ ? {
26
+ component: Layout,
27
+ props: locals ? { locals } : {},
28
+ }
29
+ : undefined,
30
+ htmlTemplate: HtmlTemplate,
31
+ metadata,
32
+ pageProps: pageProps ?? props ?? {},
33
+ });
34
+ }
35
+ catch (error) {
36
+ throw this.createRenderError('Error rendering page', error);
37
+ }
38
38
  }
39
- }
40
- async renderToResponse(view, props, ctx) {
41
- try {
42
- return await this.renderViewWithDocumentShell({
43
- view,
44
- props,
45
- ctx,
46
- layout: resolveInnermostPageLayout(view.config?.layouts)
47
- });
48
- } catch (error) {
49
- throw this.createRenderError("Error rendering view", error);
39
+ async renderToResponse(view, props, ctx) {
40
+ try {
41
+ return await this.renderViewWithDocumentShell({
42
+ view,
43
+ props,
44
+ ctx,
45
+ layout: resolveInnermostPageLayout(view.config?.layouts),
46
+ });
47
+ }
48
+ catch (error) {
49
+ throw this.createRenderError('Error rendering view', error);
50
+ }
50
51
  }
51
- }
52
52
  }
53
- export {
54
- StringMarkupRenderer
55
- };
@@ -1,135 +1,131 @@
1
- import path from "node:path";
2
- import { assertEcoDeclaredComponent } from "../../eco/eco-declared-component.js";
3
- import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
4
- import { extractEcopagesVirtualImports } from "./ecopages-virtual-imports.js";
5
- import { collectDeclaredAssetEntries } from "./declared-asset-collection.js";
6
- import { getLazyTriggerKey } from "./lazy-trigger-planning.js";
7
- import { collectLazyScriptEntries } from "./lazy-entry-collection.js";
8
- import {
9
- createModuleScriptName,
10
- createNamedImportModuleSource,
11
- createNamespaceImportModuleSource
12
- } from "./module-declaration-scripts.js";
13
- import { collectModuleDeclarations } from "./module-declaration-aggregation.js";
1
+ import path from 'node:path';
2
+ import { assertEcoDeclaredComponent } from '../../eco/eco-declared-component.js';
3
+ import { AssetFactory } from '../../services/assets/asset-processing-service/index.js';
4
+ import { extractEcopagesVirtualImports } from './ecopages-virtual-imports.js';
5
+ import { collectDeclaredAssetEntries } from './declared-asset-collection.js';
6
+ import { getLazyTriggerKey } from './lazy-trigger-planning.js';
7
+ import { collectLazyScriptEntries } from './lazy-entry-collection.js';
8
+ import { createModuleScriptName, createNamedImportModuleSource, createNamespaceImportModuleSource, } from './module-declaration-scripts.js';
9
+ import { collectModuleDeclarations } from './module-declaration-aggregation.js';
14
10
  const MODULE_SCRIPT_ATTRIBUTES = {
15
- type: "module",
16
- defer: ""
11
+ type: 'module',
12
+ defer: '',
17
13
  };
18
14
  function createModuleScriptAttributes(attributes) {
19
- return {
20
- ...MODULE_SCRIPT_ATTRIBUTES,
21
- ...attributes
22
- };
15
+ return {
16
+ ...MODULE_SCRIPT_ATTRIBUTES,
17
+ ...attributes,
18
+ };
23
19
  }
24
20
  function pushUniqueDependency(keys, key, dependencies, dependency) {
25
- if (keys.has(key)) {
26
- return false;
27
- }
28
- keys.add(key);
29
- dependencies.push(dependency);
30
- return true;
21
+ if (keys.has(key)) {
22
+ return false;
23
+ }
24
+ keys.add(key);
25
+ dependencies.push(dependency);
26
+ return true;
31
27
  }
32
28
  function resolveDependencyPath(componentDir, pathUrl) {
33
- return path.join(componentDir, pathUrl);
29
+ return path.join(componentDir, pathUrl);
34
30
  }
35
- function collectComponentDependencies(options) {
36
- const {
37
- components,
38
- integrationName,
39
- resolveLazyScripts,
40
- createEcopagesJsxLazyEntryName,
41
- isEcopagesJsxIntegration,
42
- errors
43
- } = options;
44
- const dependencies = [];
45
- const lazyScriptsByConfig = /* @__PURE__ */ new Map();
46
- const lazyDependencyKeys = /* @__PURE__ */ new Set();
47
- for (const component of components) {
48
- if (!component) continue;
49
- const componentFile = component.config?.__eco?.file;
50
- if (!componentFile) continue;
51
- const stylesheetDependencyKeys = /* @__PURE__ */ new Set();
52
- const scriptDependencyKeys = /* @__PURE__ */ new Set();
53
- const modulesMap = /* @__PURE__ */ new Map();
54
- const collect = (config) => {
55
- if (!config) return;
56
- const file = config.__eco?.file;
57
- if (!file) return;
58
- const dir = path.dirname(file);
59
- const dependenciesConfig = config.dependencies;
60
- const registerLazyScript = ({
61
- lazy,
62
- lazyKey,
63
- fallbackUrl
64
- }) => {
65
- let grouped = lazyScriptsByConfig.get(config);
66
- if (!grouped) {
67
- grouped = /* @__PURE__ */ new Map();
68
- lazyScriptsByConfig.set(config, grouped);
69
- }
70
- const triggerKey = getLazyTriggerKey(lazy);
71
- const existing = grouped.get(triggerKey) ?? { lazy, scripts: [] };
72
- existing.scripts.push({ lazyKey, fallbackUrl });
73
- grouped.set(triggerKey, existing);
74
- };
75
- collectDeclaredAssetEntries({
76
- stylesheetEntries: dependenciesConfig?.stylesheets ?? [],
77
- scriptEntries: dependenciesConfig?.scripts ?? [],
78
- componentDir: dir,
79
- dependencies,
80
- stylesheetDependencyKeys,
81
- scriptDependencyKeys,
82
- resolveDependencyPath,
83
- createModuleScriptAttributes,
84
- pushUniqueDependency,
85
- getInvalidStylesheetEntryMessage: () => errors.invalidStylesheetEntry,
86
- getInvalidScriptEntryMessage: () => errors.invalidScriptEntry
87
- });
88
- collectModuleDeclarations(modulesMap, dependenciesConfig?.modules, extractEcopagesVirtualImports(file));
89
- collectLazyScriptEntries({
90
- scriptEntries: dependenciesConfig?.scripts ?? [],
91
- componentFile: file,
92
- componentDir: dir,
93
- integrationName,
94
- dependencies,
95
- lazyDependencyKeys,
96
- registerLazyScript,
97
- resolveDependencyPath,
98
- resolveLazyScripts,
99
- createModuleScriptAttributes,
100
- createEcopagesJsxLazyEntryName,
101
- pushUniqueDependency,
102
- getLazyScriptMissingSrcMessage: () => errors.lazyScriptMissingSrc,
103
- isEcopagesJsxIntegration
104
- });
105
- if (dependenciesConfig?.components) {
106
- for (const nestedComponent of dependenciesConfig.components) {
107
- if (!nestedComponent) {
31
+ /**
32
+ * Walks component dependency trees and collects declared assets, module declarations,
33
+ * and lazy-script group metadata in one pass.
34
+ *
35
+ * The returned structures intentionally preserve both the flat asset list used by
36
+ * asset processing and the grouped lazy-trigger data used later during render output.
37
+ */
38
+ export function collectComponentDependencies(options) {
39
+ const { components, integrationName, resolveLazyScripts, createEcopagesJsxLazyEntryName, isEcopagesJsxIntegration, errors, } = options;
40
+ const dependencies = [];
41
+ const lazyScriptsByConfig = new Map();
42
+ const lazyDependencyKeys = new Set();
43
+ for (const component of components) {
44
+ if (!component)
108
45
  continue;
109
- }
110
- assertEcoDeclaredComponent(nestedComponent, { parentComponentFile: file });
111
- collect(nestedComponent.config);
112
- }
113
- }
46
+ const componentFile = component.config?.__eco?.file;
47
+ if (!componentFile)
48
+ continue;
49
+ const stylesheetDependencyKeys = new Set();
50
+ const scriptDependencyKeys = new Set();
51
+ const modulesMap = new Map();
52
+ /**
53
+ * Recursively visits one component config and its declared child dependencies.
54
+ */
55
+ const collect = (config) => {
56
+ if (!config)
57
+ return;
58
+ const file = config.__eco?.file;
59
+ if (!file)
60
+ return;
61
+ const dir = path.dirname(file);
62
+ const dependenciesConfig = config.dependencies;
63
+ const registerLazyScript = ({ lazy, lazyKey, fallbackUrl, }) => {
64
+ let grouped = lazyScriptsByConfig.get(config);
65
+ if (!grouped) {
66
+ grouped = new Map();
67
+ lazyScriptsByConfig.set(config, grouped);
68
+ }
69
+ const triggerKey = getLazyTriggerKey(lazy);
70
+ const existing = grouped.get(triggerKey) ?? { lazy, scripts: [] };
71
+ existing.scripts.push({ lazyKey, fallbackUrl });
72
+ grouped.set(triggerKey, existing);
73
+ };
74
+ collectDeclaredAssetEntries({
75
+ stylesheetEntries: dependenciesConfig?.stylesheets ?? [],
76
+ scriptEntries: dependenciesConfig?.scripts ?? [],
77
+ componentDir: dir,
78
+ dependencies,
79
+ stylesheetDependencyKeys,
80
+ scriptDependencyKeys,
81
+ resolveDependencyPath,
82
+ createModuleScriptAttributes,
83
+ pushUniqueDependency,
84
+ getInvalidStylesheetEntryMessage: () => errors.invalidStylesheetEntry,
85
+ getInvalidScriptEntryMessage: () => errors.invalidScriptEntry,
86
+ });
87
+ collectModuleDeclarations(modulesMap, dependenciesConfig?.modules, extractEcopagesVirtualImports(file));
88
+ collectLazyScriptEntries({
89
+ scriptEntries: dependenciesConfig?.scripts ?? [],
90
+ componentFile: file,
91
+ componentDir: dir,
92
+ integrationName,
93
+ dependencies,
94
+ lazyDependencyKeys,
95
+ registerLazyScript,
96
+ resolveDependencyPath,
97
+ resolveLazyScripts,
98
+ createModuleScriptAttributes,
99
+ createEcopagesJsxLazyEntryName,
100
+ pushUniqueDependency,
101
+ getLazyScriptMissingSrcMessage: () => errors.lazyScriptMissingSrc,
102
+ isEcopagesJsxIntegration,
103
+ });
104
+ if (dependenciesConfig?.components) {
105
+ for (const nestedComponent of dependenciesConfig.components) {
106
+ if (!nestedComponent) {
107
+ continue;
108
+ }
109
+ assertEcoDeclaredComponent(nestedComponent, { parentComponentFile: file });
110
+ collect(nestedComponent.config);
111
+ }
112
+ }
113
+ };
114
+ collect(component.config);
115
+ dependencies.push(...Array.from(modulesMap.entries()).map(([from, importsSet]) => {
116
+ const imports = importsSet ? Array.from(importsSet) : undefined;
117
+ return AssetFactory.createContentScript({
118
+ position: 'head',
119
+ name: createModuleScriptName(from, imports),
120
+ content: imports && imports.length > 0
121
+ ? createNamedImportModuleSource(from, imports)
122
+ : createNamespaceImportModuleSource(from),
123
+ attributes: createModuleScriptAttributes(),
124
+ });
125
+ }));
126
+ }
127
+ return {
128
+ dependencies,
129
+ lazyScriptsByConfig,
114
130
  };
115
- collect(component.config);
116
- dependencies.push(
117
- ...Array.from(modulesMap.entries()).map(([from, importsSet]) => {
118
- const imports = importsSet ? Array.from(importsSet) : void 0;
119
- return AssetFactory.createContentScript({
120
- position: "head",
121
- name: createModuleScriptName(from, imports),
122
- content: imports && imports.length > 0 ? createNamedImportModuleSource(from, imports) : createNamespaceImportModuleSource(from),
123
- attributes: createModuleScriptAttributes()
124
- });
125
- })
126
- );
127
- }
128
- return {
129
- dependencies,
130
- lazyScriptsByConfig
131
- };
132
131
  }
133
- export {
134
- collectComponentDependencies
135
- };
@@ -1,106 +1,78 @@
1
- import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
1
+ import { AssetFactory } from '../../services/assets/asset-processing-service/index.js';
2
2
  function isDependencyEntryObject(entry) {
3
- return typeof entry === "object" && entry !== null;
3
+ return typeof entry === 'object' && entry !== null;
4
4
  }
5
5
  function getDependencyEntrySrc(entry) {
6
- return isDependencyEntryObject(entry) ? entry.src : entry;
6
+ return isDependencyEntryObject(entry) ? entry.src : entry;
7
7
  }
8
8
  function getDependencyEntryContent(entry) {
9
- return isDependencyEntryObject(entry) ? entry.content : void 0;
9
+ return isDependencyEntryObject(entry) ? entry.content : undefined;
10
10
  }
11
11
  function getDependencyEntryAttributes(entry) {
12
- return isDependencyEntryObject(entry) ? entry.attributes : void 0;
12
+ return isDependencyEntryObject(entry) ? entry.attributes : undefined;
13
13
  }
14
- function collectDeclaredAssetEntries(options) {
15
- const {
16
- stylesheetEntries,
17
- scriptEntries,
18
- componentDir,
19
- dependencies,
20
- stylesheetDependencyKeys,
21
- scriptDependencyKeys,
22
- resolveDependencyPath,
23
- createModuleScriptAttributes,
24
- pushUniqueDependency,
25
- getInvalidStylesheetEntryMessage,
26
- getInvalidScriptEntryMessage
27
- } = options;
28
- for (const style of stylesheetEntries) {
29
- const content = getDependencyEntryContent(style);
30
- const src = getDependencyEntrySrc(style);
31
- const attributes = getDependencyEntryAttributes(style);
32
- if (content) {
33
- const depKey2 = `style:content:${content}:${JSON.stringify(attributes ?? {})}`;
34
- pushUniqueDependency(
35
- stylesheetDependencyKeys,
36
- depKey2,
37
- dependencies,
38
- AssetFactory.createContentStylesheet({
39
- content,
40
- position: "head",
41
- attributes
42
- })
43
- );
44
- continue;
45
- }
46
- if (!src) {
47
- throw new Error(getInvalidStylesheetEntryMessage());
48
- }
49
- const resolvedPath = resolveDependencyPath(componentDir, src);
50
- const depKey = `style:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
51
- pushUniqueDependency(
52
- stylesheetDependencyKeys,
53
- depKey,
54
- dependencies,
55
- AssetFactory.createFileStylesheet({
56
- filepath: resolvedPath,
57
- position: "head",
58
- attributes: {
59
- rel: "stylesheet",
60
- ...attributes
14
+ /**
15
+ * Normalizes non-lazy stylesheet and script declarations into asset definitions.
16
+ *
17
+ * Duplicate declarations are filtered through the provided key sets so callers can
18
+ * compose this helper into larger recursive collection passes without re-emitting
19
+ * the same asset multiple times.
20
+ */
21
+ export function collectDeclaredAssetEntries(options) {
22
+ const { stylesheetEntries, scriptEntries, componentDir, dependencies, stylesheetDependencyKeys, scriptDependencyKeys, resolveDependencyPath, createModuleScriptAttributes, pushUniqueDependency, getInvalidStylesheetEntryMessage, getInvalidScriptEntryMessage, } = options;
23
+ for (const style of stylesheetEntries) {
24
+ const content = getDependencyEntryContent(style);
25
+ const src = getDependencyEntrySrc(style);
26
+ const attributes = getDependencyEntryAttributes(style);
27
+ if (content) {
28
+ const depKey = `style:content:${content}:${JSON.stringify(attributes ?? {})}`;
29
+ pushUniqueDependency(stylesheetDependencyKeys, depKey, dependencies, AssetFactory.createContentStylesheet({
30
+ content,
31
+ position: 'head',
32
+ attributes,
33
+ }));
34
+ continue;
61
35
  }
62
- })
63
- );
64
- }
65
- for (const script of scriptEntries) {
66
- if (isDependencyEntryObject(script) && "lazy" in script && script.lazy) {
67
- continue;
68
- }
69
- const content = getDependencyEntryContent(script);
70
- const src = getDependencyEntrySrc(script);
71
- const attributes = getDependencyEntryAttributes(script);
72
- if (content) {
73
- const depKey2 = `script:content:${content}:${JSON.stringify(attributes ?? {})}`;
74
- pushUniqueDependency(
75
- scriptDependencyKeys,
76
- depKey2,
77
- dependencies,
78
- AssetFactory.createInlineContentScript({
79
- position: "head",
80
- content,
81
- bundle: false,
82
- attributes
83
- })
84
- );
85
- continue;
36
+ if (!src) {
37
+ throw new Error(getInvalidStylesheetEntryMessage());
38
+ }
39
+ const resolvedPath = resolveDependencyPath(componentDir, src);
40
+ const depKey = `style:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
41
+ pushUniqueDependency(stylesheetDependencyKeys, depKey, dependencies, AssetFactory.createFileStylesheet({
42
+ filepath: resolvedPath,
43
+ position: 'head',
44
+ attributes: {
45
+ rel: 'stylesheet',
46
+ ...attributes,
47
+ },
48
+ }));
86
49
  }
87
- if (!src) {
88
- throw new Error(getInvalidScriptEntryMessage());
50
+ for (const script of scriptEntries) {
51
+ if (isDependencyEntryObject(script) && 'lazy' in script && script.lazy) {
52
+ continue;
53
+ }
54
+ const content = getDependencyEntryContent(script);
55
+ const src = getDependencyEntrySrc(script);
56
+ const attributes = getDependencyEntryAttributes(script);
57
+ if (content) {
58
+ const depKey = `script:content:${content}:${JSON.stringify(attributes ?? {})}`;
59
+ pushUniqueDependency(scriptDependencyKeys, depKey, dependencies, AssetFactory.createInlineContentScript({
60
+ position: 'head',
61
+ content,
62
+ bundle: false,
63
+ attributes,
64
+ }));
65
+ continue;
66
+ }
67
+ if (!src) {
68
+ throw new Error(getInvalidScriptEntryMessage());
69
+ }
70
+ const resolvedPath = resolveDependencyPath(componentDir, src);
71
+ const depKey = `script:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
72
+ pushUniqueDependency(scriptDependencyKeys, depKey, dependencies, AssetFactory.createFileScript({
73
+ filepath: resolvedPath,
74
+ position: 'head',
75
+ attributes: createModuleScriptAttributes(attributes),
76
+ }));
89
77
  }
90
- const resolvedPath = resolveDependencyPath(componentDir, src);
91
- const depKey = `script:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
92
- pushUniqueDependency(
93
- scriptDependencyKeys,
94
- depKey,
95
- dependencies,
96
- AssetFactory.createFileScript({
97
- filepath: resolvedPath,
98
- position: "head",
99
- attributes: createModuleScriptAttributes(attributes)
100
- })
101
- );
102
- }
103
78
  }
104
- export {
105
- collectDeclaredAssetEntries
106
- };