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

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 -68
  12. package/src/adapters/bun/hmr-manager.js +30 -212
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -49
  31. package/src/adapters/node/node-hmr-manager.js +31 -219
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +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 +176 -3
  74. package/src/build/build-adapter.js +619 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -74
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  120. package/src/hmr/strategies/js-hmr-strategy.js +60 -75
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +986 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +134 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +442 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +297 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -35
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +40 -29
  287. package/src/watchers/project-watcher.js +126 -116
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -6
  290. package/CHANGELOG.md +0 -91
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -296
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -289
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -132
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -510
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1260
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  447. package/src/watchers/project-watcher.ts +0 -344
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -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
  */
@@ -178,10 +200,6 @@ export interface IHmrManager {
178
200
  * Returns whether HMR is enabled.
179
201
  */
180
202
  isEnabled(): boolean;
181
- /**
182
- * Returns true when a changed file matches a non-fallback HMR strategy.
183
- */
184
- canHandleFileChange(path: string): boolean;
185
203
  /**
186
204
  * Broadcasts an HMR event to connected clients.
187
205
  */
@@ -194,10 +212,6 @@ export interface IHmrManager {
194
212
  * Gets the map of watched files.
195
213
  */
196
214
  getWatchedFiles(): Map<string, string>;
197
- /**
198
- * Gets the specifier map.
199
- */
200
- getSpecifierMap(): Map<string, string>;
201
215
  /**
202
216
  * Gets the HMR dist directory.
203
217
  */
@@ -231,6 +245,21 @@ export type EcoComponentDependencies = {
231
245
  components?: EcoComponent[];
232
246
  };
233
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
+ };
234
263
  /**
235
264
  * Represents the input configuration for EcoPages.
236
265
  */
@@ -284,7 +313,7 @@ export type EcoComponentConfig = {
284
313
  * MyPage.config = { layout: Layout };
285
314
  * ```
286
315
  */
287
- layout?: EcoComponent;
316
+ layout?: EcoPageLayoutComponent<any>;
288
317
  dependencies?: EcoComponentDependencies;
289
318
  /**
290
319
  * Internal: Resolved lazy scripts grouped by trigger.
@@ -393,15 +422,36 @@ export interface PageHeadProps<T = EcoPagesElement> {
393
422
  dependencies?: EcoComponentDependencies;
394
423
  children?: T;
395
424
  }
425
+ /**
426
+ * Represents the props for a route layout.
427
+ */
428
+ export interface LayoutProps<T = EcoPagesElement> extends Partial<RequestPageContext> {
429
+ children: T;
430
+ }
396
431
  /**
397
432
  * Represents the props for the HTML template of a page.
398
433
  */
399
- export interface HtmlTemplateProps extends PageHeadProps {
400
- children: EcoPagesElement;
434
+ export interface HtmlTemplateProps<T = EcoPagesElement> extends PageHeadProps<T> {
435
+ children: T;
401
436
  language?: string;
402
- headContent?: EcoPagesElement;
437
+ headContent?: T;
403
438
  pageProps: Record<string, unknown>;
404
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>;
405
455
  /**
406
456
  * Represents the props for the error 404 template.
407
457
  */
@@ -602,21 +652,144 @@ type StylesheetContentIntegrationPluginDependencies = {
602
652
  export type IntegrationRendererRenderOptions<C = EcoPagesElement> = RouteRendererOptions & {
603
653
  props?: Record<string, unknown>;
604
654
  metadata: PageMetadataProps;
605
- HtmlTemplate: EcoComponent<HtmlTemplateProps, C>;
655
+ HtmlTemplate: EcoHtmlComponent<C>;
606
656
  Page: EcoComponent<PageProps, C>;
607
- Layout?: EcoComponent;
657
+ Layout?: EcoPageLayoutComponent<any>;
608
658
  dependencies?: EcoComponentDependencies;
609
659
  resolvedDependencies: ProcessedAsset[];
660
+ pagePackage?: PagePackageResult;
610
661
  componentRender?: ComponentRenderResult;
611
662
  pageProps?: Record<string, unknown>;
612
663
  cacheStrategy?: CacheStrategy;
613
664
  pageLocals?: RequestLocals;
665
+ ownershipPlan?: OwnershipPlan;
614
666
  };
615
- 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> {
616
789
  component: EcoComponent;
617
790
  props: Record<string, unknown>;
618
- children?: string;
619
- integrationContext?: unknown;
791
+ children?: unknown;
792
+ integrationContext?: TIntegrationContext;
620
793
  }
621
794
  export interface ComponentRenderResult {
622
795
  html: string;
@@ -667,13 +840,31 @@ export interface ResponseOptions {
667
840
  * Provides methods to render eco.page views and return formatted responses.
668
841
  */
669
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>;
670
861
  /**
671
862
  * Render an eco.page view with full layout and includes.
672
863
  * @param view - The eco.page component to render
673
864
  * @param props - Props to pass to the view
674
865
  * @param options - Optional status code and headers
675
866
  */
676
- 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>;
677
868
  /**
678
869
  * Render an eco.page view without layout (for partials/fragments).
679
870
  * @param view - The eco.page component to render
@@ -857,6 +1048,15 @@ export interface ApiHandlerContext<TRequest extends Request = Request, TServer =
857
1048
  */
858
1049
  headers?: unknown;
859
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
+ }
860
1060
  /**
861
1061
  * Next function for middleware chain.
862
1062
  * Call to continue to the next middleware or final handler.
@@ -892,6 +1092,10 @@ export type MiddlewareNext = () => Promise<Response>;
892
1092
  * ```
893
1093
  */
894
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;
895
1099
  /**
896
1100
  * Helper type for defining middleware with extended context.
897
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,8 +42,10 @@ 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;
48
+ private changeQueue;
47
49
  constructor({ config, refreshRouterRoutesCallback, hmrManager, bridge }: ProjectWatcherConfig);
48
50
  /**
49
51
  * Uncaches modules in the source directory to ensure fresh imports.
@@ -51,24 +53,45 @@ export declare class ProjectWatcher {
51
53
  * @private
52
54
  */
53
55
  private uncacheModules;
56
+ private isRouteSourceFile;
57
+ private isIncludeSourceFile;
54
58
  /**
55
59
  * Handles public directory file changes by copying only the changed file.
56
60
  * @param filePath - Absolute path of the changed file
57
61
  */
58
62
  private handlePublicDirFileChange;
63
+ /**
64
+ * Serializes file change handling so that concurrent chokidar events are
65
+ * processed one at a time, preventing overlapping builds and race conditions.
66
+ */
67
+ private enqueueChange;
59
68
  /**
60
69
  * Handles file changes by uncaching modules, refreshing routes, and delegating appropriately.
61
- * Follows 4-rule priority:
62
- * 0. Public directory match? copy file and reload
63
- * 1. additionalWatchPaths match? reload
64
- * 2. Processor extension match? processor handles (skip HMR)
65
- * 3. Otherwise HMR strategies
70
+ * Follows 5-rule priority:
71
+ * 0. Public directory match? -> copy file and reload
72
+ * 1. additionalWatchPaths match? -> reload
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
76
+ *
77
+ * Processors that watch a file extension as a dependency (e.g. PostCSS watching
78
+ * .tsx for Tailwind class scanning) are always notified first, but do not
79
+ * prevent the file from flowing through the normal HMR strategy pipeline.
66
80
  *
67
81
  * Duplicate identical watcher events for the same file are coalesced within a
68
82
  * short window before any of the priority rules run.
69
83
  * @param rawPath - Path of the changed file
84
+ * @param event - The type of file system event
70
85
  */
71
86
  private handleFileChange;
87
+ /**
88
+ * Notifies all processors whose watch config matches the given file extension.
89
+ * This is called before checking processor ownership so that dependency-only
90
+ * processors (e.g. PostCSS watching .tsx for class scanning) receive their
91
+ * notifications regardless of whether they own the file.
92
+ */
93
+ private notifyProcessors;
94
+ private getProcessorHandler;
72
95
  /**
73
96
  * Checks if a file is in the public directory.
74
97
  */
@@ -77,14 +100,10 @@ export declare class ProjectWatcher {
77
100
  * Checks if file path matches any additionalWatchPaths patterns.
78
101
  */
79
102
  private matchesAdditionalWatchPaths;
80
- /**
81
- * Checks whether a file is watched by any processor, even if that processor
82
- * does not own the file as a primary asset.
83
- */
84
- private isWatchedByProcessor;
85
103
  /**
86
104
  * Checks if a file is handled by a processor.
87
- * Processors that declare extensions own those file types.
105
+ * Processors that declare asset capabilities own those file types.
106
+ * Processors without capabilities fall back to checking watch extensions.
88
107
  */
89
108
  private isHandledByProcessor;
90
109
  /**
@@ -93,30 +112,22 @@ export declare class ProjectWatcher {
93
112
  *
94
113
  * @param {string} path - Path of the changed directory
95
114
  */
96
- triggerRouterRefresh(path: string): void;
115
+ triggerRouterRefresh(changedPath: string): Promise<void>;
97
116
  /**
98
117
  * Handles and logs errors that occur during file watching.
99
118
  *
100
119
  * @param {unknown} error - The error to handle
101
120
  */
102
121
  handleError(error: unknown): void;
103
- /**
104
- * Processes file changes for specific file extensions.
105
- * Used by processors to handle their specific file types.
106
- *
107
- * @private
108
- * @param {string} path - Path of the changed file
109
- * @param {string[]} extensions - File extensions to process
110
- * @param {(ctx: ProcessorWatchContext) => void} handler - Handler function for the file change
111
- */
112
- private shouldProcess;
113
122
  /**
114
123
  * Creates and configures the file system watcher.
115
124
  * This sets up:
116
- * 1. Processor-specific file watching
117
- * 2. Page file watching
118
- * 3. Directory watching
119
- * 4. Error handling
125
+ * 1. Page file watching
126
+ * 2. Directory watching
127
+ * 3. Error handling
128
+ *
129
+ * Processor notifications are dispatched inside handleFileChange, ensuring
130
+ * a single unified event pipeline with no parallel chokidar bindings.
120
131
  *
121
132
  * Uses chokidar's built-in debouncing through `awaitWriteFinish` to handle
122
133
  * rapid file changes efficiently.