@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.51

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 (456) hide show
  1. package/README.md +267 -14
  2. package/package.json +98 -108
  3. package/src/adapters/README.md +39 -0
  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 +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  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 +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  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 +2 -6
  24. package/src/adapters/index.js +2 -8
  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 +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  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 +20 -72
  37. package/src/adapters/node/server-adapter.js +98 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -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/{define-api-handler.d.ts → 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 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -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 +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/browser-runtime-import-rewrite-plugin.d.ts +26 -0
  74. package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
  75. package/src/build/browser-runtime-manifest.d.ts +31 -0
  76. package/src/build/browser-runtime-manifest.js +61 -0
  77. package/src/build/build-adapter.d.ts +175 -3
  78. package/src/build/build-adapter.js +633 -16
  79. package/src/build/build-manifest.d.ts +33 -0
  80. package/src/build/build-manifest.js +52 -0
  81. package/src/build/dev-build-coordinator.d.ts +72 -0
  82. package/src/build/dev-build-coordinator.js +154 -0
  83. package/src/build/esbuild-build-adapter.d.ts +16 -6
  84. package/src/build/esbuild-build-adapter.js +205 -75
  85. package/src/build/runtime-build-executor.d.ts +14 -0
  86. package/src/build/runtime-build-executor.js +22 -0
  87. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  88. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  89. package/src/config/README.md +36 -0
  90. package/src/config/config-builder.d.ts +54 -29
  91. package/src/config/config-builder.js +256 -50
  92. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  93. package/src/{constants.js → config/constants.js} +4 -0
  94. package/src/declarations.d.ts +19 -14
  95. package/src/dev/host-runtime.d.ts +10 -0
  96. package/src/dev/host-runtime.js +24 -0
  97. package/src/dev/sc-server.d.ts +1 -1
  98. package/src/dev/sc-server.js +1 -1
  99. package/src/eco/README.md +70 -16
  100. package/src/eco/eco.browser.d.ts +2 -0
  101. package/src/eco/eco.browser.js +88 -0
  102. package/src/eco/eco.js +63 -54
  103. package/src/eco/eco.types.d.ts +69 -6
  104. package/src/eco/eco.utils.d.ts +1 -40
  105. package/src/eco/eco.utils.js +5 -35
  106. package/src/eco/global-injector-map.d.ts +3 -3
  107. package/src/eco/global-injector-map.js +2 -2
  108. package/src/eco/lazy-injector-map.d.ts +2 -2
  109. package/src/errors/index.d.ts +1 -0
  110. package/src/errors/index.js +3 -1
  111. package/src/hmr/README.md +26 -0
  112. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  113. package/src/hmr/client/hmr-runtime.js +38 -7
  114. package/src/hmr/hmr-strategy.d.ts +16 -13
  115. package/src/hmr/hmr-strategy.js +22 -7
  116. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  117. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  118. package/src/hmr/hmr.test.e2e.js +26 -33
  119. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  120. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  121. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  122. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  123. package/src/index.browser.d.ts +2 -2
  124. package/src/index.browser.js +1 -1
  125. package/src/index.d.ts +4 -3
  126. package/src/index.js +16 -5
  127. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  128. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  129. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  130. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  132. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  133. package/src/plugins/README.md +35 -0
  134. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  135. package/src/plugins/alias-resolver-plugin.js +27 -5
  136. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  137. package/src/plugins/eco-component-meta-plugin.js +42 -24
  138. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  139. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  140. package/src/plugins/integration-plugin.d.ts +157 -29
  141. package/src/plugins/integration-plugin.js +115 -14
  142. package/src/plugins/processor.d.ts +17 -2
  143. package/src/plugins/processor.js +22 -3
  144. package/src/plugins/runtime-capability.d.ts +9 -0
  145. package/src/plugins/source-transform.d.ts +46 -0
  146. package/src/plugins/source-transform.js +71 -0
  147. package/src/route-renderer/GRAPH.md +83 -325
  148. package/src/route-renderer/README.md +73 -90
  149. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  150. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  151. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  152. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  153. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  154. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  155. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  156. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  157. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  158. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  159. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  160. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  161. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  162. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  163. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  164. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  165. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  166. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  167. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  168. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  169. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  170. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  171. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  172. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  173. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  174. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  175. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  176. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  177. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  178. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  179. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  180. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  181. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  182. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  183. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  184. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  185. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  186. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  187. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  188. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  189. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  190. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  191. package/src/route-renderer/route-renderer.d.ts +57 -14
  192. package/src/route-renderer/route-renderer.js +30 -18
  193. package/src/router/README.md +94 -0
  194. package/src/router/client/link-intent.d.ts +53 -0
  195. package/src/router/client/link-intent.js +34 -0
  196. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  197. package/src/router/client/link-intent.test.browser.js +43 -0
  198. package/src/router/client/navigation-coordinator.d.ts +169 -0
  199. package/src/router/client/navigation-coordinator.js +215 -0
  200. package/src/router/server/route-registry.d.ts +78 -0
  201. package/src/router/server/route-registry.js +262 -0
  202. package/src/services/README.md +28 -0
  203. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  204. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  205. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  208. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  209. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  210. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -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 -0
  218. package/src/services/assets/asset-processing-service/index.js +6 -0
  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/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  223. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  229. package/src/services/{asset-processing-service → 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 +120 -0
  231. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  235. package/src/services/{asset-processing-service → 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 +59 -0
  237. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  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 +73 -0
  242. package/src/services/assets/browser-bundle.service.js +41 -0
  243. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  244. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  245. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  246. package/src/services/html/html-rewriter-provider.service.js +68 -0
  247. package/src/services/html/html-transformer.service.d.ts +96 -0
  248. package/src/services/html/html-transformer.service.js +287 -0
  249. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  250. package/src/services/invalidation/development-invalidation.service.js +190 -0
  251. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  252. package/src/services/module-loading/app-module-loader.service.js +0 -0
  253. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  255. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  256. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  257. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  258. package/src/services/module-loading/module-loading-types.js +0 -0
  259. package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  261. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  262. package/src/services/module-loading/page-module-import.service.js +191 -0
  263. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  264. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  265. package/src/services/module-loading/source-module-support.d.ts +5 -0
  266. package/src/services/module-loading/source-module-support.js +8 -0
  267. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  268. package/src/services/runtime-state/dev-graph.service.js +162 -0
  269. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  271. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  272. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  273. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  274. package/src/static-site-generator/README.md +26 -0
  275. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  276. package/src/static-site-generator/static-site-generator.js +182 -138
  277. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  278. package/src/types/internal-types.js +0 -0
  279. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  280. package/src/types/public-types.js +0 -0
  281. package/src/utils/html-escaping.d.ts +7 -0
  282. package/src/utils/html-escaping.js +6 -0
  283. package/src/utils/locals-utils.d.ts +1 -1
  284. package/src/utils/parse-cli-args.d.ts +4 -1
  285. package/src/utils/parse-cli-args.js +16 -1
  286. package/src/utils/resolve-work-dir.d.ts +11 -0
  287. package/src/utils/resolve-work-dir.js +31 -0
  288. package/src/watchers/project-watcher.d.ts +11 -7
  289. package/src/watchers/project-watcher.js +69 -75
  290. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  291. package/src/watchers/project-watcher.test-helpers.js +6 -5
  292. package/CHANGELOG.md +0 -94
  293. package/src/adapters/abstract/application-adapter.ts +0 -337
  294. package/src/adapters/abstract/router-adapter.ts +0 -30
  295. package/src/adapters/abstract/server-adapter.ts +0 -79
  296. package/src/adapters/bun/client-bridge.ts +0 -62
  297. package/src/adapters/bun/create-app.ts +0 -189
  298. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  299. package/src/adapters/bun/define-api-handler.ts +0 -114
  300. package/src/adapters/bun/hmr-manager.ts +0 -276
  301. package/src/adapters/bun/index.ts +0 -3
  302. package/src/adapters/bun/server-adapter.ts +0 -492
  303. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  304. package/src/adapters/bun/server-lifecycle.js +0 -120
  305. package/src/adapters/bun/server-lifecycle.ts +0 -154
  306. package/src/adapters/index.ts +0 -6
  307. package/src/adapters/node/create-app.ts +0 -179
  308. package/src/adapters/node/index.d.ts +0 -4
  309. package/src/adapters/node/index.js +0 -8
  310. package/src/adapters/node/index.ts +0 -9
  311. package/src/adapters/node/node-client-bridge.ts +0 -79
  312. package/src/adapters/node/node-hmr-manager.ts +0 -271
  313. package/src/adapters/node/server-adapter.ts +0 -561
  314. package/src/adapters/node/static-content-server.ts +0 -203
  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/explicit-static-route-matcher.ts +0 -134
  318. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  319. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  320. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  321. package/src/adapters/shared/render-context.ts +0 -105
  322. package/src/adapters/shared/server-adapter.ts +0 -442
  323. package/src/adapters/shared/server-route-handler.ts +0 -166
  324. package/src/adapters/shared/server-static-builder.ts +0 -82
  325. package/src/build/build-adapter.ts +0 -133
  326. package/src/build/build-types.ts +0 -83
  327. package/src/build/esbuild-build-adapter.ts +0 -511
  328. package/src/config/config-builder.ts +0 -474
  329. package/src/constants.ts +0 -39
  330. package/src/create-app.ts +0 -87
  331. package/src/define-api-handler.js +0 -15
  332. package/src/define-api-handler.ts +0 -66
  333. package/src/dev/sc-server.ts +0 -143
  334. package/src/eco/component-render-context.d.ts +0 -105
  335. package/src/eco/component-render-context.js +0 -77
  336. package/src/eco/component-render-context.ts +0 -202
  337. package/src/eco/eco.ts +0 -221
  338. package/src/eco/eco.types.ts +0 -202
  339. package/src/eco/eco.utils.ts +0 -89
  340. package/src/eco/global-injector-map.ts +0 -112
  341. package/src/eco/lazy-injector-map.ts +0 -120
  342. package/src/eco/module-dependencies.ts +0 -75
  343. package/src/errors/http-error.ts +0 -72
  344. package/src/errors/index.ts +0 -2
  345. package/src/errors/locals-access-error.ts +0 -7
  346. package/src/global/app-logger.ts +0 -4
  347. package/src/hmr/client/hmr-runtime.ts +0 -121
  348. package/src/hmr/hmr-strategy.ts +0 -172
  349. package/src/hmr/hmr.test.e2e.ts +0 -75
  350. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  351. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  352. package/src/index.browser.ts +0 -3
  353. package/src/index.ts +0 -5
  354. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  355. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  356. package/src/internal-types.ts +0 -212
  357. package/src/plugins/alias-resolver-plugin.ts +0 -45
  358. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  359. package/src/plugins/integration-plugin.ts +0 -184
  360. package/src/plugins/processor.ts +0 -220
  361. package/src/public-types.ts +0 -1255
  362. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  363. package/src/route-renderer/component-graph-executor.js +0 -31
  364. package/src/route-renderer/component-graph-executor.ts +0 -84
  365. package/src/route-renderer/component-graph.d.ts +0 -42
  366. package/src/route-renderer/component-graph.js +0 -72
  367. package/src/route-renderer/component-graph.ts +0 -159
  368. package/src/route-renderer/component-marker.d.ts +0 -52
  369. package/src/route-renderer/component-marker.js +0 -46
  370. package/src/route-renderer/component-marker.ts +0 -117
  371. package/src/route-renderer/dependency-resolver.js +0 -428
  372. package/src/route-renderer/dependency-resolver.ts +0 -596
  373. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  374. package/src/route-renderer/html-post-processing.service.js +0 -86
  375. package/src/route-renderer/html-post-processing.service.ts +0 -103
  376. package/src/route-renderer/integration-renderer.d.ts +0 -339
  377. package/src/route-renderer/integration-renderer.js +0 -526
  378. package/src/route-renderer/integration-renderer.ts +0 -696
  379. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  380. package/src/route-renderer/marker-graph-resolver.js +0 -93
  381. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  382. package/src/route-renderer/page-module-loader.d.ts +0 -61
  383. package/src/route-renderer/page-module-loader.ts +0 -153
  384. package/src/route-renderer/render-execution.service.d.ts +0 -69
  385. package/src/route-renderer/render-execution.service.js +0 -91
  386. package/src/route-renderer/render-execution.service.ts +0 -158
  387. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  388. package/src/route-renderer/render-preparation.service.js +0 -243
  389. package/src/route-renderer/render-preparation.service.ts +0 -358
  390. package/src/route-renderer/route-renderer.ts +0 -80
  391. package/src/router/fs-router-scanner.d.ts +0 -41
  392. package/src/router/fs-router-scanner.js +0 -155
  393. package/src/router/fs-router-scanner.ts +0 -217
  394. package/src/router/fs-router.d.ts +0 -26
  395. package/src/router/fs-router.js +0 -100
  396. package/src/router/fs-router.ts +0 -122
  397. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  398. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  399. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  400. package/src/services/asset-processing-service/assets.types.ts +0 -112
  401. package/src/services/asset-processing-service/index.d.ts +0 -3
  402. package/src/services/asset-processing-service/index.js +0 -3
  403. package/src/services/asset-processing-service/index.ts +0 -3
  404. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  405. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  406. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  408. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  409. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  410. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  411. package/src/services/asset-processing-service/processors/index.js +0 -5
  412. package/src/services/asset-processing-service/processors/index.ts +0 -5
  413. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  414. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  415. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  417. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  418. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  419. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  420. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  421. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  422. package/src/services/cache/cache.types.ts +0 -126
  423. package/src/services/cache/index.ts +0 -18
  424. package/src/services/cache/memory-cache-store.ts +0 -130
  425. package/src/services/cache/page-cache-service.ts +0 -202
  426. package/src/services/html-transformer.service.d.ts +0 -50
  427. package/src/services/html-transformer.service.js +0 -163
  428. package/src/services/html-transformer.service.ts +0 -217
  429. package/src/services/page-module-import.service.d.ts +0 -37
  430. package/src/services/page-module-import.service.js +0 -88
  431. package/src/services/page-module-import.service.ts +0 -129
  432. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  433. package/src/services/schema-validation-service.ts +0 -204
  434. package/src/services/validation/standard-schema.types.ts +0 -68
  435. package/src/static-site-generator/static-site-generator.ts +0 -359
  436. package/src/utils/css.d.ts +0 -1
  437. package/src/utils/css.js +0 -7
  438. package/src/utils/css.ts +0 -5
  439. package/src/utils/deep-merge.ts +0 -47
  440. package/src/utils/hash.ts +0 -5
  441. package/src/utils/html.ts +0 -1
  442. package/src/utils/invariant.ts +0 -15
  443. package/src/utils/locals-utils.ts +0 -37
  444. package/src/utils/parse-cli-args.ts +0 -83
  445. package/src/utils/path-utils.module.ts +0 -14
  446. package/src/utils/runtime.ts +0 -44
  447. package/src/utils/server-utils.module.ts +0 -67
  448. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  449. package/src/watchers/project-watcher.ts +0 -364
  450. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  451. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  452. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  453. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  454. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  455. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  456. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -0,0 +1,126 @@
1
+ import path from "node:path";
2
+ import { fileURLToPath, pathToFileURL } from "node:url";
3
+ import { fileSystem } from "@ecopages/file-system";
4
+ import { getAppBuildAdapter } from "../../../../../build/build-adapter.js";
5
+ import { BaseScriptProcessor } from "../base/base-script-processor.js";
6
+ class NodeModuleScriptProcessor extends BaseScriptProcessor {
7
+ async process(dep) {
8
+ const modulePath = this.resolveModulePath(dep.importPath, this.appConfig.rootDir);
9
+ const moduleName = path.basename(modulePath);
10
+ const filename = dep.name ?? `nm-${moduleName}`;
11
+ const configHash = this.generateHash(
12
+ JSON.stringify({ inline: dep.inline, minify: !dep.inline && this.isProduction, opts: dep.bundleOptions })
13
+ );
14
+ const cachekey = `${this.buildCacheKey(filename, this.generateHash(modulePath), dep)}:${configHash}`;
15
+ return this.getOrProcess(cachekey, async () => {
16
+ if (dep.inline) {
17
+ const content = fileSystem.readFileAsBuffer(modulePath).toString();
18
+ return {
19
+ content,
20
+ kind: dep.kind,
21
+ position: dep.position,
22
+ attributes: dep.attributes,
23
+ inline: true,
24
+ excludeFromHtml: dep.excludeFromHtml,
25
+ packageRole: dep.packageRole,
26
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
27
+ };
28
+ }
29
+ const outdir = path.join(this.getAssetsDir(), "vendors");
30
+ const bundlerOptions = this.getBundlerOptions(dep);
31
+ const filePath = await this.bundleScript({
32
+ entrypoint: modulePath,
33
+ outdir,
34
+ minify: this.isProduction,
35
+ naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]"),
36
+ ...bundlerOptions
37
+ });
38
+ return {
39
+ filepath: filePath,
40
+ kind: dep.kind,
41
+ position: dep.position,
42
+ attributes: dep.attributes,
43
+ inline: dep.inline,
44
+ excludeFromHtml: dep.excludeFromHtml,
45
+ packageRole: dep.packageRole,
46
+ bundledSourceFilepaths: dep.bundledSourceFilepaths
47
+ };
48
+ });
49
+ }
50
+ /**
51
+ * Resolves a node-module script entry from the current app boundary.
52
+ *
53
+ * @remarks
54
+ * The build adapter remains the primary resolution surface because Bun/native
55
+ * host-owned builds may have a more accurate view of aliases and package
56
+ * ownership than core does. The local fallback only runs when that adapter
57
+ * resolution is unavailable.
58
+ */
59
+ resolveModulePath(importPath, rootDir) {
60
+ if (path.isAbsolute(importPath) && fileSystem.exists(importPath)) {
61
+ return importPath;
62
+ }
63
+ try {
64
+ return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
65
+ } catch {
66
+ return this.resolveModulePathFallback(importPath, rootDir);
67
+ }
68
+ }
69
+ /**
70
+ * Resolves browser-owned script specifiers without relying on CommonJS resolution.
71
+ *
72
+ * @remarks
73
+ * This path intentionally stays ESM-first because these assets are emitted as
74
+ * browser scripts. We first ask Node's ESM resolver to evaluate the package
75
+ * export map from the app boundary. If that still fails, we fall back to a
76
+ * bounded filesystem probe so direct file installs and package subpaths like
77
+ * `pkg/client/entry` still resolve when the export map does not cover them.
78
+ */
79
+ resolveModulePathFallback(importPath, rootDir, maxDepth = 5) {
80
+ try {
81
+ return fileURLToPath(
82
+ import.meta.resolve(importPath, pathToFileURL(path.join(rootDir, "package.json")).href)
83
+ );
84
+ } catch {
85
+ }
86
+ let currentDir = rootDir;
87
+ let remainingDepth = maxDepth;
88
+ while (remainingDepth >= 0) {
89
+ for (const candidatePath of this.getFallbackCandidatePaths(currentDir, importPath)) {
90
+ if (fileSystem.exists(candidatePath)) {
91
+ return candidatePath;
92
+ }
93
+ }
94
+ const parentDir = path.dirname(currentDir);
95
+ if (parentDir === currentDir) {
96
+ break;
97
+ }
98
+ currentDir = parentDir;
99
+ remainingDepth -= 1;
100
+ }
101
+ throw new Error(`Could not resolve module '${importPath}' from '${rootDir}'`);
102
+ }
103
+ /**
104
+ * Returns the file candidates we accept during the final literal filesystem probe.
105
+ *
106
+ * @remarks
107
+ * This is intentionally small and browser-entry-oriented: direct files, common
108
+ * JS extensions, and `index.*` entrypoints. If a package needs anything more
109
+ * exotic, it should resolve through the adapter or ESM export-map path above.
110
+ */
111
+ getFallbackCandidatePaths(rootDir, importPath) {
112
+ const moduleBasePath = path.join(rootDir, "node_modules", importPath);
113
+ return [
114
+ moduleBasePath,
115
+ `${moduleBasePath}.js`,
116
+ `${moduleBasePath}.mjs`,
117
+ `${moduleBasePath}.cjs`,
118
+ path.join(moduleBasePath, "index.js"),
119
+ path.join(moduleBasePath, "index.mjs"),
120
+ path.join(moduleBasePath, "index.cjs")
121
+ ];
122
+ }
123
+ }
124
+ export {
125
+ NodeModuleScriptProcessor
126
+ };
@@ -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,40 @@
1
+ export type HtmlRewriterElement = {
2
+ prepend(content: string, options?: {
3
+ html?: boolean;
4
+ }): void;
5
+ append(content: string, options?: {
6
+ html?: boolean;
7
+ }): void;
8
+ };
9
+ export type HtmlRewriterRuntime = {
10
+ on(selector: 'head' | 'body', handler: {
11
+ element: (element: HtmlRewriterElement) => void;
12
+ }): HtmlRewriterRuntime;
13
+ transform(response: Response): Response;
14
+ };
15
+ export type HtmlRewriterConstructor = new () => HtmlRewriterRuntime;
16
+ export type HtmlRewriterMode = 'auto' | 'native' | 'worker-tools' | 'fallback';
17
+ export interface HtmlRewriterProvider {
18
+ createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
19
+ setMode(mode: HtmlRewriterMode): void;
20
+ }
21
+ export interface HtmlRewriterLogger {
22
+ warn(message: string): void;
23
+ }
24
+ export interface DefaultHtmlRewriterProviderOptions {
25
+ mode?: HtmlRewriterMode;
26
+ logger?: HtmlRewriterLogger;
27
+ getNativeHtmlRewriter?: () => HtmlRewriterConstructor | undefined;
28
+ loadWorkerToolsHtmlRewriter?: () => Promise<HtmlRewriterConstructor | null>;
29
+ }
30
+ export declare class DefaultHtmlRewriterProvider implements HtmlRewriterProvider {
31
+ private htmlRewriterConstructorPromise?;
32
+ private htmlRewriterMode;
33
+ private logger;
34
+ private getNativeHtmlRewriter;
35
+ private loadWorkerToolsHtmlRewriter;
36
+ constructor(options?: DefaultHtmlRewriterProviderOptions);
37
+ setMode(mode: HtmlRewriterMode): void;
38
+ createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
39
+ private resolveHtmlRewriterConstructor;
40
+ }
@@ -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,96 @@
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
+ };
9
+ export interface HtmlTransformerServiceOptions {
10
+ htmlRewriterMode?: HtmlRewriterMode;
11
+ htmlRewriterProvider?: HtmlRewriterProvider;
12
+ }
13
+ export declare class HtmlTransformerService {
14
+ private processedDependencies;
15
+ private pagePackage?;
16
+ private htmlRewriterProvider;
17
+ constructor(options?: HtmlTransformerServiceOptions);
18
+ /**
19
+ * Overrides the HTML rewriter runtime selection.
20
+ *
21
+ * This is intended for internal/runtime tests that need deterministic
22
+ * selection between native, worker-tools, and string fallback behavior.
23
+ *
24
+ * @param mode Requested runtime selection strategy.
25
+ */
26
+ setHtmlRewriterMode(mode: HtmlRewriterMode): void;
27
+ private formatAttributes;
28
+ private generateScriptTag;
29
+ private generateStylesheetTag;
30
+ private appendDependencies;
31
+ private buildDependencyTags;
32
+ private applyContributions;
33
+ /**
34
+ * Injects generated markup immediately before the closing HTML tag when it is
35
+ * present, or appends/prepends a fallback insertion otherwise.
36
+ */
37
+ private injectBeforeClosingTag;
38
+ private injectAfterOpeningTag;
39
+ private groupContributionsByPlacement;
40
+ /**
41
+ * Replaces the current processed dependency set used during HTML finalization.
42
+ */
43
+ setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
44
+ /**
45
+ * Replaces the current structured page package used during HTML finalization.
46
+ */
47
+ setPagePackage(pagePackage: PagePackageResult): void;
48
+ /**
49
+ * Returns the processed dependencies queued for the next transform pass.
50
+ */
51
+ getProcessedDependencies(): ProcessedAsset[];
52
+ /**
53
+ * Returns the structured page package queued for the next transform pass.
54
+ */
55
+ getPagePackage(): PagePackageResult | undefined;
56
+ /**
57
+ * Applies attributes to the opening `<html>` tag when present.
58
+ */
59
+ applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
60
+ /**
61
+ * Applies attributes to the first element nested directly under `<body>`.
62
+ */
63
+ applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
64
+ /**
65
+ * Applies attributes to the first element in a fragment or full-document HTML
66
+ * string.
67
+ */
68
+ applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
69
+ /**
70
+ * Removes duplicate processed assets while preserving first-seen order.
71
+ *
72
+ * @remarks
73
+ * Dedupe keys include structural asset fields and HTML attributes so repeated
74
+ * orchestration passes can merge assets safely without collapsing distinct tag
75
+ * variants.
76
+ */
77
+ dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
78
+ /**
79
+ * Injects the currently processed dependencies into an HTML response.
80
+ *
81
+ * @remarks
82
+ * Native or worker-tools HTML rewriter support is preferred when available. A
83
+ * string-based fallback remains in place for runtimes that cannot provide one
84
+ * of those rewriter implementations.
85
+ */
86
+ transform(res: Response, contributions?: HtmlDocumentContribution[]): Promise<Response>;
87
+ /**
88
+ * Splits processed assets into head and body injection groups.
89
+ */
90
+ private groupDependenciesByPosition;
91
+ private resolvePagePackageHtmlDependencies;
92
+ /**
93
+ * Builds a serialized HTML attribute string from an attribute object.
94
+ */
95
+ private buildAttributeString;
96
+ }