@ecopages/core 0.2.0-alpha.3 → 0.2.0-alpha.30

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 (436) hide show
  1. package/CHANGELOG.md +66 -66
  2. package/README.md +268 -14
  3. package/package.json +72 -108
  4. package/src/adapters/README.md +39 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +5 -12
  11. package/src/adapters/bun/create-app.js +43 -7
  12. package/src/adapters/bun/hmr-manager.d.ts +72 -26
  13. package/src/adapters/bun/hmr-manager.js +153 -81
  14. package/src/adapters/bun/index.d.ts +2 -3
  15. package/src/adapters/bun/index.js +3 -3
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +63 -38
  18. package/src/adapters/bun/server-lifecycle.d.ts +28 -17
  19. package/src/adapters/bun/server-lifecycle.js +34 -62
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +2 -6
  23. package/src/adapters/index.js +2 -8
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +79 -21
  28. package/src/adapters/node/node-hmr-manager.js +167 -114
  29. package/src/adapters/node/server-adapter.d.ts +7 -35
  30. package/src/adapters/node/server-adapter.js +55 -107
  31. package/src/adapters/node/static-content-server.d.ts +37 -1
  32. package/src/adapters/node/static-content-server.js +29 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  35. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  36. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  37. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  38. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  39. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  40. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  41. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  42. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  43. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  44. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  45. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  46. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  47. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  48. package/src/adapters/shared/hmr-html-response.js +32 -0
  49. package/src/adapters/shared/render-context.d.ts +4 -3
  50. package/src/adapters/shared/render-context.js +6 -3
  51. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  52. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  53. package/src/adapters/shared/server-adapter.d.ts +33 -12
  54. package/src/adapters/shared/server-adapter.js +208 -132
  55. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  56. package/src/adapters/shared/server-route-handler.js +7 -16
  57. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  58. package/src/adapters/shared/server-static-builder.js +65 -11
  59. package/src/build/README.md +107 -0
  60. package/src/build/build-adapter.d.ts +168 -3
  61. package/src/build/build-adapter.js +604 -16
  62. package/src/build/build-manifest.d.ts +27 -0
  63. package/src/build/build-manifest.js +30 -0
  64. package/src/build/dev-build-coordinator.d.ts +72 -0
  65. package/src/build/dev-build-coordinator.js +154 -0
  66. package/src/build/esbuild-build-adapter.d.ts +15 -6
  67. package/src/build/esbuild-build-adapter.js +189 -74
  68. package/src/build/runtime-build-executor.d.ts +14 -0
  69. package/src/build/runtime-build-executor.js +22 -0
  70. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  71. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  72. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  73. package/src/build/runtime-specifier-aliases.js +95 -0
  74. package/src/config/README.md +36 -0
  75. package/src/config/config-builder.d.ts +54 -29
  76. package/src/config/config-builder.js +255 -49
  77. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  78. package/src/{constants.js → config/constants.js} +4 -0
  79. package/src/declarations.d.ts +19 -14
  80. package/src/dev/host-runtime.d.ts +10 -0
  81. package/src/dev/host-runtime.js +24 -0
  82. package/src/dev/sc-server.d.ts +1 -1
  83. package/src/dev/sc-server.js +1 -1
  84. package/src/eco/README.md +70 -16
  85. package/src/eco/eco.browser.d.ts +2 -0
  86. package/src/eco/eco.browser.js +83 -0
  87. package/src/eco/eco.js +32 -57
  88. package/src/eco/eco.types.d.ts +14 -6
  89. package/src/eco/eco.utils.d.ts +1 -40
  90. package/src/eco/eco.utils.js +5 -35
  91. package/src/eco/global-injector-map.d.ts +3 -3
  92. package/src/eco/global-injector-map.js +2 -2
  93. package/src/eco/lazy-injector-map.d.ts +2 -2
  94. package/src/errors/index.d.ts +1 -0
  95. package/src/errors/index.js +3 -1
  96. package/src/hmr/README.md +26 -0
  97. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  98. package/src/hmr/client/hmr-runtime.js +38 -7
  99. package/src/hmr/hmr-strategy.d.ts +16 -13
  100. package/src/hmr/hmr-strategy.js +22 -7
  101. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  102. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  103. package/src/hmr/hmr.test.e2e.js +26 -33
  104. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  105. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  106. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  107. package/src/hmr/strategies/js-hmr-strategy.js +64 -74
  108. package/src/index.browser.d.ts +2 -2
  109. package/src/index.browser.js +1 -1
  110. package/src/index.d.ts +4 -3
  111. package/src/index.js +16 -5
  112. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  113. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  114. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  115. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  116. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  117. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  118. package/src/plugins/README.md +35 -0
  119. package/src/plugins/alias-resolver-plugin.js +17 -3
  120. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  121. package/src/plugins/eco-component-meta-plugin.js +27 -22
  122. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  123. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  124. package/src/plugins/integration-plugin.d.ts +142 -29
  125. package/src/plugins/integration-plugin.js +103 -14
  126. package/src/plugins/processor.d.ts +17 -2
  127. package/src/plugins/processor.js +22 -3
  128. package/src/plugins/runtime-capability.d.ts +9 -0
  129. package/src/plugins/source-transform.d.ts +46 -0
  130. package/src/plugins/source-transform.js +71 -0
  131. package/src/route-renderer/GRAPH.md +83 -325
  132. package/src/route-renderer/README.md +73 -90
  133. package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
  134. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  135. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  136. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  137. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
  138. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
  139. package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
  140. package/src/route-renderer/orchestration/integration-renderer.js +909 -0
  141. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  142. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  143. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  144. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  145. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  146. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  147. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
  148. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
  149. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  150. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  151. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
  152. package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
  153. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  154. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  155. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  156. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  157. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  158. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  159. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  160. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  161. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  162. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  163. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  164. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  165. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  166. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  167. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  168. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  169. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  170. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  171. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  172. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  173. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  174. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  175. package/src/route-renderer/route-renderer.d.ts +57 -14
  176. package/src/route-renderer/route-renderer.js +30 -18
  177. package/src/router/README.md +94 -0
  178. package/src/router/client/link-intent.d.ts +53 -0
  179. package/src/router/client/link-intent.js +34 -0
  180. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  181. package/src/router/client/link-intent.test.browser.js +43 -0
  182. package/src/router/client/navigation-coordinator.d.ts +169 -0
  183. package/src/router/client/navigation-coordinator.js +215 -0
  184. package/src/router/server/route-registry.d.ts +78 -0
  185. package/src/router/server/route-registry.js +262 -0
  186. package/src/services/README.md +28 -0
  187. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  188. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  189. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  190. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  191. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  192. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  193. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  194. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  195. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  196. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  197. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  198. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  199. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  200. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  201. package/src/services/assets/asset-processing-service/index.js +6 -0
  202. package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
  203. package/src/services/assets/asset-processing-service/page-package.js +74 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  208. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  209. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  210. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  211. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  212. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  213. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  214. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  215. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  216. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
  217. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +12 -7
  218. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  219. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  222. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  223. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  224. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  225. package/src/services/assets/browser-bundle.service.js +41 -0
  226. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  227. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  228. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  229. package/src/services/html/html-rewriter-provider.service.js +68 -0
  230. package/src/services/html/html-transformer.service.d.ts +87 -0
  231. package/src/services/html/html-transformer.service.js +216 -0
  232. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  233. package/src/services/invalidation/development-invalidation.service.js +190 -0
  234. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  235. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  236. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  237. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  238. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  239. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  240. package/src/services/module-loading/module-loading-types.js +0 -0
  241. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  242. package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
  243. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  244. package/src/services/module-loading/page-module-import.service.js +170 -0
  245. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  246. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  247. package/src/services/module-loading/source-module-support.d.ts +5 -0
  248. package/src/services/module-loading/source-module-support.js +8 -0
  249. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  250. package/src/services/runtime-state/dev-graph.service.js +162 -0
  251. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  252. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  253. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  254. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  255. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  256. package/src/static-site-generator/README.md +26 -0
  257. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  258. package/src/static-site-generator/static-site-generator.js +182 -138
  259. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  260. package/src/types/internal-types.js +0 -0
  261. package/src/{public-types.d.ts → types/public-types.d.ts} +201 -32
  262. package/src/types/public-types.js +0 -0
  263. package/src/utils/html-escaping.d.ts +7 -0
  264. package/src/utils/html-escaping.js +6 -0
  265. package/src/utils/locals-utils.d.ts +1 -1
  266. package/src/utils/parse-cli-args.d.ts +4 -1
  267. package/src/utils/parse-cli-args.js +16 -1
  268. package/src/utils/resolve-work-dir.d.ts +11 -0
  269. package/src/utils/resolve-work-dir.js +31 -0
  270. package/src/watchers/project-watcher.d.ts +40 -29
  271. package/src/watchers/project-watcher.js +126 -116
  272. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  273. package/src/watchers/project-watcher.test-helpers.js +6 -6
  274. package/src/adapters/abstract/application-adapter.ts +0 -337
  275. package/src/adapters/abstract/router-adapter.ts +0 -30
  276. package/src/adapters/abstract/server-adapter.ts +0 -79
  277. package/src/adapters/bun/client-bridge.ts +0 -62
  278. package/src/adapters/bun/create-app.ts +0 -189
  279. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  280. package/src/adapters/bun/define-api-handler.ts +0 -114
  281. package/src/adapters/bun/hmr-manager.ts +0 -296
  282. package/src/adapters/bun/index.ts +0 -3
  283. package/src/adapters/bun/server-adapter.ts +0 -492
  284. package/src/adapters/bun/server-lifecycle.ts +0 -154
  285. package/src/adapters/index.ts +0 -6
  286. package/src/adapters/node/create-app.ts +0 -179
  287. package/src/adapters/node/index.d.ts +0 -4
  288. package/src/adapters/node/index.js +0 -8
  289. package/src/adapters/node/index.ts +0 -9
  290. package/src/adapters/node/node-client-bridge.ts +0 -79
  291. package/src/adapters/node/node-hmr-manager.ts +0 -289
  292. package/src/adapters/node/server-adapter.ts +0 -561
  293. package/src/adapters/node/static-content-server.ts +0 -203
  294. package/src/adapters/shared/api-response.ts +0 -104
  295. package/src/adapters/shared/application-adapter.ts +0 -199
  296. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  297. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  298. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  299. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  300. package/src/adapters/shared/render-context.ts +0 -105
  301. package/src/adapters/shared/server-adapter.ts +0 -442
  302. package/src/adapters/shared/server-route-handler.ts +0 -166
  303. package/src/adapters/shared/server-static-builder.ts +0 -82
  304. package/src/build/build-adapter.ts +0 -132
  305. package/src/build/build-types.ts +0 -83
  306. package/src/build/esbuild-build-adapter.ts +0 -510
  307. package/src/config/config-builder.ts +0 -474
  308. package/src/constants.ts +0 -39
  309. package/src/create-app.ts +0 -87
  310. package/src/define-api-handler.js +0 -15
  311. package/src/define-api-handler.ts +0 -66
  312. package/src/dev/sc-server.ts +0 -143
  313. package/src/eco/component-render-context.d.ts +0 -105
  314. package/src/eco/component-render-context.js +0 -77
  315. package/src/eco/component-render-context.ts +0 -202
  316. package/src/eco/eco.ts +0 -221
  317. package/src/eco/eco.types.ts +0 -202
  318. package/src/eco/eco.utils.ts +0 -89
  319. package/src/eco/global-injector-map.ts +0 -112
  320. package/src/eco/lazy-injector-map.ts +0 -120
  321. package/src/eco/module-dependencies.ts +0 -75
  322. package/src/errors/http-error.ts +0 -72
  323. package/src/errors/index.ts +0 -2
  324. package/src/errors/locals-access-error.ts +0 -7
  325. package/src/global/app-logger.ts +0 -4
  326. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  327. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  328. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  329. package/src/hmr/client/hmr-runtime.ts +0 -121
  330. package/src/hmr/hmr-strategy.ts +0 -172
  331. package/src/hmr/hmr.test.e2e.ts +0 -75
  332. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  333. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  334. package/src/index.browser.ts +0 -3
  335. package/src/index.ts +0 -5
  336. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  337. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  338. package/src/internal-types.ts +0 -212
  339. package/src/plugins/alias-resolver-plugin.ts +0 -45
  340. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  341. package/src/plugins/integration-plugin.ts +0 -184
  342. package/src/plugins/processor.ts +0 -220
  343. package/src/public-types.ts +0 -1260
  344. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  345. package/src/route-renderer/component-graph-executor.js +0 -31
  346. package/src/route-renderer/component-graph-executor.ts +0 -84
  347. package/src/route-renderer/component-graph.d.ts +0 -42
  348. package/src/route-renderer/component-graph.js +0 -72
  349. package/src/route-renderer/component-graph.ts +0 -159
  350. package/src/route-renderer/component-marker.d.ts +0 -52
  351. package/src/route-renderer/component-marker.js +0 -46
  352. package/src/route-renderer/component-marker.ts +0 -117
  353. package/src/route-renderer/dependency-resolver.js +0 -428
  354. package/src/route-renderer/dependency-resolver.ts +0 -596
  355. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  356. package/src/route-renderer/html-post-processing.service.js +0 -86
  357. package/src/route-renderer/html-post-processing.service.ts +0 -103
  358. package/src/route-renderer/integration-renderer.d.ts +0 -339
  359. package/src/route-renderer/integration-renderer.js +0 -526
  360. package/src/route-renderer/integration-renderer.ts +0 -696
  361. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  362. package/src/route-renderer/marker-graph-resolver.js +0 -93
  363. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  364. package/src/route-renderer/page-module-loader.d.ts +0 -61
  365. package/src/route-renderer/page-module-loader.ts +0 -153
  366. package/src/route-renderer/render-execution.service.d.ts +0 -69
  367. package/src/route-renderer/render-execution.service.js +0 -91
  368. package/src/route-renderer/render-execution.service.ts +0 -158
  369. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  370. package/src/route-renderer/render-preparation.service.js +0 -243
  371. package/src/route-renderer/render-preparation.service.ts +0 -358
  372. package/src/route-renderer/route-renderer.ts +0 -80
  373. package/src/router/fs-router-scanner.d.ts +0 -41
  374. package/src/router/fs-router-scanner.js +0 -155
  375. package/src/router/fs-router-scanner.ts +0 -217
  376. package/src/router/fs-router.d.ts +0 -26
  377. package/src/router/fs-router.js +0 -100
  378. package/src/router/fs-router.ts +0 -122
  379. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  380. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  381. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  382. package/src/services/asset-processing-service/assets.types.ts +0 -112
  383. package/src/services/asset-processing-service/index.d.ts +0 -3
  384. package/src/services/asset-processing-service/index.js +0 -3
  385. package/src/services/asset-processing-service/index.ts +0 -3
  386. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  387. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  388. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  389. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  390. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  391. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  392. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  393. package/src/services/asset-processing-service/processors/index.js +0 -5
  394. package/src/services/asset-processing-service/processors/index.ts +0 -5
  395. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  396. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  397. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  398. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  399. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  400. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  401. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  402. package/src/services/cache/cache.types.ts +0 -126
  403. package/src/services/cache/index.ts +0 -18
  404. package/src/services/cache/memory-cache-store.ts +0 -130
  405. package/src/services/cache/page-cache-service.ts +0 -202
  406. package/src/services/html-transformer.service.d.ts +0 -50
  407. package/src/services/html-transformer.service.js +0 -163
  408. package/src/services/html-transformer.service.ts +0 -217
  409. package/src/services/page-module-import.service.d.ts +0 -37
  410. package/src/services/page-module-import.service.js +0 -88
  411. package/src/services/page-module-import.service.ts +0 -129
  412. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  413. package/src/services/schema-validation-service.ts +0 -204
  414. package/src/services/validation/standard-schema.types.ts +0 -68
  415. package/src/static-site-generator/static-site-generator.ts +0 -359
  416. package/src/utils/css.d.ts +0 -1
  417. package/src/utils/css.js +0 -7
  418. package/src/utils/css.ts +0 -5
  419. package/src/utils/deep-merge.ts +0 -47
  420. package/src/utils/hash.ts +0 -5
  421. package/src/utils/html.ts +0 -1
  422. package/src/utils/invariant.ts +0 -15
  423. package/src/utils/locals-utils.ts +0 -37
  424. package/src/utils/parse-cli-args.ts +0 -83
  425. package/src/utils/path-utils.module.ts +0 -14
  426. package/src/utils/runtime.ts +0 -44
  427. package/src/utils/server-utils.module.ts +0 -67
  428. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  429. package/src/watchers/project-watcher.ts +0 -344
  430. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  431. /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
  432. /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
  433. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  434. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  435. /package/src/{public-types.js → services/module-loading/app-module-loader.service.js} +0 -0
  436. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { fileSystem } from "@ecopages/file-system";
3
- import { defaultBuildAdapter } from "../../../../build/build-adapter.js";
4
- import { BaseScriptProcessor } from "../base/base-script-processor";
3
+ import { getAppBuildAdapter } from "../../../../../build/build-adapter.js";
4
+ import { BaseScriptProcessor } from "../base/base-script-processor.js";
5
5
  class NodeModuleScriptProcessor extends BaseScriptProcessor {
6
6
  async process(dep) {
7
7
  const modulePath = this.resolveModulePath(dep.importPath, this.appConfig.rootDir);
@@ -20,16 +20,19 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
20
20
  position: dep.position,
21
21
  attributes: dep.attributes,
22
22
  inline: true,
23
- excludeFromHtml: dep.excludeFromHtml
23
+ excludeFromHtml: dep.excludeFromHtml,
24
+ packageRole: dep.packageRole,
25
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
24
26
  };
25
27
  }
26
28
  const outdir = path.join(this.getAssetsDir(), "vendors");
29
+ const bundlerOptions = this.getBundlerOptions(dep);
27
30
  const filePath = await this.bundleScript({
28
31
  entrypoint: modulePath,
29
32
  outdir,
30
33
  minify: this.isProduction,
31
- naming: dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]",
32
- ...this.getBundlerOptions(dep)
34
+ naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]"),
35
+ ...bundlerOptions
33
36
  });
34
37
  return {
35
38
  filepath: filePath,
@@ -37,7 +40,9 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
37
40
  position: dep.position,
38
41
  attributes: dep.attributes,
39
42
  inline: dep.inline,
40
- excludeFromHtml: dep.excludeFromHtml
43
+ excludeFromHtml: dep.excludeFromHtml,
44
+ packageRole: dep.packageRole,
45
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
41
46
  };
42
47
  });
43
48
  }
@@ -46,7 +51,7 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
46
51
  return importPath;
47
52
  }
48
53
  try {
49
- return defaultBuildAdapter.resolve(importPath, rootDir);
54
+ return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
50
55
  } catch {
51
56
  return this.resolveModulePathFallback(importPath, rootDir);
52
57
  }
@@ -1,5 +1,8 @@
1
- import type { ContentStylesheetAsset, ProcessedAsset } from '../../assets.types';
2
- import { BaseProcessor } from '../base/base-processor';
1
+ import type { ContentStylesheetAsset, ProcessedAsset } from '../../assets.types.js';
2
+ import { BaseProcessor } from '../base/base-processor.js';
3
3
  export declare class ContentStylesheetProcessor extends BaseProcessor<ContentStylesheetAsset> {
4
+ private static readonly PROCESSABLE_STYLESHEET_EXTENSIONS;
5
+ private isProcessableStylesheet;
6
+ private applyStylesheetProcessors;
4
7
  process(dep: ContentStylesheetAsset): Promise<ProcessedAsset>;
5
8
  }
@@ -0,0 +1,59 @@
1
+ import path from "node:path";
2
+ import { fileSystem } from "@ecopages/file-system";
3
+ import { BaseProcessor } from "../base/base-processor.js";
4
+ class ContentStylesheetProcessor extends BaseProcessor {
5
+ static PROCESSABLE_STYLESHEET_EXTENSIONS = /* @__PURE__ */ new Set([".css", ".scss", ".sass", ".less"]);
6
+ isProcessableStylesheet(filepath) {
7
+ return ContentStylesheetProcessor.PROCESSABLE_STYLESHEET_EXTENSIONS.has(path.extname(filepath));
8
+ }
9
+ async applyStylesheetProcessors(content, filepath) {
10
+ if (!this.isProcessableStylesheet(filepath)) {
11
+ return content;
12
+ }
13
+ let transformedContent = content;
14
+ const processors = this.appConfig.processors ? Array.from(this.appConfig.processors.values()) : [];
15
+ for (const processor of processors) {
16
+ const hasCapabilities = processor.getAssetCapabilities().length > 0;
17
+ const canProcessStylesheet = processor.canProcessAsset("stylesheet", filepath);
18
+ if (!canProcessStylesheet && (hasCapabilities || !processor.getName().includes("postcss"))) {
19
+ continue;
20
+ }
21
+ if (!processor.matchesFileFilter(filepath)) {
22
+ continue;
23
+ }
24
+ const result = await processor.process(transformedContent, filepath);
25
+ if (typeof result === "string") {
26
+ transformedContent = result;
27
+ continue;
28
+ }
29
+ if (result instanceof Buffer) {
30
+ transformedContent = result.toString();
31
+ }
32
+ }
33
+ return transformedContent;
34
+ }
35
+ async process(dep) {
36
+ const virtualFilepath = path.join(this.appConfig.absolutePaths.distDir, "styles", "page-bundle.css");
37
+ const processedContent = await this.applyStylesheetProcessors(dep.content, virtualFilepath);
38
+ const hash = this.generateHash(processedContent);
39
+ const filename = `style-${hash}.css`;
40
+ const cachekey = this.buildCacheKey(filename, hash, dep);
41
+ return this.getOrProcess(cachekey, () => {
42
+ const filepath = path.join(this.getAssetsDir(), "styles", filename);
43
+ if (!dep.inline) fileSystem.write(filepath, processedContent);
44
+ return {
45
+ filepath: dep.inline ? void 0 : filepath,
46
+ content: dep.inline ? processedContent : void 0,
47
+ kind: "stylesheet",
48
+ position: dep.position,
49
+ attributes: dep.attributes,
50
+ inline: dep.inline,
51
+ packageRole: dep.packageRole,
52
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
53
+ };
54
+ });
55
+ }
56
+ }
57
+ export {
58
+ ContentStylesheetProcessor
59
+ };
@@ -1,5 +1,5 @@
1
- import type { FileStylesheetAsset, ProcessedAsset } from '../../assets.types';
2
- import { BaseProcessor } from '../base/base-processor';
1
+ import type { FileStylesheetAsset, ProcessedAsset } from '../../assets.types.js';
2
+ import { BaseProcessor } from '../base/base-processor.js';
3
3
  export declare class FileStylesheetProcessor extends BaseProcessor<FileStylesheetAsset> {
4
4
  private static readonly PROCESSABLE_STYLESHEET_EXTENSIONS;
5
5
  getStyleContent: (srcUrl: string) => Buffer;
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileSystem } from "@ecopages/file-system";
3
- import { BaseProcessor } from "../base/base-processor";
3
+ import { BaseProcessor } from "../base/base-processor.js";
4
4
  class FileStylesheetProcessor extends BaseProcessor {
5
5
  static PROCESSABLE_STYLESHEET_EXTENSIONS = /* @__PURE__ */ new Set([".css", ".scss", ".sass", ".less"]);
6
6
  getStyleContent = (srcUrl) => {
@@ -41,7 +41,10 @@ class FileStylesheetProcessor extends BaseProcessor {
41
41
  const hash = this.generateHash(processedContent);
42
42
  const cachekey = this.buildCacheKey(dep.filepath, hash, dep);
43
43
  return this.getOrProcess(cachekey, () => {
44
- const filepath = path.join(this.getAssetsDir(), path.relative(this.appConfig.srcDir, dep.filepath));
44
+ const filepath = path.join(
45
+ this.getAssetsDir(),
46
+ path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath)
47
+ );
45
48
  const outputBuffer = Buffer.from(processedContent);
46
49
  if (!dep.inline) {
47
50
  fileSystem.ensureDir(path.dirname(filepath));
@@ -49,11 +52,14 @@ class FileStylesheetProcessor extends BaseProcessor {
49
52
  }
50
53
  return {
51
54
  filepath,
55
+ sourceFilepath: dep.filepath,
52
56
  content: dep.inline ? processedContent : void 0,
53
57
  kind: "stylesheet",
54
58
  position: dep.position,
55
59
  attributes: dep.attributes,
56
- inline: dep.inline
60
+ inline: dep.inline,
61
+ packageRole: dep.packageRole,
62
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
57
63
  };
58
64
  });
59
65
  }
@@ -0,0 +1,18 @@
1
+ import type { AssetProcessor } from './processor.interface.js';
2
+ import type { AssetDefinition, ProcessedAsset } from './assets.types.js';
3
+ type ProcessUngroupedDependencyOptions = {
4
+ dep: AssetDefinition;
5
+ key: string;
6
+ depKey: string;
7
+ getCachedAsset: (dep: AssetDefinition, depKey: string) => ProcessedAsset | null;
8
+ getProcessor: (dep: AssetDefinition) => AssetProcessor | undefined;
9
+ resolveProcessedAssetSrcUrl: (processed: ProcessedAsset) => string | undefined;
10
+ setCachedAsset: (dep: AssetDefinition, depKey: string, processed: ProcessedAsset) => void;
11
+ logMissingProcessor: (dep: AssetDefinition) => void;
12
+ logMissingFile: (dep: AssetDefinition & {
13
+ filepath: string;
14
+ }) => void;
15
+ logProcessingError: (dep: AssetDefinition, error: unknown) => void;
16
+ };
17
+ export declare function processUngroupedDependency(options: ProcessUngroupedDependencyOptions): Promise<ProcessedAsset | null>;
18
+ export {};
@@ -0,0 +1,45 @@
1
+ import { fileSystem } from "@ecopages/file-system";
2
+ async function processUngroupedDependency(options) {
3
+ const {
4
+ dep,
5
+ key,
6
+ depKey,
7
+ getCachedAsset,
8
+ getProcessor,
9
+ resolveProcessedAssetSrcUrl,
10
+ setCachedAsset,
11
+ logMissingProcessor,
12
+ logMissingFile,
13
+ logProcessingError
14
+ } = options;
15
+ const cached = getCachedAsset(dep, depKey);
16
+ if (cached) {
17
+ return { key, ...cached };
18
+ }
19
+ const processor = getProcessor(dep);
20
+ if (!processor) {
21
+ logMissingProcessor(dep);
22
+ return null;
23
+ }
24
+ if (dep.source === "file" && "filepath" in dep && !fileSystem.exists(dep.filepath)) {
25
+ logMissingFile(dep);
26
+ return null;
27
+ }
28
+ try {
29
+ const processed = await processor.process(dep);
30
+ const srcUrl = resolveProcessedAssetSrcUrl(processed);
31
+ const processedWithKey = {
32
+ key,
33
+ ...processed,
34
+ srcUrl
35
+ };
36
+ setCachedAsset(dep, depKey, processedWithKey);
37
+ return processedWithKey;
38
+ } catch (error) {
39
+ logProcessingError(dep, error);
40
+ return null;
41
+ }
42
+ }
43
+ export {
44
+ processUngroupedDependency
45
+ };
@@ -0,0 +1,73 @@
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[];
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;
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[];
40
+ };
41
+ export interface BrowserBundleExecutor {
42
+ bundle(options: BrowserBundleOptions): Promise<BuildResult>;
43
+ }
44
+ export type BrowserBundleGroupedEntry = {
45
+ entrypoint: string;
46
+ entryName: string;
47
+ };
48
+ /**
49
+ * App-owned boundary for browser-oriented bundle work.
50
+ *
51
+ * @remarks
52
+ * This service owns the shared browser transpile defaults and ensures browser
53
+ * builds always run through the app-owned executor rather than direct backend
54
+ * calls scattered across HMR and asset processing paths.
55
+ */
56
+ export declare class BrowserBundleService implements BrowserBundleExecutor {
57
+ private readonly appConfig;
58
+ /**
59
+ * Creates the browser bundle boundary for one finalized app instance.
60
+ */
61
+ constructor(appConfig: EcoPagesAppConfig);
62
+ /**
63
+ * Runs one browser-targeted build through the app-owned executor.
64
+ *
65
+ * @remarks
66
+ * Browser defaults and app-owned browser build plugins are applied here so HMR
67
+ * and runtime asset generation do not have to recreate that policy at each call
68
+ * site.
69
+ */
70
+ bundle(options: BrowserBundleOptions): Promise<BuildResult>;
71
+ bundleGroupedEntries(entries: BrowserBundleGroupedEntry[], options: BrowserBundleGroupedOptions): Promise<BuildResult>;
72
+ }
73
+ export {};
@@ -0,0 +1,41 @@
1
+ import { getAppBrowserBuildPlugins, getAppBuildExecutor, getAppTranspileOptions } from "../../build/build-adapter.js";
2
+ import { mergeEcoBuildPlugins } from "../../build/build-manifest.js";
3
+ class BrowserBundleService {
4
+ appConfig;
5
+ /**
6
+ * Creates the browser bundle boundary for one finalized app instance.
7
+ */
8
+ constructor(appConfig) {
9
+ this.appConfig = appConfig;
10
+ }
11
+ /**
12
+ * Runs one browser-targeted build through the app-owned executor.
13
+ *
14
+ * @remarks
15
+ * Browser defaults and app-owned browser build plugins are applied here so HMR
16
+ * and runtime asset generation do not have to recreate that policy at each call
17
+ * site.
18
+ */
19
+ async bundle(options) {
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
+ const request = {
24
+ ...rawBuildOptions,
25
+ entrypoints: options.entrypoints,
26
+ ...getAppTranspileOptions(this.appConfig, profile),
27
+ plugins: mergeEcoBuildPlugins(plugins, filteredAppBrowserPlugins)
28
+ };
29
+ return await getAppBuildExecutor(this.appConfig).build(request);
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
+ }
38
+ }
39
+ export {
40
+ BrowserBundleService
41
+ };
@@ -1,5 +1,5 @@
1
- import { type PageCacheService } from './cache/page-cache-service.js';
2
- import type { CacheStrategy, RenderResult } from './cache/cache.types.js';
1
+ import { type PageCacheService } from './page-cache-service.js';
2
+ import type { CacheStrategy, RenderResult } from './cache.types.js';
3
3
  /**
4
4
  * Coordinates request-time page caching concerns around one render invocation.
5
5
  *
@@ -1,5 +1,7 @@
1
- import { getCacheControlHeader } from "./cache/page-cache-service.js";
1
+ import { getCacheControlHeader } from "./page-cache-service.js";
2
2
  class PageRequestCacheCoordinator {
3
+ cacheService;
4
+ defaultCacheStrategy;
3
5
  constructor(cacheService, defaultCacheStrategy) {
4
6
  this.cacheService = cacheService;
5
7
  this.defaultCacheStrategy = defaultCacheStrategy;
@@ -0,0 +1,37 @@
1
+ export type HtmlRewriterElement = {
2
+ append(content: string, options?: {
3
+ html?: boolean;
4
+ }): void;
5
+ };
6
+ export type HtmlRewriterRuntime = {
7
+ on(selector: 'head' | 'body', handler: {
8
+ element: (element: HtmlRewriterElement) => void;
9
+ }): HtmlRewriterRuntime;
10
+ transform(response: Response): Response;
11
+ };
12
+ export type HtmlRewriterConstructor = new () => HtmlRewriterRuntime;
13
+ export type HtmlRewriterMode = 'auto' | 'native' | 'worker-tools' | 'fallback';
14
+ export interface HtmlRewriterProvider {
15
+ createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
16
+ setMode(mode: HtmlRewriterMode): void;
17
+ }
18
+ export interface HtmlRewriterLogger {
19
+ warn(message: string): void;
20
+ }
21
+ export interface DefaultHtmlRewriterProviderOptions {
22
+ mode?: HtmlRewriterMode;
23
+ logger?: HtmlRewriterLogger;
24
+ getNativeHtmlRewriter?: () => HtmlRewriterConstructor | undefined;
25
+ loadWorkerToolsHtmlRewriter?: () => Promise<HtmlRewriterConstructor | null>;
26
+ }
27
+ export declare class DefaultHtmlRewriterProvider implements HtmlRewriterProvider {
28
+ private htmlRewriterConstructorPromise?;
29
+ private htmlRewriterMode;
30
+ private logger;
31
+ private getNativeHtmlRewriter;
32
+ private loadWorkerToolsHtmlRewriter;
33
+ constructor(options?: DefaultHtmlRewriterProviderOptions);
34
+ setMode(mode: HtmlRewriterMode): void;
35
+ createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
36
+ private resolveHtmlRewriterConstructor;
37
+ }
@@ -0,0 +1,68 @@
1
+ import { appLogger } from "../../global/app-logger.js";
2
+ class DefaultHtmlRewriterProvider {
3
+ htmlRewriterConstructorPromise;
4
+ htmlRewriterMode;
5
+ logger;
6
+ getNativeHtmlRewriter;
7
+ loadWorkerToolsHtmlRewriter;
8
+ constructor(options = {}) {
9
+ this.htmlRewriterMode = options.mode ?? "auto";
10
+ this.logger = options.logger ?? appLogger;
11
+ this.getNativeHtmlRewriter = options.getNativeHtmlRewriter ?? (() => globalThis.HTMLRewriter);
12
+ this.loadWorkerToolsHtmlRewriter = options.loadWorkerToolsHtmlRewriter ?? loadWorkerToolsHtmlRewriter;
13
+ }
14
+ setMode(mode) {
15
+ this.htmlRewriterMode = mode;
16
+ this.htmlRewriterConstructorPromise = void 0;
17
+ }
18
+ async createHtmlRewriter() {
19
+ const RuntimeHtmlRewriter = await this.resolveHtmlRewriterConstructor();
20
+ return RuntimeHtmlRewriter ? new RuntimeHtmlRewriter() : null;
21
+ }
22
+ async resolveHtmlRewriterConstructor() {
23
+ if (!this.htmlRewriterConstructorPromise) {
24
+ const mode = this.htmlRewriterMode;
25
+ const RuntimeHtmlRewriter = this.getNativeHtmlRewriter();
26
+ if (mode === "fallback") {
27
+ this.htmlRewriterConstructorPromise = Promise.resolve(null);
28
+ } else if (mode === "native") {
29
+ if (RuntimeHtmlRewriter) {
30
+ this.htmlRewriterConstructorPromise = Promise.resolve(RuntimeHtmlRewriter);
31
+ } else {
32
+ this.logger.warn(
33
+ "[HtmlTransformerService] Native HTMLRewriter was forced but is unavailable, falling back to string injection."
34
+ );
35
+ this.htmlRewriterConstructorPromise = Promise.resolve(null);
36
+ }
37
+ } else if (mode === "auto" && RuntimeHtmlRewriter) {
38
+ this.htmlRewriterConstructorPromise = Promise.resolve(RuntimeHtmlRewriter);
39
+ } else {
40
+ this.htmlRewriterConstructorPromise = this.loadWorkerToolsHtmlRewriter();
41
+ }
42
+ }
43
+ return this.htmlRewriterConstructorPromise;
44
+ }
45
+ }
46
+ async function loadWorkerToolsHtmlRewriter() {
47
+ try {
48
+ const module = await import("@worker-tools/html-rewriter/base64");
49
+ return module.HTMLRewriter;
50
+ } catch (primaryError) {
51
+ try {
52
+ const runtimeLocalModule = await import(
53
+ /* @vite-ignore */
54
+ new URL("../node_modules/@worker-tools/html-rewriter/base64.js", import.meta.url).href
55
+ );
56
+ return runtimeLocalModule.HTMLRewriter;
57
+ } catch {
58
+ const message = primaryError instanceof Error ? primaryError.message : String(primaryError);
59
+ appLogger.warn(
60
+ `[HtmlTransformerService] Failed to load @worker-tools/html-rewriter/base64, falling back to string injection: ${message}`
61
+ );
62
+ return null;
63
+ }
64
+ }
65
+ }
66
+ export {
67
+ DefaultHtmlRewriterProvider
68
+ };
@@ -0,0 +1,87 @@
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 interface HtmlTransformerServiceOptions {
5
+ htmlRewriterMode?: HtmlRewriterMode;
6
+ htmlRewriterProvider?: HtmlRewriterProvider;
7
+ }
8
+ export declare class HtmlTransformerService {
9
+ private processedDependencies;
10
+ private pagePackage?;
11
+ private htmlRewriterProvider;
12
+ constructor(options?: HtmlTransformerServiceOptions);
13
+ /**
14
+ * Overrides the HTML rewriter runtime selection.
15
+ *
16
+ * This is intended for internal/runtime tests that need deterministic
17
+ * selection between native, worker-tools, and string fallback behavior.
18
+ *
19
+ * @param mode Requested runtime selection strategy.
20
+ */
21
+ setHtmlRewriterMode(mode: HtmlRewriterMode): void;
22
+ private formatAttributes;
23
+ private generateScriptTag;
24
+ private generateStylesheetTag;
25
+ private appendDependencies;
26
+ private buildDependencyTags;
27
+ /**
28
+ * Injects generated markup immediately before the closing HTML tag when it is
29
+ * present, or appends/prepends a fallback insertion otherwise.
30
+ */
31
+ private injectBeforeClosingTag;
32
+ /**
33
+ * Replaces the current processed dependency set used during HTML finalization.
34
+ */
35
+ setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
36
+ /**
37
+ * Replaces the current structured page package used during HTML finalization.
38
+ */
39
+ setPagePackage(pagePackage: PagePackageResult): void;
40
+ /**
41
+ * Returns the processed dependencies queued for the next transform pass.
42
+ */
43
+ getProcessedDependencies(): ProcessedAsset[];
44
+ /**
45
+ * Returns the structured page package queued for the next transform pass.
46
+ */
47
+ getPagePackage(): PagePackageResult | undefined;
48
+ /**
49
+ * Applies attributes to the opening `<html>` tag when present.
50
+ */
51
+ applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
52
+ /**
53
+ * Applies attributes to the first element nested directly under `<body>`.
54
+ */
55
+ applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
56
+ /**
57
+ * Applies attributes to the first element in a fragment or full-document HTML
58
+ * string.
59
+ */
60
+ applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
61
+ /**
62
+ * Removes duplicate processed assets while preserving first-seen order.
63
+ *
64
+ * @remarks
65
+ * Dedupe keys include structural asset fields and HTML attributes so repeated
66
+ * orchestration passes can merge assets safely without collapsing distinct tag
67
+ * variants.
68
+ */
69
+ dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
70
+ /**
71
+ * Injects the currently processed dependencies into an HTML response.
72
+ *
73
+ * @remarks
74
+ * Native or worker-tools HTML rewriter support is preferred when available. A
75
+ * string-based fallback remains in place for runtimes that cannot provide one
76
+ * of those rewriter implementations.
77
+ */
78
+ transform(res: Response): Promise<Response>;
79
+ /**
80
+ * Splits processed assets into head and body injection groups.
81
+ */
82
+ private groupDependenciesByPosition;
83
+ /**
84
+ * Builds a serialized HTML attribute string from an attribute object.
85
+ */
86
+ private buildAttributeString;
87
+ }