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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -0,0 +1,11 @@
1
+ export type EcopagesVirtualImport = {
2
+ from: string;
3
+ imports: string[] | undefined;
4
+ };
5
+ /**
6
+ * Extracts runtime `ecopages:` virtual-module imports from a component source file.
7
+ *
8
+ * Type-only imports are skipped and bare namespace imports are represented by an
9
+ * `undefined` import list so downstream module generation can preserve that shape.
10
+ */
11
+ export declare function extractEcopagesVirtualImports(file: string): EcopagesVirtualImport[];
@@ -0,0 +1,57 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { parseSync } from "oxc-parser";
3
+ function extractEcopagesVirtualImports(file) {
4
+ let source;
5
+ try {
6
+ source = readFileSync(file, "utf-8");
7
+ } catch {
8
+ return [];
9
+ }
10
+ let result;
11
+ try {
12
+ result = parseSync(file, source, { sourceType: "module" });
13
+ } catch {
14
+ return [];
15
+ }
16
+ const found = /* @__PURE__ */ new Map();
17
+ for (const node of result.program.body ?? []) {
18
+ if (node.type !== "ImportDeclaration") continue;
19
+ if (node.importKind === "type") continue;
20
+ const specifier = node.source?.value ?? "";
21
+ if (!specifier.startsWith("ecopages:")) continue;
22
+ if (found.get(specifier) === null) {
23
+ continue;
24
+ }
25
+ const namedImports = [];
26
+ for (const spec of node.specifiers ?? []) {
27
+ if (spec.type === "ImportSpecifier") {
28
+ let importedName = spec.local?.name;
29
+ if (spec.imported?.type === "Identifier") {
30
+ importedName = spec.imported.name;
31
+ } else if (spec.imported?.type === "Literal") {
32
+ importedName = spec.imported.value;
33
+ }
34
+ namedImports.push(importedName);
35
+ }
36
+ }
37
+ if (namedImports.length === 0) {
38
+ found.set(specifier, null);
39
+ continue;
40
+ }
41
+ const existing = found.get(specifier);
42
+ if (!existing) {
43
+ found.set(specifier, new Set(namedImports));
44
+ continue;
45
+ }
46
+ for (const imported of namedImports) {
47
+ existing.add(imported);
48
+ }
49
+ }
50
+ return Array.from(found.entries()).map(([from, importsSet]) => ({
51
+ from,
52
+ imports: importsSet ? Array.from(importsSet) : void 0
53
+ }));
54
+ }
55
+ export {
56
+ extractEcopagesVirtualImports
57
+ };
@@ -0,0 +1,45 @@
1
+ import type { DependencyLazyTrigger, EcoComponentScriptEntry } from '../../types/public-types.js';
2
+ import type { AssetDefinition } from '../../services/assets/asset-processing-service/index.js';
3
+ type LazyScriptRef = {
4
+ lazyKey: string;
5
+ fallbackUrl?: string;
6
+ };
7
+ /**
8
+ * Lazy scripts grouped by one trigger declaration.
9
+ */
10
+ export type LazyGroup = {
11
+ lazy: DependencyLazyTrigger;
12
+ scripts: LazyScriptRef[];
13
+ };
14
+ /**
15
+ * Callback used to record one normalized lazy-script registration.
16
+ */
17
+ export type RegisterLazyScript = (input: {
18
+ lazy: DependencyLazyTrigger;
19
+ lazyKey: string;
20
+ fallbackUrl?: string;
21
+ }) => void;
22
+ type CollectLazyEntriesOptions = {
23
+ scriptEntries: Array<string | EcoComponentScriptEntry>;
24
+ componentFile: string;
25
+ componentDir: string;
26
+ integrationName: string;
27
+ dependencies: AssetDefinition[];
28
+ lazyDependencyKeys: Set<string>;
29
+ registerLazyScript: RegisterLazyScript;
30
+ resolveDependencyPath: (componentDir: string, pathUrl: string) => string;
31
+ resolveLazyScripts: (componentDir: string, scripts: string[]) => string;
32
+ createModuleScriptAttributes: (attributes?: Record<string, string>) => Record<string, string>;
33
+ createEcopagesJsxLazyEntryName: (integrationName: string, key: string) => string;
34
+ pushUniqueDependency: (keys: Set<string>, key: string, dependencies: AssetDefinition[], dependency: AssetDefinition) => boolean;
35
+ getLazyScriptMissingSrcMessage: () => string;
36
+ isEcopagesJsxIntegration: (integrationName: string) => boolean;
37
+ };
38
+ /**
39
+ * Collects lazy script dependency entries and emits their hidden bundle inputs.
40
+ *
41
+ * This helper also reports the trigger-to-script relationship back to the caller so
42
+ * later stages can build the lazy-trigger manifest without reparsing dependency config.
43
+ */
44
+ export declare function collectLazyScriptEntries(options: CollectLazyEntriesOptions): void;
45
+ export {};
@@ -0,0 +1,105 @@
1
+ import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
2
+ import { rapidhash } from "../../utils/hash.js";
3
+ import { getLazyTriggerKey } from "./lazy-trigger-planning.js";
4
+ function isDependencyEntryObject(entry) {
5
+ return typeof entry === "object" && entry !== null;
6
+ }
7
+ function getDependencyEntrySrcOrThrow(entry, errorMessage) {
8
+ if (!entry.src) {
9
+ throw new Error(errorMessage);
10
+ }
11
+ return entry.src;
12
+ }
13
+ function collectLazyScriptEntries(options) {
14
+ const {
15
+ scriptEntries,
16
+ componentFile,
17
+ componentDir,
18
+ integrationName,
19
+ dependencies,
20
+ lazyDependencyKeys,
21
+ registerLazyScript,
22
+ resolveDependencyPath,
23
+ resolveLazyScripts,
24
+ createModuleScriptAttributes,
25
+ createEcopagesJsxLazyEntryName,
26
+ pushUniqueDependency,
27
+ getLazyScriptMissingSrcMessage,
28
+ isEcopagesJsxIntegration
29
+ } = options;
30
+ for (const [index, scriptEntry] of scriptEntries.entries()) {
31
+ if (!isDependencyEntryObject(scriptEntry) || !scriptEntry.lazy) {
32
+ continue;
33
+ }
34
+ const lazy = scriptEntry.lazy;
35
+ const content = scriptEntry.content;
36
+ const src = scriptEntry.src;
37
+ const attributes = scriptEntry.attributes;
38
+ if (content) {
39
+ const lazyKey2 = `lazy:${rapidhash(`${componentFile}:entry:${index}:${content}`).toString(16)}`;
40
+ const depKey2 = `lazy:entry:content:${getLazyTriggerKey(lazy)}:${content}:${JSON.stringify(attributes ?? {})}`;
41
+ pushUniqueDependency(
42
+ lazyDependencyKeys,
43
+ depKey2,
44
+ dependencies,
45
+ AssetFactory.createContentScript({
46
+ position: "head",
47
+ content,
48
+ excludeFromHtml: true,
49
+ attributes: {
50
+ ...createModuleScriptAttributes(attributes),
51
+ "data-eco-lazy-key": lazyKey2
52
+ }
53
+ })
54
+ );
55
+ registerLazyScript({
56
+ lazy,
57
+ lazyKey: lazyKey2
58
+ });
59
+ continue;
60
+ }
61
+ const script = src ?? getDependencyEntrySrcOrThrow(scriptEntry, getLazyScriptMissingSrcMessage());
62
+ const resolvedPath = resolveDependencyPath(componentDir, script);
63
+ const fallbackUrl = resolveLazyScripts(componentDir, [script]).split(",")[0] ?? "";
64
+ const lazyKey = `lazy:${rapidhash(`${resolvedPath}:${getLazyTriggerKey(lazy)}`).toString(16)}`;
65
+ const lazyEntryName = createEcopagesJsxLazyEntryName(
66
+ integrationName,
67
+ `${resolvedPath}:${getLazyTriggerKey(lazy)}`
68
+ );
69
+ const depKey = `lazy:entry:file:${getLazyTriggerKey(lazy)}:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
70
+ pushUniqueDependency(
71
+ lazyDependencyKeys,
72
+ depKey,
73
+ dependencies,
74
+ isEcopagesJsxIntegration(integrationName) ? AssetFactory.createContentScript({
75
+ name: lazyEntryName,
76
+ position: "head",
77
+ content: `import ${JSON.stringify(resolvedPath)};`,
78
+ excludeFromHtml: true,
79
+ bundleOptions: {
80
+ splitting: false
81
+ },
82
+ attributes: {
83
+ ...createModuleScriptAttributes(attributes),
84
+ "data-eco-lazy-key": lazyKey
85
+ }
86
+ }) : AssetFactory.createFileScript({
87
+ filepath: resolvedPath,
88
+ position: "head",
89
+ excludeFromHtml: true,
90
+ attributes: {
91
+ ...createModuleScriptAttributes(attributes),
92
+ "data-eco-lazy-key": lazyKey
93
+ }
94
+ })
95
+ );
96
+ registerLazyScript({
97
+ lazy,
98
+ lazyKey,
99
+ fallbackUrl
100
+ });
101
+ }
102
+ }
103
+ export {
104
+ collectLazyScriptEntries
105
+ };
@@ -0,0 +1,19 @@
1
+ import type { DependencyLazyTrigger, EcoComponent, ResolvedLazyTrigger } from '../../types/public-types.js';
2
+ /**
3
+ * Lazy scripts already normalized onto one trigger and concrete script URL set.
4
+ */
5
+ export type ResolvedLazyGroup = {
6
+ lazy: DependencyLazyTrigger;
7
+ scripts: string[];
8
+ };
9
+ /**
10
+ * Creates a stable grouping key for a lazy trigger declaration.
11
+ */
12
+ export declare function getLazyTriggerKey(lazy: DependencyLazyTrigger): string;
13
+ /**
14
+ * Derives the public lazy-trigger manifest attached to a component config.
15
+ *
16
+ * The generated `triggerId` is stable for the same component file and set of
17
+ * resolved script URLs, independent of declaration order.
18
+ */
19
+ export declare function buildResolvedLazyTriggers(config: NonNullable<EcoComponent['config']>, groups: ResolvedLazyGroup[]): ResolvedLazyTrigger[];
@@ -0,0 +1,40 @@
1
+ import { rapidhash } from "../../utils/hash.js";
2
+ function getLazyTriggerKey(lazy) {
3
+ if ("on:idle" in lazy) {
4
+ return "on:idle";
5
+ }
6
+ if ("on:interaction" in lazy) {
7
+ return `on:interaction:${lazy["on:interaction"]}`;
8
+ }
9
+ if ("on:visible" in lazy) {
10
+ const value = lazy["on:visible"];
11
+ return `on:visible:${value === true ? "true" : value}`;
12
+ }
13
+ return JSON.stringify(lazy);
14
+ }
15
+ function buildResolvedLazyTriggers(config, groups) {
16
+ if (groups.length === 0) return [];
17
+ const componentFile = config.__eco?.file ?? "";
18
+ const sortedUrls = groups.flatMap((group) => group.scripts).sort().join(",");
19
+ const triggerId = `eco-trigger-${rapidhash(`${componentFile}:${sortedUrls}`).toString(16)}`;
20
+ const rules = groups.map((group) => {
21
+ const { scripts, lazy } = group;
22
+ if ("on:idle" in lazy) {
23
+ return { "on:idle": { scripts } };
24
+ }
25
+ if ("on:interaction" in lazy) {
26
+ return { "on:interaction": { value: lazy["on:interaction"], scripts } };
27
+ }
28
+ if ("on:visible" in lazy) {
29
+ const visibleSelector = lazy["on:visible"];
30
+ if (visibleSelector === true) return { "on:visible": { scripts } };
31
+ return { "on:visible": { value: String(visibleSelector), scripts } };
32
+ }
33
+ throw new Error(`Unknown lazy trigger kind: ${JSON.stringify(lazy)}`);
34
+ });
35
+ return [{ triggerId, rules }];
36
+ }
37
+ export {
38
+ buildResolvedLazyTriggers,
39
+ getLazyTriggerKey
40
+ };
@@ -0,0 +1,5 @@
1
+ import type { EcopagesVirtualImport } from './ecopages-virtual-imports.js';
2
+ /**
3
+ * Combines explicit config module declarations with auto-detected `ecopages:` imports.
4
+ */
5
+ export declare function collectModuleDeclarations(modulesMap: Map<string, Set<string> | null>, declaredModules: unknown, autoVirtualImports: EcopagesVirtualImport[]): void;
@@ -0,0 +1,33 @@
1
+ import { normalizeModuleDeclarations } from "../../eco/module-dependencies.js";
2
+ function getDeclaredModules(value) {
3
+ if (!Array.isArray(value)) {
4
+ return void 0;
5
+ }
6
+ return value.every((entry) => typeof entry === "string") ? value : void 0;
7
+ }
8
+ function mergeModuleDeclaration(modulesMap, declaration) {
9
+ const existing = modulesMap.get(declaration.from);
10
+ if (!declaration.imports || declaration.imports.length === 0) {
11
+ modulesMap.set(declaration.from, null);
12
+ return;
13
+ }
14
+ if (existing === null) {
15
+ return;
16
+ }
17
+ const merged = existing ?? /* @__PURE__ */ new Set();
18
+ for (const imported of declaration.imports) {
19
+ merged.add(imported);
20
+ }
21
+ modulesMap.set(declaration.from, merged);
22
+ }
23
+ function collectModuleDeclarations(modulesMap, declaredModules, autoVirtualImports) {
24
+ for (const declaration of normalizeModuleDeclarations(getDeclaredModules(declaredModules))) {
25
+ mergeModuleDeclaration(modulesMap, declaration);
26
+ }
27
+ for (const declaration of autoVirtualImports) {
28
+ mergeModuleDeclaration(modulesMap, declaration);
29
+ }
30
+ }
31
+ export {
32
+ collectModuleDeclarations
33
+ };
@@ -0,0 +1,3 @@
1
+ export declare function createModuleScriptName(from: string, imports: string[] | undefined): string;
2
+ export declare function createNamedImportModuleSource(from: string, imports: string[]): string;
3
+ export declare function createNamespaceImportModuleSource(from: string): string;
@@ -0,0 +1,18 @@
1
+ import { rapidhash } from "../../utils/hash.js";
2
+ function createModuleScriptName(from, imports) {
3
+ const normalizedImports = imports ? [...imports].sort().join(",") : "*";
4
+ const hash = rapidhash(`${from}|${normalizedImports}`).toString(16);
5
+ return `module-${hash}`;
6
+ }
7
+ function createNamedImportModuleSource(from, imports) {
8
+ const namedImports = [...new Set(imports)].sort().join(", ");
9
+ return `export { ${namedImports} } from '${from}';`;
10
+ }
11
+ function createNamespaceImportModuleSource(from) {
12
+ return `export * from '${from}';`;
13
+ }
14
+ export {
15
+ createModuleScriptName,
16
+ createNamedImportModuleSource,
17
+ createNamespaceImportModuleSource
18
+ };
@@ -0,0 +1,13 @@
1
+ import type { AssetDefinition } from '../../services/assets/asset-processing-service/index.js';
2
+ /**
3
+ * Returns whether the current integration should collapse eligible page assets into
4
+ * page-owned bundle entries.
5
+ */
6
+ export declare function shouldBundlePageDependencies(integrationName: string): boolean;
7
+ /**
8
+ * Rewrites eligible flat dependency declarations into page-owned stylesheet and script bundles.
9
+ *
10
+ * Only assets with the default attribute shape and without explicit packaging roles are
11
+ * collapsed so integration-specific or lazy behavior keeps its existing ownership model.
12
+ */
13
+ export declare function packagePageDependencies(dependencies: AssetDefinition[], integrationName: string): AssetDefinition[];
@@ -0,0 +1,137 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
3
+ import { rapidhash } from "../../utils/hash.js";
4
+ function hasOnlyExpectedAttributes(attributes, expected) {
5
+ const keys = Object.keys(attributes ?? {});
6
+ const expectedKeys = Object.keys(expected);
7
+ if (keys.length !== expectedKeys.length) {
8
+ return false;
9
+ }
10
+ return expectedKeys.every((key) => attributes?.[key] === expected[key]);
11
+ }
12
+ function isSafeBundledStylesheetReference(reference) {
13
+ return reference.startsWith("/") || reference.startsWith("data:") || reference.startsWith("http://") || reference.startsWith("https://") || reference.startsWith("#");
14
+ }
15
+ function normalizeCssReferenceToken(token) {
16
+ return token.trim().replace(/^['"]|['"]$/g, "");
17
+ }
18
+ function isSafeBundledStylesheetContent(content) {
19
+ for (const match of content.matchAll(/@import\s+(?:url\()?['"]?([^'")\s]+)['"]?\)?/g)) {
20
+ const reference = normalizeCssReferenceToken(match[1] ?? "");
21
+ if (reference && !isSafeBundledStylesheetReference(reference)) {
22
+ return false;
23
+ }
24
+ }
25
+ for (const match of content.matchAll(/url\(([^)]+)\)/g)) {
26
+ const reference = normalizeCssReferenceToken(match[1] ?? "");
27
+ if (reference && !isSafeBundledStylesheetReference(reference)) {
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+ }
33
+ function isBundleableFileStylesheetAsset(dependency) {
34
+ return dependency.kind === "stylesheet" && dependency.source === "file";
35
+ }
36
+ function isBundleableFileScriptAsset(dependency) {
37
+ return dependency.kind === "script" && dependency.source === "file";
38
+ }
39
+ function shouldBundlePageDependencies(integrationName) {
40
+ return integrationName === "react" || integrationName === "ecopages-jsx";
41
+ }
42
+ function createPageDependencyPackagingPlan(dependencies, integrationName) {
43
+ const shouldBundleDependencies = process.env.NODE_ENV === "production";
44
+ const bundleableStyles = dependencies.filter((dependency) => {
45
+ if (!shouldBundleDependencies) {
46
+ return false;
47
+ }
48
+ if (dependency.kind !== "stylesheet" || dependency.inline || dependency.position === "body") {
49
+ return false;
50
+ }
51
+ if (dependency.packageRole || !hasOnlyExpectedAttributes(dependency.attributes, { rel: "stylesheet" })) {
52
+ return false;
53
+ }
54
+ if (dependency.source === "content") {
55
+ return isSafeBundledStylesheetContent(dependency.content);
56
+ }
57
+ if (!existsSync(dependency.filepath)) {
58
+ return false;
59
+ }
60
+ return isSafeBundledStylesheetContent(readFileSync(dependency.filepath, "utf8"));
61
+ }).filter(isBundleableFileStylesheetAsset);
62
+ const bundleableScripts = dependencies.filter((dependency) => {
63
+ if (!shouldBundleDependencies) {
64
+ return false;
65
+ }
66
+ return dependency.kind === "script" && dependency.source === "file" && !dependency.inline && !dependency.excludeFromHtml && dependency.position !== "body" && !dependency.packageRole && dependency.bundle !== false && hasOnlyExpectedAttributes(dependency.attributes, { type: "module", defer: "" }) && existsSync(dependency.filepath);
67
+ }).filter(isBundleableFileScriptAsset);
68
+ const bundledStylesheet = bundleableStyles.length > 1 ? AssetFactory.createContentStylesheet({
69
+ content: bundleableStyles.map((dependency) => readFileSync(dependency.filepath, "utf8")).join("\n"),
70
+ position: "head",
71
+ attributes: { rel: "stylesheet" },
72
+ packageRole: "page-style",
73
+ bundledSourceFilepaths: bundleableStyles.map((dependency) => dependency.filepath)
74
+ }) : void 0;
75
+ const pageScriptImports = [...new Set(bundleableScripts.map((dependency) => dependency.filepath))];
76
+ const shouldBundlePageScript = pageScriptImports.length > 0 && bundleableScripts.length > 1;
77
+ const bundledScript = shouldBundlePageScript ? AssetFactory.createContentScript({
78
+ name: `${integrationName}-page-${rapidhash(pageScriptImports.join("|")).toString(16)}`,
79
+ content: pageScriptImports.map((filepath) => `import ${JSON.stringify(filepath)};`).join("\n"),
80
+ position: "head",
81
+ attributes: { type: "module", defer: "" },
82
+ packageRole: "page-script",
83
+ bundledSourceFilepaths: pageScriptImports
84
+ }) : void 0;
85
+ if (!bundledStylesheet && !bundledScript) {
86
+ return void 0;
87
+ }
88
+ return {
89
+ bundledStylesheet,
90
+ bundledScript,
91
+ bundleableStyleFilepaths: new Set(bundleableStyles.map((dependency) => dependency.filepath)),
92
+ bundleableScriptFilepaths: new Set(pageScriptImports)
93
+ };
94
+ }
95
+ function applyPageDependencyPackagingPlan(dependencies, plan) {
96
+ const unifiedDependencies = [];
97
+ let insertedStylesheet = false;
98
+ let insertedScript = false;
99
+ for (const dependency of dependencies) {
100
+ if (plan.bundledStylesheet && dependency.kind === "stylesheet" && dependency.source === "file" && plan.bundleableStyleFilepaths.has(dependency.filepath)) {
101
+ if (!insertedStylesheet) {
102
+ unifiedDependencies.push(plan.bundledStylesheet);
103
+ insertedStylesheet = true;
104
+ }
105
+ continue;
106
+ }
107
+ if (plan.bundledScript && dependency.kind === "script" && dependency.source === "file" && plan.bundleableScriptFilepaths.has(dependency.filepath)) {
108
+ if (!insertedScript) {
109
+ unifiedDependencies.push(plan.bundledScript);
110
+ insertedScript = true;
111
+ }
112
+ continue;
113
+ }
114
+ unifiedDependencies.push(dependency);
115
+ }
116
+ if (plan.bundledScript && !insertedScript) {
117
+ unifiedDependencies.push(plan.bundledScript);
118
+ }
119
+ if (plan.bundledStylesheet && !insertedStylesheet) {
120
+ unifiedDependencies.push(plan.bundledStylesheet);
121
+ }
122
+ return unifiedDependencies;
123
+ }
124
+ function packagePageDependencies(dependencies, integrationName) {
125
+ if (!shouldBundlePageDependencies(integrationName)) {
126
+ return dependencies;
127
+ }
128
+ const plan = createPageDependencyPackagingPlan(dependencies, integrationName);
129
+ if (!plan) {
130
+ return dependencies;
131
+ }
132
+ return applyPageDependencyPackagingPlan(dependencies, plan);
133
+ }
134
+ export {
135
+ packagePageDependencies,
136
+ shouldBundlePageDependencies
137
+ };
@@ -1,5 +1,5 @@
1
- import type { EcoPageFile, GetMetadata, GetMetadataContext, GetStaticProps, PageMetadataProps, RouteRendererOptions, EcoPageComponent } from '../../public-types.js';
2
- import type { EcoPagesAppConfig } from '../../internal-types.js';
1
+ import type { EcoPageFile, GetMetadata, GetMetadataContext, GetStaticProps, PageMetadataProps, RouteRendererOptions, EcoPageComponent } from '../../types/public-types.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
3
  /**
4
4
  * Loads route page modules and normalizes their data hooks for rendering.
5
5
  *
@@ -10,7 +10,7 @@ import type { EcoPagesAppConfig } from '../../internal-types.js';
10
10
  * page props and metadata into one renderer-facing shape.
11
11
  */
12
12
  export declare class PageModuleLoaderService {
13
- private serverModuleTranspiler;
13
+ private appModuleLoader;
14
14
  private appConfig;
15
15
  private runtimeOrigin;
16
16
  /**
@@ -27,7 +27,10 @@ export declare class PageModuleLoaderService {
27
27
  * The underlying transpiler keeps Bun and Node aligned on one framework-owned
28
28
  * loading contract even though the runtime-specific execution transport differs.
29
29
  */
30
- importPageFile(file: string): Promise<EcoPageFile>;
30
+ importPageFile(file: string, options?: {
31
+ bypassCache?: boolean;
32
+ cacheScope?: string;
33
+ }): Promise<EcoPageFile>;
31
34
  /**
32
35
  * Executes the page's static-props hook with Ecopages runtime context.
33
36
  *
@@ -1,8 +1,8 @@
1
1
  import { invariant } from "../../utils/invariant.js";
2
- import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
2
+ import { getAppModuleLoader } from "../../services/module-loading/app-server-module-transpiler.service.js";
3
3
  import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
4
4
  class PageModuleLoaderService {
5
- serverModuleTranspiler;
5
+ appModuleLoader;
6
6
  appConfig;
7
7
  runtimeOrigin;
8
8
  /**
@@ -14,7 +14,7 @@ class PageModuleLoaderService {
14
14
  constructor(appConfig, runtimeOrigin) {
15
15
  this.appConfig = appConfig;
16
16
  this.runtimeOrigin = runtimeOrigin;
17
- this.serverModuleTranspiler = getAppServerModuleTranspiler(appConfig);
17
+ this.appModuleLoader = getAppModuleLoader(appConfig);
18
18
  }
19
19
  /**
20
20
  * Imports one page module through the shared server-side module loading path.
@@ -23,11 +23,14 @@ class PageModuleLoaderService {
23
23
  * The underlying transpiler keeps Bun and Node aligned on one framework-owned
24
24
  * loading contract even though the runtime-specific execution transport differs.
25
25
  */
26
- async importPageFile(file) {
26
+ async importPageFile(file, options) {
27
27
  try {
28
- return await this.serverModuleTranspiler.importModule({
28
+ return await this.appModuleLoader.importModule({
29
29
  filePath: file,
30
+ rootDir: this.appConfig.rootDir,
30
31
  outdir: `${resolveInternalExecutionDir(this.appConfig)}/.server-modules`,
32
+ bypassCache: options?.bypassCache,
33
+ cacheScope: options?.cacheScope,
31
34
  transpileErrorMessage: (details) => `Error transpiling page file: ${details}`,
32
35
  noOutputMessage: (targetFilePath) => `No transpiled output generated for page: ${targetFilePath}`
33
36
  });
@@ -1,26 +1,33 @@
1
- import type { EcoPagesAppConfig } from '../internal-types.js';
2
- import type { IntegrationPlugin } from '../plugins/integration-plugin.js';
3
- import type { RouteRenderResult, RouteRendererOptions } from '../public-types.js';
1
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
2
+ import type { AnyIntegrationPlugin } from '../plugins/integration-plugin.js';
4
3
  import type { IntegrationRenderer } from './orchestration/integration-renderer.js';
5
4
  /**
6
- * Thin wrapper around one initialized integration renderer.
5
+ * Narrow route-render contract exposed to higher-level routing code.
7
6
  *
8
7
  * @remarks
9
- * This type exists so higher-level routing code can ask for a route renderer
10
- * without depending on the full integration plugin lifecycle. It delegates all
11
- * real work to the integration-specific renderer selected by the factory.
8
+ * Higher-level routing code only needs request execution and page-module
9
+ * loading. Returning this narrowed shape avoids a dedicated wrapper class while
10
+ * still keeping callers off the full integration renderer surface.
12
11
  */
13
- export declare class RouteRenderer {
14
- private renderer;
15
- /**
16
- * Creates a route renderer bound to one integration renderer instance.
17
- */
18
- constructor(renderer: IntegrationRenderer);
19
- /**
20
- * Executes the render pipeline for one matched route.
21
- */
22
- createRoute(options: RouteRendererOptions): Promise<RouteRenderResult>;
12
+ export type PageRouteRenderer = Pick<IntegrationRenderer<unknown>, 'execute' | 'loadPageModule'>;
13
+ /**
14
+ * Narrow explicit-view render contract exposed to static route handling.
15
+ *
16
+ * @remarks
17
+ * Explicit static routes only need `renderToResponse()`, so the factory can
18
+ * hide the broader integration renderer surface there as well.
19
+ */
20
+ export type ExplicitViewRenderer = Pick<IntegrationRenderer<unknown>, 'renderToResponse'>;
21
+ export interface PageRendererResolver {
22
+ getPageRenderer(filePath: string): PageRouteRenderer;
23
+ }
24
+ export interface ExplicitViewRendererResolver {
25
+ getExplicitViewRenderer(integrationName: string): ExplicitViewRenderer | null;
23
26
  }
27
+ /**
28
+ * Combined renderer-factory contract used by static generation.
29
+ */
30
+ export type StaticGenerationRendererResolver = PageRendererResolver & ExplicitViewRendererResolver;
24
31
  /**
25
32
  * Selects and caches integration renderers for route files and explicit views.
26
33
  *
@@ -32,27 +39,28 @@ export declare class RouteRenderer {
32
39
  export declare class RouteRendererFactory {
33
40
  private appConfig;
34
41
  runtimeOrigin: string;
42
+ private rendererModules?;
35
43
  private rendererCache;
36
44
  /**
37
45
  * Creates the route-renderer factory for one app/runtime instance.
38
46
  */
39
- constructor({ appConfig, runtimeOrigin }: {
47
+ constructor({ appConfig, rendererModules, runtimeOrigin, }: {
40
48
  appConfig: EcoPagesAppConfig;
49
+ rendererModules?: unknown;
41
50
  runtimeOrigin: string;
42
51
  });
43
52
  /**
44
53
  * Returns a route renderer for the supplied route file.
45
54
  */
46
- createRenderer(filePath: string): RouteRenderer;
55
+ getPageRenderer(filePath: string): PageRouteRenderer;
47
56
  /**
48
- * Get an integration renderer by its name.
49
- * Used for explicit routing where views specify their integration via __eco.integration.
57
+ * Returns a renderer for an explicit view integration.
50
58
  */
51
- getRendererByIntegration(integrationName: string): IntegrationRenderer | null;
59
+ getExplicitViewRenderer(integrationName: string): ExplicitViewRenderer | null;
52
60
  /**
53
61
  * Resolves the integration plugin that owns a given route file.
54
62
  */
55
- getIntegrationPlugin(filePath: string): IntegrationPlugin;
63
+ getIntegrationPlugin(filePath: string): AnyIntegrationPlugin;
56
64
  /**
57
65
  * Returns the cached renderer engine for the file's owning integration,
58
66
  * creating it on first use.