@ecopages/core 0.2.0-alpha.7 → 0.2.0-alpha.9

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 (354) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/package.json +212 -92
  3. package/src/adapters/abstract/application-adapter.d.ts +168 -0
  4. package/src/adapters/abstract/application-adapter.js +109 -0
  5. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  6. package/src/adapters/abstract/router-adapter.js +5 -0
  7. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  8. package/src/adapters/abstract/server-adapter.js +15 -0
  9. package/src/adapters/bun/client-bridge.d.ts +34 -0
  10. package/src/adapters/bun/client-bridge.js +48 -0
  11. package/src/adapters/bun/create-app.d.ts +60 -0
  12. package/src/adapters/bun/create-app.js +117 -0
  13. package/src/adapters/bun/hmr-manager.d.ts +143 -0
  14. package/src/adapters/bun/hmr-manager.js +334 -0
  15. package/src/adapters/bun/index.d.ts +2 -0
  16. package/src/adapters/bun/index.js +8 -0
  17. package/src/adapters/bun/server-adapter.d.ts +155 -0
  18. package/src/adapters/bun/server-adapter.js +373 -0
  19. package/src/adapters/bun/server-lifecycle.d.ts +63 -0
  20. package/src/adapters/bun/server-lifecycle.js +92 -0
  21. package/src/adapters/index.d.ts +6 -0
  22. package/src/adapters/index.js +14 -0
  23. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +44 -0
  24. package/src/adapters/node/bootstrap-dependency-resolver.js +172 -0
  25. package/src/adapters/node/create-app.d.ts +21 -0
  26. package/src/adapters/node/create-app.js +143 -0
  27. package/src/adapters/node/index.d.ts +6 -0
  28. package/src/adapters/node/index.js +11 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  30. package/src/adapters/node/node-client-bridge.js +66 -0
  31. package/src/adapters/node/node-hmr-manager.d.ts +133 -0
  32. package/src/adapters/node/node-hmr-manager.js +312 -0
  33. package/src/adapters/node/runtime-adapter.d.ts +46 -0
  34. package/src/adapters/node/runtime-adapter.js +306 -0
  35. package/src/adapters/node/server-adapter.d.ts +161 -0
  36. package/src/adapters/node/server-adapter.js +358 -0
  37. package/src/adapters/node/static-content-server.d.ts +60 -0
  38. package/src/adapters/node/static-content-server.js +194 -0
  39. package/src/adapters/node/write-runtime-manifest.d.ts +26 -0
  40. package/src/adapters/node/write-runtime-manifest.js +12 -0
  41. package/src/adapters/shared/api-response.d.ts +52 -0
  42. package/src/adapters/shared/api-response.js +96 -0
  43. package/src/adapters/shared/application-adapter.d.ts +18 -0
  44. package/src/adapters/shared/application-adapter.js +90 -0
  45. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  46. package/src/adapters/shared/define-api-handler.js +15 -0
  47. package/src/adapters/shared/explicit-static-route-matcher.d.ts +38 -0
  48. package/src/adapters/shared/explicit-static-route-matcher.js +103 -0
  49. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
  50. package/src/adapters/shared/file-route-middleware-pipeline.js +99 -0
  51. package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
  52. package/src/adapters/shared/fs-server-response-factory.js +97 -0
  53. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  54. package/src/adapters/shared/fs-server-response-matcher.js +160 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  56. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  57. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  58. package/src/adapters/shared/hmr-html-response.js +32 -0
  59. package/src/adapters/shared/render-context.d.ts +14 -0
  60. package/src/adapters/shared/render-context.js +70 -0
  61. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  62. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  63. package/src/adapters/shared/server-adapter.d.ts +97 -0
  64. package/src/adapters/shared/server-adapter.js +386 -0
  65. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  66. package/src/adapters/shared/server-route-handler.js +111 -0
  67. package/src/adapters/shared/server-static-builder.d.ts +70 -0
  68. package/src/adapters/shared/server-static-builder.js +99 -0
  69. package/src/build/build-adapter.d.ts +186 -0
  70. package/src/build/build-adapter.js +168 -0
  71. package/src/build/build-manifest.d.ts +27 -0
  72. package/src/build/build-manifest.js +30 -0
  73. package/src/build/build-types.d.ts +57 -0
  74. package/src/build/build-types.js +0 -0
  75. package/src/build/dev-build-coordinator.d.ts +74 -0
  76. package/src/build/dev-build-coordinator.js +161 -0
  77. package/src/build/esbuild-build-adapter.d.ts +72 -0
  78. package/src/build/esbuild-build-adapter.js +422 -0
  79. package/src/build/runtime-build-executor.d.ts +13 -0
  80. package/src/build/runtime-build-executor.js +20 -0
  81. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  82. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  83. package/src/config/config-builder.d.ts +238 -0
  84. package/src/config/config-builder.js +565 -0
  85. package/src/constants.d.ts +45 -0
  86. package/src/constants.js +25 -0
  87. package/src/create-app.d.ts +17 -0
  88. package/src/create-app.js +66 -0
  89. package/src/dev/sc-server.d.ts +30 -0
  90. package/src/dev/sc-server.js +111 -0
  91. package/src/eco/component-render-context.d.ts +105 -0
  92. package/src/eco/component-render-context.js +87 -0
  93. package/src/eco/eco.d.ts +9 -0
  94. package/src/eco/eco.js +114 -0
  95. package/src/eco/eco.types.d.ts +178 -0
  96. package/src/eco/eco.types.js +0 -0
  97. package/src/eco/eco.utils.d.ts +40 -0
  98. package/src/eco/eco.utils.js +40 -0
  99. package/src/eco/global-injector-map.d.ts +16 -0
  100. package/src/eco/global-injector-map.js +80 -0
  101. package/src/eco/lazy-injector-map.d.ts +8 -0
  102. package/src/eco/lazy-injector-map.js +70 -0
  103. package/src/eco/module-dependencies.d.ts +18 -0
  104. package/src/eco/module-dependencies.js +49 -0
  105. package/src/errors/http-error.d.ts +31 -0
  106. package/src/errors/http-error.js +50 -0
  107. package/src/errors/index.d.ts +2 -0
  108. package/src/errors/index.js +4 -0
  109. package/src/errors/locals-access-error.d.ts +4 -0
  110. package/src/errors/locals-access-error.js +9 -0
  111. package/src/global/app-logger.d.ts +2 -0
  112. package/src/global/app-logger.js +6 -0
  113. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  114. package/src/hmr/client/hmr-runtime.js +109 -0
  115. package/src/hmr/hmr-strategy.d.ts +159 -0
  116. package/src/hmr/hmr-strategy.js +29 -0
  117. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  118. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  119. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  120. package/src/hmr/hmr.test.e2e.js +43 -0
  121. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  122. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  123. package/src/hmr/strategies/js-hmr-strategy.d.ts +139 -0
  124. package/src/hmr/strategies/js-hmr-strategy.js +178 -0
  125. package/src/index.browser.d.ts +3 -0
  126. package/src/index.browser.js +4 -0
  127. package/src/index.d.ts +5 -0
  128. package/src/index.js +10 -0
  129. package/src/integrations/ghtml/ghtml-renderer.d.ts +15 -0
  130. package/src/integrations/ghtml/ghtml-renderer.js +62 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +20 -0
  132. package/src/integrations/ghtml/ghtml.plugin.js +21 -0
  133. package/src/internal-types.d.ts +221 -0
  134. package/src/internal-types.js +0 -0
  135. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  136. package/src/plugins/alias-resolver-plugin.js +53 -0
  137. package/src/plugins/eco-component-meta-plugin.d.ts +97 -0
  138. package/src/plugins/eco-component-meta-plugin.js +157 -0
  139. package/src/plugins/integration-plugin.d.ts +136 -0
  140. package/src/plugins/integration-plugin.js +133 -0
  141. package/src/plugins/processor.d.ts +95 -0
  142. package/src/plugins/processor.js +136 -0
  143. package/src/plugins/runtime-capability.d.ts +9 -0
  144. package/src/plugins/runtime-capability.js +0 -0
  145. package/src/public-types.d.ts +1149 -0
  146. package/src/public-types.js +0 -0
  147. package/src/route-renderer/component-graph/component-graph-executor.d.ts +32 -0
  148. package/src/route-renderer/component-graph/component-graph-executor.js +31 -0
  149. package/src/route-renderer/component-graph/component-graph.d.ts +42 -0
  150. package/src/route-renderer/component-graph/component-graph.js +72 -0
  151. package/src/route-renderer/component-graph/component-marker.d.ts +52 -0
  152. package/src/route-renderer/component-graph/component-marker.js +46 -0
  153. package/src/route-renderer/component-graph/component-reference.d.ts +10 -0
  154. package/src/route-renderer/component-graph/component-reference.js +19 -0
  155. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +77 -0
  156. package/src/route-renderer/component-graph/marker-graph-resolver.js +95 -0
  157. package/src/route-renderer/orchestration/integration-renderer.d.ts +372 -0
  158. package/src/route-renderer/orchestration/integration-renderer.js +589 -0
  159. package/src/route-renderer/orchestration/render-execution.service.d.ts +103 -0
  160. package/src/route-renderer/orchestration/render-execution.service.js +121 -0
  161. package/src/route-renderer/orchestration/render-preparation.service.d.ts +121 -0
  162. package/src/route-renderer/orchestration/render-preparation.service.js +332 -0
  163. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  164. package/src/route-renderer/page-loading/dependency-resolver.js +442 -0
  165. package/src/route-renderer/page-loading/page-module-loader.d.ts +87 -0
  166. package/src/route-renderer/page-loading/page-module-loader.js +124 -0
  167. package/src/route-renderer/route-renderer.d.ts +61 -0
  168. package/src/route-renderer/route-renderer.js +87 -0
  169. package/src/router/client/link-intent.js +34 -0
  170. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  171. package/src/router/client/link-intent.test.browser.js +43 -0
  172. package/src/router/client/navigation-coordinator.d.ts +149 -0
  173. package/src/router/client/navigation-coordinator.js +215 -0
  174. package/src/router/server/fs-router-scanner.d.ts +41 -0
  175. package/src/router/server/fs-router-scanner.js +156 -0
  176. package/src/router/server/fs-router.d.ts +26 -0
  177. package/src/router/server/fs-router.js +100 -0
  178. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
  179. package/src/services/assets/asset-processing-service/asset-processing.service.js +331 -0
  180. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  181. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  182. package/src/services/assets/asset-processing-service/assets.types.d.ts +89 -0
  183. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  184. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  185. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
  186. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  187. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  188. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  189. package/src/services/assets/asset-processing-service/index.js +5 -0
  190. package/src/services/assets/asset-processing-service/processor.interface.d.ts +22 -0
  191. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  192. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  193. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  194. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  195. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +64 -0
  196. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +17 -0
  197. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +72 -0
  198. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  199. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  200. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +5 -0
  201. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +57 -0
  202. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +8 -0
  203. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +76 -0
  204. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  205. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +75 -0
  206. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -0
  207. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +25 -0
  208. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  209. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +66 -0
  210. package/src/services/assets/browser-bundle.service.d.ts +32 -0
  211. package/src/services/assets/browser-bundle.service.js +33 -0
  212. package/src/services/cache/cache.types.d.ts +107 -0
  213. package/src/services/cache/cache.types.js +0 -0
  214. package/src/services/cache/index.d.ts +7 -0
  215. package/src/services/cache/index.js +7 -0
  216. package/src/services/cache/memory-cache-store.d.ts +42 -0
  217. package/src/services/cache/memory-cache-store.js +98 -0
  218. package/src/services/cache/page-cache-service.d.ts +70 -0
  219. package/src/services/cache/page-cache-service.js +152 -0
  220. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  221. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  222. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  223. package/src/services/html/html-rewriter-provider.service.js +65 -0
  224. package/src/services/html/html-transformer.service.d.ts +77 -0
  225. package/src/services/html/html-transformer.service.js +221 -0
  226. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  227. package/src/services/invalidation/development-invalidation.service.js +189 -0
  228. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +16 -0
  229. package/src/services/module-loading/app-server-module-transpiler.service.js +34 -0
  230. package/src/services/module-loading/page-module-import.service.d.ts +71 -0
  231. package/src/services/module-loading/page-module-import.service.js +132 -0
  232. package/src/services/module-loading/server-loader.service.d.ts +96 -0
  233. package/src/services/module-loading/server-loader.service.js +32 -0
  234. package/src/services/module-loading/server-module-transpiler.service.d.ts +69 -0
  235. package/src/services/module-loading/server-module-transpiler.service.js +61 -0
  236. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +35 -0
  237. package/src/services/runtime-manifest/node-runtime-manifest.service.js +60 -0
  238. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  239. package/src/services/runtime-state/dev-graph.service.js +162 -0
  240. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  241. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  242. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  243. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  244. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  245. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  246. package/src/services/validation/schema-validation-service.d.ts +122 -0
  247. package/src/services/validation/schema-validation-service.js +101 -0
  248. package/src/services/validation/standard-schema.types.d.ts +65 -0
  249. package/src/services/validation/standard-schema.types.js +0 -0
  250. package/src/static-site-generator/static-site-generator.d.ts +109 -0
  251. package/src/static-site-generator/static-site-generator.js +353 -0
  252. package/src/utils/css.d.ts +1 -0
  253. package/src/utils/css.js +7 -0
  254. package/src/utils/deep-merge.d.ts +14 -0
  255. package/src/utils/deep-merge.js +32 -0
  256. package/src/utils/hash.d.ts +1 -0
  257. package/src/utils/hash.js +7 -0
  258. package/src/utils/html.d.ts +1 -0
  259. package/src/utils/html.js +4 -0
  260. package/src/utils/invariant.d.ts +5 -0
  261. package/src/utils/invariant.js +11 -0
  262. package/src/utils/locals-utils.d.ts +15 -0
  263. package/src/utils/locals-utils.js +24 -0
  264. package/src/utils/parse-cli-args.d.ts +24 -0
  265. package/src/utils/parse-cli-args.js +47 -0
  266. package/src/utils/path-utils.module.d.ts +5 -0
  267. package/src/utils/path-utils.module.js +14 -0
  268. package/src/utils/resolve-work-dir.d.ts +11 -0
  269. package/src/utils/resolve-work-dir.js +31 -0
  270. package/src/utils/runtime.d.ts +11 -0
  271. package/src/utils/runtime.js +40 -0
  272. package/src/utils/server-utils.module.d.ts +19 -0
  273. package/src/utils/server-utils.module.js +56 -0
  274. package/src/watchers/project-watcher.d.ts +136 -0
  275. package/src/watchers/project-watcher.js +281 -0
  276. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  277. package/src/watchers/project-watcher.test-helpers.js +52 -0
  278. package/src/adapters/bun/hmr-manager.test.ts +0 -267
  279. package/src/adapters/node/bootstrap-dependency-resolver.test.ts +0 -282
  280. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  281. package/src/adapters/node/node-hmr-manager.test.ts +0 -322
  282. package/src/adapters/node/runtime-adapter.test.ts +0 -868
  283. package/src/adapters/node/static-content-server.test.ts +0 -60
  284. package/src/adapters/shared/api-response.test.ts +0 -97
  285. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  286. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -90
  287. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -187
  288. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -286
  289. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -196
  290. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
  291. package/src/adapters/shared/render-context.test.ts +0 -146
  292. package/src/adapters/shared/server-adapter.test.ts +0 -77
  293. package/src/adapters/shared/server-route-handler.test.ts +0 -110
  294. package/src/adapters/shared/server-static-builder.test.ts +0 -316
  295. package/src/build/build-adapter-serialization.test.ts +0 -268
  296. package/src/build/build-adapter.test.ts +0 -815
  297. package/src/build/runtime-specifier-alias-plugin.test.ts +0 -43
  298. package/src/config/config-builder.test.ts +0 -410
  299. package/src/eco/eco.test.ts +0 -678
  300. package/src/eco/eco.utils.test.ts +0 -124
  301. package/src/eco/global-injector-map.test.ts +0 -42
  302. package/src/eco/lazy-injector-map.test.ts +0 -66
  303. package/src/eco/module-dependencies.test.ts +0 -30
  304. package/src/errors/http-error.test.ts +0 -134
  305. package/src/global/utils.test.ts +0 -12
  306. 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
  307. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  308. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  309. package/src/hmr/hmr-strategy.test.ts +0 -124
  310. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -335
  311. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -63
  312. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  313. package/src/plugins/eco-component-meta-plugin.test.ts +0 -380
  314. package/src/plugins/integration-plugin.test.ts +0 -111
  315. package/src/plugins/processor.test.ts +0 -148
  316. package/src/route-renderer/component-graph/component-graph-executor.test.ts +0 -41
  317. package/src/route-renderer/component-graph/component-graph.test.ts +0 -63
  318. package/src/route-renderer/component-graph/component-marker.test.ts +0 -73
  319. package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +0 -135
  320. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -936
  321. package/src/route-renderer/orchestration/render-execution.service.test.ts +0 -97
  322. package/src/route-renderer/orchestration/render-preparation.service.test.ts +0 -235
  323. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -345
  324. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -96
  325. package/src/router/client/navigation-coordinator.test.ts +0 -237
  326. package/src/router/server/fs-router-scanner.test.ts +0 -83
  327. package/src/router/server/fs-router.test.ts +0 -214
  328. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -385
  329. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  330. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -72
  331. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  332. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  333. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -286
  334. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
  335. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -199
  336. package/src/services/assets/browser-bundle.service.test.ts +0 -36
  337. package/src/services/cache/memory-cache-store.test.ts +0 -225
  338. package/src/services/cache/page-cache-service.test.ts +0 -175
  339. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  340. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  341. package/src/services/html/html-transformer.service.test.ts +0 -378
  342. package/src/services/invalidation/development-invalidation.service.test.ts +0 -77
  343. package/src/services/module-loading/page-module-import.service.test.ts +0 -253
  344. package/src/services/module-loading/server-loader.service.test.ts +0 -161
  345. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -115
  346. package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +0 -95
  347. package/src/services/validation/schema-validation-service.test.ts +0 -223
  348. package/src/static-site-generator/static-site-generator.test.ts +0 -307
  349. package/src/utils/deep-merge.test.ts +0 -114
  350. package/src/utils/invariant.test.ts +0 -22
  351. package/src/utils/path-utils.test.ts +0 -15
  352. package/src/utils/server-utils.test.ts +0 -38
  353. package/src/watchers/project-watcher.integration.test.ts +0 -337
  354. package/src/watchers/project-watcher.test.ts +0 -678
@@ -0,0 +1,109 @@
1
+ import { getEcoNavigationRuntime } from "../../router/client/navigation-coordinator.js";
2
+ (function() {
3
+ const WS_URL = "ws://" + location.host + "/_hmr";
4
+ let socket;
5
+ let reconnectAttempts = 0;
6
+ function connect() {
7
+ socket = new WebSocket(WS_URL);
8
+ socket.addEventListener("open", () => {
9
+ console.log("[ecopages] HMR Connected");
10
+ reconnectAttempts = 0;
11
+ });
12
+ socket.addEventListener("message", async (event) => {
13
+ try {
14
+ const payload = JSON.parse(event.data);
15
+ handleMessage(payload);
16
+ } catch (e) {
17
+ console.error("[ecopages] Invalid HMR message:", e);
18
+ }
19
+ });
20
+ socket.addEventListener("close", () => {
21
+ if (reconnectAttempts < 10) {
22
+ setTimeout(connect, 1e3 * 2 ** reconnectAttempts);
23
+ reconnectAttempts++;
24
+ }
25
+ });
26
+ }
27
+ async function handleMessage(payload) {
28
+ const navigationRuntime = getEcoNavigationRuntime(window);
29
+ switch (payload.type) {
30
+ case "reload":
31
+ await waitForNavigationToSettle(navigationRuntime);
32
+ location.reload();
33
+ break;
34
+ case "layout-update": {
35
+ await waitForNavigationToSettle(navigationRuntime);
36
+ if (await navigationRuntime.reloadCurrentPage({ clearCache: true })) {
37
+ } else {
38
+ location.reload();
39
+ }
40
+ break;
41
+ }
42
+ case "error":
43
+ console.error("[ecopages] HMR Error:", payload.message);
44
+ break;
45
+ case "update":
46
+ if (payload.path) {
47
+ await applyUpdate(payload.path, payload.timestamp);
48
+ }
49
+ break;
50
+ case "css-update":
51
+ if (payload.path) {
52
+ refreshStylesheet(payload.path);
53
+ }
54
+ break;
55
+ }
56
+ }
57
+ async function applyUpdate(path, timestamp) {
58
+ try {
59
+ const url = path + "?t=" + (timestamp || Date.now());
60
+ const handlers = window.__ECO_PAGES__?.hmrHandlers;
61
+ const navigationRuntime = getEcoNavigationRuntime(window);
62
+ await waitForNavigationToSettle(navigationRuntime);
63
+ if (handlers?.[path]) {
64
+ await handlers[path](url);
65
+ return;
66
+ }
67
+ await import(url);
68
+ if (await navigationRuntime.reloadCurrentPage({ clearCache: false })) {
69
+ }
70
+ } catch (e) {
71
+ console.error("[ecopages] Failed to apply HMR update:", e);
72
+ }
73
+ }
74
+ async function waitForNavigationToSettle(navigationRuntime) {
75
+ if (!navigationRuntime.hasPendingNavigationTransaction()) {
76
+ return;
77
+ }
78
+ await new Promise((resolve) => {
79
+ const startedAt = performance.now();
80
+ const timeoutMs = 2e3;
81
+ const poll = () => {
82
+ if (!navigationRuntime.hasPendingNavigationTransaction()) {
83
+ resolve();
84
+ return;
85
+ }
86
+ if (performance.now() - startedAt >= timeoutMs) {
87
+ resolve();
88
+ return;
89
+ }
90
+ requestAnimationFrame(poll);
91
+ };
92
+ requestAnimationFrame(poll);
93
+ });
94
+ }
95
+ function refreshStylesheet(path) {
96
+ const filename = path.split("/").pop() || "";
97
+ const links = document.querySelectorAll('link[rel="stylesheet"]');
98
+ links.forEach((link) => {
99
+ const href = link.href;
100
+ if (href.includes(filename) || href.includes(path.replace(/^.*\/src\//, "/assets/"))) {
101
+ const url = new URL(href, location.origin);
102
+ url.searchParams.set("t", Date.now().toString());
103
+ link.href = url.toString();
104
+ console.log("[ecopages] CSS updated:", filename);
105
+ }
106
+ });
107
+ }
108
+ connect();
109
+ })();
@@ -0,0 +1,159 @@
1
+ import type { ClientBridgeEvent } from '../public-types';
2
+ /**
3
+ * HMR Strategy Pattern
4
+ *
5
+ * This module defines the base classes and types for Hot Module Replacement strategies.
6
+ * Each strategy handles a specific type of file change and determines how to process it.
7
+ *
8
+ * @module
9
+ * @example
10
+ * ```typescript
11
+ * class CustomHmrStrategy extends HmrStrategy {
12
+ * readonly type = HmrStrategyType.INTEGRATION;
13
+ *
14
+ * matches(filePath: string): boolean {
15
+ * return filePath.endsWith('.custom');
16
+ * }
17
+ *
18
+ * async process(filePath: string): Promise<HmrAction> {
19
+ * return {
20
+ * type: 'broadcast',
21
+ * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
22
+ * };
23
+ * }
24
+ * }
25
+
26
+ * Defines the category of an HMR strategy, which determines its execution priority.
27
+ * Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
28
+ *
29
+ * @remarks
30
+ * The numeric values represent base priorities. Strategies can fine-tune their priority
31
+ * using the `priorityOffset` property.
32
+ */
33
+ export declare enum HmrStrategyType {
34
+ /**
35
+ * Integration-specific strategies (React, Lit, etc.)
36
+ * Highest priority to allow framework-specific HMR handling.
37
+ */
38
+ INTEGRATION = 100,
39
+ /**
40
+ * Asset processing strategies (CSS, images, etc.)
41
+ * High priority for specialized asset handling.
42
+ */
43
+ ASSET = 50,
44
+ /**
45
+ * Generic script bundling strategies (JS/TS)
46
+ * Medium priority for standard script processing.
47
+ */
48
+ SCRIPT = 25,
49
+ /**
50
+ * Fallback strategy for unhandled file types.
51
+ * Lowest priority, triggers full page reload.
52
+ */
53
+ FALLBACK = 0
54
+ }
55
+ /**
56
+ * Represents an action to be taken after processing a file change.
57
+ */
58
+ export interface HmrAction {
59
+ /**
60
+ * Whether to broadcast an HMR event to connected clients.
61
+ */
62
+ type: 'broadcast' | 'none';
63
+ /**
64
+ * The HMR events to broadcast, if type is 'broadcast'.
65
+ * capable of broadcasting multiple events at once.
66
+ */
67
+ events?: ClientBridgeEvent[];
68
+ }
69
+ /**
70
+ * Base class for HMR strategies.
71
+ *
72
+ * Each strategy handles a specific type of file change and determines how to process it.
73
+ * Strategies are selected based on their priority (higher values are evaluated first) and
74
+ * whether they match the changed file path.
75
+ *
76
+ * @remarks
77
+ * Strategies should be stateless and idempotent. The same file change should always
78
+ * produce the same result when processed by the same strategy.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * class MyAssetStrategy extends HmrStrategy {
83
+ * readonly type = HmrStrategyType.ASSET;
84
+ * readonly priorityOffset = 5;
85
+ *
86
+ * matches(filePath: string): boolean {
87
+ * return /\.(png|jpg|svg)$/.test(filePath);
88
+ * }
89
+ *
90
+ * async process(filePath: string): Promise<HmrAction> {
91
+ * await this.optimizeImage(filePath);
92
+ * return {
93
+ * type: 'broadcast',
94
+ * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
95
+ * };
96
+ * }
97
+ * }
98
+ * ```
99
+ */
100
+ export declare abstract class HmrStrategy {
101
+ /**
102
+ * The category of this strategy, determining its base priority.
103
+ */
104
+ abstract readonly type: HmrStrategyType;
105
+ /**
106
+ * Optional offset to fine-tune priority within the same category.
107
+ * Useful when multiple strategies share the same type.
108
+ *
109
+ * @defaultValue 0
110
+ */
111
+ readonly priorityOffset: number;
112
+ /**
113
+ * Computed priority for strategy selection.
114
+ * Higher values are evaluated first.
115
+ *
116
+ * @returns The sum of the strategy type and priority offset
117
+ */
118
+ get priority(): number;
119
+ /**
120
+ * Determines if this strategy can handle the given file path.
121
+ *
122
+ * @param filePath - Absolute path to the changed file
123
+ * @returns True if this strategy should process the file
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * matches(filePath: string): boolean {
128
+ * return filePath.endsWith('.css');
129
+ * }
130
+ * ```
131
+ */
132
+ abstract matches(filePath: string): boolean;
133
+ /**
134
+ * Processes a file change and returns the action to take.
135
+ *
136
+ * This method may perform side effects such as:
137
+ * - Rebuilding files
138
+ * - Writing to disk
139
+ * - Transforming code
140
+ * - Updating caches
141
+ *
142
+ * @param filePath - Absolute path to the changed file
143
+ * @returns Action to take (broadcast event or none)
144
+ *
145
+ * @example
146
+ * ```typescript
147
+ * async process(filePath: string): Promise<HmrAction> {
148
+ * const processed = await this.transform(filePath);
149
+ * await Bun.write(outputPath, processed);
150
+ *
151
+ * return {
152
+ * type: 'broadcast',
153
+ * events: [{ type: 'update', path: outputPath, timestamp: Date.now() }]
154
+ * };
155
+ * }
156
+ * ```
157
+ */
158
+ abstract process(filePath: string): Promise<HmrAction>;
159
+ }
@@ -0,0 +1,29 @@
1
+ var HmrStrategyType = /* @__PURE__ */ ((HmrStrategyType2) => {
2
+ HmrStrategyType2[HmrStrategyType2["INTEGRATION"] = 100] = "INTEGRATION";
3
+ HmrStrategyType2[HmrStrategyType2["ASSET"] = 50] = "ASSET";
4
+ HmrStrategyType2[HmrStrategyType2["SCRIPT"] = 25] = "SCRIPT";
5
+ HmrStrategyType2[HmrStrategyType2["FALLBACK"] = 0] = "FALLBACK";
6
+ return HmrStrategyType2;
7
+ })(HmrStrategyType || {});
8
+ class HmrStrategy {
9
+ /**
10
+ * Optional offset to fine-tune priority within the same category.
11
+ * Useful when multiple strategies share the same type.
12
+ *
13
+ * @defaultValue 0
14
+ */
15
+ priorityOffset = 0;
16
+ /**
17
+ * Computed priority for strategy selection.
18
+ * Higher values are evaluated first.
19
+ *
20
+ * @returns The sum of the strategy type and priority offset
21
+ */
22
+ get priority() {
23
+ return this.type + this.priorityOffset;
24
+ }
25
+ }
26
+ export {
27
+ HmrStrategy,
28
+ HmrStrategyType
29
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
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
+ const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
6
+ const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/postcss-hmr.css");
7
+ test.describe("HMR E2E PostCSS", () => {
8
+ test("should hot-update processor-owned CSS without a full page reload", async ({ page }) => {
9
+ const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
10
+ const title = page.locator(".postcss-title").first();
11
+ try {
12
+ await page.goto("/postcss-hmr", { waitUntil: "networkidle" });
13
+ await expect(title).toBeVisible();
14
+ const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
15
+ expect(initialColor).toBeTruthy();
16
+ await page.evaluate(() => {
17
+ window.__postcssReloadProbe = "before-change";
18
+ });
19
+ const modifiedCss = originalCss.replace(".postcss-title {", ".postcss-title {\n color: rgb(255, 0, 0);");
20
+ await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
21
+ await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
22
+ await expect(
23
+ page.evaluate(
24
+ () => window.__postcssReloadProbe ?? null
25
+ )
26
+ ).resolves.toBe("before-change");
27
+ } finally {
28
+ await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
29
+ }
30
+ });
31
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
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
+ const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
6
+ const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/index.css");
7
+ test.describe("HMR E2E", () => {
8
+ test("should load page with .main-title element", async ({ page }) => {
9
+ await page.goto("/", { waitUntil: "networkidle" });
10
+ const title = page.locator(".main-title").first();
11
+ await expect(title).toBeVisible();
12
+ });
13
+ test("should connect to HMR WebSocket", async ({ page }) => {
14
+ const socketPromise = page.waitForEvent("websocket", {
15
+ predicate: (socket2) => socket2.url().endsWith("/_hmr"),
16
+ timeout: 1e4
17
+ });
18
+ await page.goto("/", { waitUntil: "networkidle" });
19
+ const socket = await socketPromise;
20
+ expect(socket.url()).toMatch(/\/_hmr$/);
21
+ });
22
+ test("should fall back to a full page reload when raw CSS file changes", async ({ page }) => {
23
+ const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
24
+ const title = page.locator(".main-title").first();
25
+ try {
26
+ await page.goto("/", { waitUntil: "networkidle" });
27
+ await expect(title).toBeVisible();
28
+ const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
29
+ expect(initialColor).toBeTruthy();
30
+ const modifiedCss = originalCss.replace(".main-title {", ".main-title {\n color: rgb(255, 0, 0);");
31
+ const reloadPromise = page.waitForEvent("framenavigated", {
32
+ predicate: (frame) => frame === page.mainFrame(),
33
+ timeout: 1e4
34
+ });
35
+ await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
36
+ await reloadPromise;
37
+ await page.waitForLoadState("networkidle");
38
+ await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
39
+ } finally {
40
+ await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
41
+ }
42
+ });
43
+ });
@@ -0,0 +1,43 @@
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
+ import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
10
+ /**
11
+ * Default fallback strategy for unhandled file types.
12
+ *
13
+ * This strategy matches all files and triggers a full page reload.
14
+ * It has the lowest priority (FALLBACK) and acts as a catch-all when
15
+ * no other strategy matches the changed file.
16
+ *
17
+ * @remarks
18
+ * This strategy ensures that all file changes result in some action,
19
+ * even if we don't have specialized handling for that file type.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const strategy = new DefaultHmrStrategy();
24
+ * const action = await strategy.process('/path/to/unknown.file');
25
+ * ```
26
+ */
27
+ export declare class DefaultHmrStrategy extends HmrStrategy {
28
+ readonly type = HmrStrategyType.FALLBACK;
29
+ /**
30
+ * Matches all file paths.
31
+ *
32
+ * @param _filePath - Absolute path to the changed file (unused)
33
+ * @returns Always returns true as this is a catch-all strategy
34
+ */
35
+ matches(_filePath: string): boolean;
36
+ /**
37
+ * Processes a file change by triggering a full page reload.
38
+ *
39
+ * @param filePath - Absolute path to the changed file
40
+ * @returns Action to broadcast a reload event
41
+ */
42
+ process(filePath: string): Promise<HmrAction>;
43
+ }
@@ -0,0 +1,34 @@
1
+ import { HmrStrategy, HmrStrategyType } from "../hmr-strategy";
2
+ class DefaultHmrStrategy extends HmrStrategy {
3
+ type = HmrStrategyType.FALLBACK;
4
+ /**
5
+ * Matches all file paths.
6
+ *
7
+ * @param _filePath - Absolute path to the changed file (unused)
8
+ * @returns Always returns true as this is a catch-all strategy
9
+ */
10
+ matches(_filePath) {
11
+ return true;
12
+ }
13
+ /**
14
+ * Processes a file change by triggering a full page reload.
15
+ *
16
+ * @param filePath - Absolute path to the changed file
17
+ * @returns Action to broadcast a reload event
18
+ */
19
+ async process(filePath) {
20
+ return {
21
+ type: "broadcast",
22
+ events: [
23
+ {
24
+ type: "reload",
25
+ path: filePath,
26
+ message: "fallback-strategy"
27
+ }
28
+ ]
29
+ };
30
+ }
31
+ }
32
+ export {
33
+ DefaultHmrStrategy
34
+ };
@@ -0,0 +1,139 @@
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
+ import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
11
+ import type { EcoBuildPlugin } from '../../build/build-types.js';
12
+ import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.js';
13
+ import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
14
+ /**
15
+ * Context interface providing access to HmrManager state.
16
+ * Required for JsHmrStrategy to access registered entrypoints and configuration.
17
+ */
18
+ export interface JsHmrContext {
19
+ /**
20
+ * Map of registered entrypoints to their output URLs.
21
+ */
22
+ getWatchedFiles(): Map<string, string>;
23
+ /**
24
+ * Map of bare specifiers to vendor URLs for import resolution.
25
+ */
26
+ getSpecifierMap(): Map<string, string>;
27
+ getEntrypointDependencyGraph(): EntrypointDependencyGraph;
28
+ /**
29
+ * Directory where HMR bundles are written.
30
+ */
31
+ getDistDir(): string;
32
+ /**
33
+ * Build plugins to use during bundling.
34
+ */
35
+ getPlugins(): EcoBuildPlugin[];
36
+ /**
37
+ * Absolute path to the source directory.
38
+ */
39
+ getSrcDir(): string;
40
+ /**
41
+ * Absolute path to the pages directory.
42
+ */
43
+ getPagesDir(): string;
44
+ /**
45
+ * Absolute path to the layouts directory.
46
+ */
47
+ getLayoutsDir(): string;
48
+ /**
49
+ * All configured route-template extensions across integrations.
50
+ */
51
+ getTemplateExtensions(): string[];
52
+ /**
53
+ * Browser bundler used to rebuild changed entrypoints.
54
+ */
55
+ getBrowserBundleService(): BrowserBundleExecutor;
56
+ /**
57
+ * Returns whether a watched entrypoint should be rebuilt by the generic JS strategy.
58
+ *
59
+ * @remarks
60
+ * Integrations with higher-priority HMR strategies can use this to keep the
61
+ * generic JS strategy from overwriting their emitted entrypoints when a shared
62
+ * dependency changes.
63
+ */
64
+ shouldProcessEntrypoint?(entrypointPath: string): boolean;
65
+ }
66
+ /**
67
+ * Strategy for handling JavaScript/TypeScript file changes with hot reloading.
68
+ *
69
+ * The processing steps are:
70
+ * 1. Check if any entrypoints are registered
71
+ * 2. Rebuild impacted entrypoints, or all watched entrypoints when no runtime
72
+ * dependency graph is available
73
+ * 3. Emit rebuilt entrypoint bundles for browser delivery
74
+ * 4. Inject generic HMR boilerplate
75
+ * 5. Broadcast update events for each rebuilt entrypoint
76
+ *
77
+ * @remarks
78
+ * Node can provide dependency-graph metadata, so this strategy can rebuild only
79
+ * the entrypoints impacted by a changed dependency. Runtimes that do not expose
80
+ * that metadata intentionally keep the rebuild-all fallback.
81
+ *
82
+ * @see https://bun.sh/docs/runtime/transpiler
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const context = {
87
+ * getWatchedFiles: () => watchedFilesMap,
88
+ * getSpecifierMap: () => specifierMap,
89
+ * getDistDir: () => '/path/to/dist/_hmr',
90
+ * getPlugins: () => [],
91
+ * getSrcDir: () => '/path/to/src'
92
+ * };
93
+ * const strategy = new JsHmrStrategy(context);
94
+ * ```
95
+ */
96
+ export declare class JsHmrStrategy extends HmrStrategy {
97
+ readonly type = HmrStrategyType.SCRIPT;
98
+ private context;
99
+ constructor(context: JsHmrContext);
100
+ /**
101
+ * Determines if the file is a JS/TS file that could affect registered entrypoints.
102
+ *
103
+ * Matches if:
104
+ * 1. There are registered entrypoints to rebuild
105
+ * 2. The changed file is a JS/TS file in the src directory
106
+ *
107
+ * @param filePath - Absolute path to the changed file
108
+ * @returns True if this file should trigger entrypoint rebuilds
109
+ */
110
+ matches(filePath: string): boolean;
111
+ /**
112
+ * Processes a file change by rebuilding affected entrypoints.
113
+ *
114
+ * @param filePath - Absolute path to the changed file
115
+ *
116
+ * @remarks
117
+ * If runtime-specific dependency graph hooks are unavailable, this strategy
118
+ * falls back to rebuilding all watched entrypoints.
119
+ * When multiple entrypoints are impacted they are bundled in a single esbuild
120
+ * invocation to share AST parsing and chunk deduplication.
121
+ * @returns Action to broadcast update events
122
+ */
123
+ process(filePath: string): Promise<HmrAction>;
124
+ /**
125
+ * Bundles one or more entrypoints in a single esbuild invocation.
126
+ * Uses the source directory as the output base so that the directory structure
127
+ * is preserved under the HMR dist folder.
128
+ */
129
+ private bundleEntrypoints;
130
+ /**
131
+ * Processes bundled output and determines whether the browser can hot-accept
132
+ * the update or must fall back to a full reload.
133
+ *
134
+ * @param filepath - Path to the bundled output file
135
+ * @param url - URL path for the bundled file
136
+ * @returns True if processing was successful and update should be broadcast
137
+ */
138
+ private processOutput;
139
+ }