@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.40

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 (454) hide show
  1. package/README.md +268 -14
  2. package/package.json +84 -110
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +30 -68
  12. package/src/adapters/bun/hmr-manager.js +30 -212
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -49
  31. package/src/adapters/node/node-hmr-manager.js +31 -219
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +239 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/build-adapter.d.ts +176 -3
  74. package/src/build/build-adapter.js +619 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -74
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  120. package/src/hmr/strategies/js-hmr-strategy.js +60 -75
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +986 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +134 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +437 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +297 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -35
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +40 -29
  287. package/src/watchers/project-watcher.js +126 -116
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -6
  290. package/CHANGELOG.md +0 -91
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -296
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -289
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -132
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -510
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1260
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  447. package/src/watchers/project-watcher.ts +0 -344
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -2,6 +2,7 @@ import path from "node:path";
2
2
  import chokidar, {} from "chokidar";
3
3
  import { fileSystem } from "@ecopages/file-system";
4
4
  import { appLogger } from "../global/app-logger.js";
5
+ import { DevelopmentInvalidationService } from "../services/invalidation/development-invalidation.service.js";
5
6
  class ProjectWatcher {
6
7
  /**
7
8
  * Duplicate identical watcher events within this window are ignored.
@@ -15,13 +16,16 @@ class ProjectWatcher {
15
16
  refreshRouterRoutesCallback;
16
17
  hmrManager;
17
18
  bridge;
19
+ invalidationService;
18
20
  watcher = null;
19
21
  lastHandledChange = /* @__PURE__ */ new Map();
22
+ changeQueue = Promise.resolve();
20
23
  constructor({ config, refreshRouterRoutesCallback, hmrManager, bridge }) {
21
24
  this.appConfig = config;
22
25
  this.refreshRouterRoutesCallback = refreshRouterRoutesCallback;
23
26
  this.hmrManager = hmrManager;
24
27
  this.bridge = bridge;
28
+ this.invalidationService = new DevelopmentInvalidationService(config);
25
29
  this.triggerRouterRefresh = this.triggerRouterRefresh.bind(this);
26
30
  this.handleError = this.handleError.bind(this);
27
31
  this.handleFileChange = this.handleFileChange.bind(this);
@@ -41,6 +45,12 @@ class ProjectWatcher {
41
45
  }
42
46
  }
43
47
  }
48
+ isRouteSourceFile(filePath) {
49
+ return this.invalidationService.isRouteSourceFile(filePath);
50
+ }
51
+ isIncludeSourceFile(filePath) {
52
+ return this.invalidationService.isIncludeSourceFile(filePath);
53
+ }
44
54
  /**
45
55
  * Handles public directory file changes by copying only the changed file.
46
56
  * @param filePath - Absolute path of the changed file
@@ -60,19 +70,33 @@ class ProjectWatcher {
60
70
  this.bridge.reload();
61
71
  }
62
72
  }
73
+ /**
74
+ * Serializes file change handling so that concurrent chokidar events are
75
+ * processed one at a time, preventing overlapping builds and race conditions.
76
+ */
77
+ enqueueChange(task) {
78
+ const queuedTask = this.changeQueue.then(task, task);
79
+ this.changeQueue = queuedTask.catch(() => void 0);
80
+ }
63
81
  /**
64
82
  * Handles file changes by uncaching modules, refreshing routes, and delegating appropriately.
65
- * Follows 4-rule priority:
66
- * 0. Public directory match? copy file and reload
67
- * 1. additionalWatchPaths match? reload
68
- * 2. Processor extension match? processor handles (skip HMR)
69
- * 3. Otherwise HMR strategies
83
+ * Follows 5-rule priority:
84
+ * 0. Public directory match? -> copy file and reload
85
+ * 1. additionalWatchPaths match? -> reload
86
+ * 2. Include template source? -> reload after processor notifications
87
+ * 3. Processor-owned asset? -> processor already handled it via notification, skip HMR
88
+ * 4. Otherwise -> HMR strategies
89
+ *
90
+ * Processors that watch a file extension as a dependency (e.g. PostCSS watching
91
+ * .tsx for Tailwind class scanning) are always notified first, but do not
92
+ * prevent the file from flowing through the normal HMR strategy pipeline.
70
93
  *
71
94
  * Duplicate identical watcher events for the same file are coalesced within a
72
95
  * short window before any of the priority rules run.
73
96
  * @param rawPath - Path of the changed file
97
+ * @param event - The type of file system event
74
98
  */
75
- async handleFileChange(rawPath) {
99
+ async handleFileChange(rawPath, event = "change") {
76
100
  const filePath = path.resolve(rawPath);
77
101
  const now = Date.now();
78
102
  const lastHandledAt = this.lastHandledChange.get(filePath);
@@ -81,27 +105,33 @@ class ProjectWatcher {
81
105
  }
82
106
  this.lastHandledChange.set(filePath, now);
83
107
  try {
84
- if (this.isPublicDirFile(filePath)) {
108
+ const plan = this.invalidationService.planFileChange(filePath);
109
+ if (plan.category === "public-asset") {
85
110
  await this.handlePublicDirFileChange(filePath);
86
111
  return;
87
112
  }
88
113
  this.uncacheModules();
89
- const isPageFile = filePath.startsWith(this.appConfig.absolutePaths.pagesDir);
90
- if (isPageFile) {
91
- this.refreshRouterRoutesCallback();
114
+ if (plan.invalidateServerModules) {
115
+ this.invalidationService.invalidateServerModules([filePath]);
92
116
  }
93
- if (this.matchesAdditionalWatchPaths(filePath)) {
117
+ if (plan.refreshRoutes) {
118
+ await this.refreshRouterRoutesCallback();
119
+ }
120
+ if (plan.category === "additional-watch") {
94
121
  this.bridge.reload();
95
122
  return;
96
123
  }
97
- if (this.isHandledByProcessor(filePath)) {
124
+ await this.notifyProcessors(filePath, event);
125
+ if (plan.category === "include-source") {
126
+ this.bridge.reload();
98
127
  return;
99
128
  }
100
- if (this.isWatchedByProcessor(filePath) && !this.hmrManager.canHandleFileChange(filePath)) {
101
- this.hmrManager.broadcast({ type: "layout-update" });
129
+ if (plan.processorHandledAsset) {
102
130
  return;
103
131
  }
104
- await this.hmrManager.handleFileChange(filePath);
132
+ if (plan.delegateToHmr) {
133
+ await this.hmrManager.handleFileChange(filePath);
134
+ }
105
135
  } catch (error) {
106
136
  if (error instanceof Error) {
107
137
  this.bridge.error(error.message);
@@ -109,65 +139,56 @@ class ProjectWatcher {
109
139
  }
110
140
  }
111
141
  }
142
+ /**
143
+ * Notifies all processors whose watch config matches the given file extension.
144
+ * This is called before checking processor ownership so that dependency-only
145
+ * processors (e.g. PostCSS watching .tsx for class scanning) receive their
146
+ * notifications regardless of whether they own the file.
147
+ */
148
+ async notifyProcessors(filePath, event) {
149
+ const ctx = { path: filePath, bridge: this.bridge };
150
+ for (const processor of this.appConfig.processors.values()) {
151
+ const watchConfig = processor.getWatchConfig();
152
+ if (!watchConfig) continue;
153
+ const { extensions = [] } = watchConfig;
154
+ if (extensions.length && !extensions.some((ext) => filePath.endsWith(ext))) {
155
+ continue;
156
+ }
157
+ const handler = this.getProcessorHandler(watchConfig, event);
158
+ if (handler) {
159
+ await handler(ctx);
160
+ }
161
+ }
162
+ }
163
+ getProcessorHandler(watchConfig, event) {
164
+ switch (event) {
165
+ case "change":
166
+ return watchConfig.onChange;
167
+ case "add":
168
+ return watchConfig.onCreate;
169
+ case "unlink":
170
+ return watchConfig.onDelete;
171
+ }
172
+ }
112
173
  /**
113
174
  * Checks if a file is in the public directory.
114
175
  */
115
176
  isPublicDirFile(filePath) {
116
- return filePath.startsWith(this.appConfig.absolutePaths.publicDir);
177
+ return this.invalidationService.isPublicDirFile(filePath);
117
178
  }
118
179
  /**
119
180
  * Checks if file path matches any additionalWatchPaths patterns.
120
181
  */
121
182
  matchesAdditionalWatchPaths(filePath) {
122
- const patterns = this.appConfig.additionalWatchPaths;
123
- if (!patterns.length) return false;
124
- for (const pattern of patterns) {
125
- if (pattern.includes("*")) {
126
- const ext = pattern.replace(/\*\*?\/\*/, "");
127
- if (filePath.endsWith(ext)) return true;
128
- } else {
129
- if (filePath.endsWith(pattern) || filePath === path.resolve(pattern)) return true;
130
- }
131
- }
132
- return false;
133
- }
134
- /**
135
- * Checks whether a file is watched by any processor, even if that processor
136
- * does not own the file as a primary asset.
137
- */
138
- isWatchedByProcessor(filePath) {
139
- for (const processor of this.appConfig.processors.values()) {
140
- const watchConfig = processor.getWatchConfig();
141
- if (!watchConfig) continue;
142
- const { extensions = [] } = watchConfig;
143
- if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
144
- return true;
145
- }
146
- }
147
- return false;
183
+ return this.invalidationService.matchesAdditionalWatchPaths(filePath);
148
184
  }
149
185
  /**
150
186
  * Checks if a file is handled by a processor.
151
- * Processors that declare extensions own those file types.
187
+ * Processors that declare asset capabilities own those file types.
188
+ * Processors without capabilities fall back to checking watch extensions.
152
189
  */
153
190
  isHandledByProcessor(filePath) {
154
- for (const processor of this.appConfig.processors.values()) {
155
- const capabilities = processor.getAssetCapabilities?.() ?? [];
156
- if (capabilities.length > 0) {
157
- const matchesConfiguredAsset = typeof processor.matchesFileFilter !== "function" || processor.matchesFileFilter(filePath);
158
- if (matchesConfiguredAsset && capabilities.some((capability) => processor.canProcessAsset?.(capability.kind, filePath))) {
159
- return true;
160
- }
161
- continue;
162
- }
163
- const watchConfig = processor.getWatchConfig();
164
- if (!watchConfig) continue;
165
- const { extensions = [] } = watchConfig;
166
- if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
167
- return true;
168
- }
169
- }
170
- return false;
191
+ return this.invalidationService.isProcessorOwnedAsset(filePath);
171
192
  }
172
193
  /**
173
194
  * Triggers router refresh for page directory changes.
@@ -175,10 +196,11 @@ class ProjectWatcher {
175
196
  *
176
197
  * @param {string} path - Path of the changed directory
177
198
  */
178
- triggerRouterRefresh(path2) {
179
- const isPageDir = path2.startsWith(this.appConfig.absolutePaths.pagesDir);
180
- if (isPageDir) {
181
- this.refreshRouterRoutesCallback();
199
+ async triggerRouterRefresh(changedPath) {
200
+ const resolvedPath = path.resolve(changedPath);
201
+ const isPageDir = resolvedPath.startsWith(this.appConfig.absolutePaths.pagesDir) && path.extname(resolvedPath) === "";
202
+ if (isPageDir || this.isRouteSourceFile(resolvedPath)) {
203
+ await this.refreshRouterRoutesCallback();
182
204
  }
183
205
  }
184
206
  /**
@@ -192,71 +214,59 @@ class ProjectWatcher {
192
214
  }
193
215
  appLogger.error(`Watcher error: ${error}`);
194
216
  }
195
- /**
196
- * Processes file changes for specific file extensions.
197
- * Used by processors to handle their specific file types.
198
- *
199
- * @private
200
- * @param {string} path - Path of the changed file
201
- * @param {string[]} extensions - File extensions to process
202
- * @param {(ctx: ProcessorWatchContext) => void} handler - Handler function for the file change
203
- */
204
- shouldProcess(path2, extensions, handler) {
205
- if (!extensions.length || extensions.some((ext) => path2.endsWith(ext))) {
206
- handler({ path: path2, bridge: this.bridge });
207
- }
208
- }
209
217
  /**
210
218
  * Creates and configures the file system watcher.
211
219
  * This sets up:
212
- * 1. Processor-specific file watching
213
- * 2. Page file watching
214
- * 3. Directory watching
215
- * 4. Error handling
220
+ * 1. Page file watching
221
+ * 2. Directory watching
222
+ * 3. Error handling
223
+ *
224
+ * Processor notifications are dispatched inside handleFileChange, ensuring
225
+ * a single unified event pipeline with no parallel chokidar bindings.
216
226
  *
217
227
  * Uses chokidar's built-in debouncing through `awaitWriteFinish` to handle
218
228
  * rapid file changes efficiently.
219
229
  */
220
230
  async createWatcherSubscription() {
221
- if (!this.watcher) {
222
- const processorPaths = [];
223
- for (const processor of this.appConfig.processors.values()) {
224
- const watchConfig = processor.getWatchConfig();
225
- if (!watchConfig) continue;
226
- processorPaths.push(...watchConfig.paths);
227
- }
228
- if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
229
- processorPaths.push(this.appConfig.absolutePaths.pagesDir);
230
- }
231
- if (fileSystem.exists(this.appConfig.absolutePaths.publicDir)) {
232
- processorPaths.push(this.appConfig.absolutePaths.publicDir);
233
- }
234
- if (this.appConfig.additionalWatchPaths.length) {
235
- processorPaths.push(...this.appConfig.additionalWatchPaths);
236
- }
237
- this.watcher = chokidar.watch(processorPaths, {
238
- ignoreInitial: true,
239
- ignorePermissionErrors: true,
240
- awaitWriteFinish: {
241
- stabilityThreshold: 50,
242
- pollInterval: 50
243
- }
244
- });
231
+ if (this.watcher) {
232
+ return this.watcher;
245
233
  }
234
+ const processorPaths = [];
246
235
  for (const processor of this.appConfig.processors.values()) {
247
236
  const watchConfig = processor.getWatchConfig();
248
237
  if (!watchConfig) continue;
249
- const { extensions = [], onCreate, onChange, onDelete, onError } = watchConfig;
250
- if (onCreate) this.watcher.on("add", (path2) => this.shouldProcess(path2, extensions, onCreate));
251
- if (onChange) this.watcher.on("change", (path2) => this.shouldProcess(path2, extensions, onChange));
252
- if (onDelete) this.watcher.on("unlink", (path2) => this.shouldProcess(path2, extensions, onDelete));
253
- if (onError) this.watcher.on("error", onError);
238
+ processorPaths.push(...watchConfig.paths);
239
+ }
240
+ if (fileSystem.exists(this.appConfig.absolutePaths.includesDir)) {
241
+ processorPaths.push(this.appConfig.absolutePaths.includesDir);
242
+ }
243
+ if (fileSystem.exists(this.appConfig.absolutePaths.srcDir)) {
244
+ processorPaths.push(this.appConfig.absolutePaths.srcDir);
245
+ }
246
+ if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
247
+ processorPaths.push(this.appConfig.absolutePaths.pagesDir);
248
+ }
249
+ if (fileSystem.exists(this.appConfig.absolutePaths.publicDir)) {
250
+ processorPaths.push(this.appConfig.absolutePaths.publicDir);
251
+ }
252
+ if (this.appConfig.additionalWatchPaths.length) {
253
+ processorPaths.push(...this.appConfig.additionalWatchPaths);
254
+ }
255
+ this.watcher = chokidar.watch(processorPaths, {
256
+ ignoreInitial: true,
257
+ ignorePermissionErrors: true,
258
+ awaitWriteFinish: {
259
+ stabilityThreshold: 50,
260
+ pollInterval: 50
261
+ }
262
+ });
263
+ this.watcher.on("change", (p) => this.enqueueChange(() => this.handleFileChange(p, "change"))).on("add", (p) => this.enqueueChange(() => this.handleFileChange(p, "add"))).on("addDir", (p) => this.enqueueChange(() => this.triggerRouterRefresh(p))).on("unlink", (p) => this.enqueueChange(() => this.handleFileChange(p, "unlink"))).on("unlinkDir", (p) => this.enqueueChange(() => this.triggerRouterRefresh(p))).on("error", (error) => this.handleError(error));
264
+ for (const processor of this.appConfig.processors.values()) {
265
+ const watchConfig = processor.getWatchConfig();
266
+ if (watchConfig?.onError) {
267
+ this.watcher.on("error", watchConfig.onError);
268
+ }
254
269
  }
255
- this.watcher.add(this.appConfig.absolutePaths.srcDir);
256
- this.watcher.on("change", (path2) => this.handleFileChange(path2)).on("add", (path2) => {
257
- this.handleFileChange(path2);
258
- this.triggerRouterRefresh(path2);
259
- }).on("addDir", (path2) => this.triggerRouterRefresh(path2)).on("unlink", (path2) => this.triggerRouterRefresh(path2)).on("unlinkDir", (path2) => this.triggerRouterRefresh(path2)).on("error", (error) => this.handleError(error));
260
270
  return this.watcher;
261
271
  }
262
272
  }
@@ -1,4 +1,4 @@
1
- import type { IHmrManager } from '../internal-types';
2
- import type { ClientBridge } from '../adapters/bun/client-bridge';
1
+ import type { IHmrManager } from '../types/internal-types.js';
2
+ import type { ClientBridge } from '../adapters/bun/client-bridge.js';
3
3
  export declare const createMockHmrManager: () => IHmrManager;
4
4
  export declare const createMockBridge: () => ClientBridge;
@@ -9,24 +9,24 @@ const createMockHmrManager = () => ({
9
9
  setPlugins: vi.fn(() => {
10
10
  }),
11
11
  registerEntrypoint: vi.fn(async () => ""),
12
- registerSpecifierMap: vi.fn(() => {
13
- }),
12
+ registerScriptEntrypoint: vi.fn(async () => ""),
14
13
  registerStrategy: vi.fn(() => {
15
14
  }),
16
15
  isEnabled: vi.fn(() => true),
17
- canHandleFileChange: vi.fn(() => true),
18
16
  getOutputUrl: vi.fn(() => void 0),
19
17
  getWatchedFiles: vi.fn(() => /* @__PURE__ */ new Map()),
20
- getSpecifierMap: vi.fn(() => /* @__PURE__ */ new Map()),
21
18
  getDistDir: vi.fn(() => ""),
22
19
  getPlugins: vi.fn(() => []),
23
20
  getDefaultContext: vi.fn(() => ({
24
21
  getWatchedFiles: () => /* @__PURE__ */ new Map(),
25
- getSpecifierMap: () => /* @__PURE__ */ new Map(),
26
22
  getDistDir: () => "",
27
23
  getPlugins: () => [],
28
24
  getSrcDir: () => "",
29
- getLayoutsDir: () => ""
25
+ getLayoutsDir: () => "",
26
+ getPagesDir: () => "",
27
+ getBuildExecutor: () => ({ build: vi.fn(async () => ({ success: true, logs: [], outputs: [] })) }),
28
+ getBrowserBundleService: () => ({ bundle: vi.fn(async () => ({ success: true, logs: [], outputs: [] })) }),
29
+ importServerModule: vi.fn(async () => ({}))
30
30
  }))
31
31
  });
32
32
  const createMockBridge = () => ({
package/CHANGELOG.md DELETED
@@ -1,91 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to `@ecopages/core` are documented here.
4
-
5
- > **Note:** Changelog tracking begins at version `0.2.0`. Changes prior to this release are not recorded here but are available in the git history.
6
-
7
- ## [UNRELEASED] — TBD
8
-
9
- ### Features
10
-
11
- #### Node.js Runtime Support
12
-
13
- - **Node server adapter** — Full HTTP server adapter for Node.js via `packages/core/src/adapters/node/`, including request bridging, route handling, static content serving, and graceful shutdown.
14
- - **Node static build pipeline** — Static-site build and preview server for Node.js runtime (`ab22f167`, `a47b4da3`, `435dc250`).
15
- - **Node API handler pipeline** — `define-api-handler` now works cross-runtime; Node adapter wires API handler execution end-to-end (`73e57d87`, `f46aa528`).
16
- - **Node client bridge** — `NodeClientBridge` with SSE-based HMR stream and heartbeat mechanism for connection health (`3361445f`).
17
- - **Node HMR manager** — `NodeHmrManager` that mirrors Bun HMR capabilities on the Node runtime.
18
- - **`createApp` universal factory** — Top-level `createApp` export that selects the correct adapter (Bun or Node) at runtime (`ce691bdf`, `2f1b1109`).
19
-
20
- #### Build System
21
-
22
- - **`EsbuildBuildAdapter`** — A new build backend backed by esbuild, replacing the Bun-only transpilation path. Includes module resolution routing, plugin registration, and transpilation defaults (`f503e86e`, `94c37d38`, `e4e124a1`).
23
- - **Build dependency graph** — `BuildDependencyGraph` interface for tracking entrypoints and their asset dependencies, enabling more accurate HMR invalidation (`e7653c9b`).
24
- - **Build adapter abstraction** — `build-adapter.ts` and `build-types.ts` decouple build and plugin contracts from Bun-specific types (`11b03bcc`).
25
-
26
- #### Rendering & Orchestration
27
-
28
- - **Boundary rendering policy** — Cross-integration component boundaries are now explicitly enforced (`ec1e4d66`).
29
- - **Full orchestration mode** — Legacy rendering mode branches removed; the engine always runs in unified orchestration mode (`f652fa0a`).
30
- - **Extracted render services** — The render pipeline is decomposed into focused services:
31
- - `RenderExecutionService`
32
- - `HtmlPostProcessingService`
33
- - `RenderPreparationService`
34
- - `MarkerGraphResolver`
35
- - `FileRouteMiddlewarePipeline`
36
- - `PageRequestCacheCoordinator`
37
- - `PageModuleImportService`
38
- - **Component render context** — New `ComponentRenderContext` consolidates component-level state during rendering (`eco/component-render-context.ts`).
39
- - **Worker-tools HTML rewriter fallback** — `html-transformer` adopts `@worker-tools/html-rewriter` as a fallback for non-Bun environments (`54056d4f`).
40
-
41
- #### Dependency & Injection
42
-
43
- - **Global injector map** — `GlobalInjectorMap` and `LazyInjectorMap` provide structured, testable dependency injection for global and lazy assets (`c3a25072`).
44
- - **Lazy dependency resolution** — SSR lazy script resolution now uses dedicated utility functions for dependency entry attributes and content generation (`71ce2f4f`).
45
- - **Dependency entry type refactor** — Unified types for script and stylesheet dependency entries, with improved error messages (`1e02dba6`).
46
- - **Module dependencies** — New `module-dependencies.ts` tracks explicit module-level asset relationships.
47
- - **Eco utils extraction** — Shared utilities moved to `eco.utils.ts` to remove runtime metadata fallbacks (`bdc60d50`).
48
-
49
- #### API Handlers
50
-
51
- - **Unified typed API handler context** — `defineApiHandler` now exposes a fully typed, runtime-agnostic context object. The Bun-specific adapter is slimmed down to a thin wrapper (`2f1b1109`, `08e194b4`).
52
- - **Portable root runtime API** — Core exposes a portable API surface that avoids runtime escape hatches (`ce691bdf`, `1ec42c02`).
53
-
54
- ### Refactoring
55
-
56
- - **Bun adapter isolation** — Bun-specific types (`serve` options, file reads, env access, argv/hash helpers) are routed through dedicated helpers, making the remaining adapter code portable (`73668f52`, `0c90ced1`, `73fb904a`, `5eb0957b`, `4bdc74a9`, `e9ce163c`, `22f9de4a`, `f7b3d95e`).
57
- - **Shared server adapter** — Common server adapter logic extracted to `adapters/shared/application-adapter.ts` and `adapters/shared/server-adapter.ts`, shared between Bun and Node adapters (`5a872eda`).
58
- - **Route assets isolation** — Route-level assets are now isolated per-request, hardening dependency processing (`3fd76a12`).
59
- - **Shared matcher error constants** — Matcher error strings are now constants shared across test and source (`ff4db106`).
60
- - **App registration & fetch pipeline** — App creation and request handling consolidated into a single unified pipeline (`86e20a3d`).
61
- - **Adapter escape hatch surface** trimmed — Public adapter API is narrowed to reduce surface area (`1ec42c02`).
62
-
63
- ### Bug Fixes
64
-
65
- - Fixed invariant checks for route paths with improved error messaging in `AbstractApplicationAdapter` (`9c2a6242`).
66
- - Fixed dependency import name extraction in `extractEcopagesVirtualImports` (`39bbc472`).
67
- - Removed an invalid npm export entry that pointed to a non-existent `utils/ecopages-url-resolver` declaration target.
68
- - Kept source module HMR active when stylesheet processors also watch TSX and JSX files for Tailwind-driven CSS rebuilds.
69
- - Triggered HMR current-page refreshes instead of fallback reload suppression for processor-watched TSX and JSX changes that are not client entrypoints.
70
-
71
- ### Tests
72
-
73
- - Added node static content server test coverage (`435dc250`).
74
- - Strengthened HTML transformer mode matrix coverage (`286c1253`).
75
- - Aligned integration and dependency processing tests to new orchestration model (`7cc73316`).
76
- - Added `EsbuildBuildAdapter` test suite with 500+ lines (`build-adapter.test.ts`).
77
- - Added `file-route-middleware-pipeline` tests.
78
-
79
- ### Documentation
80
-
81
- - Updated rendering graph documentation to cover extracted rendering services (`8bfcfd21`).
82
- - Refreshed server handler and module dependency guidance (`3494f44d`).
83
-
84
- ---
85
-
86
- ## Migration Notes
87
-
88
- - **`createApp`** is now the recommended entrypoint (previously `EcopagesApp`). Import from `@ecopages/core`.
89
- - **`defineApiHandler`** signature is unchanged but the handler context object now carries explicit runtime-agnostic types. No breaking changes for existing handlers.
90
- - Bun adapter still works as before; the new Node adapter is additive.
91
- - The old explicit `renderingMode` config option has been removed — full orchestration is always active.