@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +268 -14
  2. package/package.json +92 -110
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/build-adapter.d.ts +175 -3
  74. package/src/build/build-adapter.js +625 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -75
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  120. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +11 -7
  287. package/src/watchers/project-watcher.js +69 -75
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -5
  290. package/CHANGELOG.md +0 -94
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -276
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -271
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -133
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -511
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1255
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  447. package/src/watchers/project-watcher.ts +0 -364
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,15 +1,20 @@
1
1
  import type { Readable } from 'node:stream';
2
- import type { ApiResponseBuilder } from './adapters/shared/api-response.js';
3
- import type { EcoBuildPlugin } from './build/build-types.js';
4
- 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';
5
7
  import type { EcoPagesAppConfig } from './internal-types.js';
6
- import type { HmrStrategy } from './hmr/hmr-strategy.js';
7
- import type { ProcessedAsset } from './services/asset-processing-service/assets.types.js';
8
- 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';
9
12
  import type { InteractionEventsString as ScriptsInjectorInteractionEventsString } from '@ecopages/scripts-injector/types';
10
- export type { EcoPageComponent } from './eco/eco.types.js';
11
- import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from './services/validation/standard-schema.types.js';
12
- export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, };
13
+ export type { EcoPagesAppConfig } from './internal-types.js';
14
+ export type { EcoPageComponent } from '../eco/eco.types.js';
15
+ export type { ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
16
+ import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from '../services/validation/standard-schema.types.js';
17
+ export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, ForeignChildRuntime, };
13
18
  export type InteractionEventsString = ScriptsInjectorInteractionEventsString;
14
19
  export type DependencyLazyTrigger = {
15
20
  'on:idle': true;
@@ -82,17 +87,13 @@ export interface CacheInvalidator {
82
87
  }
83
88
  /**
84
89
  * Context interface for HMR strategies.
85
- * Provides access to watched files, specifier mappings, and build configuration.
90
+ * Provides access to watched files, registered bare-specifier mappings, and build configuration.
86
91
  */
87
92
  export interface DefaultHmrContext {
88
93
  /**
89
94
  * Map of registered entrypoints to their output URLs.
90
95
  */
91
96
  getWatchedFiles(): Map<string, string>;
92
- /**
93
- * Map of bare specifiers to vendor URLs for import resolution.
94
- */
95
- getSpecifierMap(): Map<string, string>;
96
97
  /**
97
98
  * Directory where HMR bundles are written.
98
99
  */
@@ -115,6 +116,18 @@ export interface DefaultHmrContext {
115
116
  * Used by plugins to identify page files for transformation.
116
117
  */
117
118
  getPagesDir(): string;
119
+ /**
120
+ * Build executor owned by the active app/runtime.
121
+ */
122
+ getBuildExecutor(): BuildExecutor;
123
+ /**
124
+ * Browser bundler owned by the active app/runtime.
125
+ */
126
+ getBrowserBundleService(): BrowserBundleExecutor;
127
+ /**
128
+ * Server-side module loader owned by the active app/runtime.
129
+ */
130
+ importServerModule<T = unknown>(filePath: string | URL): Promise<T>;
118
131
  }
119
132
  /**
120
133
  * Represents an event broadcast to connected clients via the ClientBridge.
@@ -155,13 +168,22 @@ export interface IClientBridge {
155
168
  */
156
169
  export interface IHmrManager {
157
170
  /**
158
- * Registers a client entrypoint to be built and watched.
171
+ * Registers an integration-owned client entrypoint to be built and watched.
172
+ *
173
+ * @remarks
174
+ * This path is strict: the owning integration must emit the expected `_hmr`
175
+ * bundle. Missing output is treated as a development pipeline failure.
159
176
  */
160
177
  registerEntrypoint(entrypointPath: string): Promise<string>;
161
178
  /**
162
- * Registers mappings from bare specifiers to vendor URLs.
179
+ * Registers a generic script asset entrypoint to be built and watched.
180
+ *
181
+ * @remarks
182
+ * This path exists for non-page script assets that are not owned by a
183
+ * framework integration. Unlike `registerEntrypoint()`, it may use the generic
184
+ * script bundling path.
163
185
  */
164
- registerSpecifierMap(map: Record<string, string>): void;
186
+ registerScriptEntrypoint(entrypointPath: string): Promise<string>;
165
187
  /**
166
188
  * Registers a custom HMR strategy.
167
189
  */
@@ -190,10 +212,6 @@ export interface IHmrManager {
190
212
  * Gets the map of watched files.
191
213
  */
192
214
  getWatchedFiles(): Map<string, string>;
193
- /**
194
- * Gets the specifier map.
195
- */
196
- getSpecifierMap(): Map<string, string>;
197
215
  /**
198
216
  * Gets the HMR dist directory.
199
217
  */
@@ -227,6 +245,21 @@ export type EcoComponentDependencies = {
227
245
  components?: EcoComponent[];
228
246
  };
229
247
  export type EcoPagesElement = string | Promise<string>;
248
+ /**
249
+ * Serializable child payloads accepted by cross-integration deferred rendering.
250
+ *
251
+ * This models the broad value shapes that EcoPages already flattens when a
252
+ * foreign component boundary serializes its children for another integration.
253
+ * It is intentionally transport-oriented rather than framework-native, so it
254
+ * can be shared across Kita, Lit, React, and Ecopages JSX authoring surfaces
255
+ * without coupling core types to any one renderer.
256
+ */
257
+ export type EcoChildren = string | Promise<string> | number | bigint | boolean | null | undefined | readonly EcoChildren[] | {
258
+ strings: readonly string[];
259
+ values?: readonly EcoChildren[];
260
+ } | {
261
+ [key: string]: EcoChildren;
262
+ };
230
263
  /**
231
264
  * Represents the input configuration for EcoPages.
232
265
  */
@@ -280,7 +313,7 @@ export type EcoComponentConfig = {
280
313
  * MyPage.config = { layout: Layout };
281
314
  * ```
282
315
  */
283
- layout?: EcoComponent;
316
+ layout?: EcoPageLayoutComponent<any>;
284
317
  dependencies?: EcoComponentDependencies;
285
318
  /**
286
319
  * Internal: Resolved lazy scripts grouped by trigger.
@@ -389,15 +422,36 @@ export interface PageHeadProps<T = EcoPagesElement> {
389
422
  dependencies?: EcoComponentDependencies;
390
423
  children?: T;
391
424
  }
425
+ /**
426
+ * Represents the props for a route layout.
427
+ */
428
+ export interface LayoutProps<T = EcoPagesElement> extends Partial<RequestPageContext> {
429
+ children: T;
430
+ }
392
431
  /**
393
432
  * Represents the props for the HTML template of a page.
394
433
  */
395
- export interface HtmlTemplateProps extends PageHeadProps {
396
- children: EcoPagesElement;
434
+ export interface HtmlTemplateProps<T = EcoPagesElement> extends PageHeadProps<T> {
435
+ children: T;
397
436
  language?: string;
398
- headContent?: EcoPagesElement;
437
+ headContent?: T;
399
438
  pageProps: Record<string, unknown>;
400
439
  }
440
+ /**
441
+ * Layout components accepted by pages.
442
+ *
443
+ * This preserves compatibility with existing `eco.component()` layouts while
444
+ * also supporting semantic `eco.layout()` declarations.
445
+ */
446
+ export type EcoPageLayoutComponent<T = EcoPagesElement> = EcoLayoutComponent<T> | EcoComponent<any, T>;
447
+ /**
448
+ * Represents a layout component created with eco.layout().
449
+ */
450
+ export type EcoLayoutComponent<T = EcoPagesElement> = EcoComponent<LayoutProps<T>, T>;
451
+ /**
452
+ * Represents an HTML shell component created with eco.html().
453
+ */
454
+ export type EcoHtmlComponent<T = EcoPagesElement> = EcoComponent<HtmlTemplateProps, T>;
401
455
  /**
402
456
  * Represents the props for the error 404 template.
403
457
  */
@@ -598,21 +652,144 @@ type StylesheetContentIntegrationPluginDependencies = {
598
652
  export type IntegrationRendererRenderOptions<C = EcoPagesElement> = RouteRendererOptions & {
599
653
  props?: Record<string, unknown>;
600
654
  metadata: PageMetadataProps;
601
- HtmlTemplate: EcoComponent<HtmlTemplateProps, C>;
655
+ HtmlTemplate: EcoHtmlComponent<C>;
602
656
  Page: EcoComponent<PageProps, C>;
603
- Layout?: EcoComponent;
657
+ Layout?: EcoPageLayoutComponent<any>;
604
658
  dependencies?: EcoComponentDependencies;
605
659
  resolvedDependencies: ProcessedAsset[];
660
+ pagePackage?: PagePackageResult;
606
661
  componentRender?: ComponentRenderResult;
607
662
  pageProps?: Record<string, unknown>;
608
663
  cacheStrategy?: CacheStrategy;
609
664
  pageLocals?: RequestLocals;
665
+ ownershipPlan?: OwnershipPlan;
610
666
  };
611
- export interface ComponentRenderInput {
667
+ /**
668
+ * Structured page asset package produced after dependency resolution.
669
+ *
670
+ * `assets` retains the full processed asset list, while the remaining fields
671
+ * split that list into the subsets used during final HTML injection and
672
+ * renderer-owned follow-up work.
673
+ */
674
+ export interface PagePackageResult {
675
+ /**
676
+ * Full processed asset list before any page-level partitioning.
677
+ */
678
+ assets: ProcessedAsset[];
679
+ /**
680
+ * Optional structured Page Browser Graph carried through route preparation.
681
+ */
682
+ pageBrowserGraph?: PageBrowserGraphResult;
683
+ /**
684
+ * Assets that should still be injected into the final HTML document.
685
+ */
686
+ htmlAssets: ProcessedAsset[];
687
+ /**
688
+ * Primary page-owned browser entry when one was identified during packaging.
689
+ */
690
+ pageScript?: ProcessedAsset;
691
+ /**
692
+ * Primary page-owned stylesheet when one was identified during packaging.
693
+ */
694
+ pageStylesheet?: ProcessedAsset;
695
+ /**
696
+ * Inline assets that remain embedded directly in the document.
697
+ */
698
+ inlineAssets: ProcessedAsset[];
699
+ /**
700
+ * Assets kept outside the main page package so callers can manage them explicitly.
701
+ */
702
+ separateAssets: ProcessedAsset[];
703
+ /**
704
+ * Browser chunks needed after initial page bootstrap, including eager lazy-entry bundles.
705
+ */
706
+ dynamicChunks: ProcessedAsset[];
707
+ }
708
+ /**
709
+ * Page-scoped browser output planned before final HTML packaging.
710
+ *
711
+ * This shape keeps page-browser ownership explicit without forcing downstream
712
+ * HTML packaging to understand how integrations discovered the graph. Entry
713
+ * assets represent the initial page bootstrap outputs, while chunk assets stay
714
+ * separate so callers can preserve lazy/shared chunk identity until the point
715
+ * they intentionally flatten for page packaging.
716
+ */
717
+ export interface PageBrowserGraphResult {
718
+ /**
719
+ * Processed assets needed for the initial page browser bootstrap.
720
+ */
721
+ entryAssets: ProcessedAsset[];
722
+ /**
723
+ * Processed browser chunks referenced after the initial page bootstrap.
724
+ */
725
+ chunkAssets: ProcessedAsset[];
726
+ }
727
+ export type PageBrowserGraphContributionContext = {
728
+ file: string;
729
+ pageModule: EcoPageFile;
730
+ };
731
+ export interface PageBrowserGraphContribution {
732
+ dependencies?: AssetDefinition[];
733
+ assets?: ProcessedAsset[];
734
+ }
735
+ export type OwnershipValidationErrorCode = 'UNKNOWN_INTEGRATION_OWNER' | 'MISSING_COMPONENT_METADATA';
736
+ export interface OwnershipValidationError {
737
+ code: OwnershipValidationErrorCode;
738
+ message: string;
739
+ componentId?: string;
740
+ componentFile?: string;
741
+ integrationName?: string;
742
+ }
743
+ export type OwnershipPlanNodeSource = 'route' | 'page' | 'layout' | 'html-template' | 'dependency';
744
+ export interface IntegrationOwnership {
745
+ integrationName: string;
746
+ componentId: string;
747
+ componentFile?: string;
748
+ isPageEntry: boolean;
749
+ isForeignToParent: boolean;
750
+ }
751
+ export interface OwnershipPlanNode {
752
+ id: string;
753
+ source: OwnershipPlanNodeSource;
754
+ ownership: IntegrationOwnership;
755
+ children: OwnershipPlanNode[];
756
+ declaredDependenciesValid: boolean;
757
+ }
758
+ export interface OwnershipPlan {
759
+ root: OwnershipPlanNode;
760
+ rendererNames: string[];
761
+ foreignEdgeCount: number;
762
+ hasValidationErrors: boolean;
763
+ validationErrors: OwnershipValidationError[];
764
+ }
765
+ export type ForeignSubtreeAttachmentPolicy = {
766
+ kind: 'none';
767
+ } | {
768
+ kind: 'first-element';
769
+ };
770
+ export interface ForeignSubtreeRenderPayload {
771
+ html: string;
772
+ assets: ProcessedAsset[];
773
+ rootTag?: string;
774
+ rootAttributes?: Record<string, string>;
775
+ attachmentPolicy: ForeignSubtreeAttachmentPolicy;
776
+ integrationName: string;
777
+ }
778
+ /**
779
+ * Shared execution-scoped context threaded through foreign-child renders.
780
+ *
781
+ * Integrations can extend this with renderer-local runtime keys, but the cache
782
+ * and optional component instance identity are shared across all renderers.
783
+ */
784
+ export interface BaseIntegrationContext {
785
+ rendererCache?: Map<string, unknown>;
786
+ componentInstanceId?: string;
787
+ }
788
+ export interface ComponentRenderInput<TIntegrationContext extends BaseIntegrationContext = BaseIntegrationContext> {
612
789
  component: EcoComponent;
613
790
  props: Record<string, unknown>;
614
- children?: string;
615
- integrationContext?: unknown;
791
+ children?: unknown;
792
+ integrationContext?: TIntegrationContext;
616
793
  }
617
794
  export interface ComponentRenderResult {
618
795
  html: string;
@@ -663,13 +840,31 @@ export interface ResponseOptions {
663
840
  * Provides methods to render eco.page views and return formatted responses.
664
841
  */
665
842
  export interface RenderContext {
843
+ /**
844
+ * Import a server-executed module through the active Ecopages module loader.
845
+ *
846
+ * This applies the runtime's cache-busting and source-transpilation rules so
847
+ * request-time lazy imports participate in development invalidation.
848
+ *
849
+ * @param filePath - Absolute filesystem path or file URL for the server module
850
+ */
851
+ importServerModule<T = unknown>(filePath: string | URL): Promise<T>;
852
+ /**
853
+ * Import a server module through the active Ecopages module loader and render
854
+ * its default-exported eco.page view.
855
+ *
856
+ * @param filePath - Absolute filesystem path or file URL for the server module
857
+ * @param props - Props to pass to the default-exported view
858
+ * @param options - Optional status code and headers
859
+ */
860
+ renderServerModule<P = Record<string, unknown>>(filePath: string | URL, props?: P, options?: RenderOptions): Promise<Response>;
666
861
  /**
667
862
  * Render an eco.page view with full layout and includes.
668
863
  * @param view - The eco.page component to render
669
864
  * @param props - Props to pass to the view
670
865
  * @param options - Optional status code and headers
671
866
  */
672
- render<P = Record<string, unknown>>(view: EcoComponent<P>, props: P, options?: RenderOptions): Promise<Response>;
867
+ render<P = Record<string, unknown>>(view: EcoComponent<P>, props?: P, options?: RenderOptions): Promise<Response>;
673
868
  /**
674
869
  * Render an eco.page view without layout (for partials/fragments).
675
870
  * @param view - The eco.page component to render
@@ -853,6 +1048,15 @@ export interface ApiHandlerContext<TRequest extends Request = Request, TServer =
853
1048
  */
854
1049
  headers?: unknown;
855
1050
  }
1051
+ /**
1052
+ * Context available to file-route page middleware.
1053
+ *
1054
+ * Page middleware can mutate locals, short-circuit the request, and use the
1055
+ * response helpers, but final document rendering stays owned by the page route
1056
+ * execution path.
1057
+ */
1058
+ export interface FileRouteMiddlewareContext<TRequest extends Request = Request, TServer = any> extends Omit<ApiHandlerContext<TRequest, TServer>, 'render' | 'renderPartial' | 'importServerModule' | 'renderServerModule'> {
1059
+ }
856
1060
  /**
857
1061
  * Next function for middleware chain.
858
1062
  * Call to continue to the next middleware or final handler.
@@ -888,6 +1092,10 @@ export type MiddlewareNext = () => Promise<Response>;
888
1092
  * ```
889
1093
  */
890
1094
  export type Middleware<TRequest extends Request = Request, TServer = any, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>> = (context: TContext, next: MiddlewareNext) => Promise<Response> | Response;
1095
+ /**
1096
+ * Middleware contract for file-based page routes.
1097
+ */
1098
+ export type FileRouteMiddleware<TRequest extends Request = Request, TServer = any, TContext extends FileRouteMiddlewareContext<TRequest, TServer> = FileRouteMiddlewareContext<TRequest, TServer>> = (context: TContext, next: MiddlewareNext) => Promise<Response> | Response;
891
1099
  /**
892
1100
  * Helper type for defining middleware with extended context.
893
1101
  * 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,11 @@
1
+ type InternalPathConfig = {
2
+ rootDir?: string;
3
+ workDir?: string;
4
+ absolutePaths?: {
5
+ workDir?: string;
6
+ distDir?: string;
7
+ };
8
+ };
9
+ export declare function resolveInternalWorkDir(appConfig: InternalPathConfig): string;
10
+ export declare function resolveInternalExecutionDir(appConfig: InternalPathConfig): string;
11
+ export {};
@@ -0,0 +1,31 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_ECOPAGES_WORK_DIR } from "../config/constants.js";
3
+ function isInsideNodeModules(directory) {
4
+ return path.normalize(directory).split(path.sep).includes("node_modules");
5
+ }
6
+ function resolveInternalWorkDir(appConfig) {
7
+ if (appConfig.absolutePaths?.workDir) {
8
+ return appConfig.absolutePaths.workDir;
9
+ }
10
+ if (appConfig.rootDir) {
11
+ return path.join(appConfig.rootDir, appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
12
+ }
13
+ if (appConfig.workDir) {
14
+ return appConfig.workDir;
15
+ }
16
+ return DEFAULT_ECOPAGES_WORK_DIR;
17
+ }
18
+ function resolveInternalExecutionDir(appConfig) {
19
+ const workDir = resolveInternalWorkDir(appConfig);
20
+ if (!isInsideNodeModules(workDir)) {
21
+ return workDir;
22
+ }
23
+ if (appConfig.rootDir) {
24
+ return path.join(appConfig.rootDir, DEFAULT_ECOPAGES_WORK_DIR);
25
+ }
26
+ return DEFAULT_ECOPAGES_WORK_DIR;
27
+ }
28
+ export {
29
+ resolveInternalExecutionDir,
30
+ resolveInternalWorkDir
31
+ };
@@ -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
  }
@@ -42,6 +42,7 @@ export declare class ProjectWatcher {
42
42
  private refreshRouterRoutesCallback;
43
43
  private hmrManager;
44
44
  private bridge;
45
+ private readonly invalidationService;
45
46
  private watcher;
46
47
  private lastHandledChange;
47
48
  private changeQueue;
@@ -52,6 +53,8 @@ export declare class ProjectWatcher {
52
53
  * @private
53
54
  */
54
55
  private uncacheModules;
56
+ private isRouteSourceFile;
57
+ private isIncludeSourceFile;
55
58
  /**
56
59
  * Handles public directory file changes by copying only the changed file.
57
60
  * @param filePath - Absolute path of the changed file
@@ -64,11 +67,12 @@ export declare class ProjectWatcher {
64
67
  private enqueueChange;
65
68
  /**
66
69
  * Handles file changes by uncaching modules, refreshing routes, and delegating appropriately.
67
- * Follows 4-rule priority:
70
+ * Follows 5-rule priority:
68
71
  * 0. Public directory match? -> copy file and reload
69
72
  * 1. additionalWatchPaths match? -> reload
70
- * 2. Processor-owned asset? -> processor already handled it via notification, skip HMR
71
- * 3. Otherwise -> HMR strategies
73
+ * 2. Include template source? -> reload after processor notifications
74
+ * 3. Processor-owned asset? -> processor already handled it via notification, skip HMR
75
+ * 4. Otherwise -> HMR strategies
72
76
  *
73
77
  * Processors that watch a file extension as a dependency (e.g. PostCSS watching
74
78
  * .tsx for Tailwind class scanning) are always notified first, but do not
@@ -108,7 +112,7 @@ export declare class ProjectWatcher {
108
112
  *
109
113
  * @param {string} path - Path of the changed directory
110
114
  */
111
- triggerRouterRefresh(path: string): void;
115
+ triggerRouterRefresh(changedPath: string): Promise<void>;
112
116
  /**
113
117
  * Handles and logs errors that occur during file watching.
114
118
  *