@ecopages/core 0.2.0-alpha.9 → 0.2.1-beta.0

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 (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,11 +1,50 @@
1
- import type { BuildOptions, BuildResult, BuildTranspileProfile } from '../../build/build-adapter.js';
2
- import type { EcoPagesAppConfig } from '../../internal-types.js';
3
- export type BrowserBundleOptions = Omit<BuildOptions, 'target' | 'format' | 'sourcemap'> & {
1
+ import type { BuildResult, BuildTranspileProfile } from '../../build/build-adapter.js';
2
+ import type { EcoBuildPlugin } from '../../build/build-types.js';
3
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
4
+ export type BrowserBundleOptions = {
5
+ entrypoints: string[] | Record<string, string>;
6
+ outdir?: string;
7
+ outbase?: string;
8
+ naming?: string;
9
+ conditions?: string[];
10
+ define?: Record<string, string>;
11
+ minify?: boolean;
12
+ treeshaking?: boolean;
13
+ splitting?: boolean;
14
+ root?: string;
15
+ bundle?: boolean;
16
+ externalPackages?: boolean;
17
+ external?: string[];
18
+ plugins?: EcoBuildPlugin[];
19
+ [key: string]: unknown;
4
20
  profile: BuildTranspileProfile;
21
+ excludeAppBuildPlugins?: string[];
22
+ };
23
+ type BrowserBundleGroupedOptions = {
24
+ outdir?: string;
25
+ outbase?: string;
26
+ naming?: string;
27
+ conditions?: string[];
28
+ define?: Record<string, string>;
29
+ minify?: boolean;
30
+ treeshaking?: boolean;
31
+ splitting?: boolean;
32
+ root?: string;
33
+ bundle?: boolean;
34
+ externalPackages?: boolean;
35
+ external?: string[];
36
+ plugins?: EcoBuildPlugin[];
37
+ [key: string]: unknown;
38
+ profile: BuildTranspileProfile;
39
+ excludeAppBuildPlugins?: string[];
5
40
  };
6
41
  export interface BrowserBundleExecutor {
7
42
  bundle(options: BrowserBundleOptions): Promise<BuildResult>;
8
43
  }
44
+ export type BrowserBundleGroupedEntry = {
45
+ entrypoint: string;
46
+ entryName: string;
47
+ };
9
48
  /**
10
49
  * App-owned boundary for browser-oriented bundle work.
11
50
  *
@@ -29,4 +68,6 @@ export declare class BrowserBundleService implements BrowserBundleExecutor {
29
68
  * site.
30
69
  */
31
70
  bundle(options: BrowserBundleOptions): Promise<BuildResult>;
71
+ bundleGroupedEntries(entries: BrowserBundleGroupedEntry[], options: BrowserBundleGroupedOptions): Promise<BuildResult>;
32
72
  }
73
+ export {};
@@ -1,4 +1,4 @@
1
- import { getAppBrowserBuildPlugins, getAppBuildExecutor, getTranspileOptions } from "../../build/build-adapter.js";
1
+ import { getAppBrowserBuildPlugins, getAppBuildExecutor, getAppTranspileOptions } from "../../build/build-adapter.js";
2
2
  import { mergeEcoBuildPlugins } from "../../build/build-manifest.js";
3
3
  class BrowserBundleService {
4
4
  appConfig;
@@ -17,16 +17,24 @@ class BrowserBundleService {
17
17
  * site.
18
18
  */
19
19
  async bundle(options) {
20
- const { profile, ...rawBuildOptions } = options;
21
- const buildOptions = rawBuildOptions;
22
- const plugins = buildOptions.plugins;
20
+ const { profile, excludeAppBuildPlugins, plugins, ...rawBuildOptions } = options;
21
+ const appBrowserPlugins = getAppBrowserBuildPlugins(this.appConfig);
22
+ const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0 ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name)) : appBrowserPlugins;
23
23
  const request = {
24
- ...buildOptions,
25
- ...getTranspileOptions(profile),
26
- plugins: mergeEcoBuildPlugins(plugins, getAppBrowserBuildPlugins(this.appConfig))
24
+ ...rawBuildOptions,
25
+ entrypoints: options.entrypoints,
26
+ ...getAppTranspileOptions(this.appConfig, profile),
27
+ plugins: mergeEcoBuildPlugins(plugins, filteredAppBrowserPlugins)
27
28
  };
28
29
  return await getAppBuildExecutor(this.appConfig).build(request);
29
30
  }
31
+ async bundleGroupedEntries(entries, options) {
32
+ const request = {
33
+ ...options,
34
+ entrypoints: entries.map((entry) => entry.entrypoint)
35
+ };
36
+ return this.bundle(request);
37
+ }
30
38
  }
31
39
  export {
32
40
  BrowserBundleService
@@ -1,4 +1,7 @@
1
1
  export type HtmlRewriterElement = {
2
+ prepend(content: string, options?: {
3
+ html?: boolean;
4
+ }): void;
2
5
  append(content: string, options?: {
3
6
  html?: boolean;
4
7
  }): void;
@@ -49,7 +49,10 @@ async function loadWorkerToolsHtmlRewriter() {
49
49
  return module.HTMLRewriter;
50
50
  } catch (primaryError) {
51
51
  try {
52
- const runtimeLocalModule = await import(new URL("../node_modules/@worker-tools/html-rewriter/base64.js", import.meta.url).href);
52
+ const runtimeLocalModule = await import(
53
+ /* @vite-ignore */
54
+ new URL("../node_modules/@worker-tools/html-rewriter/base64.js", import.meta.url).href
55
+ );
53
56
  return runtimeLocalModule.HTMLRewriter;
54
57
  } catch {
55
58
  const message = primaryError instanceof Error ? primaryError.message : String(primaryError);
@@ -1,11 +1,18 @@
1
- import type { ProcessedAsset } from '../assets/asset-processing-service/assets.types';
2
- import { type HtmlRewriterMode, type HtmlRewriterProvider } from './html-rewriter-provider.service';
1
+ import type { ProcessedAsset } from '../assets/asset-processing-service/assets.types.js';
2
+ import type { PagePackageResult } from '../../types/public-types.js';
3
+ import { type HtmlRewriterMode, type HtmlRewriterProvider } from './html-rewriter-provider.service.js';
4
+ export type HtmlDocumentContributionPlacement = 'head-prepend' | 'head-append' | 'body-prepend' | 'body-append';
5
+ export type HtmlDocumentContribution = {
6
+ placement: HtmlDocumentContributionPlacement;
7
+ html: string;
8
+ };
3
9
  export interface HtmlTransformerServiceOptions {
4
10
  htmlRewriterMode?: HtmlRewriterMode;
5
11
  htmlRewriterProvider?: HtmlRewriterProvider;
6
12
  }
7
13
  export declare class HtmlTransformerService {
8
14
  private processedDependencies;
15
+ private pagePackage?;
9
16
  private htmlRewriterProvider;
10
17
  constructor(options?: HtmlTransformerServiceOptions);
11
18
  /**
@@ -22,19 +29,30 @@ export declare class HtmlTransformerService {
22
29
  private generateStylesheetTag;
23
30
  private appendDependencies;
24
31
  private buildDependencyTags;
32
+ private applyContributions;
25
33
  /**
26
34
  * Injects generated markup immediately before the closing HTML tag when it is
27
35
  * present, or appends/prepends a fallback insertion otherwise.
28
36
  */
29
37
  private injectBeforeClosingTag;
38
+ private injectAfterOpeningTag;
39
+ private groupContributionsByPlacement;
30
40
  /**
31
41
  * Replaces the current processed dependency set used during HTML finalization.
32
42
  */
33
43
  setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
44
+ /**
45
+ * Replaces the current structured page package used during HTML finalization.
46
+ */
47
+ setPagePackage(pagePackage: PagePackageResult): void;
34
48
  /**
35
49
  * Returns the processed dependencies queued for the next transform pass.
36
50
  */
37
51
  getProcessedDependencies(): ProcessedAsset[];
52
+ /**
53
+ * Returns the structured page package queued for the next transform pass.
54
+ */
55
+ getPagePackage(): PagePackageResult | undefined;
38
56
  /**
39
57
  * Applies attributes to the opening `<html>` tag when present.
40
58
  */
@@ -65,11 +83,12 @@ export declare class HtmlTransformerService {
65
83
  * string-based fallback remains in place for runtimes that cannot provide one
66
84
  * of those rewriter implementations.
67
85
  */
68
- transform(res: Response): Promise<Response>;
86
+ transform(res: Response, contributions?: HtmlDocumentContribution[]): Promise<Response>;
69
87
  /**
70
88
  * Splits processed assets into head and body injection groups.
71
89
  */
72
90
  private groupDependenciesByPosition;
91
+ private resolvePagePackageHtmlDependencies;
73
92
  /**
74
93
  * Builds a serialized HTML attribute string from an attribute object.
75
94
  */
@@ -1,8 +1,13 @@
1
1
  import {
2
2
  DefaultHtmlRewriterProvider
3
- } from "./html-rewriter-provider.service";
3
+ } from "./html-rewriter-provider.service.js";
4
+ import {
5
+ buildProcessedAssetDedupeKey,
6
+ dedupeProcessedAssets
7
+ } from "../../route-renderer/orchestration/processed-asset-dedupe.js";
4
8
  class HtmlTransformerService {
5
9
  processedDependencies = [];
10
+ pagePackage;
6
11
  htmlRewriterProvider;
7
12
  constructor(options = {}) {
8
13
  this.htmlRewriterProvider = options.htmlRewriterProvider ?? new DefaultHtmlRewriterProvider();
@@ -42,6 +47,11 @@ class HtmlTransformerService {
42
47
  (dep) => dep.kind === "script" ? this.generateScriptTag(dep) : this.generateStylesheetTag(dep)
43
48
  ).join("");
44
49
  }
50
+ applyContributions(element, contributions, placement) {
51
+ for (const contribution of contributions) {
52
+ element[placement](contribution.html, { html: true });
53
+ }
54
+ }
45
55
  /**
46
56
  * Injects generated markup immediately before the closing HTML tag when it is
47
57
  * present, or appends/prepends a fallback insertion otherwise.
@@ -61,18 +71,52 @@ class HtmlTransformerService {
61
71
  }
62
72
  return `${html}${content}`;
63
73
  }
74
+ injectAfterOpeningTag(html, tag, content) {
75
+ if (!content) {
76
+ return html;
77
+ }
78
+ const openingTag = new RegExp(`<${tag}\\b[^>]*>`, "i");
79
+ const match = html.match(openingTag);
80
+ if (!match || match.index === void 0) {
81
+ return tag === "head" ? `${content}${html}` : html.replace(/<body\b[^>]*>/i, (value) => `${value}${content}`);
82
+ }
83
+ const insertAt = match.index + match[0].length;
84
+ return `${html.slice(0, insertAt)}${content}${html.slice(insertAt)}`;
85
+ }
86
+ groupContributionsByPlacement(contributions) {
87
+ return {
88
+ headPrepend: contributions.filter((item) => item.placement === "head-prepend"),
89
+ headAppend: contributions.filter((item) => item.placement === "head-append"),
90
+ bodyPrepend: contributions.filter((item) => item.placement === "body-prepend"),
91
+ bodyAppend: contributions.filter((item) => item.placement === "body-append")
92
+ };
93
+ }
64
94
  /**
65
95
  * Replaces the current processed dependency set used during HTML finalization.
66
96
  */
67
97
  setProcessedDependencies(processedDependencies) {
98
+ this.pagePackage = void 0;
68
99
  this.processedDependencies = processedDependencies;
69
100
  }
101
+ /**
102
+ * Replaces the current structured page package used during HTML finalization.
103
+ */
104
+ setPagePackage(pagePackage) {
105
+ this.pagePackage = pagePackage;
106
+ this.processedDependencies = this.resolvePagePackageHtmlDependencies(pagePackage);
107
+ }
70
108
  /**
71
109
  * Returns the processed dependencies queued for the next transform pass.
72
110
  */
73
111
  getProcessedDependencies() {
74
112
  return this.processedDependencies;
75
113
  }
114
+ /**
115
+ * Returns the structured page package queued for the next transform pass.
116
+ */
117
+ getPagePackage() {
118
+ return this.pagePackage;
119
+ }
76
120
  /**
77
121
  * Applies attributes to the opening `<html>` tag when present.
78
122
  */
@@ -134,23 +178,7 @@ class HtmlTransformerService {
134
178
  * variants.
135
179
  */
136
180
  dedupeProcessedAssets(assets) {
137
- const unique = /* @__PURE__ */ new Map();
138
- for (const asset of assets) {
139
- const key = [
140
- asset.kind,
141
- asset.position ?? "",
142
- asset.srcUrl ?? "",
143
- asset.filepath ?? "",
144
- asset.content ?? "",
145
- asset.inline ? "inline" : "external",
146
- asset.excludeFromHtml ? "excluded" : "included",
147
- JSON.stringify(asset.attributes ?? {})
148
- ].join("|");
149
- if (!unique.has(key)) {
150
- unique.set(key, asset);
151
- }
152
- }
153
- return [...unique.values()];
181
+ return dedupeProcessedAssets(assets);
154
182
  }
155
183
  /**
156
184
  * Injects the currently processed dependencies into an HTML response.
@@ -160,30 +188,47 @@ class HtmlTransformerService {
160
188
  * string-based fallback remains in place for runtimes that cannot provide one
161
189
  * of those rewriter implementations.
162
190
  */
163
- async transform(res) {
191
+ async transform(res, contributions = []) {
164
192
  const { head, body } = this.groupDependenciesByPosition();
193
+ const { headPrepend, headAppend, bodyPrepend, bodyAppend } = this.groupContributionsByPlacement(contributions);
165
194
  const htmlRewriter = await this.htmlRewriterProvider.createHtmlRewriter();
166
- const html = await res.text();
167
- const headers = new Headers(res.headers);
168
195
  if (htmlRewriter) {
169
196
  htmlRewriter.on("head", {
170
- element: (element) => this.appendDependencies(element, head)
197
+ element: (element) => {
198
+ this.applyContributions(element, headPrepend, "prepend");
199
+ this.appendDependencies(element, head);
200
+ this.applyContributions(element, headAppend, "append");
201
+ }
171
202
  }).on("body", {
172
- element: (element) => this.appendDependencies(element, body)
203
+ element: (element) => {
204
+ this.applyContributions(element, bodyPrepend, "prepend");
205
+ this.appendDependencies(element, body);
206
+ this.applyContributions(element, bodyAppend, "append");
207
+ }
173
208
  });
174
- return htmlRewriter.transform(
175
- new Response(html, {
176
- headers,
177
- status: res.status,
178
- statusText: res.statusText
179
- })
180
- );
181
- }
182
- const withHeadDependencies = this.injectBeforeClosingTag(html, "head", this.buildDependencyTags(head));
183
- const transformedHtml = this.injectBeforeClosingTag(
209
+ return htmlRewriter.transform(res);
210
+ }
211
+ const html = await res.text();
212
+ const headers = new Headers(res.headers);
213
+ const withHeadPrependedContent = this.injectAfterOpeningTag(
214
+ html,
215
+ "head",
216
+ headPrepend.map((item) => item.html).join("")
217
+ );
218
+ const withHeadDependencies = this.injectBeforeClosingTag(
219
+ withHeadPrependedContent,
220
+ "head",
221
+ `${this.buildDependencyTags(head)}${headAppend.map((item) => item.html).join("")}`
222
+ );
223
+ const withBodyPrependedContent = this.injectAfterOpeningTag(
184
224
  withHeadDependencies,
185
225
  "body",
186
- this.buildDependencyTags(body)
226
+ bodyPrepend.map((item) => item.html).join("")
227
+ );
228
+ const transformedHtml = this.injectBeforeClosingTag(
229
+ withBodyPrependedContent,
230
+ "body",
231
+ `${this.buildDependencyTags(body)}${bodyAppend.map((item) => item.html).join("")}`
187
232
  );
188
233
  return new Response(transformedHtml, {
189
234
  headers,
@@ -195,7 +240,8 @@ class HtmlTransformerService {
195
240
  * Splits processed assets into head and body injection groups.
196
241
  */
197
242
  groupDependenciesByPosition() {
198
- return this.processedDependencies.reduce(
243
+ const dependencies = this.pagePackage ? this.resolvePagePackageHtmlDependencies(this.pagePackage) : this.processedDependencies;
244
+ return dependencies.reduce(
199
245
  (acc, dep) => {
200
246
  if (dep.kind === "script") {
201
247
  if (dep.excludeFromHtml) return acc;
@@ -209,6 +255,26 @@ class HtmlTransformerService {
209
255
  { head: [], body: [] }
210
256
  );
211
257
  }
258
+ resolvePagePackageHtmlDependencies(pagePackage) {
259
+ if (!pagePackage.pageBrowserGraph) {
260
+ return pagePackage.htmlAssets;
261
+ }
262
+ const chunkKeys = new Set(
263
+ pagePackage.pageBrowserGraph.chunkAssets.map((asset) => buildProcessedAssetDedupeKey(asset))
264
+ );
265
+ const graphKeys = new Set(
266
+ [...pagePackage.pageBrowserGraph.entryAssets, ...pagePackage.pageBrowserGraph.chunkAssets].map(
267
+ (asset) => buildProcessedAssetDedupeKey(asset)
268
+ )
269
+ );
270
+ const nonGraphHtmlAssets = pagePackage.htmlAssets.filter(
271
+ (asset) => !graphKeys.has(buildProcessedAssetDedupeKey(asset))
272
+ );
273
+ const entryHtmlAssets = pagePackage.pageBrowserGraph.entryAssets.filter(
274
+ (asset) => !chunkKeys.has(buildProcessedAssetDedupeKey(asset))
275
+ );
276
+ return dedupeProcessedAssets([...nonGraphHtmlAssets, ...entryHtmlAssets]);
277
+ }
212
278
  /**
213
279
  * Builds a serialized HTML attribute string from an attribute object.
214
280
  */
@@ -1,4 +1,4 @@
1
- import type { EcoPagesAppConfig } from '../../internal-types.js';
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
2
  export type DevelopmentInvalidationCategory = 'public-asset' | 'additional-watch' | 'include-source' | 'route-source' | 'processor-owned-asset' | 'server-source' | 'other';
3
3
  /**
4
4
  * Framework-owned invalidation plan for one changed file.
@@ -16,6 +16,7 @@ class DevelopmentInvalidationService {
16
16
  */
17
17
  invalidateServerModules(changedFiles) {
18
18
  getAppServerInvalidationState(this.appConfig).invalidateServerModules(changedFiles);
19
+ this.appConfig.runtime?.appModuleLoader?.invalidateDevelopmentGraph();
19
20
  }
20
21
  /**
21
22
  * Resets runtime-owned graph state and invalidates server modules.
@@ -0,0 +1,7 @@
1
+ import type { PageModuleBuildImportOptions } from './page-module-import.service.js';
2
+ export type AppModuleLoaderOwner = 'app' | 'host';
3
+ export interface AppModuleLoader {
4
+ readonly owner: AppModuleLoaderOwner;
5
+ importModule<T = unknown>(options: PageModuleBuildImportOptions): Promise<T>;
6
+ invalidateDevelopmentGraph(): void;
7
+ }
@@ -1,5 +1,13 @@
1
- import type { EcoPagesAppConfig } from '../../internal-types.js';
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import { type AppModuleLoader } from './app-module-loader.service.js';
3
+ import type { SourceModuleLoader } from './module-loading-types.js';
2
4
  import { ServerModuleTranspiler } from './server-module-transpiler.service.js';
5
+ export declare function shouldAppUseHostModuleLoader(appConfig: EcoPagesAppConfig, filePath: string): boolean;
6
+ export declare function getAppHostModuleLoader(appConfig: EcoPagesAppConfig): SourceModuleLoader | undefined;
7
+ export declare function setAppHostModuleLoader(appConfig: EcoPagesAppConfig, hostModuleLoader?: SourceModuleLoader): void;
8
+ export declare function createAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
9
+ export declare function getAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
10
+ export declare function setAppModuleLoader(appConfig: EcoPagesAppConfig, appModuleLoader: AppModuleLoader): void;
3
11
  /**
4
12
  * Creates the shared app-scoped server-module transpiler for one runtime
5
13
  * instance.
@@ -1,15 +1,105 @@
1
- import { getAppBuildExecutor } from "../../build/build-adapter.js";
2
- import { createAppNodeBootstrapPlugin } from "../../adapters/node/bootstrap-dependency-resolver.js";
1
+ import { getAppBuildExecutor, getAppServerBuildPlugins } from "../../build/build-adapter.js";
2
+ import { createForeignJsxOverridePlugin } from "../../plugins/foreign-jsx-override-plugin.js";
3
+ import path from "node:path";
3
4
  import { DevelopmentInvalidationService } from "../invalidation/development-invalidation.service.js";
5
+ import {} from "./app-module-loader.service.js";
6
+ import { PageModuleImportService } from "./page-module-import.service.js";
7
+ import { supportsSourceModuleLoading } from "./source-module-support.js";
4
8
  import { ServerModuleTranspiler } from "./server-module-transpiler.service.js";
9
+ function shouldAppUseHostModuleLoader(appConfig, filePath) {
10
+ if (appConfig.runtime?.hostModuleLoader) {
11
+ return supportsSourceModuleLoading(filePath);
12
+ }
13
+ const normalizedFilePath = path.normalize(filePath);
14
+ const frameworkOwnedDirectories = [
15
+ appConfig.absolutePaths.pagesDir,
16
+ appConfig.absolutePaths.includesDir,
17
+ appConfig.absolutePaths.layoutsDir,
18
+ appConfig.absolutePaths.componentsDir
19
+ ].map((directoryPath) => path.normalize(directoryPath));
20
+ const isFrameworkOwnedModule = frameworkOwnedDirectories.some((directoryPath) => {
21
+ return normalizedFilePath === directoryPath || normalizedFilePath.startsWith(`${directoryPath}${path.sep}`);
22
+ });
23
+ const isConfiguredTemplateModule = appConfig.templatesExt.some(
24
+ (extension) => normalizedFilePath.endsWith(extension)
25
+ );
26
+ return !(isFrameworkOwnedModule && isConfiguredTemplateModule);
27
+ }
28
+ function getAppHostModuleLoader(appConfig) {
29
+ return appConfig.runtime?.hostModuleLoader;
30
+ }
31
+ function getAppModuleLoaderOwner(appConfig) {
32
+ return getAppHostModuleLoader(appConfig) ? "host" : "app";
33
+ }
34
+ function setAppHostModuleLoader(appConfig, hostModuleLoader) {
35
+ appConfig.runtime = {
36
+ ...appConfig.runtime ?? {},
37
+ hostModuleLoader
38
+ };
39
+ }
40
+ function getJsxOwnershipPlugins(appConfig) {
41
+ const jsxExtensions = (appConfig.integrations ?? []).filter((integration) => integration.jsxImportSource).flatMap(
42
+ (integration) => integration.extensions.filter((extension) => extension.endsWith(".tsx") || extension.endsWith(".jsx")).map((extension) => ({ integration, extension }))
43
+ ).sort((left, right) => right.extension.length - left.extension.length);
44
+ return jsxExtensions.map(
45
+ ({ integration, extension }) => createForeignJsxOverridePlugin({
46
+ hostJsxImportSource: integration.jsxImportSource,
47
+ foreignExtensions: [extension],
48
+ excludeExtensions: jsxExtensions.filter((candidate) => candidate.extension.length > extension.length).filter((candidate) => candidate.extension.endsWith(extension)).map((candidate) => candidate.extension),
49
+ name: `ecopages-jsx-ownership-${integration.name}-${extension.replace(/[^a-zA-Z0-9]+/g, "-")}`
50
+ })
51
+ );
52
+ }
53
+ function createAppModuleLoader(appConfig) {
54
+ const invalidationService = new DevelopmentInvalidationService(appConfig);
55
+ const pageModuleImportService = new PageModuleImportService({
56
+ canLoadSourceModuleFromHost: (filePath) => shouldAppUseHostModuleLoader(appConfig, filePath),
57
+ getHostModuleLoader: () => getAppHostModuleLoader(appConfig)
58
+ });
59
+ const appServerBuildPlugins = appConfig.runtime?.buildManifest ? getAppServerBuildPlugins(appConfig) : Array.from(appConfig.loaders?.values() ?? []);
60
+ const jsxOwnershipPlugins = getJsxOwnershipPlugins(appConfig);
61
+ const appModuleLoader = {
62
+ get owner() {
63
+ return getAppModuleLoaderOwner(appConfig);
64
+ },
65
+ pageModuleImportService,
66
+ async importModule(options) {
67
+ const invalidationVersion = options.invalidationVersion ?? invalidationService.getServerModuleInvalidationVersion();
68
+ const mergedPlugins = [...appServerBuildPlugins, ...jsxOwnershipPlugins, ...options.plugins ?? []];
69
+ return await pageModuleImportService.importModule({
70
+ ...options,
71
+ ...mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {},
72
+ buildExecutor: options.buildExecutor ?? getAppBuildExecutor(appConfig),
73
+ invalidationVersion
74
+ });
75
+ },
76
+ invalidateDevelopmentGraph() {
77
+ pageModuleImportService.invalidateDevelopmentGraph();
78
+ }
79
+ };
80
+ return appModuleLoader;
81
+ }
82
+ function getAppModuleLoader(appConfig) {
83
+ const existingModuleLoader = appConfig.runtime?.appModuleLoader;
84
+ if (existingModuleLoader) {
85
+ return existingModuleLoader;
86
+ }
87
+ const appModuleLoader = createAppModuleLoader(appConfig);
88
+ setAppModuleLoader(appConfig, appModuleLoader);
89
+ return appModuleLoader;
90
+ }
91
+ function setAppModuleLoader(appConfig, appModuleLoader) {
92
+ appConfig.runtime = {
93
+ ...appConfig.runtime ?? {},
94
+ appModuleLoader
95
+ };
96
+ }
5
97
  function createAppServerModuleTranspiler(appConfig) {
6
98
  const invalidationService = new DevelopmentInvalidationService(appConfig);
7
99
  return new ServerModuleTranspiler({
8
100
  rootDir: appConfig.rootDir,
9
- getBuildExecutor: () => getAppBuildExecutor(appConfig),
10
- getInvalidationVersion: () => invalidationService.getServerModuleInvalidationVersion(),
11
101
  invalidateModules: (changedFiles) => invalidationService.invalidateServerModules(changedFiles),
12
- getDefaultPlugins: typeof Bun === "undefined" && appConfig.rootDir ? () => [createAppNodeBootstrapPlugin(appConfig)] : void 0
102
+ pageModuleImportService: getAppModuleLoader(appConfig)
13
103
  });
14
104
  }
15
105
  function getAppServerModuleTranspiler(appConfig) {
@@ -28,7 +118,13 @@ function setAppServerModuleTranspiler(appConfig, serverModuleTranspiler) {
28
118
  };
29
119
  }
30
120
  export {
121
+ createAppModuleLoader,
31
122
  createAppServerModuleTranspiler,
123
+ getAppHostModuleLoader,
124
+ getAppModuleLoader,
32
125
  getAppServerModuleTranspiler,
33
- setAppServerModuleTranspiler
126
+ setAppHostModuleLoader,
127
+ setAppModuleLoader,
128
+ setAppServerModuleTranspiler,
129
+ shouldAppUseHostModuleLoader
34
130
  };
@@ -0,0 +1,4 @@
1
+ import type { SourceModuleLoader } from './module-loading-types.js';
2
+ export declare function setHostModuleLoader(loader: SourceModuleLoader): void;
3
+ export declare function getHostModuleLoader(): SourceModuleLoader | undefined;
4
+ export declare function clearHostModuleLoader(): void;
@@ -0,0 +1,15 @@
1
+ let hostModuleLoader;
2
+ function setHostModuleLoader(loader) {
3
+ hostModuleLoader = loader;
4
+ }
5
+ function getHostModuleLoader() {
6
+ return hostModuleLoader;
7
+ }
8
+ function clearHostModuleLoader() {
9
+ hostModuleLoader = void 0;
10
+ }
11
+ export {
12
+ clearHostModuleLoader,
13
+ getHostModuleLoader,
14
+ setHostModuleLoader
15
+ };
@@ -0,0 +1,2 @@
1
+ export type SourceModuleLoader = (id: string) => Promise<unknown>;
2
+ export type SourceModuleLoaderFactory = () => SourceModuleLoader | undefined;
@@ -1,13 +1,33 @@
1
1
  import { build, type BuildExecutor, type BuildResult } from '../../build/build-adapter.js';
2
2
  import type { EcoBuildPlugin } from '../../build/build-types.js';
3
- export interface PageModuleImportOptions {
3
+ import type { SourceModuleLoaderFactory } from './module-loading-types.js';
4
+ interface PageModuleImportBaseOptions {
4
5
  filePath: string;
6
+ bypassCache?: boolean;
7
+ cacheScope?: string;
8
+ invalidationVersion?: number;
9
+ }
10
+ /**
11
+ * Options for imports that must pass through the Ecopages build pipeline.
12
+ *
13
+ * @remarks
14
+ * Callers should use build mode for framework-owned page modules and any other
15
+ * source that relies on Ecopages build resolution before runtime execution.
16
+ */
17
+ export interface PageModuleBuildImportOptions extends PageModuleImportBaseOptions {
5
18
  rootDir: string;
6
19
  outdir: string;
7
20
  buildExecutor?: BuildExecutor;
8
- invalidationVersion?: number;
9
21
  splitting?: boolean;
10
22
  externalPackages?: boolean;
23
+ jsx?: {
24
+ development?: boolean;
25
+ factory?: string;
26
+ fragment?: string;
27
+ importSource?: string;
28
+ runtime?: 'classic' | 'automatic';
29
+ sideEffects?: boolean;
30
+ };
11
31
  plugins?: EcoBuildPlugin[];
12
32
  transpileErrorMessage?: (details: string) => string;
13
33
  noOutputMessage?: (filePath: string) => string;
@@ -23,14 +43,17 @@ export interface PageModuleImportOptions {
23
43
  export interface PageModuleImportDependencies {
24
44
  hashFile(filePath: string): string;
25
45
  buildModule(options: Parameters<typeof build>[0], buildExecutor?: BuildExecutor): Promise<BuildResult>;
46
+ canLoadSourceModuleFromHost(filePath: string): boolean;
47
+ getHostModuleLoader: SourceModuleLoaderFactory;
26
48
  }
27
49
  /**
28
- * Loads source page modules in a runtime-agnostic way.
50
+ * Loads page-like modules through the Ecopages build pipeline.
29
51
  *
30
- * This service centralizes the Bun-vs-Node import strategy used by route
31
- * scanning, page data loading, and request-time page inspection. In Bun it can
32
- * import source files directly; in Node it transpiles the file into a dedicated
33
- * output directory first and then imports the generated module.
52
+ * This service centralizes the shared build-first import strategy used by route
53
+ * scanning, page data loading, and request-time page inspection. In Node
54
+ * development it can still delegate compatible source imports to the active
55
+ * host loader, but the public contract remains one transpile-targeted module
56
+ * loading path.
34
57
  *
35
58
  * Keeping this logic in one place prevents subtle drift in cache-busting,
36
59
  * transpilation settings, and error semantics across the different callers.
@@ -66,6 +89,7 @@ export declare class PageModuleImportService {
66
89
  * @param options Runtime-specific import settings.
67
90
  * @returns The loaded module.
68
91
  */
69
- importModule<T = unknown>(options: PageModuleImportOptions): Promise<T>;
92
+ importModule<T = unknown>(options: PageModuleBuildImportOptions): Promise<T>;
70
93
  private loadModule;
71
94
  }
95
+ export {};