@ecopages/core 0.2.0-alpha.8 → 0.2.1-beta.0

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 (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  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 +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  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 +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  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 +1 -5
  24. package/src/adapters/index.js +1 -7
  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 +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  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 +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -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/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 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -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 +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -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 +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  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/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  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/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,44 +1,34 @@
1
1
  import { invariant } from "../utils/invariant.js";
2
2
  import { PathUtils } from "../utils/path-utils.module.js";
3
- class RouteRenderer {
4
- renderer;
5
- /**
6
- * Creates a route renderer bound to one integration renderer instance.
7
- */
8
- constructor(renderer) {
9
- this.renderer = renderer;
10
- }
11
- /**
12
- * Executes the render pipeline for one matched route.
13
- */
14
- async createRoute(options) {
15
- return this.renderer.execute(options);
16
- }
17
- }
18
3
  class RouteRendererFactory {
19
4
  appConfig;
20
5
  runtimeOrigin;
6
+ rendererModules;
21
7
  rendererCache = /* @__PURE__ */ new Map();
22
8
  /**
23
9
  * Creates the route-renderer factory for one app/runtime instance.
24
10
  */
25
- constructor({ appConfig, runtimeOrigin }) {
11
+ constructor({
12
+ appConfig,
13
+ rendererModules,
14
+ runtimeOrigin
15
+ }) {
26
16
  this.appConfig = appConfig;
17
+ this.rendererModules = rendererModules;
27
18
  this.runtimeOrigin = runtimeOrigin;
28
19
  }
29
20
  /**
30
21
  * Returns a route renderer for the supplied route file.
31
22
  */
32
- createRenderer(filePath) {
23
+ getPageRenderer(filePath) {
33
24
  const integrationRenderer = this.getRouteRendererEngine(filePath);
34
25
  invariant(!!integrationRenderer, `No integration renderer found for file: ${filePath}`);
35
- return new RouteRenderer(integrationRenderer);
26
+ return integrationRenderer;
36
27
  }
37
28
  /**
38
- * Get an integration renderer by its name.
39
- * Used for explicit routing where views specify their integration via __eco.integration.
29
+ * Returns a renderer for an explicit view integration.
40
30
  */
41
- getRendererByIntegration(integrationName) {
31
+ getExplicitViewRenderer(integrationName) {
42
32
  const integrationPlugin = this.appConfig.integrations.find((plugin) => plugin.name === integrationName);
43
33
  if (!integrationPlugin) {
44
34
  return null;
@@ -47,7 +37,9 @@ class RouteRendererFactory {
47
37
  if (cached) {
48
38
  return cached;
49
39
  }
50
- const renderer = integrationPlugin.initializeRenderer();
40
+ const renderer = integrationPlugin.initializeRenderer({
41
+ rendererModules: this.rendererModules
42
+ });
51
43
  this.rendererCache.set(integrationName, renderer);
52
44
  return renderer;
53
45
  }
@@ -76,12 +68,13 @@ class RouteRendererFactory {
76
68
  if (cached) {
77
69
  return cached;
78
70
  }
79
- const renderer = integrationPlugin.initializeRenderer();
71
+ const renderer = integrationPlugin.initializeRenderer({
72
+ rendererModules: this.rendererModules
73
+ });
80
74
  this.rendererCache.set(integrationPlugin.name, renderer);
81
75
  return renderer;
82
76
  }
83
77
  }
84
78
  export {
85
- RouteRenderer,
86
79
  RouteRendererFactory
87
80
  };
@@ -8,19 +8,87 @@ The router layer determines what route is being handled and how the client runti
8
8
 
9
9
  It is responsible for:
10
10
 
11
- - filesystem route scanning and matching
12
- - explicit-route support and response matching
13
- - client-side navigation coordination and ownership handoff
11
+ - filesystem route discovery and classification (`exact`, `dynamic`, `catch-all`)
12
+ - matching incoming request URLs to canonical template routes
13
+ - server-side static-path expansion for dynamic template routes
14
+ - client-side navigation ownership and cross-runtime handoff
14
15
  - keeping route discovery separate from rendering execution
15
16
 
16
- ## Main Areas
17
+ ## Directory Structure
17
18
 
18
- - server-side route discovery and matchers used by adapters
19
- - `client/`: shared browser-side navigation coordination
19
+ ```
20
+ router/
21
+ ├── server/ # Server-side route discovery and matching
22
+ │ └── route-registry.ts # Owns template routes, request matching, static expansion, and reload
23
+ └── client/ # Browser-side navigation coordination
24
+ ├── navigation-coordinator.ts # Singleton runtime coordinator
25
+ └── link-intent.ts # Shared anchor detection and intent recovery helpers
26
+ ```
27
+
28
+ ## `server/`
29
+
30
+ ### `RouteRegistry`
31
+
32
+ Owns the canonical set of filesystem-discovered template routes for one application.
33
+
34
+ File patterns determine route kind:
35
+
36
+ | Pattern | Kind | Example |
37
+ | --------------- | ----------- | ----------------- |
38
+ | `page.tsx` | `exact` | `/about` |
39
+ | `[slug].tsx` | `dynamic` | `/blog/[slug]` |
40
+ | `[...slug].tsx` | `catch-all` | `/docs/[...slug]` |
41
+
42
+ The registry stores canonical template routes only. It compiles request-time matching metadata during `init()` and `reload()`, but it does not execute `staticPaths()` during discovery.
43
+
44
+ Build-time static expansion is a separate operation. The registry invokes `staticPaths()` lazily through an injected page-module adapter and returns concrete static path expansions for the static generator.
45
+
46
+ The public interface is intentionally small:
47
+
48
+ - `templateRoutes` — ordered readonly template routes
49
+ - `init()` / `reload()` — rebuild discovery state and match metadata
50
+ - `matchRequest(requestUrl)` — request-time matching result with requested pathname, matched template route, params, and query
51
+ - `listStaticPathExpansions()` — build-time expansion for dynamic routes
52
+ - `listStaticGenerationRoutes()` — build-time route planning for static generation across exact and expanded routes
53
+
54
+ Match priority:
55
+
56
+ 1. `exact` — the pathname must equal the route pathname exactly.
57
+ 2. `dynamic` — the clean (bracket-stripped) prefix must appear in the pathname, and the segment counts must match.
58
+ 3. `catch-all` — the clean prefix must appear in the pathname.
59
+
60
+ ## `client/`
61
+
62
+ ### Navigation Coordinator (`navigation-coordinator.ts`)
63
+
64
+ A singleton browser-side runtime stored on `window.__ECO_PAGES__.navigation`.
65
+
66
+ Access it with:
67
+
68
+ ```ts
69
+ import { getEcoNavigationRuntime } from '@ecopages/core/router/navigation-coordinator';
70
+ const runtime = getEcoNavigationRuntime();
71
+ ```
72
+
73
+ The coordinator is framework-agnostic. Browser runtimes (e.g. `browser-router`, `react-router`) register themselves and the coordinator arbitrates:
74
+
75
+ - **Ownership** — which runtime currently drives SPA navigation (`claimOwnership`, `releaseOwnership`, `setOwner`).
76
+ - **Document owner marker** — an HTML attribute (`data-eco-document-owner`) written into rendered markup so the coordinator can `adoptDocumentOwner` on the incoming page.
77
+ - **Navigation transactions** — each navigation begins a transaction with an `AbortSignal`; superseded navigations are automatically cancelled.
78
+ - **Cross-runtime handoff** — `requestHandoff` passes a pre-fetched `Document` to the target runtime without tearing down the current page prematurely.
79
+ - **Reload** — `reloadCurrentPage` delegates to whichever runtime currently owns the document.
80
+ - **Events** — `subscribe` lets runtimes react to `owner-change` and `registration-change` events.
81
+
82
+ ### Link Intent (`link-intent.ts`)
83
+
84
+ Shared helpers for locating anchors and recovering stale navigation intent.
85
+
86
+ - `getAnchorFromNavigationEvent(event, linkSelector)` — finds the nearest matching anchor in the event's composed path, including across Shadow DOM boundaries.
87
+ - `recoverPendingNavigationHref(intent, hasInFlightNavigation, now, maxAgeMs?)` — resolves a previously captured pointer or hover target when the DOM changes before the click lands. Intents expire after `maxAgeMs` (default 1000 ms).
20
88
 
21
89
  ## Relationship To Rendering
22
90
 
23
- The router layer answers which route should run.
24
- The route-renderer layer answers how that route gets rendered.
91
+ The router layer answers **which route should run**.
92
+ The route-renderer layer answers **how that route gets rendered**.
25
93
 
26
94
  Keeping those seams separate avoids mixing route ownership, module loading, and component orchestration into one service.
@@ -40,7 +40,21 @@ export type EcoNavigationHandoffRequest = EcoNavigationRequest & {
40
40
  };
41
41
  /** Request to reload the current page through the active runtime. */
42
42
  export type EcoReloadRequest = {
43
+ /**
44
+ * Clears runtime-owned caches before reloading.
45
+ *
46
+ * Runtimes use this when a reload must discard persisted client state such as
47
+ * cached layouts or route-local module instances.
48
+ */
43
49
  clearCache?: boolean;
50
+ /**
51
+ * Explicit page module URL to load for the reload.
52
+ *
53
+ * This is primarily used by HMR-aware runtimes so a current-page reload can
54
+ * reuse the active hot module entry instead of rediscovering the static page
55
+ * bootstrap asset from the fetched HTML document.
56
+ */
57
+ moduleUrl?: string;
44
58
  source?: EcoNavigationOwner;
45
59
  };
46
60
  /** Snapshot of the coordinator's current runtime ownership state. */
@@ -76,6 +90,12 @@ export type EcoNavigationRuntimeRegistration = {
76
90
  owner: EcoNavigationOwner;
77
91
  navigate?: (request: EcoNavigationRequest) => Promise<boolean | void>;
78
92
  handoffNavigation?: (request: EcoNavigationHandoffRequest) => Promise<boolean | void>;
93
+ /**
94
+ * Reloads the current page through the runtime's local navigation mechanism.
95
+ *
96
+ * Implementations may honor `request.moduleUrl` to force a specific page entry
97
+ * and `request.clearCache` to discard persisted runtime state before reloading.
98
+ */
79
99
  reloadCurrentPage?: (request?: EcoReloadRequest) => Promise<void>;
80
100
  /**
81
101
  * Releases runtime-owned client state before another runtime commits a new
@@ -16,7 +16,7 @@ function getCandidateOwners(currentOwner, registrations, excludedOwner) {
16
16
  }
17
17
  return owners;
18
18
  }
19
- function createEcoNavigationRuntime(_windowObject) {
19
+ function createEcoNavigationRuntime() {
20
20
  const registrations = /* @__PURE__ */ new Map();
21
21
  const listeners = /* @__PURE__ */ new Set();
22
22
  let owner = "none";
@@ -204,7 +204,7 @@ function getEcoNavigationRuntime(windowObject = window) {
204
204
  const runtimeWindow = windowObject;
205
205
  runtimeWindow.__ECO_PAGES__ = runtimeWindow.__ECO_PAGES__ || {};
206
206
  if (!runtimeWindow.__ECO_PAGES__.navigation) {
207
- runtimeWindow.__ECO_PAGES__.navigation = createEcoNavigationRuntime(runtimeWindow);
207
+ runtimeWindow.__ECO_PAGES__.navigation = createEcoNavigationRuntime();
208
208
  }
209
209
  return runtimeWindow.__ECO_PAGES__.navigation;
210
210
  }
@@ -0,0 +1,78 @@
1
+ import type { EcoPagesAppConfig, RouteKind } from '../../types/internal-types.js';
2
+ export type RouteParams = Record<string, string | string[]>;
3
+ export type RouteQuery = Record<string, string>;
4
+ export type TemplateRoute = {
5
+ readonly pathname: string;
6
+ readonly kind: RouteKind;
7
+ readonly filePath: string;
8
+ readonly paramNames: readonly string[];
9
+ };
10
+ export type RouteMatch = {
11
+ readonly requestedPathname: string;
12
+ readonly templateRoute: TemplateRoute;
13
+ readonly params: RouteParams;
14
+ readonly query: RouteQuery;
15
+ };
16
+ export type StaticPathExpansion = {
17
+ readonly pathname: string;
18
+ readonly templateRoute: TemplateRoute;
19
+ readonly params: RouteParams;
20
+ };
21
+ export type StaticGenerationRoute = {
22
+ readonly requestUrl: string;
23
+ readonly pathname: string;
24
+ readonly templateRoute: TemplateRoute;
25
+ readonly params: RouteParams;
26
+ };
27
+ export type StaticPathsContext = {
28
+ readonly appConfig: EcoPagesAppConfig;
29
+ readonly runtimeOrigin: string;
30
+ };
31
+ export type RouteRegistryPageModule = {
32
+ readonly staticPaths?: (context: StaticPathsContext) => Promise<{
33
+ paths: Array<{
34
+ params: RouteParams;
35
+ }>;
36
+ }>;
37
+ readonly staticProps?: unknown;
38
+ };
39
+ export interface RouteRegistryPageModuleAdapter {
40
+ loadPageModule(filePath: string): Promise<RouteRegistryPageModule>;
41
+ }
42
+ export type RouteRegistryOptions = {
43
+ pagesDir: string;
44
+ appConfig: EcoPagesAppConfig;
45
+ origin: string;
46
+ templatesExt: readonly string[];
47
+ buildMode: boolean;
48
+ pageModuleAdapter: RouteRegistryPageModuleAdapter;
49
+ };
50
+ export declare class RouteRegistry {
51
+ readonly origin: string;
52
+ readonly appConfig: EcoPagesAppConfig;
53
+ readonly pagesDir: string;
54
+ readonly templatesExt: readonly string[];
55
+ readonly buildMode: boolean;
56
+ private readonly pageModuleAdapter;
57
+ private templateRouteList;
58
+ private readonly reloadListeners;
59
+ constructor(options: RouteRegistryOptions);
60
+ get templateRoutes(): readonly TemplateRoute[];
61
+ init(): Promise<void>;
62
+ reload(): Promise<void>;
63
+ onReload(listener: () => void): () => void;
64
+ matchRequest(requestUrl: string): RouteMatch | null;
65
+ listStaticPathExpansions(input: {
66
+ runtimeOrigin: string;
67
+ }): Promise<readonly StaticPathExpansion[]>;
68
+ listStaticGenerationRoutes(input: {
69
+ runtimeOrigin: string;
70
+ }): Promise<readonly StaticGenerationRoute[]>;
71
+ private scanTemplateRoutes;
72
+ private getRoutePath;
73
+ private classifyRouteKind;
74
+ private getParamNames;
75
+ private tryExtractParams;
76
+ private getSearchParams;
77
+ private resolveTemplatePath;
78
+ }
@@ -0,0 +1,262 @@
1
+ import path from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { fileSystem } from "@ecopages/file-system";
4
+ import { appLogger } from "../../global/app-logger.js";
5
+ import { invariant } from "../../utils/invariant.js";
6
+ const ROUTE_PRIORITY = {
7
+ exact: 0,
8
+ dynamic: 1,
9
+ "catch-all": 2
10
+ };
11
+ class RouteRegistry {
12
+ origin;
13
+ appConfig;
14
+ pagesDir;
15
+ templatesExt;
16
+ buildMode;
17
+ pageModuleAdapter;
18
+ templateRouteList = [];
19
+ reloadListeners = /* @__PURE__ */ new Set();
20
+ constructor(options) {
21
+ this.origin = options.origin;
22
+ this.appConfig = options.appConfig;
23
+ this.pagesDir = options.pagesDir;
24
+ this.templatesExt = options.templatesExt;
25
+ this.buildMode = options.buildMode;
26
+ this.pageModuleAdapter = options.pageModuleAdapter;
27
+ }
28
+ get templateRoutes() {
29
+ return this.templateRouteList;
30
+ }
31
+ async init() {
32
+ this.templateRouteList = await this.scanTemplateRoutes();
33
+ appLogger.debug("RouteRegistry initialized", this.templateRouteList);
34
+ }
35
+ async reload() {
36
+ await this.init();
37
+ for (const listener of this.reloadListeners) {
38
+ listener();
39
+ }
40
+ }
41
+ onReload(listener) {
42
+ this.reloadListeners.add(listener);
43
+ return () => {
44
+ this.reloadListeners.delete(listener);
45
+ };
46
+ }
47
+ matchRequest(requestUrl) {
48
+ const url = new URL(requestUrl);
49
+ const requestedPathname = normalizePathname(url.pathname);
50
+ const query = this.getSearchParams(url);
51
+ for (const route of this.templateRouteList) {
52
+ if (route.kind !== "exact") {
53
+ continue;
54
+ }
55
+ if (requestedPathname === route.pathname || requestedPathname === `${route.pathname}/`) {
56
+ return {
57
+ requestedPathname,
58
+ templateRoute: route,
59
+ params: {},
60
+ query
61
+ };
62
+ }
63
+ }
64
+ for (const route of this.templateRouteList) {
65
+ if (route.kind !== "dynamic") {
66
+ continue;
67
+ }
68
+ const params = this.tryExtractParams(route, requestedPathname);
69
+ if (!params) {
70
+ continue;
71
+ }
72
+ return {
73
+ requestedPathname,
74
+ templateRoute: route,
75
+ params,
76
+ query
77
+ };
78
+ }
79
+ for (const route of this.templateRouteList) {
80
+ if (route.kind !== "catch-all") {
81
+ continue;
82
+ }
83
+ const params = this.tryExtractParams(route, requestedPathname);
84
+ if (!params) {
85
+ continue;
86
+ }
87
+ return {
88
+ requestedPathname,
89
+ templateRoute: route,
90
+ params,
91
+ query
92
+ };
93
+ }
94
+ return null;
95
+ }
96
+ async listStaticPathExpansions(input) {
97
+ const expansions = [];
98
+ for (const route of this.templateRouteList) {
99
+ if (route.kind === "exact") {
100
+ continue;
101
+ }
102
+ const pageModule = await this.pageModuleAdapter.loadPageModule(route.filePath);
103
+ const staticPaths = pageModule.staticPaths;
104
+ if (this.buildMode) {
105
+ invariant(staticPaths !== void 0, `[ecopages] Missing getStaticPaths in ${route.filePath}`);
106
+ invariant(
107
+ pageModule.staticProps !== void 0,
108
+ `[ecopages] Missing getStaticProps in ${route.filePath}`
109
+ );
110
+ }
111
+ if (!staticPaths) {
112
+ continue;
113
+ }
114
+ const result = await staticPaths({
115
+ appConfig: this.appConfig,
116
+ runtimeOrigin: input.runtimeOrigin
117
+ });
118
+ for (const { params } of result.paths) {
119
+ expansions.push({
120
+ pathname: this.resolveTemplatePath(route.pathname, params),
121
+ templateRoute: route,
122
+ params
123
+ });
124
+ }
125
+ }
126
+ return expansions;
127
+ }
128
+ async listStaticGenerationRoutes(input) {
129
+ const staticPathExpansions = await this.listStaticPathExpansions(input);
130
+ return [
131
+ ...this.templateRouteList.filter((route) => route.kind === "exact").map((route) => ({
132
+ requestUrl: `${input.runtimeOrigin}${route.pathname}`,
133
+ pathname: route.pathname,
134
+ templateRoute: route,
135
+ params: {}
136
+ })),
137
+ ...staticPathExpansions.map((route) => ({
138
+ requestUrl: `${input.runtimeOrigin}${route.pathname}`,
139
+ pathname: route.pathname,
140
+ templateRoute: route.templateRoute,
141
+ params: route.params
142
+ }))
143
+ ];
144
+ }
145
+ async scanTemplateRoutes() {
146
+ if (!existsSync(this.pagesDir)) {
147
+ return [];
148
+ }
149
+ const scannedFiles = await fileSystem.glob(
150
+ this.templatesExt.map((ext) => `**/*${ext}`),
151
+ {
152
+ cwd: this.pagesDir
153
+ }
154
+ );
155
+ const templateRoutes = [];
156
+ for await (const file of scannedFiles) {
157
+ if (file.includes(".ecopages-node.")) {
158
+ continue;
159
+ }
160
+ const routePathname = this.getRoutePath(file);
161
+ const filePath = path.join(this.pagesDir, file);
162
+ const kind = this.classifyRouteKind(filePath);
163
+ templateRoutes.push({
164
+ pathname: routePathname,
165
+ kind,
166
+ filePath,
167
+ paramNames: this.getParamNames(routePathname)
168
+ });
169
+ }
170
+ return templateRoutes.sort((left, right) => {
171
+ const priorityDifference = ROUTE_PRIORITY[left.kind] - ROUTE_PRIORITY[right.kind];
172
+ if (priorityDifference !== 0) {
173
+ return priorityDifference;
174
+ }
175
+ if (left.pathname === "/") {
176
+ return -1;
177
+ }
178
+ if (right.pathname === "/") {
179
+ return 1;
180
+ }
181
+ return left.pathname.localeCompare(right.pathname);
182
+ });
183
+ }
184
+ getRoutePath(file) {
185
+ const cleanedRoute = this.templatesExt.reduce((route, ext) => route.replace(ext, ""), file).replace(/\/?index$/, "");
186
+ return normalizePathname(`/${cleanedRoute}`);
187
+ }
188
+ classifyRouteKind(filePath) {
189
+ if (filePath.includes("[...")) {
190
+ return "catch-all";
191
+ }
192
+ if (filePath.includes("[") && filePath.includes("]")) {
193
+ return "dynamic";
194
+ }
195
+ return "exact";
196
+ }
197
+ getParamNames(routePathname) {
198
+ const matches = routePathname.match(/\[(?:\.\.\.)?([^\]]+)\]/g);
199
+ return matches ? matches.map((match) => match.replace(/^\[(?:\.\.\.)?/, "").replace(/\]$/, "")) : [];
200
+ }
201
+ tryExtractParams(route, requestedPathname) {
202
+ const routeParts = route.pathname.split("/");
203
+ const pathnameParts = requestedPathname.split("/");
204
+ if (route.kind === "dynamic" && routeParts.length !== pathnameParts.length) {
205
+ return null;
206
+ }
207
+ const params = {};
208
+ for (let i = 0; i < routeParts.length; i++) {
209
+ const routePart = routeParts[i];
210
+ const pathnamePart = pathnameParts[i];
211
+ if (!routePart) {
212
+ continue;
213
+ }
214
+ if (routePart.startsWith("[...") && routePart.endsWith("]")) {
215
+ const paramName = routePart.slice(4, -1);
216
+ params[paramName] = pathnameParts.slice(i).filter(Boolean);
217
+ return params;
218
+ }
219
+ if (routePart.startsWith("[") && routePart.endsWith("]")) {
220
+ if (pathnamePart === void 0) {
221
+ return null;
222
+ }
223
+ params[routePart.slice(1, -1)] = pathnamePart;
224
+ continue;
225
+ }
226
+ if (routePart !== pathnamePart) {
227
+ return null;
228
+ }
229
+ }
230
+ if (route.kind === "catch-all") {
231
+ const cleanPathname = route.pathname.replace(/\[.*?\]/g, "");
232
+ return requestedPathname.includes(cleanPathname) ? params : null;
233
+ }
234
+ return params;
235
+ }
236
+ getSearchParams(url) {
237
+ const query = {};
238
+ for (const [key, value] of url.searchParams) {
239
+ query[key] = value;
240
+ }
241
+ return query;
242
+ }
243
+ resolveTemplatePath(pathname, params) {
244
+ let resolvedPath = pathname;
245
+ for (const [key, value] of Object.entries(params)) {
246
+ const serializedValue = Array.isArray(value) ? value.join("/") : value;
247
+ resolvedPath = resolvedPath.replace(`[...${key}]`, serializedValue);
248
+ resolvedPath = resolvedPath.replace(`[${key}]`, serializedValue);
249
+ }
250
+ return normalizePathname(resolvedPath);
251
+ }
252
+ }
253
+ function normalizePathname(pathname) {
254
+ if (!pathname || pathname === "/") {
255
+ return "/";
256
+ }
257
+ const normalized = pathname.startsWith("/") ? pathname : `/${pathname}`;
258
+ return normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
259
+ }
260
+ export {
261
+ RouteRegistry
262
+ };
@@ -11,7 +11,6 @@ Typical responsibilities include:
11
11
  - server-module loading and transpilation
12
12
  - browser bundle coordination
13
13
  - asset processing and runtime asset declaration helpers
14
- - runtime specifier registry management
15
14
  - server invalidation state and entrypoint dependency graphs
16
15
  - HTML finalization and dependency injection
17
16
 
@@ -20,7 +19,7 @@ Typical responsibilities include:
20
19
  - `module-loading/`: framework-owned config/app bootstrap loading and server-side source loading
21
20
  - `assets/`: shared browser build coordination and processed asset pipelines
22
21
  - `invalidation/`: file-change classification and invalidation policy
23
- - `runtime-state/`: app-owned invalidation state, dependency graphs, and runtime specifier registry
22
+ - `runtime-state/`: app-owned invalidation state and dependency graphs
24
23
  - `runtime-manifest/`: node runtime manifest derivation and persistence
25
24
  - `html/`: final HTML dependency injection and rewriter selection
26
25
 
@@ -0,0 +1,3 @@
1
+ import type { AssetDefinition } from './assets.types.js';
2
+ export declare function getAssetDependencyKey(dep: AssetDefinition): string;
3
+ export declare function deduplicateAssetDependencies(deps: AssetDefinition[]): AssetDefinition[];
@@ -0,0 +1,56 @@
1
+ import { rapidhash } from "../../../utils/hash.js";
2
+ function generateHash(content) {
3
+ return rapidhash(content).toString();
4
+ }
5
+ function getScriptDependencyBuildSignature(dep) {
6
+ if (dep.kind !== "script") {
7
+ return void 0;
8
+ }
9
+ const pluginNames = dep.bundleOptions?.plugins?.map((plugin) => plugin.name) ?? [];
10
+ const signature = {
11
+ bundle: dep.bundle,
12
+ inline: dep.inline,
13
+ excludeFromHtml: dep.excludeFromHtml,
14
+ groupedBundle: dep.groupedBundle,
15
+ naming: dep.bundleOptions?.naming,
16
+ external: dep.bundleOptions?.external,
17
+ minify: dep.bundleOptions?.minify,
18
+ plugins: pluginNames
19
+ };
20
+ return generateHash(JSON.stringify(signature));
21
+ }
22
+ function getAssetDependencyKey(dep) {
23
+ const parts = [dep.kind, dep.source];
24
+ if ("filepath" in dep) {
25
+ parts.push(dep.filepath);
26
+ } else if ("content" in dep) {
27
+ parts.push(`content:${generateHash(dep.content)}`);
28
+ } else if ("importPath" in dep) {
29
+ parts.push(dep.importPath);
30
+ }
31
+ if ("position" in dep && dep.position) {
32
+ parts.push(dep.position);
33
+ }
34
+ if ("packageRole" in dep && dep.packageRole) {
35
+ parts.push(`package:${dep.packageRole}`);
36
+ }
37
+ const scriptBuildSignature = getScriptDependencyBuildSignature(dep);
38
+ if (scriptBuildSignature) {
39
+ parts.push(`build:${scriptBuildSignature}`);
40
+ }
41
+ return parts.join(":");
42
+ }
43
+ function deduplicateAssetDependencies(deps) {
44
+ const seen = /* @__PURE__ */ new Map();
45
+ for (const dep of deps) {
46
+ const key = getAssetDependencyKey(dep);
47
+ if (!seen.has(key)) {
48
+ seen.set(key, dep);
49
+ }
50
+ }
51
+ return Array.from(seen.values());
52
+ }
53
+ export {
54
+ deduplicateAssetDependencies,
55
+ getAssetDependencyKey
56
+ };
@@ -1,6 +1,6 @@
1
- import type { EcoPagesAppConfig, IHmrManager } from '../../../internal-types';
2
- import type { AssetDefinition, AssetKind, AssetSource, ProcessedAsset } from './assets.types';
3
- import { ProcessorRegistry } from './processor.registry';
1
+ import type { EcoPagesAppConfig, IHmrManager } from '../../../types/internal-types.js';
2
+ import type { AssetDefinition, AssetKind, AssetSource, ProcessedAsset } from './assets.types.js';
3
+ import { ProcessorRegistry } from './processor.registry.js';
4
4
  /**
5
5
  * Processes declared component and page asset dependencies for one app instance.
6
6
  *
@@ -42,23 +42,6 @@ export declare class AssetProcessingService {
42
42
  * entries.
43
43
  */
44
44
  processDependencies(deps: AssetDefinition[], key: string): Promise<ProcessedAsset[]>;
45
- /**
46
- * Removes duplicate dependency declarations while preserving first-seen order.
47
- */
48
- private deduplicateDependencies;
49
- /**
50
- * Builds the cache signature fragment for script dependencies that can vary by
51
- * bundling policy.
52
- */
53
- private getScriptDependencyBuildSignature;
54
- /**
55
- * Derives the stable cache key for one dependency declaration.
56
- */
57
- private getDependencyKey;
58
- /**
59
- * Hashes content used in dependency cache and signature keys.
60
- */
61
- private generateHash;
62
45
  /**
63
46
  * Processes deduplicated dependencies grouped by processor type.
64
47
  *