@ecopages/core 0.2.0-alpha.9 → 0.2.0-beta.1

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 (473) hide show
  1. package/README.md +79 -28
  2. package/package.json +104 -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 +32 -8
  67. package/src/adapters/shared/server-static-builder.js +69 -6
  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-entry-file.d.ts +72 -0
  279. package/src/utils/resolve-entry-file.js +41 -0
  280. package/src/utils/resolve-work-dir.js +1 -1
  281. package/src/watchers/project-watcher.d.ts +4 -4
  282. package/src/watchers/project-watcher.js +35 -41
  283. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  284. package/src/watchers/project-watcher.test-helpers.js +5 -5
  285. package/CHANGELOG.md +0 -31
  286. package/src/adapters/abstract/application-adapter.ts +0 -337
  287. package/src/adapters/abstract/router-adapter.ts +0 -30
  288. package/src/adapters/abstract/server-adapter.ts +0 -79
  289. package/src/adapters/bun/client-bridge.ts +0 -62
  290. package/src/adapters/bun/create-app.ts +0 -189
  291. package/src/adapters/bun/hmr-manager.ts +0 -409
  292. package/src/adapters/bun/index.ts +0 -2
  293. package/src/adapters/bun/server-adapter.ts +0 -499
  294. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  295. package/src/adapters/bun/server-lifecycle.js +0 -92
  296. package/src/adapters/bun/server-lifecycle.ts +0 -124
  297. package/src/adapters/index.ts +0 -6
  298. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  299. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  300. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  301. package/src/adapters/node/create-app.ts +0 -179
  302. package/src/adapters/node/index.d.ts +0 -6
  303. package/src/adapters/node/index.js +0 -11
  304. package/src/adapters/node/index.ts +0 -16
  305. package/src/adapters/node/node-client-bridge.ts +0 -79
  306. package/src/adapters/node/node-hmr-manager.ts +0 -381
  307. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  308. package/src/adapters/node/runtime-adapter.js +0 -306
  309. package/src/adapters/node/runtime-adapter.ts +0 -439
  310. package/src/adapters/node/server-adapter.ts +0 -488
  311. package/src/adapters/node/static-content-server.ts +0 -239
  312. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  313. package/src/adapters/node/write-runtime-manifest.js +0 -12
  314. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/define-api-handler.ts +0 -66
  318. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  319. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  320. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  321. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  322. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  323. package/src/adapters/shared/hmr-html-response.ts +0 -52
  324. package/src/adapters/shared/render-context.ts +0 -120
  325. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  326. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  327. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  328. package/src/adapters/shared/server-adapter.ts +0 -489
  329. package/src/adapters/shared/server-route-handler.ts +0 -153
  330. package/src/adapters/shared/server-static-builder.ts +0 -166
  331. package/src/build/build-adapter.ts +0 -361
  332. package/src/build/build-manifest.ts +0 -54
  333. package/src/build/build-types.ts +0 -83
  334. package/src/build/dev-build-coordinator.d.ts +0 -74
  335. package/src/build/dev-build-coordinator.js +0 -161
  336. package/src/build/dev-build-coordinator.ts +0 -221
  337. package/src/build/esbuild-build-adapter.d.ts +0 -72
  338. package/src/build/esbuild-build-adapter.js +0 -422
  339. package/src/build/esbuild-build-adapter.ts +0 -559
  340. package/src/build/runtime-build-executor.ts +0 -34
  341. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  342. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  343. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  344. package/src/config/config-builder.ts +0 -706
  345. package/src/constants.ts +0 -54
  346. package/src/create-app.ts +0 -87
  347. package/src/dev/sc-server.ts +0 -143
  348. package/src/eco/component-render-context.d.ts +0 -105
  349. package/src/eco/component-render-context.js +0 -87
  350. package/src/eco/component-render-context.ts +0 -224
  351. package/src/eco/eco.ts +0 -242
  352. package/src/eco/eco.types.ts +0 -221
  353. package/src/eco/eco.utils.ts +0 -89
  354. package/src/eco/global-injector-map.ts +0 -112
  355. package/src/eco/lazy-injector-map.ts +0 -120
  356. package/src/eco/module-dependencies.ts +0 -75
  357. package/src/errors/http-error.ts +0 -72
  358. package/src/errors/index.ts +0 -2
  359. package/src/errors/locals-access-error.ts +0 -7
  360. package/src/global/app-logger.ts +0 -4
  361. package/src/hmr/client/hmr-runtime.ts +0 -152
  362. package/src/hmr/hmr-strategy.ts +0 -172
  363. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  364. package/src/hmr/hmr.test.e2e.ts +0 -66
  365. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  366. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  367. package/src/index.browser.ts +0 -3
  368. package/src/index.ts +0 -5
  369. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  370. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  371. package/src/internal-types.ts +0 -232
  372. package/src/plugins/alias-resolver-plugin.ts +0 -63
  373. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  374. package/src/plugins/integration-plugin.ts +0 -226
  375. package/src/plugins/processor.ts +0 -240
  376. package/src/plugins/runtime-capability.ts +0 -14
  377. package/src/public-types.ts +0 -1317
  378. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  379. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  380. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  381. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  382. package/src/route-renderer/component-graph/component-graph.js +0 -72
  383. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  384. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  385. package/src/route-renderer/component-graph/component-marker.js +0 -46
  386. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  387. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  388. package/src/route-renderer/component-graph/component-reference.js +0 -19
  389. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  390. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  391. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  392. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  393. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  394. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  395. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  396. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  397. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  398. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  399. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  400. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  401. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  402. package/src/route-renderer/route-renderer.ts +0 -115
  403. package/src/router/client/link-intent.test.browser.ts +0 -51
  404. package/src/router/client/link-intent.ts +0 -92
  405. package/src/router/client/navigation-coordinator.ts +0 -433
  406. package/src/router/server/fs-router-scanner.d.ts +0 -41
  407. package/src/router/server/fs-router-scanner.js +0 -156
  408. package/src/router/server/fs-router-scanner.ts +0 -219
  409. package/src/router/server/fs-router.d.ts +0 -26
  410. package/src/router/server/fs-router.js +0 -100
  411. package/src/router/server/fs-router.ts +0 -122
  412. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  413. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  414. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  416. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  417. package/src/services/assets/asset-processing-service/index.ts +0 -5
  418. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  419. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  420. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  421. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  422. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  423. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  424. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  425. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  426. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  427. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  428. package/src/services/assets/browser-bundle.service.ts +0 -53
  429. package/src/services/cache/cache.types.ts +0 -126
  430. package/src/services/cache/index.ts +0 -18
  431. package/src/services/cache/memory-cache-store.ts +0 -130
  432. package/src/services/cache/page-cache-service.ts +0 -202
  433. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  434. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  435. package/src/services/html/html-transformer.service.ts +0 -279
  436. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  437. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  438. package/src/services/module-loading/page-module-import.service.ts +0 -200
  439. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  440. package/src/services/module-loading/server-loader.service.js +0 -32
  441. package/src/services/module-loading/server-loader.service.ts +0 -130
  442. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  444. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  445. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  446. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  447. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  448. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  449. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  450. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  451. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  452. package/src/services/validation/schema-validation-service.ts +0 -204
  453. package/src/services/validation/standard-schema.types.ts +0 -68
  454. package/src/static-site-generator/static-site-generator.ts +0 -462
  455. package/src/utils/css.d.ts +0 -1
  456. package/src/utils/css.js +0 -7
  457. package/src/utils/css.ts +0 -5
  458. package/src/utils/deep-merge.ts +0 -47
  459. package/src/utils/hash.ts +0 -5
  460. package/src/utils/html.ts +0 -1
  461. package/src/utils/invariant.ts +0 -15
  462. package/src/utils/locals-utils.ts +0 -37
  463. package/src/utils/parse-cli-args.ts +0 -83
  464. package/src/utils/path-utils.module.ts +0 -14
  465. package/src/utils/resolve-work-dir.ts +0 -45
  466. package/src/utils/runtime.ts +0 -44
  467. package/src/utils/server-utils.module.ts +0 -67
  468. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  469. package/src/watchers/project-watcher.ts +0 -363
  470. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  471. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  472. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  473. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,19 +1,21 @@
1
1
  import type { Readable } from 'node:stream';
2
- import type { ApiResponseBuilder } from './adapters/shared/api-response.js';
3
- import type { BuildExecutor } from './build/build-adapter.js';
4
- import type { EcoBuildPlugin } from './build/build-types.js';
5
- import type { EcoPageComponent } from './eco/eco.types.js';
2
+ import type { ApiResponseBuilder } from '../adapters/shared/api-response.js';
3
+ import type { BuildExecutor } from '../build/build-adapter.js';
4
+ import type { EcoBuildPlugin } from '../build/build-types.js';
5
+ import type { ForeignChildRuntime } from '../route-renderer/orchestration/component-render-context.js';
6
+ import type { EcoPageComponent } from '../eco/eco.types.js';
6
7
  import type { EcoPagesAppConfig } from './internal-types.js';
7
- import type { HmrStrategy } from './hmr/hmr-strategy.js';
8
- import type { BrowserBundleExecutor } from './services/assets/browser-bundle.service.js';
9
- import type { ProcessedAsset } from './services/assets/asset-processing-service/assets.types.js';
10
- import type { CacheStats, CacheStrategy } from './services/cache/cache.types.js';
8
+ import type { HmrStrategy } from '../hmr/hmr-strategy.js';
9
+ import type { BrowserBundleExecutor } from '../services/assets/browser-bundle.service.js';
10
+ import type { AssetDefinition, ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
11
+ import type { CacheStats, CacheStrategy } from '../services/cache/cache.types.js';
11
12
  import type { InteractionEventsString as ScriptsInjectorInteractionEventsString } from '@ecopages/scripts-injector/types';
12
- export type { EcoPageComponent } from './eco/eco.types.js';
13
- export type { MarkerGraphContext } from './route-renderer/component-graph/marker-graph-resolver.js';
14
- export type { ProcessedAsset } from './services/assets/asset-processing-service/assets.types.js';
15
- import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from './services/validation/standard-schema.types.js';
16
- export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, };
13
+ import type { EntrypointDependencyGraph } from '../services/runtime-state/entrypoint-dependency-graph.service.js';
14
+ export type { EcoPagesAppConfig } from './internal-types.js';
15
+ export type { EcoPageComponent } from '../eco/eco.types.js';
16
+ export type { ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
17
+ import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from '../services/validation/standard-schema.types.js';
18
+ export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, ForeignChildRuntime, };
17
19
  export type InteractionEventsString = ScriptsInjectorInteractionEventsString;
18
20
  export type DependencyLazyTrigger = {
19
21
  'on:idle': true;
@@ -93,10 +95,6 @@ export interface DefaultHmrContext {
93
95
  * Map of registered entrypoints to their output URLs.
94
96
  */
95
97
  getWatchedFiles(): Map<string, string>;
96
- /**
97
- * Map of bare specifiers to runtime URLs for browser import resolution.
98
- */
99
- getSpecifierMap(): Map<string, string>;
100
98
  /**
101
99
  * Directory where HMR bundles are written.
102
100
  */
@@ -130,7 +128,11 @@ export interface DefaultHmrContext {
130
128
  /**
131
129
  * Server-side module loader owned by the active app/runtime.
132
130
  */
133
- importServerModule<T = unknown>(filePath: string): Promise<T>;
131
+ importServerModule<T = unknown>(filePath: string | URL): Promise<T>;
132
+ /**
133
+ * Entrypoint dependency graph for selective HMR invalidation.
134
+ */
135
+ getEntrypointDependencyGraph(): EntrypointDependencyGraph;
134
136
  }
135
137
  /**
136
138
  * Represents an event broadcast to connected clients via the ClientBridge.
@@ -187,15 +189,6 @@ export interface IHmrManager {
187
189
  * script bundling path.
188
190
  */
189
191
  registerScriptEntrypoint(entrypointPath: string): Promise<string>;
190
- /**
191
- * Registers mappings from bare specifiers to runtime URLs.
192
- *
193
- * @remarks
194
- * This is the shared registration seam for integration-owned runtime alias
195
- * maps. The registry may later back a broader import-map-style facility, but
196
- * the mappings themselves remain integration-owned.
197
- */
198
- registerSpecifierMap(map: Record<string, string>): void;
199
192
  /**
200
193
  * Registers a custom HMR strategy.
201
194
  */
@@ -224,10 +217,6 @@ export interface IHmrManager {
224
217
  * Gets the map of watched files.
225
218
  */
226
219
  getWatchedFiles(): Map<string, string>;
227
- /**
228
- * Gets the registered bare-specifier map.
229
- */
230
- getSpecifierMap(): Map<string, string>;
231
220
  /**
232
221
  * Gets the HMR dist directory.
233
222
  */
@@ -261,6 +250,21 @@ export type EcoComponentDependencies = {
261
250
  components?: EcoComponent[];
262
251
  };
263
252
  export type EcoPagesElement = string | Promise<string>;
253
+ /**
254
+ * Serializable child payloads accepted by cross-integration deferred rendering.
255
+ *
256
+ * This models the broad value shapes that EcoPages already flattens when a
257
+ * foreign component boundary serializes its children for another integration.
258
+ * It is intentionally transport-oriented rather than framework-native, so it
259
+ * can be shared across Kita, Lit, React, and Ecopages JSX authoring surfaces
260
+ * without coupling core types to any one renderer.
261
+ */
262
+ export type EcoChildren = string | Promise<string> | number | bigint | boolean | null | undefined | readonly EcoChildren[] | {
263
+ strings: readonly string[];
264
+ values?: readonly EcoChildren[];
265
+ } | {
266
+ [key: string]: EcoChildren;
267
+ };
264
268
  /**
265
269
  * Represents the input configuration for EcoPages.
266
270
  */
@@ -432,10 +436,10 @@ export interface LayoutProps<T = EcoPagesElement> extends Partial<RequestPageCon
432
436
  /**
433
437
  * Represents the props for the HTML template of a page.
434
438
  */
435
- export interface HtmlTemplateProps extends PageHeadProps {
436
- children: EcoPagesElement;
439
+ export interface HtmlTemplateProps<T = EcoPagesElement> extends PageHeadProps<T> {
440
+ children: T;
437
441
  language?: string;
438
- headContent?: EcoPagesElement;
442
+ headContent?: T;
439
443
  pageProps: Record<string, unknown>;
440
444
  }
441
445
  /**
@@ -658,16 +662,139 @@ export type IntegrationRendererRenderOptions<C = EcoPagesElement> = RouteRendere
658
662
  Layout?: EcoPageLayoutComponent<any>;
659
663
  dependencies?: EcoComponentDependencies;
660
664
  resolvedDependencies: ProcessedAsset[];
665
+ pagePackage?: PagePackageResult;
661
666
  componentRender?: ComponentRenderResult;
662
667
  pageProps?: Record<string, unknown>;
663
668
  cacheStrategy?: CacheStrategy;
664
669
  pageLocals?: RequestLocals;
670
+ ownershipPlan?: OwnershipPlan;
665
671
  };
666
- export interface ComponentRenderInput {
672
+ /**
673
+ * Structured page asset package produced after dependency resolution.
674
+ *
675
+ * `assets` retains the full processed asset list, while the remaining fields
676
+ * split that list into the subsets used during final HTML injection and
677
+ * renderer-owned follow-up work.
678
+ */
679
+ export interface PagePackageResult {
680
+ /**
681
+ * Full processed asset list before any page-level partitioning.
682
+ */
683
+ assets: ProcessedAsset[];
684
+ /**
685
+ * Optional structured Page Browser Graph carried through route preparation.
686
+ */
687
+ pageBrowserGraph?: PageBrowserGraphResult;
688
+ /**
689
+ * Assets that should still be injected into the final HTML document.
690
+ */
691
+ htmlAssets: ProcessedAsset[];
692
+ /**
693
+ * Primary page-owned browser entry when one was identified during packaging.
694
+ */
695
+ pageScript?: ProcessedAsset;
696
+ /**
697
+ * Primary page-owned stylesheet when one was identified during packaging.
698
+ */
699
+ pageStylesheet?: ProcessedAsset;
700
+ /**
701
+ * Inline assets that remain embedded directly in the document.
702
+ */
703
+ inlineAssets: ProcessedAsset[];
704
+ /**
705
+ * Assets kept outside the main page package so callers can manage them explicitly.
706
+ */
707
+ separateAssets: ProcessedAsset[];
708
+ /**
709
+ * Browser chunks needed after initial page bootstrap, including eager lazy-entry bundles.
710
+ */
711
+ dynamicChunks: ProcessedAsset[];
712
+ }
713
+ /**
714
+ * Page-scoped browser output planned before final HTML packaging.
715
+ *
716
+ * This shape keeps page-browser ownership explicit without forcing downstream
717
+ * HTML packaging to understand how integrations discovered the graph. Entry
718
+ * assets represent the initial page bootstrap outputs, while chunk assets stay
719
+ * separate so callers can preserve lazy/shared chunk identity until the point
720
+ * they intentionally flatten for page packaging.
721
+ */
722
+ export interface PageBrowserGraphResult {
723
+ /**
724
+ * Processed assets needed for the initial page browser bootstrap.
725
+ */
726
+ entryAssets: ProcessedAsset[];
727
+ /**
728
+ * Processed browser chunks referenced after the initial page bootstrap.
729
+ */
730
+ chunkAssets: ProcessedAsset[];
731
+ }
732
+ export type PageBrowserGraphContributionContext = {
733
+ file: string;
734
+ pageModule: EcoPageFile;
735
+ };
736
+ export interface PageBrowserGraphContribution {
737
+ dependencies?: AssetDefinition[];
738
+ assets?: ProcessedAsset[];
739
+ }
740
+ export type OwnershipValidationErrorCode = 'UNKNOWN_INTEGRATION_OWNER' | 'MISSING_COMPONENT_METADATA';
741
+ export interface OwnershipValidationError {
742
+ code: OwnershipValidationErrorCode;
743
+ message: string;
744
+ componentId?: string;
745
+ componentFile?: string;
746
+ integrationName?: string;
747
+ }
748
+ export type OwnershipPlanNodeSource = 'route' | 'page' | 'layout' | 'html-template' | 'dependency';
749
+ export interface IntegrationOwnership {
750
+ integrationName: string;
751
+ componentId: string;
752
+ componentFile?: string;
753
+ isPageEntry: boolean;
754
+ isForeignToParent: boolean;
755
+ }
756
+ export interface OwnershipPlanNode {
757
+ id: string;
758
+ source: OwnershipPlanNodeSource;
759
+ ownership: IntegrationOwnership;
760
+ children: OwnershipPlanNode[];
761
+ declaredDependenciesValid: boolean;
762
+ }
763
+ export interface OwnershipPlan {
764
+ root: OwnershipPlanNode;
765
+ rendererNames: string[];
766
+ foreignEdgeCount: number;
767
+ hasValidationErrors: boolean;
768
+ validationErrors: OwnershipValidationError[];
769
+ }
770
+ export type ForeignSubtreeAttachmentPolicy = {
771
+ kind: 'none';
772
+ } | {
773
+ kind: 'first-element';
774
+ };
775
+ export interface ForeignSubtreeRenderPayload {
776
+ html: string;
777
+ assets: ProcessedAsset[];
778
+ rootTag?: string;
779
+ rootAttributes?: Record<string, string>;
780
+ attachmentPolicy: ForeignSubtreeAttachmentPolicy;
781
+ integrationName: string;
782
+ }
783
+ /**
784
+ * Shared execution-scoped context threaded through foreign-child renders.
785
+ *
786
+ * Integrations can extend this with renderer-local runtime keys, but the cache
787
+ * and optional component instance identity are shared across all renderers.
788
+ */
789
+ export interface BaseIntegrationContext {
790
+ rendererCache?: Map<string, unknown>;
791
+ componentInstanceId?: string;
792
+ }
793
+ export interface ComponentRenderInput<TIntegrationContext extends BaseIntegrationContext = BaseIntegrationContext> {
667
794
  component: EcoComponent;
668
795
  props: Record<string, unknown>;
669
- children?: string;
670
- integrationContext?: unknown;
796
+ children?: unknown;
797
+ integrationContext?: TIntegrationContext;
671
798
  }
672
799
  export interface ComponentRenderResult {
673
800
  html: string;
@@ -718,6 +845,24 @@ export interface ResponseOptions {
718
845
  * Provides methods to render eco.page views and return formatted responses.
719
846
  */
720
847
  export interface RenderContext {
848
+ /**
849
+ * Import a server-executed module through the active Ecopages module loader.
850
+ *
851
+ * This applies the runtime's cache-busting and source-transpilation rules so
852
+ * request-time lazy imports participate in development invalidation.
853
+ *
854
+ * @param filePath - Absolute filesystem path or file URL for the server module
855
+ */
856
+ importServerModule<T = unknown>(filePath: string | URL): Promise<T>;
857
+ /**
858
+ * Import a server module through the active Ecopages module loader and render
859
+ * its default-exported eco.page view.
860
+ *
861
+ * @param filePath - Absolute filesystem path or file URL for the server module
862
+ * @param props - Props to pass to the default-exported view
863
+ * @param options - Optional status code and headers
864
+ */
865
+ renderServerModule<P = Record<string, unknown>>(filePath: string | URL, props?: P, options?: RenderOptions): Promise<Response>;
721
866
  /**
722
867
  * Render an eco.page view with full layout and includes.
723
868
  * @param view - The eco.page component to render
@@ -908,6 +1053,15 @@ export interface ApiHandlerContext<TRequest extends Request = Request, TServer =
908
1053
  */
909
1054
  headers?: unknown;
910
1055
  }
1056
+ /**
1057
+ * Context available to file-route page middleware.
1058
+ *
1059
+ * Page middleware can mutate locals, short-circuit the request, and use the
1060
+ * response helpers, but final document rendering stays owned by the page route
1061
+ * execution path.
1062
+ */
1063
+ export interface FileRouteMiddlewareContext<TRequest extends Request = Request, TServer = any> extends Omit<ApiHandlerContext<TRequest, TServer>, 'render' | 'renderPartial' | 'importServerModule' | 'renderServerModule'> {
1064
+ }
911
1065
  /**
912
1066
  * Next function for middleware chain.
913
1067
  * Call to continue to the next middleware or final handler.
@@ -943,6 +1097,10 @@ export type MiddlewareNext = () => Promise<Response>;
943
1097
  * ```
944
1098
  */
945
1099
  export type Middleware<TRequest extends Request = Request, TServer = any, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>> = (context: TContext, next: MiddlewareNext) => Promise<Response> | Response;
1100
+ /**
1101
+ * Middleware contract for file-based page routes.
1102
+ */
1103
+ export type FileRouteMiddleware<TRequest extends Request = Request, TServer = any, TContext extends FileRouteMiddlewareContext<TRequest, TServer> = FileRouteMiddlewareContext<TRequest, TServer>> = (context: TContext, next: MiddlewareNext) => Promise<Response> | Response;
946
1104
  /**
947
1105
  * Helper type for defining middleware with extended context.
948
1106
  * Automatically infers TRequest and TServer from the provided context type.
File without changes
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Escapes a string for safe use inside a double-quoted HTML attribute value.
3
+ *
4
+ * @param value Raw attribute value.
5
+ * @returns Escaped attribute-safe string.
6
+ */
7
+ export declare function escapeHtmlAttribute(value: string): string;
@@ -0,0 +1,6 @@
1
+ function escapeHtmlAttribute(value) {
2
+ return value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
3
+ }
4
+ export {
5
+ escapeHtmlAttribute
6
+ };
@@ -1,4 +1,4 @@
1
- import type { ApiHandlerContext } from '../public-types.js';
1
+ import type { ApiHandlerContext } from '../types/public-types.js';
2
2
  /**
3
3
  * Creates a require function for validating and retrieving request locals.
4
4
  * Supports both single key access and multiple keys with type safety.
@@ -17,8 +17,11 @@ export type ReturnParseCliArgs = {
17
17
  hostname?: string;
18
18
  reactFastRefresh?: boolean;
19
19
  };
20
+ export type ParseCliArgsOptions = {
21
+ embeddedRuntime?: boolean;
22
+ };
20
23
  /**
21
24
  * Parses command line arguments for the server.
22
25
  * It returns {@link ReturnParseCliArgs}
23
26
  */
24
- export declare function parseCliArgs(): ReturnParseCliArgs;
27
+ export declare function parseCliArgs(options?: ParseCliArgsOptions): ReturnParseCliArgs;
@@ -1,8 +1,23 @@
1
1
  import { parseArgs } from "node:util";
2
2
  import { getRuntimeArgv } from "./runtime.js";
3
+ function getEmbeddedRuntimeCommandOptions() {
4
+ const isDevelopment = process.env.NODE_ENV === "development";
5
+ return {
6
+ preview: false,
7
+ build: false,
8
+ start: !isDevelopment,
9
+ dev: isDevelopment,
10
+ port: void 0,
11
+ hostname: void 0,
12
+ reactFastRefresh: void 0
13
+ };
14
+ }
3
15
  const ECOPAGES_BIN_FILES = ["ecopages.ts", "ecopages.js", "cli.js"];
4
16
  const ECOPAGES_AVAILABLE_COMMANDS = ["dev", "build", "start", "preview"];
5
- function parseCliArgs() {
17
+ function parseCliArgs(options = {}) {
18
+ if (options.embeddedRuntime || process.env.ECOPAGES_INTERNAL_EMBEDDED_RUNTIME === "true") {
19
+ return getEmbeddedRuntimeCommandOptions();
20
+ }
6
21
  const runtimeArgv = getRuntimeArgv();
7
22
  const { values } = parseArgs({
8
23
  args: runtimeArgv,
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The default entry file name when no other source provides a value.
3
+ */
4
+ export declare const DEFAULT_ENTRY_FILE = "app.ts";
5
+ /**
6
+ * The environment variable used to override the entry file path.
7
+ */
8
+ export declare const ENTRY_FILE_ENV = "ECOPAGES_ENTRY_FILE";
9
+ /**
10
+ * Centralized definition of the entry-file CLI argument.
11
+ *
12
+ * Exported so callers (CLI, tests, docs) reference a single source of truth
13
+ * for the flag name, short alias, and type. Keep this in sync with
14
+ * `resolveEntryFile` below.
15
+ */
16
+ export declare const entryFileOptions: {
17
+ readonly 'entry-file': {
18
+ readonly type: "string";
19
+ readonly short: "e";
20
+ };
21
+ };
22
+ /**
23
+ * The long flag name for the entry file option. Re-exported as a
24
+ * constant so consumers don't hardcode the string.
25
+ */
26
+ export declare const ENTRY_FILE_FLAG = "entry-file";
27
+ /**
28
+ * Resolved sources for the entry file, in precedence order (highest first):
29
+ *
30
+ * 1. `entryFile` argument — explicit caller override (e.g. constructor)
31
+ * 2. `ECOPAGES_ENTRY_FILE` env var — set by the CLI when spawning
32
+ * 3. `--entry-file` / `-e` CLI flag — read from `process.argv` via `parseArgs`
33
+ * 4. `app.ts` — the framework default
34
+ */
35
+ export interface ResolveEntryFileOptions {
36
+ /** Explicit override (e.g. constructor param or test fixture). */
37
+ entryFile?: string;
38
+ /** Environment to read `ECOPAGES_ENTRY_FILE` from. Defaults to `process.env`. */
39
+ env?: Record<string, string | undefined>;
40
+ /** Argv to parse. Defaults to `process.argv`. */
41
+ argv?: string[];
42
+ }
43
+ /**
44
+ * Resolves the entry file path using standard precedence.
45
+ *
46
+ * This is the single source of truth for entry-file resolution across
47
+ * the CLI, build pipeline, and runtime. Both the CLI layer and the
48
+ * runtime builders call into this function instead of reimplementing
49
+ * the precedence chain.
50
+ *
51
+ * @example
52
+ * resolveEntryFile(); // 'app.ts' (or env/argv)
53
+ * resolveEntryFile({ entryFile: 'src/server.ts' }); // 'src/server.ts'
54
+ * resolveEntryFile({ env: { ECOPAGES_ENTRY_FILE: 'x' }}); // 'x'
55
+ * resolveEntryFile({ argv: ['node', '-e', 'flag.ts'] }); // 'flag.ts'
56
+ */
57
+ export declare function resolveEntryFile({ entryFile, env, argv, }?: ResolveEntryFileOptions): string;
58
+ /**
59
+ * Parses argv for the entry-file flag using the shared `parseArgs` config.
60
+ *
61
+ * Exposed for callers that need the raw flag value without the full
62
+ * precedence chain (e.g. CLI help text, validation).
63
+ */
64
+ export declare function readEntryFileFlag(argv?: string[]): string | undefined;
65
+ /**
66
+ * The subdirectory inside `dist/` where the bundled server entry is placed.
67
+ */
68
+ export declare const SERVER_BUNDLE_DIR = ".server";
69
+ /**
70
+ * The filename of the bundled server entry.
71
+ */
72
+ export declare const SERVER_BUNDLE_FILENAME = "app.mjs";
@@ -0,0 +1,41 @@
1
+ import { parseArgs } from "node:util";
2
+ import { getRuntimeArgv } from "./runtime.js";
3
+ const DEFAULT_ENTRY_FILE = "app.ts";
4
+ const ENTRY_FILE_ENV = "ECOPAGES_ENTRY_FILE";
5
+ const entryFileOptions = {
6
+ "entry-file": { type: "string", short: "e" }
7
+ };
8
+ const ENTRY_FILE_FLAG = "entry-file";
9
+ function resolveEntryFile({
10
+ entryFile,
11
+ env = process.env,
12
+ argv = getRuntimeArgv()
13
+ } = {}) {
14
+ if (entryFile && entryFile.length > 0) return entryFile;
15
+ const fromEnv = env[ENTRY_FILE_ENV];
16
+ if (fromEnv && fromEnv.length > 0) return fromEnv;
17
+ const fromFlag = readEntryFileFlag(argv);
18
+ if (fromFlag) return fromFlag;
19
+ return DEFAULT_ENTRY_FILE;
20
+ }
21
+ function readEntryFileFlag(argv = getRuntimeArgv()) {
22
+ const { values } = parseArgs({
23
+ args: argv.slice(1),
24
+ options: { ...entryFileOptions },
25
+ strict: false
26
+ });
27
+ const raw = values[ENTRY_FILE_FLAG];
28
+ return typeof raw === "string" && raw.length > 0 ? raw : void 0;
29
+ }
30
+ const SERVER_BUNDLE_DIR = ".server";
31
+ const SERVER_BUNDLE_FILENAME = "app.mjs";
32
+ export {
33
+ DEFAULT_ENTRY_FILE,
34
+ ENTRY_FILE_ENV,
35
+ ENTRY_FILE_FLAG,
36
+ SERVER_BUNDLE_DIR,
37
+ SERVER_BUNDLE_FILENAME,
38
+ entryFileOptions,
39
+ readEntryFileFlag,
40
+ resolveEntryFile
41
+ };
@@ -1,5 +1,5 @@
1
1
  import path from "node:path";
2
- import { DEFAULT_ECOPAGES_WORK_DIR } from "../constants.js";
2
+ import { DEFAULT_ECOPAGES_WORK_DIR } from "../config/constants.js";
3
3
  function isInsideNodeModules(directory) {
4
4
  return path.normalize(directory).split(path.sep).includes("node_modules");
5
5
  }
@@ -1,16 +1,16 @@
1
1
  import { type FSWatcher } from 'chokidar';
2
- import type { EcoPagesAppConfig, IHmrManager, IClientBridge } from '../internal-types.js';
2
+ import type { EcoPagesAppConfig, IHmrManager, IClientBridge } from '../types/internal-types.js';
3
3
  /**
4
4
  * Configuration options for the ProjectWatcher
5
5
  * @interface ProjectWatcherConfig
6
6
  * @property {EcoPagesAppConfig} config - The application configuration
7
- * @property {() => void} refreshRouterRoutesCallback - Callback to refresh router routes
7
+ * @property {() => Promise<void>} refreshRouterRoutesCallback - Callback to refresh router routes
8
8
  * @property {IHmrManager} hmrManager - The HMR manager instance
9
9
  * @property {ClientBridge} bridge - The client bridge instance
10
10
  */
11
11
  export interface ProjectWatcherConfig {
12
12
  config: EcoPagesAppConfig;
13
- refreshRouterRoutesCallback: () => void;
13
+ refreshRouterRoutesCallback: () => Promise<void>;
14
14
  hmrManager: IHmrManager;
15
15
  bridge: IClientBridge;
16
16
  }
@@ -112,7 +112,7 @@ export declare class ProjectWatcher {
112
112
  *
113
113
  * @param {string} path - Path of the changed directory
114
114
  */
115
- triggerRouterRefresh(changedPath: string): void;
115
+ triggerRouterRefresh(changedPath: string): Promise<void>;
116
116
  /**
117
117
  * Handles and logs errors that occur during file watching.
118
118
  *
@@ -115,7 +115,7 @@ class ProjectWatcher {
115
115
  this.invalidationService.invalidateServerModules([filePath]);
116
116
  }
117
117
  if (plan.refreshRoutes) {
118
- this.refreshRouterRoutesCallback();
118
+ await this.refreshRouterRoutesCallback();
119
119
  }
120
120
  if (plan.category === "additional-watch") {
121
121
  this.bridge.reload();
@@ -196,11 +196,11 @@ class ProjectWatcher {
196
196
  *
197
197
  * @param {string} path - Path of the changed directory
198
198
  */
199
- triggerRouterRefresh(changedPath) {
199
+ async triggerRouterRefresh(changedPath) {
200
200
  const resolvedPath = path.resolve(changedPath);
201
201
  const isPageDir = resolvedPath.startsWith(this.appConfig.absolutePaths.pagesDir) && path.extname(resolvedPath) === "";
202
202
  if (isPageDir || this.isRouteSourceFile(resolvedPath)) {
203
- this.refreshRouterRoutesCallback();
203
+ await this.refreshRouterRoutesCallback();
204
204
  }
205
205
  }
206
206
  /**
@@ -228,45 +228,39 @@ class ProjectWatcher {
228
228
  * rapid file changes efficiently.
229
229
  */
230
230
  async createWatcherSubscription() {
231
- if (!this.watcher) {
232
- const processorPaths = [];
233
- for (const processor of this.appConfig.processors.values()) {
234
- const watchConfig = processor.getWatchConfig();
235
- if (!watchConfig) continue;
236
- processorPaths.push(...watchConfig.paths);
237
- }
238
- if (fileSystem.exists(this.appConfig.absolutePaths.includesDir)) {
239
- processorPaths.push(this.appConfig.absolutePaths.includesDir);
240
- }
241
- if (fileSystem.exists(this.appConfig.absolutePaths.srcDir)) {
242
- processorPaths.push(this.appConfig.absolutePaths.srcDir);
243
- }
244
- if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
245
- processorPaths.push(this.appConfig.absolutePaths.pagesDir);
246
- }
247
- if (fileSystem.exists(this.appConfig.absolutePaths.publicDir)) {
248
- processorPaths.push(this.appConfig.absolutePaths.publicDir);
249
- }
250
- if (this.appConfig.additionalWatchPaths.length) {
251
- processorPaths.push(...this.appConfig.additionalWatchPaths);
252
- }
253
- this.watcher = chokidar.watch(processorPaths, {
254
- ignoreInitial: true,
255
- ignorePermissionErrors: true,
256
- awaitWriteFinish: {
257
- stabilityThreshold: 50,
258
- pollInterval: 50
259
- }
260
- });
231
+ if (this.watcher) {
232
+ return this.watcher;
233
+ }
234
+ const processorPaths = [];
235
+ for (const processor of this.appConfig.processors.values()) {
236
+ const watchConfig = processor.getWatchConfig();
237
+ if (!watchConfig) continue;
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);
261
245
  }
262
- this.watcher.add(this.appConfig.absolutePaths.srcDir);
263
- this.watcher.on("change", (p) => this.enqueueChange(() => this.handleFileChange(p, "change"))).on("add", (p) => {
264
- this.enqueueChange(() => this.handleFileChange(p, "add"));
265
- this.triggerRouterRefresh(p);
266
- }).on("addDir", (p) => this.triggerRouterRefresh(p)).on("unlink", (p) => {
267
- this.enqueueChange(() => this.handleFileChange(p, "unlink"));
268
- this.triggerRouterRefresh(p);
269
- }).on("unlinkDir", (p) => this.triggerRouterRefresh(p)).on("error", (error) => this.handleError(error));
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));
270
264
  for (const processor of this.appConfig.processors.values()) {
271
265
  const watchConfig = processor.getWatchConfig();
272
266
  if (watchConfig?.onError) {
@@ -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;