@ecopages/core 0.2.0-alpha.9 → 0.2.0-beta.1

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 (473) hide show
  1. package/README.md +79 -28
  2. package/package.json +104 -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 +32 -8
  67. package/src/adapters/shared/server-static-builder.js +69 -6
  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-entry-file.d.ts +72 -0
  279. package/src/utils/resolve-entry-file.js +41 -0
  280. package/src/utils/resolve-work-dir.js +1 -1
  281. package/src/watchers/project-watcher.d.ts +4 -4
  282. package/src/watchers/project-watcher.js +35 -41
  283. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  284. package/src/watchers/project-watcher.test-helpers.js +5 -5
  285. package/CHANGELOG.md +0 -31
  286. package/src/adapters/abstract/application-adapter.ts +0 -337
  287. package/src/adapters/abstract/router-adapter.ts +0 -30
  288. package/src/adapters/abstract/server-adapter.ts +0 -79
  289. package/src/adapters/bun/client-bridge.ts +0 -62
  290. package/src/adapters/bun/create-app.ts +0 -189
  291. package/src/adapters/bun/hmr-manager.ts +0 -409
  292. package/src/adapters/bun/index.ts +0 -2
  293. package/src/adapters/bun/server-adapter.ts +0 -499
  294. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  295. package/src/adapters/bun/server-lifecycle.js +0 -92
  296. package/src/adapters/bun/server-lifecycle.ts +0 -124
  297. package/src/adapters/index.ts +0 -6
  298. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  299. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  300. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  301. package/src/adapters/node/create-app.ts +0 -179
  302. package/src/adapters/node/index.d.ts +0 -6
  303. package/src/adapters/node/index.js +0 -11
  304. package/src/adapters/node/index.ts +0 -16
  305. package/src/adapters/node/node-client-bridge.ts +0 -79
  306. package/src/adapters/node/node-hmr-manager.ts +0 -381
  307. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  308. package/src/adapters/node/runtime-adapter.js +0 -306
  309. package/src/adapters/node/runtime-adapter.ts +0 -439
  310. package/src/adapters/node/server-adapter.ts +0 -488
  311. package/src/adapters/node/static-content-server.ts +0 -239
  312. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  313. package/src/adapters/node/write-runtime-manifest.js +0 -12
  314. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/define-api-handler.ts +0 -66
  318. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  319. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  320. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  321. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  322. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  323. package/src/adapters/shared/hmr-html-response.ts +0 -52
  324. package/src/adapters/shared/render-context.ts +0 -120
  325. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  326. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  327. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  328. package/src/adapters/shared/server-adapter.ts +0 -489
  329. package/src/adapters/shared/server-route-handler.ts +0 -153
  330. package/src/adapters/shared/server-static-builder.ts +0 -166
  331. package/src/build/build-adapter.ts +0 -361
  332. package/src/build/build-manifest.ts +0 -54
  333. package/src/build/build-types.ts +0 -83
  334. package/src/build/dev-build-coordinator.d.ts +0 -74
  335. package/src/build/dev-build-coordinator.js +0 -161
  336. package/src/build/dev-build-coordinator.ts +0 -221
  337. package/src/build/esbuild-build-adapter.d.ts +0 -72
  338. package/src/build/esbuild-build-adapter.js +0 -422
  339. package/src/build/esbuild-build-adapter.ts +0 -559
  340. package/src/build/runtime-build-executor.ts +0 -34
  341. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  342. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  343. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  344. package/src/config/config-builder.ts +0 -706
  345. package/src/constants.ts +0 -54
  346. package/src/create-app.ts +0 -87
  347. package/src/dev/sc-server.ts +0 -143
  348. package/src/eco/component-render-context.d.ts +0 -105
  349. package/src/eco/component-render-context.js +0 -87
  350. package/src/eco/component-render-context.ts +0 -224
  351. package/src/eco/eco.ts +0 -242
  352. package/src/eco/eco.types.ts +0 -221
  353. package/src/eco/eco.utils.ts +0 -89
  354. package/src/eco/global-injector-map.ts +0 -112
  355. package/src/eco/lazy-injector-map.ts +0 -120
  356. package/src/eco/module-dependencies.ts +0 -75
  357. package/src/errors/http-error.ts +0 -72
  358. package/src/errors/index.ts +0 -2
  359. package/src/errors/locals-access-error.ts +0 -7
  360. package/src/global/app-logger.ts +0 -4
  361. package/src/hmr/client/hmr-runtime.ts +0 -152
  362. package/src/hmr/hmr-strategy.ts +0 -172
  363. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  364. package/src/hmr/hmr.test.e2e.ts +0 -66
  365. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  366. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  367. package/src/index.browser.ts +0 -3
  368. package/src/index.ts +0 -5
  369. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  370. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  371. package/src/internal-types.ts +0 -232
  372. package/src/plugins/alias-resolver-plugin.ts +0 -63
  373. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  374. package/src/plugins/integration-plugin.ts +0 -226
  375. package/src/plugins/processor.ts +0 -240
  376. package/src/plugins/runtime-capability.ts +0 -14
  377. package/src/public-types.ts +0 -1317
  378. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  379. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  380. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  381. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  382. package/src/route-renderer/component-graph/component-graph.js +0 -72
  383. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  384. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  385. package/src/route-renderer/component-graph/component-marker.js +0 -46
  386. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  387. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  388. package/src/route-renderer/component-graph/component-reference.js +0 -19
  389. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  390. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  391. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  392. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  393. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  394. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  395. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  396. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  397. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  398. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  399. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  400. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  401. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  402. package/src/route-renderer/route-renderer.ts +0 -115
  403. package/src/router/client/link-intent.test.browser.ts +0 -51
  404. package/src/router/client/link-intent.ts +0 -92
  405. package/src/router/client/navigation-coordinator.ts +0 -433
  406. package/src/router/server/fs-router-scanner.d.ts +0 -41
  407. package/src/router/server/fs-router-scanner.js +0 -156
  408. package/src/router/server/fs-router-scanner.ts +0 -219
  409. package/src/router/server/fs-router.d.ts +0 -26
  410. package/src/router/server/fs-router.js +0 -100
  411. package/src/router/server/fs-router.ts +0 -122
  412. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  413. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  414. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  416. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  417. package/src/services/assets/asset-processing-service/index.ts +0 -5
  418. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  419. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  420. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  421. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  422. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  423. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  424. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  425. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  426. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  427. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  428. package/src/services/assets/browser-bundle.service.ts +0 -53
  429. package/src/services/cache/cache.types.ts +0 -126
  430. package/src/services/cache/index.ts +0 -18
  431. package/src/services/cache/memory-cache-store.ts +0 -130
  432. package/src/services/cache/page-cache-service.ts +0 -202
  433. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  434. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  435. package/src/services/html/html-transformer.service.ts +0 -279
  436. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  437. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  438. package/src/services/module-loading/page-module-import.service.ts +0 -200
  439. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  440. package/src/services/module-loading/server-loader.service.js +0 -32
  441. package/src/services/module-loading/server-loader.service.ts +0 -130
  442. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  444. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  445. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  446. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  447. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  448. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  449. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  450. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  451. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  452. package/src/services/validation/schema-validation-service.ts +0 -204
  453. package/src/services/validation/standard-schema.types.ts +0 -68
  454. package/src/static-site-generator/static-site-generator.ts +0 -462
  455. package/src/utils/css.d.ts +0 -1
  456. package/src/utils/css.js +0 -7
  457. package/src/utils/css.ts +0 -5
  458. package/src/utils/deep-merge.ts +0 -47
  459. package/src/utils/hash.ts +0 -5
  460. package/src/utils/html.ts +0 -1
  461. package/src/utils/invariant.ts +0 -15
  462. package/src/utils/locals-utils.ts +0 -37
  463. package/src/utils/parse-cli-args.ts +0 -83
  464. package/src/utils/path-utils.module.ts +0 -14
  465. package/src/utils/resolve-work-dir.ts +0 -45
  466. package/src/utils/runtime.ts +0 -44
  467. package/src/utils/server-utils.module.ts +0 -67
  468. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  469. package/src/watchers/project-watcher.ts +0 -363
  470. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  471. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  472. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  473. /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 {};