@ecopages/core 0.2.0-alpha.3 → 0.2.0-alpha.31

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 (436) hide show
  1. package/CHANGELOG.md +66 -66
  2. package/README.md +268 -14
  3. package/package.json +72 -108
  4. package/src/adapters/README.md +39 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +5 -12
  11. package/src/adapters/bun/create-app.js +43 -7
  12. package/src/adapters/bun/hmr-manager.d.ts +72 -26
  13. package/src/adapters/bun/hmr-manager.js +153 -81
  14. package/src/adapters/bun/index.d.ts +2 -3
  15. package/src/adapters/bun/index.js +3 -3
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +63 -38
  18. package/src/adapters/bun/server-lifecycle.d.ts +28 -17
  19. package/src/adapters/bun/server-lifecycle.js +34 -62
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +2 -6
  23. package/src/adapters/index.js +2 -8
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +79 -21
  28. package/src/adapters/node/node-hmr-manager.js +167 -114
  29. package/src/adapters/node/server-adapter.d.ts +7 -35
  30. package/src/adapters/node/server-adapter.js +55 -107
  31. package/src/adapters/node/static-content-server.d.ts +37 -1
  32. package/src/adapters/node/static-content-server.js +29 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  35. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  36. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  37. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  38. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  39. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  40. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  41. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  42. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  43. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  44. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  45. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  46. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  47. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  48. package/src/adapters/shared/hmr-html-response.js +32 -0
  49. package/src/adapters/shared/render-context.d.ts +4 -3
  50. package/src/adapters/shared/render-context.js +6 -3
  51. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  52. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  53. package/src/adapters/shared/server-adapter.d.ts +33 -12
  54. package/src/adapters/shared/server-adapter.js +208 -132
  55. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  56. package/src/adapters/shared/server-route-handler.js +7 -16
  57. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  58. package/src/adapters/shared/server-static-builder.js +65 -11
  59. package/src/build/README.md +107 -0
  60. package/src/build/build-adapter.d.ts +168 -3
  61. package/src/build/build-adapter.js +604 -16
  62. package/src/build/build-manifest.d.ts +27 -0
  63. package/src/build/build-manifest.js +30 -0
  64. package/src/build/dev-build-coordinator.d.ts +72 -0
  65. package/src/build/dev-build-coordinator.js +154 -0
  66. package/src/build/esbuild-build-adapter.d.ts +15 -6
  67. package/src/build/esbuild-build-adapter.js +189 -74
  68. package/src/build/runtime-build-executor.d.ts +14 -0
  69. package/src/build/runtime-build-executor.js +22 -0
  70. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  71. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  72. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  73. package/src/build/runtime-specifier-aliases.js +95 -0
  74. package/src/config/README.md +36 -0
  75. package/src/config/config-builder.d.ts +54 -29
  76. package/src/config/config-builder.js +255 -49
  77. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  78. package/src/{constants.js → config/constants.js} +4 -0
  79. package/src/declarations.d.ts +19 -14
  80. package/src/dev/host-runtime.d.ts +10 -0
  81. package/src/dev/host-runtime.js +24 -0
  82. package/src/dev/sc-server.d.ts +1 -1
  83. package/src/dev/sc-server.js +1 -1
  84. package/src/eco/README.md +70 -16
  85. package/src/eco/eco.browser.d.ts +2 -0
  86. package/src/eco/eco.browser.js +83 -0
  87. package/src/eco/eco.js +32 -57
  88. package/src/eco/eco.types.d.ts +14 -6
  89. package/src/eco/eco.utils.d.ts +1 -40
  90. package/src/eco/eco.utils.js +5 -35
  91. package/src/eco/global-injector-map.d.ts +3 -3
  92. package/src/eco/global-injector-map.js +2 -2
  93. package/src/eco/lazy-injector-map.d.ts +2 -2
  94. package/src/errors/index.d.ts +1 -0
  95. package/src/errors/index.js +3 -1
  96. package/src/hmr/README.md +26 -0
  97. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  98. package/src/hmr/client/hmr-runtime.js +38 -7
  99. package/src/hmr/hmr-strategy.d.ts +16 -13
  100. package/src/hmr/hmr-strategy.js +22 -7
  101. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  102. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  103. package/src/hmr/hmr.test.e2e.js +26 -33
  104. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  105. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  106. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  107. package/src/hmr/strategies/js-hmr-strategy.js +64 -74
  108. package/src/index.browser.d.ts +2 -2
  109. package/src/index.browser.js +1 -1
  110. package/src/index.d.ts +4 -3
  111. package/src/index.js +16 -5
  112. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  113. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  114. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  115. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  116. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  117. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  118. package/src/plugins/README.md +35 -0
  119. package/src/plugins/alias-resolver-plugin.js +17 -3
  120. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  121. package/src/plugins/eco-component-meta-plugin.js +27 -22
  122. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  123. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  124. package/src/plugins/integration-plugin.d.ts +142 -29
  125. package/src/plugins/integration-plugin.js +103 -14
  126. package/src/plugins/processor.d.ts +17 -2
  127. package/src/plugins/processor.js +22 -3
  128. package/src/plugins/runtime-capability.d.ts +9 -0
  129. package/src/plugins/source-transform.d.ts +46 -0
  130. package/src/plugins/source-transform.js +71 -0
  131. package/src/route-renderer/GRAPH.md +83 -325
  132. package/src/route-renderer/README.md +73 -90
  133. package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
  134. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  135. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  136. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  137. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
  138. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
  139. package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
  140. package/src/route-renderer/orchestration/integration-renderer.js +909 -0
  141. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  142. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  143. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  144. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  145. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  146. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  147. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
  148. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
  149. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  150. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  151. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
  152. package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
  153. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  154. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  155. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  156. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  157. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  158. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  159. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  160. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  161. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  162. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  163. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  164. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  165. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  166. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  167. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  168. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  169. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  170. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  171. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  172. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  173. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  174. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  175. package/src/route-renderer/route-renderer.d.ts +57 -14
  176. package/src/route-renderer/route-renderer.js +30 -18
  177. package/src/router/README.md +94 -0
  178. package/src/router/client/link-intent.d.ts +53 -0
  179. package/src/router/client/link-intent.js +34 -0
  180. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  181. package/src/router/client/link-intent.test.browser.js +43 -0
  182. package/src/router/client/navigation-coordinator.d.ts +169 -0
  183. package/src/router/client/navigation-coordinator.js +215 -0
  184. package/src/router/server/route-registry.d.ts +78 -0
  185. package/src/router/server/route-registry.js +262 -0
  186. package/src/services/README.md +28 -0
  187. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  188. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  189. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  190. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  191. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  192. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  193. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  194. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  195. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  196. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  197. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  198. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  199. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  200. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  201. package/src/services/assets/asset-processing-service/index.js +6 -0
  202. package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
  203. package/src/services/assets/asset-processing-service/page-package.js +74 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  208. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  209. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  210. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  211. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  212. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  213. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  214. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  215. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  216. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
  217. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +12 -7
  218. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  219. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  222. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  223. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  224. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  225. package/src/services/assets/browser-bundle.service.js +41 -0
  226. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  227. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  228. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  229. package/src/services/html/html-rewriter-provider.service.js +68 -0
  230. package/src/services/html/html-transformer.service.d.ts +87 -0
  231. package/src/services/html/html-transformer.service.js +216 -0
  232. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  233. package/src/services/invalidation/development-invalidation.service.js +190 -0
  234. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  235. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  236. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  237. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  238. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  239. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  240. package/src/services/module-loading/module-loading-types.js +0 -0
  241. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  242. package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
  243. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  244. package/src/services/module-loading/page-module-import.service.js +170 -0
  245. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  246. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  247. package/src/services/module-loading/source-module-support.d.ts +5 -0
  248. package/src/services/module-loading/source-module-support.js +8 -0
  249. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  250. package/src/services/runtime-state/dev-graph.service.js +162 -0
  251. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  252. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  253. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  254. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  255. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  256. package/src/static-site-generator/README.md +26 -0
  257. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  258. package/src/static-site-generator/static-site-generator.js +182 -138
  259. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  260. package/src/types/internal-types.js +0 -0
  261. package/src/{public-types.d.ts → types/public-types.d.ts} +201 -32
  262. package/src/types/public-types.js +0 -0
  263. package/src/utils/html-escaping.d.ts +7 -0
  264. package/src/utils/html-escaping.js +6 -0
  265. package/src/utils/locals-utils.d.ts +1 -1
  266. package/src/utils/parse-cli-args.d.ts +4 -1
  267. package/src/utils/parse-cli-args.js +16 -1
  268. package/src/utils/resolve-work-dir.d.ts +11 -0
  269. package/src/utils/resolve-work-dir.js +31 -0
  270. package/src/watchers/project-watcher.d.ts +40 -29
  271. package/src/watchers/project-watcher.js +126 -116
  272. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  273. package/src/watchers/project-watcher.test-helpers.js +6 -6
  274. package/src/adapters/abstract/application-adapter.ts +0 -337
  275. package/src/adapters/abstract/router-adapter.ts +0 -30
  276. package/src/adapters/abstract/server-adapter.ts +0 -79
  277. package/src/adapters/bun/client-bridge.ts +0 -62
  278. package/src/adapters/bun/create-app.ts +0 -189
  279. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  280. package/src/adapters/bun/define-api-handler.ts +0 -114
  281. package/src/adapters/bun/hmr-manager.ts +0 -296
  282. package/src/adapters/bun/index.ts +0 -3
  283. package/src/adapters/bun/server-adapter.ts +0 -492
  284. package/src/adapters/bun/server-lifecycle.ts +0 -154
  285. package/src/adapters/index.ts +0 -6
  286. package/src/adapters/node/create-app.ts +0 -179
  287. package/src/adapters/node/index.d.ts +0 -4
  288. package/src/adapters/node/index.js +0 -8
  289. package/src/adapters/node/index.ts +0 -9
  290. package/src/adapters/node/node-client-bridge.ts +0 -79
  291. package/src/adapters/node/node-hmr-manager.ts +0 -289
  292. package/src/adapters/node/server-adapter.ts +0 -561
  293. package/src/adapters/node/static-content-server.ts +0 -203
  294. package/src/adapters/shared/api-response.ts +0 -104
  295. package/src/adapters/shared/application-adapter.ts +0 -199
  296. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  297. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  298. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  299. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  300. package/src/adapters/shared/render-context.ts +0 -105
  301. package/src/adapters/shared/server-adapter.ts +0 -442
  302. package/src/adapters/shared/server-route-handler.ts +0 -166
  303. package/src/adapters/shared/server-static-builder.ts +0 -82
  304. package/src/build/build-adapter.ts +0 -132
  305. package/src/build/build-types.ts +0 -83
  306. package/src/build/esbuild-build-adapter.ts +0 -510
  307. package/src/config/config-builder.ts +0 -474
  308. package/src/constants.ts +0 -39
  309. package/src/create-app.ts +0 -87
  310. package/src/define-api-handler.js +0 -15
  311. package/src/define-api-handler.ts +0 -66
  312. package/src/dev/sc-server.ts +0 -143
  313. package/src/eco/component-render-context.d.ts +0 -105
  314. package/src/eco/component-render-context.js +0 -77
  315. package/src/eco/component-render-context.ts +0 -202
  316. package/src/eco/eco.ts +0 -221
  317. package/src/eco/eco.types.ts +0 -202
  318. package/src/eco/eco.utils.ts +0 -89
  319. package/src/eco/global-injector-map.ts +0 -112
  320. package/src/eco/lazy-injector-map.ts +0 -120
  321. package/src/eco/module-dependencies.ts +0 -75
  322. package/src/errors/http-error.ts +0 -72
  323. package/src/errors/index.ts +0 -2
  324. package/src/errors/locals-access-error.ts +0 -7
  325. package/src/global/app-logger.ts +0 -4
  326. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  327. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  328. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  329. package/src/hmr/client/hmr-runtime.ts +0 -121
  330. package/src/hmr/hmr-strategy.ts +0 -172
  331. package/src/hmr/hmr.test.e2e.ts +0 -75
  332. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  333. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  334. package/src/index.browser.ts +0 -3
  335. package/src/index.ts +0 -5
  336. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  337. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  338. package/src/internal-types.ts +0 -212
  339. package/src/plugins/alias-resolver-plugin.ts +0 -45
  340. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  341. package/src/plugins/integration-plugin.ts +0 -184
  342. package/src/plugins/processor.ts +0 -220
  343. package/src/public-types.ts +0 -1260
  344. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  345. package/src/route-renderer/component-graph-executor.js +0 -31
  346. package/src/route-renderer/component-graph-executor.ts +0 -84
  347. package/src/route-renderer/component-graph.d.ts +0 -42
  348. package/src/route-renderer/component-graph.js +0 -72
  349. package/src/route-renderer/component-graph.ts +0 -159
  350. package/src/route-renderer/component-marker.d.ts +0 -52
  351. package/src/route-renderer/component-marker.js +0 -46
  352. package/src/route-renderer/component-marker.ts +0 -117
  353. package/src/route-renderer/dependency-resolver.js +0 -428
  354. package/src/route-renderer/dependency-resolver.ts +0 -596
  355. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  356. package/src/route-renderer/html-post-processing.service.js +0 -86
  357. package/src/route-renderer/html-post-processing.service.ts +0 -103
  358. package/src/route-renderer/integration-renderer.d.ts +0 -339
  359. package/src/route-renderer/integration-renderer.js +0 -526
  360. package/src/route-renderer/integration-renderer.ts +0 -696
  361. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  362. package/src/route-renderer/marker-graph-resolver.js +0 -93
  363. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  364. package/src/route-renderer/page-module-loader.d.ts +0 -61
  365. package/src/route-renderer/page-module-loader.ts +0 -153
  366. package/src/route-renderer/render-execution.service.d.ts +0 -69
  367. package/src/route-renderer/render-execution.service.js +0 -91
  368. package/src/route-renderer/render-execution.service.ts +0 -158
  369. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  370. package/src/route-renderer/render-preparation.service.js +0 -243
  371. package/src/route-renderer/render-preparation.service.ts +0 -358
  372. package/src/route-renderer/route-renderer.ts +0 -80
  373. package/src/router/fs-router-scanner.d.ts +0 -41
  374. package/src/router/fs-router-scanner.js +0 -155
  375. package/src/router/fs-router-scanner.ts +0 -217
  376. package/src/router/fs-router.d.ts +0 -26
  377. package/src/router/fs-router.js +0 -100
  378. package/src/router/fs-router.ts +0 -122
  379. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  380. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  381. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  382. package/src/services/asset-processing-service/assets.types.ts +0 -112
  383. package/src/services/asset-processing-service/index.d.ts +0 -3
  384. package/src/services/asset-processing-service/index.js +0 -3
  385. package/src/services/asset-processing-service/index.ts +0 -3
  386. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  387. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  388. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  389. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  390. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  391. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  392. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  393. package/src/services/asset-processing-service/processors/index.js +0 -5
  394. package/src/services/asset-processing-service/processors/index.ts +0 -5
  395. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  396. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  397. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  398. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  399. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  400. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  401. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  402. package/src/services/cache/cache.types.ts +0 -126
  403. package/src/services/cache/index.ts +0 -18
  404. package/src/services/cache/memory-cache-store.ts +0 -130
  405. package/src/services/cache/page-cache-service.ts +0 -202
  406. package/src/services/html-transformer.service.d.ts +0 -50
  407. package/src/services/html-transformer.service.js +0 -163
  408. package/src/services/html-transformer.service.ts +0 -217
  409. package/src/services/page-module-import.service.d.ts +0 -37
  410. package/src/services/page-module-import.service.js +0 -88
  411. package/src/services/page-module-import.service.ts +0 -129
  412. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  413. package/src/services/schema-validation-service.ts +0 -204
  414. package/src/services/validation/standard-schema.types.ts +0 -68
  415. package/src/static-site-generator/static-site-generator.ts +0 -359
  416. package/src/utils/css.d.ts +0 -1
  417. package/src/utils/css.js +0 -7
  418. package/src/utils/css.ts +0 -5
  419. package/src/utils/deep-merge.ts +0 -47
  420. package/src/utils/hash.ts +0 -5
  421. package/src/utils/html.ts +0 -1
  422. package/src/utils/invariant.ts +0 -15
  423. package/src/utils/locals-utils.ts +0 -37
  424. package/src/utils/parse-cli-args.ts +0 -83
  425. package/src/utils/path-utils.module.ts +0 -14
  426. package/src/utils/runtime.ts +0 -44
  427. package/src/utils/server-utils.module.ts +0 -67
  428. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  429. package/src/watchers/project-watcher.ts +0 -344
  430. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  431. /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
  432. /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
  433. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  434. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  435. /package/src/{public-types.js → services/module-loading/app-module-loader.service.js} +0 -0
  436. /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 { 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): 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,6 +422,12 @@ 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
  */
@@ -402,6 +437,21 @@ export interface HtmlTemplateProps extends PageHeadProps {
402
437
  headContent?: EcoPagesElement;
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,127 @@ 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
+ * Assets that should still be injected into the final HTML document.
681
+ */
682
+ htmlAssets: ProcessedAsset[];
683
+ /**
684
+ * Primary page-owned browser entry when one was identified during packaging.
685
+ */
686
+ pageScript?: ProcessedAsset;
687
+ /**
688
+ * Primary page-owned stylesheet when one was identified during packaging.
689
+ */
690
+ pageStylesheet?: ProcessedAsset;
691
+ /**
692
+ * Inline assets that remain embedded directly in the document.
693
+ */
694
+ inlineAssets: ProcessedAsset[];
695
+ /**
696
+ * Assets kept outside the main page package so callers can manage them explicitly.
697
+ */
698
+ separateAssets: ProcessedAsset[];
699
+ /**
700
+ * Browser chunks needed after initial page bootstrap, including eager lazy-entry bundles.
701
+ */
702
+ dynamicChunks: ProcessedAsset[];
703
+ }
704
+ /**
705
+ * Page-scoped browser output planned before final HTML packaging.
706
+ *
707
+ * The initial seam keeps the graph payload intentionally small: integrations
708
+ * return the processed assets that belong to the Page browser graph, while the
709
+ * surrounding route pipeline remains free to evolve toward richer entry/lazy/
710
+ * shared chunk structure later.
711
+ */
712
+ export interface PageBrowserGraphResult {
713
+ /**
714
+ * Processed assets owned by the current Page browser graph.
715
+ */
716
+ assets: ProcessedAsset[];
717
+ }
718
+ export type OwnershipValidationErrorCode = 'UNKNOWN_INTEGRATION_OWNER' | 'MISSING_COMPONENT_METADATA';
719
+ export interface OwnershipValidationError {
720
+ code: OwnershipValidationErrorCode;
721
+ message: string;
722
+ componentId?: string;
723
+ componentFile?: string;
724
+ integrationName?: string;
725
+ }
726
+ export type OwnershipPlanNodeSource = 'route' | 'page' | 'layout' | 'html-template' | 'dependency';
727
+ export interface IntegrationOwnership {
728
+ integrationName: string;
729
+ componentId: string;
730
+ componentFile?: string;
731
+ isPageEntry: boolean;
732
+ isForeignToParent: boolean;
733
+ }
734
+ export interface OwnershipPlanNode {
735
+ id: string;
736
+ source: OwnershipPlanNodeSource;
737
+ ownership: IntegrationOwnership;
738
+ children: OwnershipPlanNode[];
739
+ declaredDependenciesValid: boolean;
740
+ }
741
+ export interface OwnershipPlan {
742
+ root: OwnershipPlanNode;
743
+ rendererNames: string[];
744
+ foreignEdgeCount: number;
745
+ hasValidationErrors: boolean;
746
+ validationErrors: OwnershipValidationError[];
747
+ }
748
+ export type ForeignSubtreeAttachmentPolicy = {
749
+ kind: 'none';
750
+ } | {
751
+ kind: 'first-element';
752
+ };
753
+ export interface ForeignSubtreeRenderPayload {
754
+ html: string;
755
+ assets: ProcessedAsset[];
756
+ rootTag?: string;
757
+ rootAttributes?: Record<string, string>;
758
+ attachmentPolicy: ForeignSubtreeAttachmentPolicy;
759
+ integrationName: string;
760
+ }
761
+ /**
762
+ * Shared execution-scoped context threaded through foreign-child renders.
763
+ *
764
+ * Integrations can extend this with renderer-local runtime keys, but the cache
765
+ * and optional component instance identity are shared across all renderers.
766
+ */
767
+ export interface BaseIntegrationContext {
768
+ rendererCache?: Map<string, unknown>;
769
+ componentInstanceId?: string;
770
+ }
771
+ export interface ComponentRenderInput<TIntegrationContext extends BaseIntegrationContext = BaseIntegrationContext> {
616
772
  component: EcoComponent;
617
773
  props: Record<string, unknown>;
618
- children?: string;
619
- integrationContext?: unknown;
774
+ children?: unknown;
775
+ integrationContext?: TIntegrationContext;
620
776
  }
621
777
  export interface ComponentRenderResult {
622
778
  html: string;
@@ -673,7 +829,7 @@ export interface RenderContext {
673
829
  * @param props - Props to pass to the view
674
830
  * @param options - Optional status code and headers
675
831
  */
676
- render<P = Record<string, unknown>>(view: EcoComponent<P>, props: P, options?: RenderOptions): Promise<Response>;
832
+ render<P = Record<string, unknown>>(view: EcoComponent<P>, props?: P, options?: RenderOptions): Promise<Response>;
677
833
  /**
678
834
  * Render an eco.page view without layout (for partials/fragments).
679
835
  * @param view - The eco.page component to render
@@ -857,6 +1013,15 @@ export interface ApiHandlerContext<TRequest extends Request = Request, TServer =
857
1013
  */
858
1014
  headers?: unknown;
859
1015
  }
1016
+ /**
1017
+ * Context available to file-route page middleware.
1018
+ *
1019
+ * Page middleware can mutate locals, short-circuit the request, and use the
1020
+ * response helpers, but final document rendering stays owned by the page route
1021
+ * execution path.
1022
+ */
1023
+ export interface FileRouteMiddlewareContext<TRequest extends Request = Request, TServer = any> extends Omit<ApiHandlerContext<TRequest, TServer>, 'render' | 'renderPartial'> {
1024
+ }
860
1025
  /**
861
1026
  * Next function for middleware chain.
862
1027
  * Call to continue to the next middleware or final handler.
@@ -892,6 +1057,10 @@ export type MiddlewareNext = () => Promise<Response>;
892
1057
  * ```
893
1058
  */
894
1059
  export type Middleware<TRequest extends Request = Request, TServer = any, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>> = (context: TContext, next: MiddlewareNext) => Promise<Response> | Response;
1060
+ /**
1061
+ * Middleware contract for file-based page routes.
1062
+ */
1063
+ 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
1064
  /**
896
1065
  * Helper type for defining middleware with extended context.
897
1066
  * 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.