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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/README.md +1 -0
  2. package/package.json +82 -3
  3. package/src/adapters/abstract/application-adapter.d.ts +0 -8
  4. package/src/adapters/abstract/application-adapter.js +252 -261
  5. package/src/adapters/abstract/router-adapter.js +12 -4
  6. package/src/adapters/abstract/segment-path-matcher.js +132 -134
  7. package/src/adapters/abstract/server-adapter.js +22 -14
  8. package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
  9. package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
  10. package/src/adapters/bun/client-bridge.js +51 -50
  11. package/src/adapters/bun/create-app.js +171 -161
  12. package/src/adapters/bun/hmr-manager.js +62 -57
  13. package/src/adapters/bun/index.js +2 -31
  14. package/src/adapters/bun/runtime-host.js +61 -54
  15. package/src/adapters/bun/server-adapter.d.ts +0 -1
  16. package/src/adapters/bun/server-adapter.js +561 -561
  17. package/src/adapters/bun/static-preview-host.js +43 -46
  18. package/src/adapters/create-app.js +11 -14
  19. package/src/adapters/index.js +2 -30
  20. package/src/adapters/node/create-app.js +123 -129
  21. package/src/adapters/node/http-request-bridge.js +147 -106
  22. package/src/adapters/node/node-client-bridge.js +62 -64
  23. package/src/adapters/node/node-hmr-manager.js +58 -48
  24. package/src/adapters/node/runtime-host.js +96 -89
  25. package/src/adapters/node/server-adapter-dependencies.js +18 -21
  26. package/src/adapters/node/server-adapter.d.ts +0 -1
  27. package/src/adapters/node/server-adapter.js +347 -326
  28. package/src/adapters/node/static-content-server.js +172 -191
  29. package/src/adapters/node/static-preview-host.js +87 -78
  30. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  31. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  32. package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
  33. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
  34. package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
  35. package/src/adapters/shared/http/api-request-pipeline.js +122 -119
  36. package/src/adapters/shared/http/api-response.js +77 -77
  37. package/src/adapters/shared/http/create-body-response.js +22 -19
  38. package/src/adapters/shared/http/define-api-handler.js +41 -55
  39. package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
  40. package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
  41. package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
  42. package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
  43. package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
  44. package/src/adapters/shared/http/run-middleware-chain.js +15 -15
  45. package/src/adapters/shared/runtime/application-adapter.js +72 -87
  46. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
  47. package/src/adapters/shared/runtime/port-manager.js +207 -177
  48. package/src/adapters/shared/runtime/render-context.js +94 -79
  49. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
  50. package/src/adapters/shared/runtime/runtime-host.js +1 -0
  51. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
  52. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
  53. package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
  54. package/src/adapters/shared/runtime/server-adapter.js +233 -217
  55. package/src/adapters/shared/runtime/server-route-handler.js +74 -70
  56. package/src/adapters/shared/runtime/server-static-builder.js +165 -184
  57. package/src/adapters/shared/runtime/static-preview-host.js +1 -0
  58. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
  59. package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
  60. package/src/build/README.md +52 -1
  61. package/src/build/app-build-manifest-runtime.js +129 -108
  62. package/src/build/browser/browser-runtime-manifest.js +47 -50
  63. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
  64. package/src/build/browser/browser-runtime-plugin.js +206 -160
  65. package/src/build/browser/jsx-ownership-plugins.js +51 -37
  66. package/src/build/browser/lit-static-render-worker-context.js +3 -5
  67. package/src/build/build-adapter.js +276 -139
  68. package/src/build/cache/build-input-fingerprint.js +28 -26
  69. package/src/build/cache/cache-constants.js +4 -6
  70. package/src/build/cache/cache-keys.js +64 -56
  71. package/src/build/cache/pages-unified-graph-build.js +179 -178
  72. package/src/build/cache/production-build-cache.js +47 -54
  73. package/src/build/cache/server-entry-build-cache.js +134 -146
  74. package/src/build/contracts/build-contracts.d.ts +4 -4
  75. package/src/build/contracts/build-contracts.js +1 -0
  76. package/src/build/contracts/build-manifest.js +58 -43
  77. package/src/build/contracts/build-types.js +1 -0
  78. package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
  79. package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
  80. package/src/build/rolldown/rolldown-build-adapter.js +53 -61
  81. package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
  82. package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
  83. package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
  84. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
  85. package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
  86. package/src/build/runtime/build-profile-options.js +36 -36
  87. package/src/build/runtime/build-request-identity.js +70 -45
  88. package/src/build/runtime/build-request-policy.js +80 -42
  89. package/src/build/runtime/build-runtime.js +64 -54
  90. package/src/build/runtime/deduping-build-executor.js +38 -32
  91. package/src/build/runtime/parallel-build-executor.js +58 -50
  92. package/src/build/runtime/serialized-build-executor.js +78 -62
  93. package/src/cache/index.js +6 -6
  94. package/src/cache/module-parse-cache.js +99 -68
  95. package/src/client/navigation-scripts/classification.js +45 -37
  96. package/src/client/navigation-scripts/index.js +3 -23
  97. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
  98. package/src/client/navigation-scripts/registry.js +15 -11
  99. package/src/client/navigation-scripts/rerun-queue.js +81 -64
  100. package/src/client/scroll.js +32 -24
  101. package/src/client/scroll.test.browser.js +27 -33
  102. package/src/client/view-transitions.js +68 -55
  103. package/src/config/config-builder.d.ts +8 -0
  104. package/src/config/config-builder.js +637 -642
  105. package/src/config/constants.js +44 -24
  106. package/src/declarations.d.ts +1 -0
  107. package/src/dev/README.md +24 -0
  108. package/src/dev/client-bridge-registry.js +7 -12
  109. package/src/dev/dev-client-ownership.js +7 -5
  110. package/src/dev/hmr-manager-registry.js +7 -12
  111. package/src/dev/host-runtime.js +25 -30
  112. package/src/dev/runtime-server-started-message.js +2 -5
  113. package/src/dev/sc-server.js +106 -103
  114. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  115. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  116. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  117. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  118. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  119. package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
  120. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  121. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  122. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  123. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  124. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  125. package/src/dev/transform-server/dev-transform-server.js +191 -0
  126. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  127. package/src/dev/transform-server/dev-transform-url.js +58 -0
  128. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
  129. package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
  130. package/src/dev/transform-server/index.d.ts +6 -0
  131. package/src/dev/transform-server/index.js +4 -0
  132. package/src/dev/transform-server/types.d.ts +15 -0
  133. package/src/dev/transform-server/types.js +1 -0
  134. package/src/dev-toolbar/README.md +51 -0
  135. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  136. package/src/dev-toolbar/define-dev-tool.js +9 -0
  137. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  138. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  139. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  140. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  141. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  142. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  143. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  144. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  145. package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
  146. package/src/dev-toolbar/dev-toolbar-package.js +72 -0
  147. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  148. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  149. package/src/diagnostics/request-build-dedupe.js +34 -28
  150. package/src/diagnostics/startup-trace.d.ts +10 -1
  151. package/src/diagnostics/startup-trace.js +269 -241
  152. package/src/eco/README.md +6 -0
  153. package/src/eco/eco-declared-component.js +19 -14
  154. package/src/eco/eco.browser.js +56 -69
  155. package/src/eco/eco.js +156 -96
  156. package/src/eco/eco.types.js +5 -0
  157. package/src/eco/eco.utils.js +1 -10
  158. package/src/eco/global-injector-map.js +55 -41
  159. package/src/eco/lazy-injector-map.js +90 -60
  160. package/src/eco/module-dependencies.js +52 -44
  161. package/src/eco/page-layout-normalization.js +59 -49
  162. package/src/errors/http-error.js +50 -49
  163. package/src/errors/index.js +3 -12
  164. package/src/errors/locals-access-error.js +5 -8
  165. package/src/errors/undeclared-component-dependency-error.js +15 -15
  166. package/src/global/app-logger.js +3 -6
  167. package/src/hmr/README.md +10 -0
  168. package/src/hmr/client/hmr-runtime.js +117 -113
  169. package/src/hmr/client/module-update.d.ts +13 -0
  170. package/src/hmr/client/module-update.js +39 -0
  171. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  172. package/src/hmr/hmr-asset-paths.js +22 -0
  173. package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
  174. package/src/hmr/hmr-entrypoint-output.js +28 -54
  175. package/src/hmr/hmr-file-change-prep.js +13 -16
  176. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  177. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  178. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  179. package/src/hmr/hmr-runtime-paths.js +13 -0
  180. package/src/hmr/hmr-strategy.d.ts +5 -11
  181. package/src/hmr/hmr-strategy.js +113 -61
  182. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  183. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
  184. package/src/hmr/strategies/js-hmr-strategy.js +104 -217
  185. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
  186. package/src/index.browser.js +1 -4
  187. package/src/index.d.ts +1 -0
  188. package/src/index.js +6 -47
  189. package/src/integrations/ghtml/ghtml-renderer.js +12 -7
  190. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  191. package/src/integrations/ghtml/ghtml.plugin.js +9 -12
  192. package/src/islands/README.md +25 -0
  193. package/src/islands/island-host.d.ts +37 -0
  194. package/src/islands/island-host.js +55 -0
  195. package/src/plugins/alias-resolver-cache.js +114 -97
  196. package/src/plugins/alias-resolver-plugin.js +33 -47
  197. package/src/plugins/define-integration.js +18 -17
  198. package/src/plugins/eco-component-meta-plugin.js +387 -145
  199. package/src/plugins/foreign-jsx-override-plugin.js +49 -35
  200. package/src/plugins/integration-plugin.js +212 -203
  201. package/src/plugins/jsx-import-source.utils.js +16 -21
  202. package/src/plugins/processor.js +159 -149
  203. package/src/plugins/runtime-capability.js +1 -0
  204. package/src/plugins/source-transform.js +109 -79
  205. package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
  206. package/src/plugins/tsconfig-import-resolver.js +218 -142
  207. package/src/route-renderer/README.md +12 -1
  208. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
  209. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
  210. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
  211. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
  212. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
  213. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
  214. package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
  215. package/src/route-renderer/orchestration/integration-renderer.js +731 -750
  216. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
  217. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
  218. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
  219. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
  220. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
  221. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
  222. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
  223. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
  224. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
  225. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
  226. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
  227. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
  228. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
  229. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
  230. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
  231. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
  232. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
  233. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
  234. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
  235. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
  236. package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
  237. package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
  238. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  239. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  240. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
  241. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  242. package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
  243. package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
  244. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  245. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  246. package/src/route-renderer/page-loading/page-module-loader.js +130 -124
  247. package/src/route-renderer/route-renderer.js +74 -76
  248. package/src/router/client/link-intent.js +55 -39
  249. package/src/router/client/link-intent.test.browser.js +49 -49
  250. package/src/router/client/link-navigation-policy.js +114 -93
  251. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  252. package/src/router/client/navigation-coordinator.js +235 -211
  253. package/src/router/server/route-registry.js +237 -242
  254. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  255. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  256. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  257. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  258. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  259. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  260. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  261. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  262. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  263. package/src/services/assets/asset-processing-service/index.js +8 -8
  264. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  265. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  266. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  267. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  268. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  269. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  270. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  271. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  272. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  273. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  274. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  275. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  276. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  277. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  278. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  279. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  280. package/src/services/assets/browser-bundle.service.js +52 -47
  281. package/src/services/cache/cache.types.js +5 -0
  282. package/src/services/cache/index.js +6 -7
  283. package/src/services/cache/memory-cache-store.js +101 -89
  284. package/src/services/cache/page-cache-service.js +156 -145
  285. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  286. package/src/services/html/html-rewriter-provider.service.js +61 -61
  287. package/src/services/html/html-transformer.service.js +249 -266
  288. package/src/services/invalidation/development-invalidation.service.js +252 -241
  289. package/src/services/module-loading/app-module-loader.service.js +1 -0
  290. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  291. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  292. package/src/services/module-loading/module-loading-types.js +1 -0
  293. package/src/services/module-loading/page-module-import.service.js +235 -243
  294. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  295. package/src/services/module-loading/route-module-build-cache.js +3 -38
  296. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  297. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  298. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  299. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  300. package/src/services/module-loading/source-module-support.js +15 -7
  301. package/src/services/runtime-state/dev-graph.service.js +165 -157
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  303. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  304. package/src/services/validation/schema-validation-service.js +157 -95
  305. package/src/services/validation/standard-schema.types.js +1 -0
  306. package/src/services/validation/validate-standard-schema.js +13 -13
  307. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  308. package/src/static-site-generator/sitemap-routes.js +33 -28
  309. package/src/static-site-generator/sitemap.js +38 -29
  310. package/src/static-site-generator/static-build-invalidation.js +34 -56
  311. package/src/static-site-generator/static-export-context.js +1 -0
  312. package/src/static-site-generator/static-site-generator.js +517 -553
  313. package/src/types/internal-types.d.ts +19 -3
  314. package/src/types/internal-types.js +1 -0
  315. package/src/types/public-types.d.ts +16 -46
  316. package/src/types/public-types.js +1 -0
  317. package/src/utils/deep-merge.js +39 -26
  318. package/src/utils/ecopages-route-info.js +27 -23
  319. package/src/utils/hash.js +3 -6
  320. package/src/utils/html-escaping.js +21 -8
  321. package/src/utils/html.js +1 -4
  322. package/src/utils/invariant.js +11 -10
  323. package/src/utils/locals-utils.js +32 -22
  324. package/src/utils/parse-cli-args.js +73 -65
  325. package/src/utils/path-pattern.js +38 -23
  326. package/src/utils/path-utils.module.js +8 -11
  327. package/src/utils/resolve-entry-file.js +70 -38
  328. package/src/utils/resolve-work-dir.js +23 -27
  329. package/src/utils/runtime.js +24 -33
  330. package/src/utils/server-utils.module.js +60 -52
  331. package/src/utils/static-file-extensions.js +52 -46
  332. package/src/watchers/project-watcher-ignore.js +16 -15
  333. package/src/watchers/project-watcher.js +385 -366
  334. package/src/watchers/project-watcher.test-helpers.js +45 -50
  335. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  336. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  337. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  338. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,214 +1,223 @@
1
- import {
2
- createBrowserRuntimeManifest
3
- } from "../build/browser/browser-runtime-manifest.js";
4
- import { AssetProcessingService } from "../services/assets/asset-processing-service/asset-processing.service.js";
5
- import { deepMerge } from "../utils/deep-merge.js";
6
- import { invariant } from "../utils/invariant.js";
7
- const INTEGRATION_PLUGIN_ERRORS = {
8
- NOT_INITIALIZED_WITH_APP_CONFIG: "Plugin not initialized with app config",
9
- NOT_INITIALIZED_WITH_ASSET_SERVICE: "Plugin not initialized with asset dependency service"
1
+ import { createBrowserRuntimeManifest, } from '../build/browser/browser-runtime-manifest.js';
2
+ import { AssetProcessingService } from '../services/assets/asset-processing-service/asset-processing.service.js';
3
+ import { deepMerge } from '../utils/deep-merge.js';
4
+ import { invariant } from '../utils/invariant.js';
5
+ export const INTEGRATION_PLUGIN_ERRORS = {
6
+ NOT_INITIALIZED_WITH_APP_CONFIG: 'Plugin not initialized with app config',
7
+ NOT_INITIALIZED_WITH_ASSET_SERVICE: 'Plugin not initialized with asset dependency service',
10
8
  };
11
- function mergeIntegrationOptions(defaults, overrides) {
12
- return deepMerge(defaults, overrides);
9
+ export function mergeIntegrationOptions(defaults, overrides) {
10
+ return deepMerge(defaults, overrides);
13
11
  }
14
- function assertIntegrationInvariant(condition, message) {
15
- invariant(condition, message);
12
+ export function assertIntegrationInvariant(condition, message) {
13
+ invariant(condition, message);
16
14
  }
17
- class IntegrationPlugin {
18
- name;
19
- extensions;
20
- runtimeCapability;
21
- jsxImportSource;
22
- integrationDependencies;
23
- resolvedIntegrationDependencies = [];
24
- options;
25
- appConfig;
26
- assetProcessingService;
27
- hmrManager;
28
- /**
29
- * Returns build plugins shared by server-oriented and browser-oriented builds.
30
- *
31
- * @remarks
32
- * Collected into {@link AppBuildManifest.runtimePlugins} during config finalization.
33
- * MDX loaders, virtual-module resolvers, and other transforms that must run during
34
- * route-module transpile belong here—not in {@link browserBuildPlugins}.
35
- */
36
- get plugins() {
37
- return [];
38
- }
39
- /**
40
- * Returns build plugins that should only apply to browser-oriented bundles.
41
- *
42
- * @remarks
43
- * Browser-only transforms such as runtime import aliasing belong here so they
44
- * do not affect server bundles or static-page module generation.
45
- */
46
- get browserBuildPlugins() {
47
- return [];
48
- }
49
- /**
50
- * Returns shared browser runtime asset declarations owned by this integration.
51
- *
52
- * @remarks
53
- * Core seals these declarations into the app build manifest so app-owned browser
54
- * bundle paths can rewrite manifest-owned imports even when a specific build
55
- * request does not install an integration-local runtime rewrite plugin.
56
- */
57
- get browserRuntimeManifest() {
58
- return createBrowserRuntimeManifest();
59
- }
60
- /**
61
- * Creates the integration with static declaration-only configuration.
62
- *
63
- * @remarks
64
- * Constructors are expected to stay side-effect free. Build-manifest
65
- * contributions belong in `prepareBuildContributions()` and runtime-only setup
66
- * belongs in `setup()`.
67
- */
68
- constructor(config) {
69
- this.name = config.name;
70
- this.extensions = config.extensions;
71
- this.integrationDependencies = config.integrationDependencies || [];
72
- this.runtimeCapability = config.runtimeCapability;
73
- this.jsxImportSource = config.jsxImportSource;
74
- }
75
- /**
76
- * Attaches the finalized app config to the integration.
77
- *
78
- * Core calls this during config finalization before runtime setup so the
79
- * integration can resolve asset paths and other app-owned services later.
80
- */
81
- setConfig(appConfig) {
82
- this.appConfig = appConfig;
83
- this.initializeAssetDefinitionService();
84
- }
85
- /**
86
- * Records the runtime origin used for page-module loading and renderer setup.
87
- */
88
- setRuntimeOrigin(runtimeOrigin) {
89
- this.runtimeOrigin = runtimeOrigin;
90
- }
91
- /**
92
- * Attaches the shared HMR manager and registers integration-owned development hooks.
93
- *
94
- * @remarks
95
- * The default implementation registers the optional integration HMR strategy.
96
- * Integrations should override this only when they need to extend that shared
97
- * behavior rather than replace it.
98
- */
99
- setHmrManager(hmrManager) {
100
- this.hmrManager = hmrManager;
101
- const strategy = this.getHmrStrategy?.();
102
- if (strategy) {
103
- hmrManager.registerStrategy(strategy);
15
+ /**
16
+ * Base class for framework integrations.
17
+ *
18
+ * @remarks
19
+ * An integration owns three main concerns:
20
+ * - which file extensions it claims
21
+ * - which renderer class turns those files into HTML
22
+ * - which build-time or runtime contributions must be registered for that framework
23
+ *
24
+ * Core owns lifecycle ordering. Integrations declare contributions through the
25
+ * hooks on this class, while `ConfigBuilder.build()` and app startup decide when
26
+ * those hooks run. Build plugins map to {@link AppBuildManifest} buckets:
27
+ * `plugins` `runtimePlugins`, `browserBuildPlugins` `browserBundlePlugins`,
28
+ * `browserRuntimeManifest` → client import rewrite map. For page-browser and
29
+ * document shaping, integrations should prefer the contribution contracts
30
+ * re-exported from this module:
31
+ * `PageBrowserGraphContribution` / `PageBrowserGraphContributionContext` and
32
+ * `HtmlDocumentContribution` / `HtmlDocumentContributionContext`.
33
+ */
34
+ export class IntegrationPlugin {
35
+ name;
36
+ extensions;
37
+ runtimeCapability;
38
+ jsxImportSource;
39
+ integrationDependencies;
40
+ resolvedIntegrationDependencies = [];
41
+ options;
42
+ appConfig;
43
+ assetProcessingService;
44
+ hmrManager;
45
+ /**
46
+ * Returns build plugins shared by server-oriented and browser-oriented builds.
47
+ *
48
+ * @remarks
49
+ * Collected into {@link AppBuildManifest.runtimePlugins} during config finalization.
50
+ * MDX loaders, virtual-module resolvers, and other transforms that must run during
51
+ * route-module transpile belong here—not in {@link browserBuildPlugins}.
52
+ */
53
+ get plugins() {
54
+ return [];
104
55
  }
105
- if (this.assetProcessingService) {
106
- this.assetProcessingService.setHmrManager(hmrManager);
56
+ /**
57
+ * Returns build plugins that should only apply to browser-oriented bundles.
58
+ *
59
+ * @remarks
60
+ * Browser-only transforms such as runtime import aliasing belong here so they
61
+ * do not affect server bundles or static-page module generation.
62
+ */
63
+ get browserBuildPlugins() {
64
+ return [];
107
65
  }
108
- }
109
- /**
110
- * Creates the asset-processing service used for global integration dependencies.
111
- */
112
- initializeAssetDefinitionService() {
113
- if (!this.appConfig) throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
114
- this.assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
115
- if (this.hmrManager) {
116
- this.assetProcessingService.setHmrManager(this.hmrManager);
66
+ /**
67
+ * Returns shared browser runtime asset declarations owned by this integration.
68
+ *
69
+ * @remarks
70
+ * Core seals these declarations into the app build manifest so app-owned browser
71
+ * bundle paths can rewrite manifest-owned imports even when a specific build
72
+ * request does not install an integration-local runtime rewrite plugin.
73
+ */
74
+ get browserRuntimeManifest() {
75
+ return createBrowserRuntimeManifest();
117
76
  }
118
- }
119
- /**
120
- * Returns processed global assets resolved during `setup()`.
121
- */
122
- getResolvedIntegrationDependencies() {
123
- return this.resolvedIntegrationDependencies;
124
- }
125
- /**
126
- * Creates the shared renderer options owned by core lifecycle setup.
127
- */
128
- createRendererOptions(options) {
129
- if (!this.appConfig) {
130
- throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
77
+ /**
78
+ * Creates the integration with static declaration-only configuration.
79
+ *
80
+ * @remarks
81
+ * Constructors are expected to stay side-effect free. Build-manifest
82
+ * contributions belong in `prepareBuildContributions()` and runtime-only setup
83
+ * belongs in `setup()`.
84
+ */
85
+ constructor(config) {
86
+ this.name = config.name;
87
+ this.extensions = config.extensions;
88
+ this.integrationDependencies = config.integrationDependencies || [];
89
+ this.runtimeCapability = config.runtimeCapability;
90
+ this.jsxImportSource = config.jsxImportSource;
131
91
  }
132
- const assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
133
- if (this.hmrManager) {
134
- assetProcessingService.setHmrManager(this.hmrManager);
92
+ /**
93
+ * Attaches the finalized app config to the integration.
94
+ *
95
+ * Core calls this during config finalization before runtime setup so the
96
+ * integration can resolve asset paths and other app-owned services later.
97
+ */
98
+ setConfig(appConfig) {
99
+ this.appConfig = appConfig;
100
+ this.initializeAssetDefinitionService();
135
101
  }
136
- return {
137
- appConfig: this.appConfig,
138
- assetProcessingService,
139
- resolvedIntegrationDependencies: this.resolvedIntegrationDependencies,
140
- rendererModules: options?.rendererModules,
141
- runtimeOrigin: this.runtimeOrigin
142
- };
143
- }
144
- /**
145
- * Attaches runtime-only services after a renderer instance has been created.
146
- */
147
- attachRendererRuntimeServices(renderer) {
148
- if (typeof renderer.name !== "string" || renderer.name.length === 0) {
149
- renderer.name = this.name;
102
+ /**
103
+ * Records the runtime origin used for page-module loading and renderer setup.
104
+ */
105
+ setRuntimeOrigin(runtimeOrigin) {
106
+ this.runtimeOrigin = runtimeOrigin;
150
107
  }
151
- if (this.hmrManager) {
152
- renderer.setHmrManager(this.hmrManager);
108
+ /**
109
+ * Attaches the shared HMR manager and registers integration-owned development hooks.
110
+ *
111
+ * @remarks
112
+ * The default implementation registers the optional integration HMR strategy.
113
+ * Integrations should override this only when they need to extend that shared
114
+ * behavior rather than replace it.
115
+ */
116
+ setHmrManager(hmrManager) {
117
+ this.hmrManager = hmrManager;
118
+ const strategy = this.getHmrStrategy?.();
119
+ if (strategy) {
120
+ hmrManager.registerStrategy(strategy);
121
+ }
122
+ if (this.assetProcessingService) {
123
+ this.assetProcessingService.setHmrManager(hmrManager);
124
+ }
153
125
  }
154
- return renderer;
155
- }
156
- /**
157
- * Instantiates the integration renderer with app-owned services.
158
- *
159
- * @remarks
160
- * Renderers are cheap runtime objects. They receive the finalized app config,
161
- * a fresh asset-processing service, integration-global processed assets, and
162
- * any renderer module context supplied by the active runtime.
163
- */
164
- initializeRenderer(options) {
165
- const renderer = new this.renderer(this.createRendererOptions(options));
166
- renderer.name ||= this.name;
167
- return this.attachRendererRuntimeServices(renderer);
168
- }
169
- /**
170
- * Prepares build-facing contributions before the app build manifest is sealed.
171
- *
172
- * @remarks
173
- * Integrations can override this when runtime or build plugin declarations must
174
- * be materialized ahead of runtime startup. Runtime-only side effects stay in
175
- * `setup()`.
176
- */
177
- async prepareBuildContributions() {
178
- }
179
- /**
180
- * Reports whether this integration's build inputs changed since the last
181
- * incremental static build.
182
- */
183
- didChange() {
184
- return false;
185
- }
186
- /**
187
- * Performs runtime-only integration setup after config build has already
188
- * sealed manifest contributions.
189
- */
190
- async setup() {
191
- if (this.integrationDependencies.length === 0) return;
192
- if (!this.assetProcessingService) throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_ASSET_SERVICE);
193
- this.resolvedIntegrationDependencies = await this.assetProcessingService.processDependencies(
194
- this.integrationDependencies,
195
- this.name
196
- );
197
- }
198
- /**
199
- * Releases runtime resources owned by the integration.
200
- *
201
- * @remarks
202
- * Most integrations do not need custom teardown. Override this only for
203
- * explicit cleanup such as watchers, compiler handles, or runtime registries
204
- * that outlive individual requests.
205
- */
206
- async teardown() {
207
- }
126
+ /**
127
+ * Creates the asset-processing service used for global integration dependencies.
128
+ */
129
+ initializeAssetDefinitionService() {
130
+ if (!this.appConfig)
131
+ throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
132
+ this.assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
133
+ if (this.hmrManager) {
134
+ this.assetProcessingService.setHmrManager(this.hmrManager);
135
+ }
136
+ }
137
+ /**
138
+ * Returns processed global assets resolved during `setup()`.
139
+ */
140
+ getResolvedIntegrationDependencies() {
141
+ return this.resolvedIntegrationDependencies;
142
+ }
143
+ /**
144
+ * Creates the shared renderer options owned by core lifecycle setup.
145
+ */
146
+ createRendererOptions(options) {
147
+ if (!this.appConfig) {
148
+ throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
149
+ }
150
+ const assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
151
+ if (this.hmrManager) {
152
+ assetProcessingService.setHmrManager(this.hmrManager);
153
+ }
154
+ return {
155
+ appConfig: this.appConfig,
156
+ assetProcessingService,
157
+ resolvedIntegrationDependencies: this.resolvedIntegrationDependencies,
158
+ rendererModules: options?.rendererModules,
159
+ runtimeOrigin: this.runtimeOrigin,
160
+ };
161
+ }
162
+ /**
163
+ * Attaches runtime-only services after a renderer instance has been created.
164
+ */
165
+ attachRendererRuntimeServices(renderer) {
166
+ if (typeof renderer.name !== 'string' || renderer.name.length === 0) {
167
+ renderer.name = this.name;
168
+ }
169
+ if (this.hmrManager) {
170
+ renderer.setHmrManager(this.hmrManager);
171
+ }
172
+ return renderer;
173
+ }
174
+ /**
175
+ * Instantiates the integration renderer with app-owned services.
176
+ *
177
+ * @remarks
178
+ * Renderers are cheap runtime objects. They receive the finalized app config,
179
+ * a fresh asset-processing service, integration-global processed assets, and
180
+ * any renderer module context supplied by the active runtime.
181
+ */
182
+ initializeRenderer(options) {
183
+ const renderer = new this.renderer(this.createRendererOptions(options));
184
+ renderer.name ||= this.name;
185
+ return this.attachRendererRuntimeServices(renderer);
186
+ }
187
+ /**
188
+ * Prepares build-facing contributions before the app build manifest is sealed.
189
+ *
190
+ * @remarks
191
+ * Integrations can override this when runtime or build plugin declarations must
192
+ * be materialized ahead of runtime startup. Runtime-only side effects stay in
193
+ * `setup()`.
194
+ */
195
+ async prepareBuildContributions() { }
196
+ /**
197
+ * Reports whether this integration's build inputs changed since the last
198
+ * incremental static build.
199
+ */
200
+ didChange() {
201
+ return false;
202
+ }
203
+ /**
204
+ * Performs runtime-only integration setup after config build has already
205
+ * sealed manifest contributions.
206
+ */
207
+ async setup() {
208
+ if (this.integrationDependencies.length === 0)
209
+ return;
210
+ if (!this.assetProcessingService)
211
+ throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_ASSET_SERVICE);
212
+ this.resolvedIntegrationDependencies = await this.assetProcessingService.processDependencies(this.integrationDependencies, this.name);
213
+ }
214
+ /**
215
+ * Releases runtime resources owned by the integration.
216
+ *
217
+ * @remarks
218
+ * Most integrations do not need custom teardown. Override this only for
219
+ * explicit cleanup such as watchers, compiler handles, or runtime registries
220
+ * that outlive individual requests.
221
+ */
222
+ async teardown() { }
208
223
  }
209
- export {
210
- INTEGRATION_PLUGIN_ERRORS,
211
- IntegrationPlugin,
212
- assertIntegrationInvariant,
213
- mergeIntegrationOptions
214
- };
@@ -1,26 +1,21 @@
1
- function createJsxImportSourcePragma(jsxImportSource) {
2
- return `/** @jsxImportSource ${jsxImportSource} */
3
- `;
1
+ export function createJsxImportSourcePragma(jsxImportSource) {
2
+ return `/** @jsxImportSource ${jsxImportSource} */\n`;
4
3
  }
5
- function prependJsxImportSourceIfMissing(code, jsxImportSource) {
6
- if (!jsxImportSource || code.includes("@jsxImportSource")) {
7
- return code;
8
- }
9
- return createJsxImportSourcePragma(jsxImportSource) + code;
4
+ export function prependJsxImportSourceIfMissing(code, jsxImportSource) {
5
+ if (!jsxImportSource || code.includes('@jsxImportSource')) {
6
+ return code;
7
+ }
8
+ return createJsxImportSourcePragma(jsxImportSource) + code;
10
9
  }
11
- function isJsxSourceExtension(extension) {
12
- return extension.endsWith(".tsx") || extension.endsWith(".jsx");
10
+ export function isJsxSourceExtension(extension) {
11
+ return extension.endsWith('.tsx') || extension.endsWith('.jsx');
13
12
  }
14
- function filterJsxSourceExtensions(extensions) {
15
- return extensions.filter(isJsxSourceExtension);
13
+ export function filterJsxSourceExtensions(extensions) {
14
+ return extensions.filter(isJsxSourceExtension);
16
15
  }
17
- function collectJsxExtensions(integrations, options) {
18
- return integrations.filter((integration) => integration.jsxImportSource).filter((integration) => integration.name !== options?.excludeIntegrationName).flatMap((integration) => filterJsxSourceExtensions(integration.extensions));
16
+ export function collectJsxExtensions(integrations, options) {
17
+ return integrations
18
+ .filter((integration) => integration.jsxImportSource)
19
+ .filter((integration) => integration.name !== options?.excludeIntegrationName)
20
+ .flatMap((integration) => filterJsxSourceExtensions(integration.extensions));
19
21
  }
20
- export {
21
- collectJsxExtensions,
22
- createJsxImportSourcePragma,
23
- filterJsxSourceExtensions,
24
- isJsxSourceExtension,
25
- prependJsxImportSourceIfMissing
26
- };