@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55

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 (594) hide show
  1. package/package.json +196 -91
  2. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  3. package/src/adapters/abstract/application-adapter.js +121 -0
  4. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  5. package/src/adapters/abstract/router-adapter.js +5 -0
  6. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  7. package/src/adapters/abstract/server-adapter.js +15 -0
  8. package/src/adapters/bun/client-bridge.d.ts +34 -0
  9. package/src/adapters/bun/client-bridge.js +48 -0
  10. package/src/adapters/bun/create-app.d.ts +60 -0
  11. package/src/adapters/bun/create-app.js +140 -0
  12. package/src/adapters/bun/hmr-manager.d.ts +47 -0
  13. package/src/adapters/bun/hmr-manager.js +58 -0
  14. package/src/adapters/bun/index.d.ts +2 -0
  15. package/src/adapters/bun/index.js +8 -0
  16. package/src/adapters/bun/runtime-host.d.ts +52 -0
  17. package/src/adapters/bun/runtime-host.js +56 -0
  18. package/src/adapters/bun/server-adapter.d.ts +223 -0
  19. package/src/adapters/bun/server-adapter.js +450 -0
  20. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  21. package/src/adapters/bun/static-preview-host.js +45 -0
  22. package/src/adapters/create-app.d.ts +20 -0
  23. package/src/adapters/create-app.js +66 -0
  24. package/src/adapters/index.d.ts +2 -0
  25. package/src/adapters/index.js +8 -0
  26. package/src/adapters/node/create-app.d.ts +24 -0
  27. package/src/adapters/node/create-app.js +92 -0
  28. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  29. package/src/adapters/node/http-request-bridge.js +118 -0
  30. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  31. package/src/adapters/node/node-client-bridge.js +66 -0
  32. package/src/adapters/node/node-hmr-manager.d.ts +52 -0
  33. package/src/adapters/node/node-hmr-manager.js +49 -0
  34. package/src/adapters/node/runtime-host.d.ts +57 -0
  35. package/src/adapters/node/runtime-host.js +92 -0
  36. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  37. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  38. package/src/adapters/node/server-adapter.d.ts +138 -0
  39. package/src/adapters/node/server-adapter.js +313 -0
  40. package/src/adapters/node/static-content-server.d.ts +60 -0
  41. package/src/adapters/node/static-content-server.js +194 -0
  42. package/src/adapters/node/static-preview-host.d.ts +55 -0
  43. package/src/adapters/node/static-preview-host.js +68 -0
  44. package/src/adapters/shared/api-response.d.ts +52 -0
  45. package/src/adapters/shared/api-response.js +96 -0
  46. package/src/adapters/shared/application-adapter.d.ts +18 -0
  47. package/src/adapters/shared/application-adapter.js +90 -0
  48. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  49. package/src/adapters/shared/define-api-handler.js +15 -0
  50. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  51. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  52. package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
  53. package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
  54. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
  55. package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
  56. package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
  57. package/src/adapters/shared/fs-server-response-factory.js +81 -0
  58. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  59. package/src/adapters/shared/fs-server-response-matcher.js +186 -0
  60. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  61. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  62. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  63. package/src/adapters/shared/hmr-html-response.js +33 -0
  64. package/src/adapters/shared/render-context.d.ts +16 -0
  65. package/src/adapters/shared/render-context.js +93 -0
  66. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  67. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  68. package/src/adapters/shared/runtime-host.d.ts +12 -0
  69. package/src/adapters/shared/runtime-host.js +0 -0
  70. package/src/adapters/shared/server-adapter.d.ts +108 -0
  71. package/src/adapters/shared/server-adapter.js +436 -0
  72. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  73. package/src/adapters/shared/server-route-handler.js +111 -0
  74. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  75. package/src/adapters/shared/server-static-builder.js +100 -0
  76. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  77. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  78. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  79. package/src/adapters/shared/static-preview-host.js +0 -0
  80. package/src/build/browser-runtime-manifest.d.ts +31 -0
  81. package/src/build/browser-runtime-manifest.js +61 -0
  82. package/src/build/{browser-runtime-plugin-helpers.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
  83. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  84. package/src/build/browser-runtime-plugin.d.ts +78 -0
  85. package/src/build/browser-runtime-plugin.js +172 -0
  86. package/src/build/build-adapter.d.ts +504 -0
  87. package/src/build/build-adapter.js +240 -0
  88. package/src/build/build-manifest.d.ts +33 -0
  89. package/src/build/build-manifest.js +49 -0
  90. package/src/build/build-types.d.ts +57 -0
  91. package/src/build/build-types.js +0 -0
  92. package/src/build/rolldown-build-adapter.d.ts +32 -0
  93. package/src/build/rolldown-build-adapter.js +260 -0
  94. package/src/build/rolldown-plugin-bridge.d.ts +50 -0
  95. package/src/build/rolldown-plugin-bridge.js +194 -0
  96. package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
  97. package/src/build/runtime-build-executor.js +19 -0
  98. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  99. package/src/build/runtime-build-output-normalizer.js +111 -0
  100. package/src/build/serialized-build-executor.d.ts +64 -0
  101. package/src/build/serialized-build-executor.js +63 -0
  102. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  103. package/src/build/server-side-css-shim-plugin.js +35 -0
  104. package/src/cache/{index.ts → index.d.ts} +1 -1
  105. package/src/cache/index.js +6 -0
  106. package/src/cache/module-parse-cache.d.ts +65 -0
  107. package/src/cache/module-parse-cache.js +75 -0
  108. package/src/config/config-builder.d.ts +252 -0
  109. package/src/config/config-builder.js +589 -0
  110. package/src/config/{constants.ts → constants.d.ts} +13 -22
  111. package/src/config/constants.js +25 -0
  112. package/src/dev/host-runtime.d.ts +10 -0
  113. package/src/dev/host-runtime.js +24 -0
  114. package/src/dev/sc-server.d.ts +30 -0
  115. package/src/dev/sc-server.js +111 -0
  116. package/src/eco/eco.browser.d.ts +2 -0
  117. package/src/eco/eco.browser.js +88 -0
  118. package/src/eco/eco.d.ts +9 -0
  119. package/src/eco/eco.js +119 -0
  120. package/src/eco/eco.types.d.ts +230 -0
  121. package/src/eco/eco.types.js +0 -0
  122. package/src/eco/eco.utils.d.ts +1 -0
  123. package/src/eco/eco.utils.js +10 -0
  124. package/src/eco/global-injector-map.d.ts +16 -0
  125. package/src/eco/global-injector-map.js +80 -0
  126. package/src/eco/lazy-injector-map.d.ts +8 -0
  127. package/src/eco/lazy-injector-map.js +70 -0
  128. package/src/eco/module-dependencies.d.ts +18 -0
  129. package/src/eco/module-dependencies.js +49 -0
  130. package/src/errors/http-error.d.ts +31 -0
  131. package/src/errors/http-error.js +50 -0
  132. package/src/errors/index.d.ts +3 -0
  133. package/src/errors/index.js +6 -0
  134. package/src/errors/locals-access-error.d.ts +4 -0
  135. package/src/errors/locals-access-error.js +9 -0
  136. package/src/global/app-logger.d.ts +2 -0
  137. package/src/global/app-logger.js +6 -0
  138. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  139. package/src/hmr/client/hmr-runtime.js +117 -0
  140. package/src/hmr/hmr-strategy.d.ts +162 -0
  141. package/src/hmr/hmr-strategy.js +44 -0
  142. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  143. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  144. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  145. package/src/hmr/hmr.test.e2e.js +43 -0
  146. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  147. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  148. package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
  149. package/src/hmr/strategies/js-hmr-strategy.js +173 -0
  150. package/src/index.browser.d.ts +3 -0
  151. package/src/index.browser.js +4 -0
  152. package/src/index.d.ts +6 -0
  153. package/src/index.js +21 -0
  154. package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
  155. package/src/integrations/ghtml/ghtml-renderer.js +57 -0
  156. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  157. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  158. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  159. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  160. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  161. package/src/plugins/alias-resolver-cache.js +106 -0
  162. package/src/plugins/alias-resolver-plugin.d.ts +6 -0
  163. package/src/plugins/alias-resolver-plugin.js +65 -0
  164. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  165. package/src/plugins/eco-component-meta-plugin.js +175 -0
  166. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  167. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  168. package/src/plugins/integration-plugin.d.ts +230 -0
  169. package/src/plugins/integration-plugin.js +201 -0
  170. package/src/plugins/processor.d.ts +97 -0
  171. package/src/plugins/processor.js +141 -0
  172. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  173. package/src/plugins/runtime-capability.js +0 -0
  174. package/src/plugins/source-transform.d.ts +46 -0
  175. package/src/plugins/source-transform.js +71 -0
  176. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  177. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  178. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  179. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  180. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  181. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  182. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  183. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  184. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  185. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  186. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  187. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  188. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  189. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  190. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  191. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  192. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  193. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  194. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  195. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  196. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  197. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  198. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  199. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  200. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  201. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  202. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  203. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  204. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  205. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  206. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  207. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  208. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  209. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  210. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  211. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  212. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  213. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  214. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  215. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  216. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  217. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  218. package/src/route-renderer/route-renderer.d.ts +69 -0
  219. package/src/route-renderer/route-renderer.js +80 -0
  220. package/src/router/client/link-intent.js +34 -0
  221. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  222. package/src/router/client/link-intent.test.browser.js +43 -0
  223. package/src/router/client/navigation-coordinator.d.ts +169 -0
  224. package/src/router/client/navigation-coordinator.js +215 -0
  225. package/src/router/server/route-registry.d.ts +78 -0
  226. package/src/router/server/route-registry.js +262 -0
  227. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  228. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  229. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  230. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  231. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  232. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  233. package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
  234. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  235. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  236. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  237. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  238. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  239. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  240. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  241. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  242. package/src/services/assets/asset-processing-service/index.js +6 -0
  243. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  244. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  245. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  246. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  247. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  248. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  249. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  250. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  251. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  252. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  253. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  254. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  255. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  256. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  257. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  258. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
  259. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  260. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  261. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  262. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  263. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  264. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
  265. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  266. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  267. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  268. package/src/services/assets/browser-bundle.service.js +41 -0
  269. package/src/services/cache/cache.types.d.ts +107 -0
  270. package/src/services/cache/cache.types.js +0 -0
  271. package/src/services/cache/index.d.ts +7 -0
  272. package/src/services/cache/index.js +7 -0
  273. package/src/services/cache/memory-cache-store.d.ts +42 -0
  274. package/src/services/cache/memory-cache-store.js +98 -0
  275. package/src/services/cache/page-cache-service.d.ts +70 -0
  276. package/src/services/cache/page-cache-service.js +152 -0
  277. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  278. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  279. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  280. package/src/services/html/html-rewriter-provider.service.js +68 -0
  281. package/src/services/html/html-transformer.service.d.ts +96 -0
  282. package/src/services/html/html-transformer.service.js +287 -0
  283. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  284. package/src/services/invalidation/development-invalidation.service.js +190 -0
  285. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  286. package/src/services/module-loading/app-module-loader.service.js +0 -0
  287. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  288. package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
  289. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  290. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  291. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  292. package/src/services/module-loading/module-loading-types.js +0 -0
  293. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  294. package/src/services/module-loading/page-module-import.service.js +193 -0
  295. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  296. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  297. package/src/services/module-loading/source-module-support.d.ts +5 -0
  298. package/src/services/module-loading/source-module-support.js +8 -0
  299. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  300. package/src/services/runtime-state/dev-graph.service.js +162 -0
  301. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  303. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  304. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  305. package/src/services/validation/schema-validation-service.d.ts +122 -0
  306. package/src/services/validation/schema-validation-service.js +101 -0
  307. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  308. package/src/services/validation/standard-schema.types.js +0 -0
  309. package/src/static-site-generator/static-site-generator.d.ts +104 -0
  310. package/src/static-site-generator/static-site-generator.js +316 -0
  311. package/src/types/internal-types.d.ts +232 -0
  312. package/src/types/internal-types.js +0 -0
  313. package/src/types/public-types.d.ts +1307 -0
  314. package/src/types/public-types.js +0 -0
  315. package/src/utils/deep-merge.d.ts +14 -0
  316. package/src/utils/deep-merge.js +32 -0
  317. package/src/utils/hash.d.ts +1 -0
  318. package/src/utils/hash.js +7 -0
  319. package/src/utils/html-escaping.d.ts +7 -0
  320. package/src/utils/html-escaping.js +6 -0
  321. package/src/utils/html.js +4 -0
  322. package/src/utils/invariant.d.ts +5 -0
  323. package/src/utils/invariant.js +11 -0
  324. package/src/utils/locals-utils.d.ts +15 -0
  325. package/src/utils/locals-utils.js +24 -0
  326. package/src/utils/parse-cli-args.d.ts +27 -0
  327. package/src/utils/parse-cli-args.js +62 -0
  328. package/src/utils/path-utils.module.d.ts +5 -0
  329. package/src/utils/path-utils.module.js +14 -0
  330. package/src/utils/resolve-work-dir.d.ts +11 -0
  331. package/src/utils/resolve-work-dir.js +31 -0
  332. package/src/utils/runtime.d.ts +11 -0
  333. package/src/utils/runtime.js +40 -0
  334. package/src/utils/server-utils.module.d.ts +19 -0
  335. package/src/utils/server-utils.module.js +56 -0
  336. package/src/watchers/project-watcher.d.ts +136 -0
  337. package/src/watchers/project-watcher.js +275 -0
  338. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  339. package/src/watchers/project-watcher.test-helpers.js +52 -0
  340. package/src/adapters/abstract/application-adapter.test.ts +0 -218
  341. package/src/adapters/abstract/application-adapter.ts +0 -379
  342. package/src/adapters/abstract/router-adapter.ts +0 -30
  343. package/src/adapters/abstract/server-adapter.ts +0 -79
  344. package/src/adapters/bun/client-bridge.ts +0 -62
  345. package/src/adapters/bun/create-app.ts +0 -214
  346. package/src/adapters/bun/hmr-manager.test.ts +0 -265
  347. package/src/adapters/bun/hmr-manager.ts +0 -88
  348. package/src/adapters/bun/index.ts +0 -2
  349. package/src/adapters/bun/runtime-host.ts +0 -76
  350. package/src/adapters/bun/server-adapter.ts +0 -605
  351. package/src/adapters/bun/static-preview-host.ts +0 -70
  352. package/src/adapters/create-app.test.ts +0 -10
  353. package/src/adapters/create-app.ts +0 -91
  354. package/src/adapters/index.ts +0 -2
  355. package/src/adapters/node/create-app.test.ts +0 -76
  356. package/src/adapters/node/create-app.ts +0 -116
  357. package/src/adapters/node/http-request-bridge.test.ts +0 -146
  358. package/src/adapters/node/http-request-bridge.ts +0 -176
  359. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  360. package/src/adapters/node/node-client-bridge.ts +0 -79
  361. package/src/adapters/node/node-hmr-manager.test.ts +0 -374
  362. package/src/adapters/node/node-hmr-manager.ts +0 -72
  363. package/src/adapters/node/runtime-host.test.ts +0 -49
  364. package/src/adapters/node/runtime-host.ts +0 -113
  365. package/src/adapters/node/server-adapter-dependencies.ts +0 -28
  366. package/src/adapters/node/server-adapter.test.ts +0 -84
  367. package/src/adapters/node/server-adapter.ts +0 -423
  368. package/src/adapters/node/static-content-server.test.ts +0 -60
  369. package/src/adapters/node/static-content-server.ts +0 -239
  370. package/src/adapters/node/static-preview-host.test.ts +0 -89
  371. package/src/adapters/node/static-preview-host.ts +0 -101
  372. package/src/adapters/shared/api-response.test.ts +0 -97
  373. package/src/adapters/shared/api-response.ts +0 -104
  374. package/src/adapters/shared/application-adapter.ts +0 -199
  375. package/src/adapters/shared/define-api-handler.ts +0 -66
  376. package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
  377. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  378. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
  379. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
  380. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
  381. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
  382. package/src/adapters/shared/fs-server-response-factory.ts +0 -96
  383. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
  384. package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
  385. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  386. package/src/adapters/shared/hmr-html-response.ts +0 -54
  387. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
  388. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
  389. package/src/adapters/shared/render-context.test.ts +0 -244
  390. package/src/adapters/shared/render-context.ts +0 -161
  391. package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
  392. package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
  393. package/src/adapters/shared/runtime-host.ts +0 -11
  394. package/src/adapters/shared/server-adapter.test.ts +0 -130
  395. package/src/adapters/shared/server-adapter.ts +0 -571
  396. package/src/adapters/shared/server-route-handler.test.ts +0 -112
  397. package/src/adapters/shared/server-route-handler.ts +0 -153
  398. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  399. package/src/adapters/shared/server-static-builder.ts +0 -170
  400. package/src/adapters/shared/shared-hmr-manager.ts +0 -298
  401. package/src/adapters/shared/static-preview-host.ts +0 -12
  402. package/src/build/browser-runtime-manifest.test.ts +0 -121
  403. package/src/build/browser-runtime-manifest.ts +0 -105
  404. package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
  405. package/src/build/browser-runtime-plugin.test.ts +0 -256
  406. package/src/build/browser-runtime-plugin.ts +0 -306
  407. package/src/build/build-adapter.test.ts +0 -463
  408. package/src/build/build-adapter.ts +0 -788
  409. package/src/build/build-manifest.ts +0 -79
  410. package/src/build/build-types.ts +0 -83
  411. package/src/build/rolldown-build-adapter.test.ts +0 -352
  412. package/src/build/rolldown-build-adapter.ts +0 -363
  413. package/src/build/rolldown-plugin-bridge.test.ts +0 -256
  414. package/src/build/rolldown-plugin-bridge.ts +0 -309
  415. package/src/build/runtime-build-executor.test.ts +0 -130
  416. package/src/build/runtime-build-output-normalizer.ts +0 -137
  417. package/src/build/serialized-build-executor.test.ts +0 -96
  418. package/src/build/serialized-build-executor.ts +0 -90
  419. package/src/build/server-side-css-shim-plugin.ts +0 -77
  420. package/src/cache/module-parse-cache.test.ts +0 -73
  421. package/src/cache/module-parse-cache.ts +0 -137
  422. package/src/config/config-builder.test.ts +0 -456
  423. package/src/config/config-builder.ts +0 -728
  424. package/src/config/config-builder.typecheck.test.ts +0 -96
  425. package/src/dev/host-runtime.ts +0 -34
  426. package/src/dev/sc-server.ts +0 -143
  427. package/src/eco/eco.browser.test.ts +0 -43
  428. package/src/eco/eco.browser.ts +0 -137
  429. package/src/eco/eco.test.ts +0 -781
  430. package/src/eco/eco.ts +0 -262
  431. package/src/eco/eco.types.ts +0 -293
  432. package/src/eco/eco.utils.test.ts +0 -219
  433. package/src/eco/eco.utils.ts +0 -5
  434. package/src/eco/global-injector-map.test.ts +0 -42
  435. package/src/eco/global-injector-map.ts +0 -112
  436. package/src/eco/lazy-injector-map.test.ts +0 -66
  437. package/src/eco/lazy-injector-map.ts +0 -120
  438. package/src/eco/module-dependencies.test.ts +0 -30
  439. package/src/eco/module-dependencies.ts +0 -75
  440. package/src/errors/http-error.test.ts +0 -134
  441. package/src/errors/http-error.ts +0 -72
  442. package/src/errors/index.ts +0 -3
  443. package/src/errors/locals-access-error.ts +0 -7
  444. package/src/global/app-logger.ts +0 -4
  445. package/src/global/utils.test.ts +0 -12
  446. 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
  447. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  448. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  449. package/src/hmr/client/hmr-runtime.ts +0 -162
  450. package/src/hmr/hmr-strategy.test.ts +0 -124
  451. package/src/hmr/hmr-strategy.ts +0 -177
  452. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  453. package/src/hmr/hmr.test.e2e.ts +0 -66
  454. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  455. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -344
  456. package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
  457. package/src/index.browser.ts +0 -3
  458. package/src/index.ts +0 -15
  459. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  460. package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
  461. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  462. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  463. package/src/plugins/alias-resolver-cache.test.ts +0 -110
  464. package/src/plugins/alias-resolver-cache.ts +0 -145
  465. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  466. package/src/plugins/alias-resolver-plugin.ts +0 -75
  467. package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
  468. package/src/plugins/eco-component-meta-plugin.ts +0 -518
  469. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  470. package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
  471. package/src/plugins/integration-plugin.test.ts +0 -151
  472. package/src/plugins/integration-plugin.ts +0 -344
  473. package/src/plugins/processor.test.ts +0 -148
  474. package/src/plugins/processor.ts +0 -257
  475. package/src/plugins/source-transform.test.ts +0 -82
  476. package/src/plugins/source-transform.ts +0 -123
  477. package/src/route-renderer/orchestration/component-render-context.ts +0 -338
  478. package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
  479. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
  480. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
  481. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
  482. package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
  483. package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
  484. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
  485. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
  486. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
  487. package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
  488. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
  489. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
  490. package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
  491. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  492. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  493. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
  494. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
  495. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
  496. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
  497. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  498. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  499. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  500. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  501. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  502. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
  503. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  504. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  505. package/src/route-renderer/route-renderer.ts +0 -133
  506. package/src/router/client/link-intent.test.browser.ts +0 -51
  507. package/src/router/client/link-intent.ts +0 -92
  508. package/src/router/client/navigation-coordinator.test.ts +0 -237
  509. package/src/router/client/navigation-coordinator.ts +0 -453
  510. package/src/router/server/route-registry.test.ts +0 -176
  511. package/src/router/server/route-registry.ts +0 -382
  512. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  513. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
  514. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
  515. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  516. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  517. package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
  518. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  519. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
  520. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  521. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  522. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  523. package/src/services/assets/asset-processing-service/index.ts +0 -6
  524. package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
  525. package/src/services/assets/asset-processing-service/page-package.ts +0 -103
  526. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  527. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  528. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  529. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
  530. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  531. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
  532. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
  533. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  534. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
  535. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
  536. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
  537. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  538. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
  539. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
  540. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  541. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  542. package/src/services/assets/browser-bundle.service.ts +0 -109
  543. package/src/services/cache/cache.types.ts +0 -126
  544. package/src/services/cache/index.ts +0 -18
  545. package/src/services/cache/memory-cache-store.test.ts +0 -225
  546. package/src/services/cache/memory-cache-store.ts +0 -130
  547. package/src/services/cache/page-cache-service.test.ts +0 -175
  548. package/src/services/cache/page-cache-service.ts +0 -202
  549. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  550. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  551. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  552. package/src/services/html/html-rewriter-provider.service.ts +0 -105
  553. package/src/services/html/html-transformer.service.test.ts +0 -544
  554. package/src/services/html/html-transformer.service.ts +0 -369
  555. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  556. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  557. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  558. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
  559. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
  560. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  561. package/src/services/module-loading/page-module-import.service.test.ts +0 -652
  562. package/src/services/module-loading/page-module-import.service.ts +0 -302
  563. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
  564. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  565. package/src/services/module-loading/source-module-support.ts +0 -19
  566. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  567. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  568. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  569. package/src/services/validation/schema-validation-service.test.ts +0 -223
  570. package/src/services/validation/schema-validation-service.ts +0 -204
  571. package/src/static-site-generator/static-site-generator.test.ts +0 -408
  572. package/src/static-site-generator/static-site-generator.ts +0 -445
  573. package/src/types/internal-types.ts +0 -243
  574. package/src/types/public-types.ts +0 -1508
  575. package/src/utils/deep-merge.test.ts +0 -114
  576. package/src/utils/deep-merge.ts +0 -47
  577. package/src/utils/hash.ts +0 -5
  578. package/src/utils/html-escaping.ts +0 -9
  579. package/src/utils/invariant.test.ts +0 -22
  580. package/src/utils/invariant.ts +0 -15
  581. package/src/utils/locals-utils.ts +0 -37
  582. package/src/utils/parse-cli-args.test.ts +0 -69
  583. package/src/utils/parse-cli-args.ts +0 -105
  584. package/src/utils/path-utils.module.ts +0 -14
  585. package/src/utils/path-utils.test.ts +0 -15
  586. package/src/utils/resolve-work-dir.ts +0 -45
  587. package/src/utils/runtime.ts +0 -44
  588. package/src/utils/server-utils.module.ts +0 -67
  589. package/src/utils/server-utils.test.ts +0 -38
  590. package/src/watchers/project-watcher.integration.test.ts +0 -337
  591. package/src/watchers/project-watcher.test-helpers.ts +0 -42
  592. package/src/watchers/project-watcher.test.ts +0 -768
  593. package/src/watchers/project-watcher.ts +0 -357
  594. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -1,307 +0,0 @@
1
- /**
2
- * JavaScript HMR Strategy
3
- *
4
- * Handles hot module replacement for JavaScript and TypeScript entrypoints.
5
- * Bundles files, inspects the emitted output, and decides whether the browser
6
- * can hot-accept the change or must reload.
7
- *
8
- * @module
9
- */
10
-
11
- import path from 'node:path';
12
- import { fileSystem } from '@ecopages/file-system';
13
- import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy.ts';
14
- import { appLogger } from '../../global/app-logger.ts';
15
- import type { EcoBuildPlugin } from '../../build/build-types.ts';
16
- import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.ts';
17
- import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.ts';
18
-
19
- /**
20
- * Context interface providing access to HmrManager state.
21
- * Required for JsHmrStrategy to access registered entrypoints and configuration.
22
- */
23
- export interface JsHmrContext {
24
- /**
25
- * Map of registered entrypoints to their output URLs.
26
- */
27
- getWatchedFiles(): Map<string, string>;
28
-
29
- getEntrypointDependencyGraph(): EntrypointDependencyGraph;
30
-
31
- /**
32
- * Directory where HMR bundles are written.
33
- */
34
- getDistDir(): string;
35
-
36
- /**
37
- * Build plugins to use during bundling.
38
- */
39
- getPlugins(): EcoBuildPlugin[];
40
-
41
- /**
42
- * Absolute path to the source directory.
43
- */
44
- getSrcDir(): string;
45
-
46
- /**
47
- * Absolute path to the pages directory.
48
- */
49
- getPagesDir(): string;
50
-
51
- /**
52
- * Absolute path to the layouts directory.
53
- */
54
- getLayoutsDir(): string;
55
-
56
- /**
57
- * All configured route-template extensions across integrations.
58
- */
59
- getTemplateExtensions(): string[];
60
-
61
- /**
62
- * Browser bundler used to rebuild changed entrypoints.
63
- */
64
- getBrowserBundleService(): BrowserBundleExecutor;
65
-
66
- /**
67
- * Returns whether a watched entrypoint should be rebuilt by the generic JS strategy.
68
- *
69
- * @remarks
70
- * Integrations with higher-priority HMR strategies can use this to keep the
71
- * generic JS strategy from overwriting their emitted entrypoints when a shared
72
- * dependency changes.
73
- */
74
- shouldProcessEntrypoint?(entrypointPath: string): boolean;
75
- }
76
-
77
- /**
78
- * Strategy for handling JavaScript/TypeScript file changes with hot reloading.
79
- *
80
- * The processing steps are:
81
- * 1. Check if any entrypoints are registered
82
- * 2. Rebuild impacted entrypoints, or all watched entrypoints when no runtime
83
- * dependency graph is available
84
- * 3. Emit rebuilt entrypoint bundles for browser delivery
85
- * 4. Inject generic HMR boilerplate
86
- * 5. Broadcast update events for each rebuilt entrypoint
87
- *
88
- * @remarks
89
- * Node can provide dependency-graph metadata, so this strategy can rebuild only
90
- * the entrypoints impacted by a changed dependency. Runtimes that do not expose
91
- * that metadata intentionally keep the rebuild-all fallback.
92
- *
93
- * @see https://bun.sh/docs/runtime/transpiler
94
- *
95
- * @example
96
- * ```typescript
97
- * const context = {
98
- * getWatchedFiles: () => watchedFilesMap,
99
- * getDistDir: () => '/path/to/dist/_hmr',
100
- * getPlugins: () => [],
101
- * getSrcDir: () => '/path/to/src'
102
- * };
103
- * const strategy = new JsHmrStrategy(context);
104
- * ```
105
- */
106
- export class JsHmrStrategy extends HmrStrategy {
107
- readonly type = HmrStrategyType.SCRIPT;
108
- private context: JsHmrContext;
109
-
110
- constructor(context: JsHmrContext) {
111
- super();
112
- this.context = context;
113
- }
114
-
115
- /**
116
- * Determines if the file is a JS/TS file that could affect registered entrypoints.
117
- *
118
- * Matches if:
119
- * 1. There are registered entrypoints to rebuild
120
- * 2. The changed file is a JS/TS file in the src directory
121
- *
122
- * @param filePath - Absolute path to the changed file
123
- * @returns True if this file should trigger entrypoint rebuilds
124
- */
125
- matches(filePath: string): boolean {
126
- const watchedFiles = this.context.getWatchedFiles();
127
- const isJsTs = /\.(ts|tsx|js|jsx)$/.test(filePath);
128
- const isInSrc = filePath.startsWith(this.context.getSrcDir());
129
- const isIntegrationTemplate = this.context
130
- .getTemplateExtensions()
131
- .some((extension) => filePath.endsWith(extension));
132
-
133
- if (watchedFiles.size === 0) {
134
- return false;
135
- }
136
-
137
- if (!isJsTs || !isInSrc) {
138
- return false;
139
- }
140
-
141
- if (isIntegrationTemplate) {
142
- return false;
143
- }
144
-
145
- if (watchedFiles.has(filePath)) {
146
- return true;
147
- }
148
-
149
- return true;
150
- }
151
-
152
- /**
153
- * Processes a file change by rebuilding affected entrypoints.
154
- *
155
- * @param filePath - Absolute path to the changed file
156
- *
157
- * @remarks
158
- * If runtime-specific dependency graph hooks are unavailable, this strategy
159
- * falls back to rebuilding all watched entrypoints.
160
- * When multiple entrypoints are impacted they are bundled in a single
161
- * invocation to share AST parsing and chunk deduplication.
162
- * @returns Action to broadcast update events
163
- */
164
- async process(filePath: string): Promise<HmrAction> {
165
- appLogger.debug(`[JsHmrStrategy] Processing ${filePath}`);
166
- const watchedFiles = this.context.getWatchedFiles();
167
-
168
- if (watchedFiles.size === 0) {
169
- appLogger.debug(`[JsHmrStrategy] No watched files to rebuild`);
170
- return { type: 'none' };
171
- }
172
-
173
- const dependencyHits = this.context.getEntrypointDependencyGraph().getDependencyEntrypoints(filePath);
174
- const hasDependencyHit = dependencyHits.size > 0;
175
- const impactedEntrypoints = hasDependencyHit
176
- ? Array.from(dependencyHits).filter((entrypoint) => watchedFiles.has(entrypoint))
177
- : Array.from(watchedFiles.keys());
178
- const buildableEntrypoints = impactedEntrypoints.filter(
179
- (entrypoint) => this.context.shouldProcessEntrypoint?.(entrypoint) ?? true,
180
- );
181
-
182
- if (!hasDependencyHit) {
183
- appLogger.debug('[JsHmrStrategy] Dependency graph miss, rebuilding all watched entrypoints');
184
- }
185
-
186
- if (buildableEntrypoints.length === 0) {
187
- return { type: 'none' };
188
- }
189
-
190
- const buildResult = await this.bundleEntrypoints(buildableEntrypoints);
191
-
192
- if (!buildResult.success) {
193
- return { type: 'none' };
194
- }
195
-
196
- const updates: string[] = [];
197
- let reloadRequired = false;
198
-
199
- for (const entrypoint of buildableEntrypoints) {
200
- const outputUrl = watchedFiles.get(entrypoint);
201
- if (!outputUrl) continue;
202
-
203
- if (buildResult.dependencies) {
204
- const entrypointDeps = buildResult.dependencies.get(path.resolve(entrypoint)) ?? [];
205
- this.context.getEntrypointDependencyGraph().setEntrypointDependencies(entrypoint, entrypointDeps);
206
- }
207
-
208
- const srcDir = this.context.getSrcDir();
209
- const relativePath = path.relative(srcDir, entrypoint);
210
- const relativePathJs = relativePath.replace(/\.(tsx?|jsx?|mdx?)$/, '.js');
211
- const outputPath = path.join(this.context.getDistDir(), relativePathJs);
212
-
213
- const result = await this.processOutput(outputPath, outputUrl);
214
- if (result.success) {
215
- updates.push(outputUrl);
216
- if (result.requiresReload) {
217
- reloadRequired = true;
218
- }
219
- }
220
- }
221
-
222
- if (updates.length > 0) {
223
- if (reloadRequired) {
224
- appLogger.debug(`[JsHmrStrategy] Full reload required (no HMR accept found)`);
225
- return {
226
- type: 'broadcast',
227
- events: [{ type: 'reload' }],
228
- };
229
- }
230
-
231
- return {
232
- type: 'broadcast',
233
- events: updates.map((p) => ({
234
- type: 'update',
235
- path: p,
236
- timestamp: Date.now(),
237
- })),
238
- };
239
- }
240
-
241
- return { type: 'none' };
242
- }
243
-
244
- /**
245
- * Bundles one or more entrypoints in a single build invocation.
246
- * Uses the source directory as the output base so that the directory structure
247
- * is preserved under the HMR dist folder.
248
- */
249
- private async bundleEntrypoints(
250
- entrypoints: string[],
251
- ): Promise<{ success: boolean; dependencies?: Map<string, string[]> }> {
252
- try {
253
- const result = await this.context.getBrowserBundleService().bundle({
254
- profile: 'hmr-entrypoint',
255
- entrypoints,
256
- outdir: this.context.getDistDir(),
257
- outbase: this.context.getSrcDir(),
258
- naming: '[dir]/[name]',
259
- plugins: this.context.getPlugins(),
260
- minify: false,
261
- });
262
-
263
- if (!result.success) {
264
- appLogger.error('[JsHmrStrategy] Batched build failed:', result.logs);
265
- return { success: false };
266
- }
267
-
268
- const dependencies = new Map<string, string[]>();
269
- if (result.dependencyGraph?.entrypoints) {
270
- for (const [entrypoint, deps] of Object.entries(result.dependencyGraph.entrypoints)) {
271
- dependencies.set(path.resolve(entrypoint), deps);
272
- }
273
- }
274
-
275
- return { success: true, dependencies };
276
- } catch (error) {
277
- appLogger.error('[JsHmrStrategy] Error in batched build:', error as Error);
278
- return { success: false };
279
- }
280
- }
281
-
282
- /**
283
- * Processes bundled output and determines whether the browser can hot-accept
284
- * the update or must fall back to a full reload.
285
- *
286
- * @param filepath - Path to the bundled output file
287
- * @param url - URL path for the bundled file
288
- * @returns True if processing was successful and update should be broadcast
289
- */
290
- private async processOutput(filepath: string, url: string): Promise<{ success: boolean; requiresReload: boolean }> {
291
- try {
292
- const code = await fileSystem.readFile(filepath);
293
-
294
- if (code.includes('/* [ecopages] hmr */')) {
295
- return { success: true, requiresReload: !code.includes('import.meta.hot.accept') };
296
- }
297
-
298
- appLogger.debug(`[JsHmrStrategy] Processed ${url}`);
299
-
300
- const hasHmrAccept = code.includes('import.meta.hot.accept');
301
- return { success: true, requiresReload: !hasHmrAccept };
302
- } catch (error) {
303
- appLogger.error(`[JsHmrStrategy] Error processing output for ${url}:`, error as Error);
304
- return { success: false, requiresReload: false };
305
- }
306
- }
307
- }
@@ -1,3 +0,0 @@
1
- export type * from './types/public-types.ts';
2
- export type * from './eco/eco.types.ts';
3
- export { eco } from './eco/eco.browser.ts';
package/src/index.ts DELETED
@@ -1,15 +0,0 @@
1
- export type * from './types/public-types.ts';
2
- export type * from './eco/eco.types.ts';
3
- export { eco } from './eco/eco.ts';
4
- export { defineApiHandler, defineGroupHandler, type GroupHandler } from './adapters/shared/define-api-handler.ts';
5
- export {
6
- createEcoBuildPluginFromSourceTransform,
7
- createVitePluginsFromAppSourceTransforms,
8
- getAppSourceTransforms,
9
- createVitePluginFromSourceTransform,
10
- normalizeTransformId,
11
- type EcoSourceTransform,
12
- type EcoSourceTransformResult,
13
- type EcoViteCompatiblePlugin,
14
- } from './plugins/source-transform.ts';
15
- export { createEcoComponentMetaTransform } from './plugins/eco-component-meta-plugin.ts';
@@ -1,253 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import HtmlTemplate from '../../../__fixtures__/app/src/includes/html.ghtml.js';
3
- import { FIXTURE_APP_PROJECT_DIR } from '../../../__fixtures__/constants.js';
4
- import {
5
- eco,
6
- type ForeignSubtreeRenderPayload,
7
- type EcoComponent,
8
- type EcoPagesElement,
9
- type HtmlTemplateProps,
10
- } from '../../index.ts';
11
- import { ConfigBuilder } from '../../config/config-builder.ts';
12
- import { IntegrationPlugin } from '../../plugins/integration-plugin.ts';
13
- import {
14
- IntegrationRenderer,
15
- type RenderToResponseContext,
16
- } from '../../route-renderer/orchestration/integration-renderer.ts';
17
- import { GhtmlRenderer } from './ghtml-renderer.ts';
18
-
19
- const appConfig = await new ConfigBuilder().setRootDir(FIXTURE_APP_PROJECT_DIR).build();
20
-
21
- const metadata = {
22
- title: 'Ecopages',
23
- description: 'Ecopages',
24
- };
25
-
26
- const pageBody = '<body>Hello World</body>';
27
-
28
- const TestHtmlTemplate: EcoComponent<HtmlTemplateProps> = async ({ children }) => {
29
- return `<html><body>${children}</body></html>`;
30
- };
31
-
32
- class TestGhtmlRenderer extends GhtmlRenderer {
33
- htmlTemplate: EcoComponent<HtmlTemplateProps> = TestHtmlTemplate;
34
-
35
- protected override async getHtmlTemplate(): Promise<EcoComponent<HtmlTemplateProps>> {
36
- return this.htmlTemplate;
37
- }
38
- }
39
-
40
- const createRenderer = (config = appConfig) =>
41
- new TestGhtmlRenderer({
42
- appConfig: config,
43
- assetProcessingService: {} as any,
44
- runtimeOrigin: 'http://localhost:3000',
45
- resolvedIntegrationDependencies: [],
46
- });
47
-
48
- class DeferredRenderer extends IntegrationRenderer<EcoPagesElement> {
49
- name = 'deferred';
50
-
51
- async render(): Promise<string> {
52
- return '';
53
- }
54
-
55
- override async renderComponent() {
56
- return {
57
- html: '<button data-testid="deferred-widget">Deferred widget</button>',
58
- canAttachAttributes: true,
59
- rootTag: 'button',
60
- integrationName: this.name,
61
- };
62
- }
63
-
64
- async renderToResponse<P = Record<string, unknown>>(
65
- _view: EcoComponent<P>,
66
- _props: P,
67
- _ctx: RenderToResponseContext,
68
- ) {
69
- return new Response('');
70
- }
71
- }
72
-
73
- class DeferredPlugin extends IntegrationPlugin<EcoPagesElement> {
74
- renderer = DeferredRenderer;
75
-
76
- constructor() {
77
- super({
78
- name: 'deferred',
79
- extensions: ['.deferred.ts'],
80
- });
81
- }
82
- }
83
-
84
- describe('GhtmlRenderer', () => {
85
- it('should render the page', async () => {
86
- const renderer = createRenderer();
87
-
88
- const body = await renderer.render({
89
- params: {},
90
- query: {},
91
- props: {},
92
- file: 'file',
93
- metadata,
94
- Page: async () => pageBody,
95
- resolvedDependencies: [],
96
- HtmlTemplate,
97
- });
98
-
99
- expect(body).toContain('<!DOCTYPE html>');
100
- expect(body).toContain('<body>Hello World</body>');
101
- expect(body).toContain('<title>Ecopages</title>');
102
- expect(body).toContain('<meta name="description" content="Ecopages" />');
103
- });
104
-
105
- it('should throw an error if the page fails to render', async () => {
106
- const renderer = createRenderer();
107
-
108
- await expect(
109
- renderer.render({
110
- params: {},
111
- query: {},
112
- props: {},
113
- file: 'file',
114
- resolvedDependencies: [],
115
- metadata,
116
- Page: async () => {
117
- throw new Error('Page failed to render');
118
- },
119
- HtmlTemplate,
120
- }),
121
- ).rejects.toThrow('Error rendering page: Page failed to render');
122
- });
123
-
124
- it('should resolve deferred foreign layout content without unresolved eco-marker artifacts', async () => {
125
- const deferredPlugin = new DeferredPlugin();
126
- const config = await new ConfigBuilder()
127
- .setRootDir(FIXTURE_APP_PROJECT_DIR)
128
- .setRobotsTxt({
129
- preferences: {
130
- '*': [],
131
- },
132
- })
133
- .setIntegrations([deferredPlugin])
134
- .setDefaultMetadata(metadata)
135
- .setBaseUrl('http://localhost:3000')
136
- .build();
137
-
138
- deferredPlugin.setConfig(config);
139
- deferredPlugin.setRuntimeOrigin('http://localhost:3000');
140
-
141
- const renderer = createRenderer(config);
142
-
143
- const DeferredWidget = eco.component<{}, string>({
144
- integration: 'deferred',
145
- render: () => '<button data-testid="deferred-widget">Deferred widget</button>',
146
- });
147
- DeferredWidget.config = {
148
- ...DeferredWidget.config,
149
- __eco: {
150
- id: 'deferred-widget',
151
- file: '/app/components/deferred-widget.deferred.ts',
152
- integration: 'deferred',
153
- },
154
- };
155
-
156
- const Layout = eco.layout<string>({
157
- dependencies: {
158
- components: [DeferredWidget],
159
- },
160
- render: ({ children }) => `<main class="layout">${children}${DeferredWidget({})}</main>`,
161
- });
162
-
163
- const body = await renderer.render({
164
- params: {},
165
- query: {},
166
- props: {},
167
- file: 'file',
168
- metadata,
169
- Page: async () => '<section>Page</section>',
170
- Layout,
171
- resolvedDependencies: [],
172
- HtmlTemplate: TestHtmlTemplate,
173
- pageProps: {},
174
- });
175
-
176
- expect(body).toContain('<button data-testid="deferred-widget">Deferred widget</button>');
177
- expect(body).not.toContain('<eco-marker');
178
- });
179
-
180
- it('should expose the compatibility foreign-subtree payload contract', async () => {
181
- const renderer = createRenderer();
182
- const Component = (async () => '<main>Foreign Subtree</main>') as EcoComponent<Record<string, unknown>>;
183
-
184
- const result = await renderer.renderForeignSubtree({
185
- component: Component,
186
- props: {},
187
- });
188
-
189
- expect(result).toEqual<ForeignSubtreeRenderPayload>({
190
- html: '<main>Foreign Subtree</main>',
191
- assets: [],
192
- rootTag: 'main',
193
- rootAttributes: undefined,
194
- attachmentPolicy: { kind: 'first-element' },
195
- integrationName: 'ghtml',
196
- });
197
- });
198
-
199
- describe('renderToResponse', () => {
200
- it('should render a view with default status 200', async () => {
201
- const renderer = createRenderer();
202
- const View = (async (props: { title: string }) => `<h1>${props.title}</h1>`) as EcoComponent<{
203
- title: string;
204
- }>;
205
-
206
- const response = await renderer.renderToResponse(View, { title: 'Hello Ghtml' }, {});
207
-
208
- expect(response.status).toBe(200);
209
- expect(response.headers.get('Content-Type')).toBe('text/html; charset=utf-8');
210
- await expect(response.text()).resolves.toContain('<h1>Hello Ghtml</h1>');
211
- });
212
-
213
- it('should render a partial view without a full html wrapper', async () => {
214
- const renderer = createRenderer();
215
- const View = (async (props: { content: string }) => `<div>${props.content}</div>`) as EcoComponent<{
216
- content: string;
217
- }>;
218
-
219
- const response = await renderer.renderToResponse(View, { content: 'Partial' }, { partial: true });
220
- const body = await response.text();
221
-
222
- expect(body).toBe('<div>Partial</div>');
223
- expect(body).not.toContain('<!DOCTYPE html>');
224
- });
225
-
226
- it('should render with layout when not partial', async () => {
227
- const renderer = createRenderer();
228
- const Layout = (async ({ children }: { children: string }) =>
229
- `<main class="layout">${children}</main>`) as EcoComponent<{ children: string }>;
230
- const View = (async (props: { message: string }) => `<p>${props.message}</p>`) as EcoComponent<{
231
- message: string;
232
- }>;
233
- View.config = { layout: Layout };
234
-
235
- const response = await renderer.renderToResponse(View, { message: 'With Layout' }, {});
236
- const body = await response.text();
237
-
238
- expect(body).toContain('<main class="layout">');
239
- expect(body).toContain('<p>With Layout</p>');
240
- });
241
-
242
- it('should throw an error if the view fails to render', async () => {
243
- const renderer = createRenderer();
244
- const View = (async () => {
245
- throw new Error('View failed to render');
246
- }) as EcoComponent<object>;
247
-
248
- await expect(renderer.renderToResponse(View, {}, {})).rejects.toThrow(
249
- 'Error rendering view: View failed to render',
250
- );
251
- });
252
- });
253
- });
@@ -1,87 +0,0 @@
1
- /**
2
- * This module contains the ghtml renderer
3
- * @module
4
- */
5
-
6
- import type {
7
- ComponentRenderInput,
8
- ComponentRenderResult,
9
- EcoComponent,
10
- EcoPagesElement,
11
- IntegrationRendererRenderOptions,
12
- RouteRendererBody,
13
- } from '../../types/public-types.ts';
14
- import {
15
- IntegrationRenderer,
16
- type RenderToResponseContext,
17
- } from '../../route-renderer/orchestration/integration-renderer.ts';
18
- import { GHTML_PLUGIN_NAME } from './ghtml.constants.ts';
19
-
20
- type GhtmlViewFn<P> = (props: P) => Promise<EcoPagesElement> | EcoPagesElement;
21
- type GhtmlLayoutFn = (
22
- props: { children: string } & Record<string, unknown>,
23
- ) => Promise<EcoPagesElement> | EcoPagesElement;
24
-
25
- /**
26
- * A renderer for the ghtml integration.
27
- * It renders a page using the HtmlTemplate and Page components.
28
- */
29
- export class GhtmlRenderer extends IntegrationRenderer<EcoPagesElement> {
30
- name = GHTML_PLUGIN_NAME;
31
-
32
- override async renderComponent(input: ComponentRenderInput): Promise<ComponentRenderResult> {
33
- return this.renderStringComponentWithQueuedForeignSubtrees(
34
- input,
35
- input.component as GhtmlViewFn<Record<string, unknown>>,
36
- );
37
- }
38
-
39
- async render({
40
- params,
41
- query,
42
- props,
43
- locals,
44
- pageLocals,
45
- metadata,
46
- Page,
47
- Layout,
48
- HtmlTemplate,
49
- }: IntegrationRendererRenderOptions): Promise<RouteRendererBody> {
50
- try {
51
- return await this.renderPageWithDocumentShell({
52
- page: {
53
- component: Page as EcoComponent,
54
- props: { params, query, ...props, locals: pageLocals },
55
- },
56
- layout: Layout
57
- ? {
58
- component: Layout as EcoComponent,
59
- props: locals ? { locals } : {},
60
- }
61
- : undefined,
62
- htmlTemplate: HtmlTemplate as EcoComponent,
63
- metadata,
64
- pageProps: props ?? {},
65
- });
66
- } catch (error) {
67
- throw this.createRenderError('Error rendering page', error);
68
- }
69
- }
70
-
71
- async renderToResponse<P = Record<string, unknown>>(
72
- view: EcoComponent<P>,
73
- props: P,
74
- ctx: RenderToResponseContext,
75
- ): Promise<Response> {
76
- try {
77
- return await this.renderViewWithDocumentShell({
78
- view,
79
- props,
80
- ctx,
81
- layout: view.config?.layout as GhtmlLayoutFn | undefined,
82
- });
83
- } catch (error) {
84
- throw this.createRenderError('Error rendering view', error);
85
- }
86
- }
87
- }
@@ -1 +0,0 @@
1
- export const GHTML_PLUGIN_NAME = 'ghtml';
@@ -1,28 +0,0 @@
1
- import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin.ts';
2
- import { GhtmlRenderer } from './ghtml-renderer.ts';
3
- import { GHTML_PLUGIN_NAME } from './ghtml.constants.ts';
4
-
5
- /**
6
- * The Ghtml plugin class
7
- * This plugin provides support for ghtml components in Ecopages
8
- */
9
- export class GhtmlPlugin extends IntegrationPlugin {
10
- renderer = GhtmlRenderer;
11
-
12
- constructor(options?: Omit<IntegrationPluginConfig, 'name'>) {
13
- super({
14
- name: GHTML_PLUGIN_NAME,
15
- extensions: ['.ghtml.ts', '.ghtml.tsx', '.ghtml'],
16
- ...options,
17
- });
18
- }
19
- }
20
-
21
- /**
22
- * Factory function to create a Ghtml plugin instance
23
- * @param options Configuration options for the Ghtml plugin
24
- * @returns A new GhtmlPlugin instance
25
- */
26
- export function ghtmlPlugin(options?: Omit<IntegrationPluginConfig, 'name'>): GhtmlPlugin {
27
- return new GhtmlPlugin(options);
28
- }