@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,177 +0,0 @@
1
- import type { ClientBridgeEvent } from '../types/public-types.ts';
2
-
3
- /**
4
- * HMR Strategy Pattern
5
- *
6
- * This module defines the base classes and types for Hot Module Replacement strategies.
7
- * Each strategy handles a specific type of file change and determines how to process it.
8
- *
9
- * @module
10
- * @example
11
- * ```typescript
12
- * class CustomHmrStrategy extends HmrStrategy {
13
- * readonly type = HmrStrategyType.INTEGRATION;
14
- *
15
- * matches(filePath: string): boolean {
16
- * return filePath.endsWith('.custom');
17
- * }
18
- *
19
- * async process(filePath: string): Promise<HmrAction> {
20
- * return {
21
- * type: 'broadcast',
22
- * events: [{ type: 'update', path: filePath, timestamp: Date.now() }],
23
- * };
24
- * }
25
- * }
26
- * ```
27
- */
28
-
29
- /**
30
- * Defines the category of an HMR strategy, which determines its execution priority.
31
- * Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
32
- *
33
- * @remarks
34
- * The numeric values represent base priorities. Strategies can fine-tune their priority
35
- * using the `priorityOffset` property.
36
- */
37
- export const HmrStrategyType = {
38
- /**
39
- * Integration-specific strategies (React, Lit, etc.)
40
- * Highest priority to allow framework-specific HMR handling.
41
- */
42
- INTEGRATION: 100,
43
-
44
- /**
45
- * Asset processing strategies (CSS, images, etc.)
46
- * High priority for specialized asset handling.
47
- */
48
- ASSET: 50,
49
-
50
- /**
51
- * Generic script bundling strategies (JS/TS)
52
- * Medium priority for standard script processing.
53
- */
54
- SCRIPT: 25,
55
-
56
- /**
57
- * Fallback strategy for unhandled file types.
58
- * Lowest priority, triggers full page reload.
59
- */
60
- FALLBACK: 0,
61
- } as const;
62
-
63
- export type HmrStrategyType = (typeof HmrStrategyType)[keyof typeof HmrStrategyType];
64
-
65
- /**
66
- * Represents an action to be taken after processing a file change.
67
- */
68
- export interface HmrAction {
69
- /**
70
- * Whether to broadcast an HMR event to connected clients.
71
- */
72
- type: 'broadcast' | 'none';
73
-
74
- /**
75
- * The HMR events to broadcast, if type is 'broadcast'.
76
- * Multiple events may be broadcast in one action.
77
- */
78
- events?: ClientBridgeEvent[];
79
- }
80
-
81
- /**
82
- * Base class for HMR strategies.
83
- *
84
- * Each strategy handles a specific type of file change and determines how to process it.
85
- * Strategies are selected based on their priority (higher values are evaluated first) and
86
- * whether they match the changed file path.
87
- *
88
- * @remarks
89
- * Strategies are expected to be stateless and idempotent. The same file change
90
- * should produce the same result when processed by the same strategy.
91
- *
92
- * @example
93
- * ```typescript
94
- * class MyAssetStrategy extends HmrStrategy {
95
- * readonly type = HmrStrategyType.ASSET;
96
- * readonly priorityOffset = 5;
97
- *
98
- * matches(filePath: string): boolean {
99
- * return /\.(png|jpg|svg)$/.test(filePath);
100
- * }
101
- *
102
- * async process(filePath: string): Promise<HmrAction> {
103
- * await this.optimizeImage(filePath);
104
- * return {
105
- * type: 'broadcast',
106
- * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
107
- * };
108
- * }
109
- * }
110
- * ```
111
- */
112
- export abstract class HmrStrategy {
113
- /**
114
- * The category of this strategy, determining its base priority.
115
- */
116
- abstract readonly type: HmrStrategyType;
117
-
118
- /**
119
- * Optional offset to fine-tune priority within the same category.
120
- * Useful when multiple strategies share the same type.
121
- *
122
- * @defaultValue 0
123
- */
124
- readonly priorityOffset: number = 0;
125
-
126
- /**
127
- * Computed priority for strategy selection.
128
- * Higher values are evaluated first.
129
- *
130
- * @returns The sum of the strategy type and priority offset
131
- */
132
- get priority(): number {
133
- return this.type + this.priorityOffset;
134
- }
135
-
136
- /**
137
- * Determines if this strategy can handle the given file path.
138
- *
139
- * @param filePath - Absolute path to the changed file
140
- * @returns `true` when this strategy should process the file
141
- *
142
- * @example
143
- * ```typescript
144
- * matches(filePath: string): boolean {
145
- * return filePath.endsWith('.css');
146
- * }
147
- * ```
148
- */
149
- abstract matches(filePath: string): boolean;
150
-
151
- /**
152
- * Processes a file change and returns the action to take.
153
- *
154
- * This method may perform side effects such as:
155
- * - Rebuilding files
156
- * - Writing to disk
157
- * - Transforming code
158
- * - Updating caches
159
- *
160
- * @param filePath - Absolute path to the changed file
161
- * @returns Action to take (broadcast event or none)
162
- *
163
- * @example
164
- * ```typescript
165
- * async process(filePath: string): Promise<HmrAction> {
166
- * const processed = await this.transform(filePath);
167
- * await Bun.write(outputPath, processed);
168
- *
169
- * return {
170
- * type: 'broadcast',
171
- * events: [{ type: 'update', path: outputPath, timestamp: Date.now() }]
172
- * };
173
- * }
174
- * ```
175
- */
176
- abstract process(filePath: string): Promise<HmrAction>;
177
- }
@@ -1,41 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { readFileSync } from 'node:fs';
3
- import { writeFile } from 'node:fs/promises';
4
- import { resolve } from 'node:path';
5
-
6
- const FIXTURE_DIR = resolve(process.cwd(), 'packages/core/__fixtures__/app');
7
- const TEST_CSS_FILE = resolve(FIXTURE_DIR, 'src/pages/postcss-hmr.css');
8
-
9
- test.describe('HMR E2E PostCSS', () => {
10
- test('should hot-update processor-owned CSS without a full page reload', async ({ page }) => {
11
- const originalCss = readFileSync(TEST_CSS_FILE, 'utf-8');
12
- const title = page.locator('.postcss-title').first();
13
-
14
- try {
15
- await page.goto('/postcss-hmr', { waitUntil: 'networkidle' });
16
- await expect(title).toBeVisible();
17
-
18
- const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
19
- expect(initialColor).toBeTruthy();
20
- await page.evaluate(() => {
21
- (window as typeof window & { __postcssReloadProbe?: string }).__postcssReloadProbe = 'before-change';
22
- });
23
-
24
- const modifiedCss = originalCss.replace('.postcss-title {', '.postcss-title {\n\tcolor: rgb(255, 0, 0);');
25
-
26
- await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
27
-
28
- await expect
29
- .poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 10000 })
30
- .toBe('rgb(255, 0, 0)');
31
-
32
- await expect(
33
- page.evaluate(
34
- () => (window as typeof window & { __postcssReloadProbe?: string }).__postcssReloadProbe ?? null,
35
- ),
36
- ).resolves.toBe('before-change');
37
- } finally {
38
- await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
39
- }
40
- });
41
- });
@@ -1,66 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { readFileSync } from 'node:fs';
3
- import { writeFile } from 'node:fs/promises';
4
- import { resolve } from 'node:path';
5
-
6
- /**
7
- * HMR E2E Tests
8
- *
9
- * True end-to-end tests for Hot Module Replacement using Playwright.
10
- * These tests modify actual source files and verify the browser updates.
11
- *
12
- * Run with: bunx playwright test packages/core/src/hmr/hmr.e2e.test.ts
13
- */
14
-
15
- const FIXTURE_DIR = resolve(process.cwd(), 'packages/core/__fixtures__/app');
16
- const TEST_CSS_FILE = resolve(FIXTURE_DIR, 'src/pages/index.css');
17
-
18
- test.describe('HMR E2E', () => {
19
- test('should load page with .main-title element', async ({ page }) => {
20
- await page.goto('/', { waitUntil: 'networkidle' });
21
- const title = page.locator('.main-title').first();
22
- await expect(title).toBeVisible();
23
- });
24
-
25
- test('should connect to HMR WebSocket', async ({ page }) => {
26
- const socketPromise = page.waitForEvent('websocket', {
27
- predicate: (socket) => socket.url().endsWith('/_hmr'),
28
- timeout: 10000,
29
- });
30
-
31
- await page.goto('/', { waitUntil: 'networkidle' });
32
- const socket = await socketPromise;
33
-
34
- expect(socket.url()).toMatch(/\/_hmr$/);
35
- });
36
-
37
- test('should fall back to a full page reload when raw CSS file changes', async ({ page }) => {
38
- const originalCss = readFileSync(TEST_CSS_FILE, 'utf-8');
39
- const title = page.locator('.main-title').first();
40
-
41
- try {
42
- await page.goto('/', { waitUntil: 'networkidle' });
43
- await expect(title).toBeVisible();
44
-
45
- const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
46
- expect(initialColor).toBeTruthy();
47
-
48
- const modifiedCss = originalCss.replace('.main-title {', '.main-title {\n\tcolor: rgb(255, 0, 0);');
49
- const reloadPromise = page.waitForEvent('framenavigated', {
50
- predicate: (frame) => frame === page.mainFrame(),
51
- timeout: 10000,
52
- });
53
-
54
- await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
55
-
56
- await reloadPromise;
57
- await page.waitForLoadState('networkidle');
58
-
59
- await expect
60
- .poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 10000 })
61
- .toBe('rgb(255, 0, 0)');
62
- } finally {
63
- await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
64
- }
65
- });
66
- });
@@ -1,60 +0,0 @@
1
- /**
2
- * Default HMR Strategy
3
- *
4
- * Fallback strategy for file types that don't have specialized handling.
5
- * Triggers a full page reload to ensure changes are reflected.
6
- *
7
- * @module
8
- */
9
-
10
- import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy.ts';
11
-
12
- /**
13
- * Default fallback strategy for unhandled file types.
14
- *
15
- * This strategy matches all files and triggers a full page reload.
16
- * It has the lowest priority (FALLBACK) and acts as a catch-all when
17
- * no other strategy matches the changed file.
18
- *
19
- * @remarks
20
- * This strategy ensures that all file changes result in some action,
21
- * even if we don't have specialized handling for that file type.
22
- *
23
- * @example
24
- * ```typescript
25
- * const strategy = new DefaultHmrStrategy();
26
- * const action = await strategy.process('/path/to/unknown.file');
27
- * ```
28
- */
29
- export class DefaultHmrStrategy extends HmrStrategy {
30
- readonly type = HmrStrategyType.FALLBACK;
31
-
32
- /**
33
- * Matches all file paths.
34
- *
35
- * @param _filePath - Absolute path to the changed file (unused)
36
- * @returns Always returns true as this is a catch-all strategy
37
- */
38
- matches(_filePath: string): boolean {
39
- return true;
40
- }
41
-
42
- /**
43
- * Processes a file change by triggering a full page reload.
44
- *
45
- * @param filePath - Absolute path to the changed file
46
- * @returns Action to broadcast a reload event
47
- */
48
- async process(filePath: string): Promise<HmrAction> {
49
- return {
50
- type: 'broadcast',
51
- events: [
52
- {
53
- type: 'reload',
54
- path: filePath,
55
- message: 'fallback-strategy',
56
- },
57
- ],
58
- };
59
- }
60
- }
@@ -1,344 +0,0 @@
1
- import { describe, expect, it, beforeAll, afterAll } from 'vitest';
2
- import { JsHmrStrategy, type JsHmrContext } from './js-hmr-strategy';
3
- import { HmrStrategyType } from '../hmr-strategy';
4
- import { InMemoryDevGraphService, NoopDevGraphService } from '../../services/runtime-state/dev-graph.service.ts';
5
- import fs from 'node:fs';
6
- import path from 'node:path';
7
- import os from 'node:os';
8
-
9
- const TMP_DIR = path.join(os.tmpdir(), 'js-hmr-strategy-test');
10
- const SRC_DIR = path.join(TMP_DIR, 'src');
11
-
12
- function createMockContext(overrides: Partial<JsHmrContext> = {}): JsHmrContext {
13
- return {
14
- getWatchedFiles: () => new Map(),
15
- getEntrypointDependencyGraph: () => new NoopDevGraphService(),
16
- getDistDir: () => TMP_DIR,
17
- getPlugins: () => [],
18
- getSrcDir: () => SRC_DIR,
19
- getPagesDir: () => path.join(SRC_DIR, 'pages'),
20
- getLayoutsDir: () => path.join(SRC_DIR, 'layouts'),
21
- getTemplateExtensions: () => ['.kita.tsx', '.react.tsx'],
22
- getBrowserBundleService: () => ({
23
- bundle: async () => ({ success: true, logs: [], outputs: [] }),
24
- }),
25
- ...overrides,
26
- };
27
- }
28
-
29
- describe('JsHmrStrategy', () => {
30
- beforeAll(() => {
31
- fs.mkdirSync(SRC_DIR, { recursive: true });
32
- });
33
-
34
- afterAll(() => {
35
- fs.rmSync(TMP_DIR, { recursive: true, force: true });
36
- });
37
-
38
- describe('type', () => {
39
- it('has SCRIPT type', () => {
40
- const context = createMockContext();
41
- const strategy = new JsHmrStrategy(context);
42
- expect(strategy.type).toBe(HmrStrategyType.SCRIPT);
43
- });
44
-
45
- it('has default priority of 25', () => {
46
- const context = createMockContext();
47
- const strategy = new JsHmrStrategy(context);
48
- expect(strategy.priority).toBe(25);
49
- });
50
- });
51
-
52
- describe('matches', () => {
53
- it('returns false when no watched files are registered', () => {
54
- const context = createMockContext({
55
- getWatchedFiles: () => new Map(),
56
- });
57
- const strategy = new JsHmrStrategy(context);
58
-
59
- expect(strategy.matches(path.join(SRC_DIR, 'app.ts'))).toBe(false);
60
- });
61
-
62
- it('returns true for unrelated .ts files when watched entrypoints exist', () => {
63
- const devGraphService = new InMemoryDevGraphService();
64
- const context = createMockContext({
65
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
66
- getEntrypointDependencyGraph: () => devGraphService,
67
- });
68
- const strategy = new JsHmrStrategy(context);
69
-
70
- expect(strategy.matches(path.join(SRC_DIR, 'component.ts'))).toBe(true);
71
- });
72
-
73
- it('returns true for dependency-connected .tsx files in src directory', () => {
74
- const changedFile = path.join(SRC_DIR, 'component.tsx');
75
- const devGraphService = new InMemoryDevGraphService();
76
- devGraphService.setEntrypointDependencies(path.join(SRC_DIR, 'entry.ts'), [changedFile]);
77
- const context = createMockContext({
78
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
79
- getEntrypointDependencyGraph: () => devGraphService,
80
- });
81
- const strategy = new JsHmrStrategy(context);
82
-
83
- expect(strategy.matches(changedFile)).toBe(true);
84
- });
85
-
86
- it('returns true for registered entrypoints even without dependency graph hits', () => {
87
- const entrypoint = path.join(SRC_DIR, 'entry.tsx');
88
- const devGraphService = new InMemoryDevGraphService();
89
- const context = createMockContext({
90
- getWatchedFiles: () => new Map([[entrypoint, '/output.js']]),
91
- getEntrypointDependencyGraph: () => devGraphService,
92
- });
93
- const strategy = new JsHmrStrategy(context);
94
-
95
- expect(strategy.matches(entrypoint)).toBe(true);
96
- });
97
-
98
- it('returns true for .js files in src directory', () => {
99
- const context = createMockContext({
100
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
101
- });
102
- const strategy = new JsHmrStrategy(context);
103
-
104
- expect(strategy.matches(path.join(SRC_DIR, 'utils.js'))).toBe(true);
105
- });
106
-
107
- it('returns true for .jsx files in src directory', () => {
108
- const context = createMockContext({
109
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
110
- });
111
- const strategy = new JsHmrStrategy(context);
112
-
113
- expect(strategy.matches(path.join(SRC_DIR, 'component.jsx'))).toBe(true);
114
- });
115
-
116
- it('returns false for .css files', () => {
117
- const context = createMockContext({
118
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
119
- });
120
- const strategy = new JsHmrStrategy(context);
121
-
122
- expect(strategy.matches(path.join(SRC_DIR, 'styles.css'))).toBe(false);
123
- });
124
-
125
- it('returns false for files outside src directory', () => {
126
- const context = createMockContext({
127
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
128
- });
129
- const strategy = new JsHmrStrategy(context);
130
-
131
- expect(strategy.matches('/other/path/file.ts')).toBe(false);
132
- });
133
-
134
- it('returns false for integration-owned route template files', () => {
135
- const pagesDir = path.join(SRC_DIR, 'pages');
136
- const context = createMockContext({
137
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
138
- getPagesDir: () => pagesDir,
139
- getTemplateExtensions: () => ['.kita.tsx', '.react.tsx'],
140
- });
141
- const strategy = new JsHmrStrategy(context);
142
-
143
- expect(strategy.matches(path.join(pagesDir, 'index.kita.tsx'))).toBe(false);
144
- expect(strategy.matches(path.join(pagesDir, 'home.react.tsx'))).toBe(false);
145
- });
146
-
147
- it('returns false for integration-owned server templates outside pages and layouts', () => {
148
- const context = createMockContext({
149
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
150
- getTemplateExtensions: () => ['.kita.tsx', '.react.tsx'],
151
- });
152
- const strategy = new JsHmrStrategy(context);
153
-
154
- expect(strategy.matches(path.join(SRC_DIR, 'views', 'explicit-team-view.kita.tsx'))).toBe(false);
155
- });
156
-
157
- it('returns false for non-extension matches', () => {
158
- const context = createMockContext({
159
- getWatchedFiles: () => new Map([[path.join(SRC_DIR, 'entry.ts'), '/output.js']]),
160
- });
161
- const strategy = new JsHmrStrategy(context);
162
-
163
- expect(strategy.matches(path.join(SRC_DIR, 'data.json'))).toBe(false);
164
- expect(strategy.matches(path.join(SRC_DIR, 'readme.md'))).toBe(false);
165
- });
166
- });
167
-
168
- describe('process', () => {
169
- it('returns none when no watched files are registered', async () => {
170
- const context = createMockContext({
171
- getWatchedFiles: () => new Map(),
172
- });
173
- const strategy = new JsHmrStrategy(context);
174
-
175
- const action = await strategy.process(path.join(SRC_DIR, 'app.ts'));
176
-
177
- expect(action.type).toBe('none');
178
- });
179
-
180
- it('rebuilds only dependency-connected entrypoints when graph hit exists', async () => {
181
- const entryA = path.join(SRC_DIR, 'entry-a.ts');
182
- const entryB = path.join(SRC_DIR, 'entry-b.ts');
183
- const depA = path.join(SRC_DIR, 'shared-a.ts');
184
- const setEntrypointDependenciesCalls: Array<{ entrypointPath: string; dependencies: string[] }> = [];
185
- let batchedEntrypoints: string[] = [];
186
- const devGraphService = new InMemoryDevGraphService();
187
- devGraphService.setEntrypointDependencies(entryA, [depA]);
188
- devGraphService.setEntrypointDependencies(entryB, [entryB]);
189
-
190
- const context = createMockContext({
191
- getWatchedFiles: () =>
192
- new Map([
193
- [entryA, '/_hmr/entry-a.js'],
194
- [entryB, '/_hmr/entry-b.js'],
195
- ]),
196
- getEntrypointDependencyGraph: () => ({
197
- supportsSelectiveInvalidation: () => devGraphService.supportsSelectiveInvalidation(),
198
- getDependencyEntrypoints: (filePath: string) => devGraphService.getDependencyEntrypoints(filePath),
199
- setEntrypointDependencies: (entrypointPath: string, dependencies: string[]) => {
200
- setEntrypointDependenciesCalls.push({ entrypointPath, dependencies });
201
- devGraphService.setEntrypointDependencies(entrypointPath, dependencies);
202
- },
203
- clearEntrypointDependencies: (entrypointPath: string) =>
204
- devGraphService.clearEntrypointDependencies(entrypointPath),
205
- reset: () => devGraphService.reset(),
206
- }),
207
- });
208
-
209
- const strategy = new JsHmrStrategy(context) as unknown as {
210
- process: (filePath: string) => Promise<{ type: string; events?: unknown[] }>;
211
- [key: string]: unknown;
212
- };
213
-
214
- strategy.bundleEntrypoints = async (entrypoints: string[]) => {
215
- batchedEntrypoints = entrypoints;
216
- const dependencies = new Map<string, string[]>();
217
- for (const ep of entrypoints) {
218
- dependencies.set(path.resolve(ep), [ep, depA]);
219
- }
220
- return { success: true, dependencies };
221
- };
222
-
223
- strategy.processOutput = async () => {
224
- return { success: true, requiresReload: false };
225
- };
226
-
227
- const action = await strategy.process(depA);
228
-
229
- expect(batchedEntrypoints).toEqual([entryA]);
230
- expect(setEntrypointDependenciesCalls).toEqual([{ entrypointPath: entryA, dependencies: [entryA, depA] }]);
231
- expect(action).toEqual({
232
- type: 'broadcast',
233
- events: [
234
- {
235
- type: 'update',
236
- path: '/_hmr/entry-a.js',
237
- timestamp: expect.any(Number),
238
- },
239
- ],
240
- });
241
- });
242
-
243
- it('falls back to rebuilding all watched entrypoints when graph has no hit', async () => {
244
- const entryA = path.join(SRC_DIR, 'entry-a.ts');
245
- const entryB = path.join(SRC_DIR, 'entry-b.ts');
246
- const changedFile = path.join(SRC_DIR, 'new-shared.ts');
247
- let batchedEntrypoints: string[] = [];
248
-
249
- const context = createMockContext({
250
- getWatchedFiles: () =>
251
- new Map([
252
- [entryA, '/_hmr/entry-a.js'],
253
- [entryB, '/_hmr/entry-b.js'],
254
- ]),
255
- getEntrypointDependencyGraph: () => new NoopDevGraphService(),
256
- });
257
-
258
- const strategy = new JsHmrStrategy(context) as unknown as {
259
- process: (filePath: string) => Promise<{ type: string; events?: unknown[] }>;
260
- [key: string]: unknown;
261
- };
262
-
263
- strategy.bundleEntrypoints = async (entrypoints: string[]) => {
264
- batchedEntrypoints = entrypoints;
265
- const dependencies = new Map<string, string[]>();
266
- for (const ep of entrypoints) {
267
- dependencies.set(path.resolve(ep), [ep]);
268
- }
269
- return { success: true, dependencies };
270
- };
271
-
272
- strategy.processOutput = async () => {
273
- return { success: true, requiresReload: false };
274
- };
275
-
276
- const action = await strategy.process(changedFile);
277
-
278
- expect(batchedEntrypoints).toEqual([entryA, entryB]);
279
- expect(action).toEqual({
280
- type: 'broadcast',
281
- events: [
282
- {
283
- type: 'update',
284
- path: '/_hmr/entry-a.js',
285
- timestamp: expect.any(Number),
286
- },
287
- {
288
- type: 'update',
289
- path: '/_hmr/entry-b.js',
290
- timestamp: expect.any(Number),
291
- },
292
- ],
293
- });
294
- });
295
-
296
- it('skips watched entrypoints owned by higher-priority integration strategies', async () => {
297
- const reactEntrypoint = path.join(SRC_DIR, 'react-page.tsx');
298
- const scriptEntrypoint = path.join(SRC_DIR, 'widget.script.ts');
299
- const changedFile = path.join(SRC_DIR, 'shared.ts');
300
- let batchedEntrypoints: string[] = [];
301
- const devGraphService = new InMemoryDevGraphService();
302
- devGraphService.setEntrypointDependencies(reactEntrypoint, [changedFile]);
303
- devGraphService.setEntrypointDependencies(scriptEntrypoint, [changedFile]);
304
-
305
- const context = createMockContext({
306
- getWatchedFiles: () =>
307
- new Map([
308
- [reactEntrypoint, '/_hmr/react-page.js'],
309
- [scriptEntrypoint, '/_hmr/widget.script.js'],
310
- ]),
311
- getEntrypointDependencyGraph: () => devGraphService,
312
- shouldProcessEntrypoint: (entrypointPath: string) => entrypointPath !== reactEntrypoint,
313
- });
314
-
315
- const strategy = new JsHmrStrategy(context) as unknown as {
316
- process: (filePath: string) => Promise<{ type: string; events?: unknown[] }>;
317
- [key: string]: unknown;
318
- };
319
-
320
- strategy.bundleEntrypoints = async (entrypoints: string[]) => {
321
- batchedEntrypoints = entrypoints;
322
- return { success: true, dependencies: new Map([[path.resolve(scriptEntrypoint), [scriptEntrypoint]]]) };
323
- };
324
-
325
- strategy.processOutput = async () => {
326
- return { success: true, requiresReload: false };
327
- };
328
-
329
- const action = await strategy.process(changedFile);
330
-
331
- expect(batchedEntrypoints).toEqual([scriptEntrypoint]);
332
- expect(action).toEqual({
333
- type: 'broadcast',
334
- events: [
335
- {
336
- type: 'update',
337
- path: '/_hmr/widget.script.js',
338
- timestamp: expect.any(Number),
339
- },
340
- ],
341
- });
342
- });
343
- });
344
- });